Fix: now undo support saving action to manage M flag

Signed-off-by: Mikhail S. Pobolovets <styx.mp@gmail.com>
This commit is contained in:
Mikhail S. Pobolovets 2009-10-20 23:37:02 +03:00
parent d66aeb6ced
commit d2816e0743
3 changed files with 12 additions and 2 deletions

View File

@ -106,6 +106,7 @@ struct WEdit {
/* undo stack and pointers */
unsigned long stack_pointer;
unsigned long stack_last_save_pointer;
long *undo_stack;
unsigned long stack_size;
unsigned long stack_size_mask;

View File

@ -792,6 +792,8 @@ edit_init (WEdit *edit, int lines, int columns, const char *filename,
edit->stack_size_mask = START_STACK_SIZE - 1;
edit->undo_stack = g_malloc ((edit->stack_size + 10) * sizeof (long));
edit->stack_wrapped = FALSE;
edit->stack_pointer = 0;
edit->stack_last_save_pointer = edit->stack_pointer;
if (edit_load_file (edit)) {
/* edit_load_file already gives an error message */
@ -1098,8 +1100,9 @@ pop_action (WEdit * edit)
if ((c = edit->undo_stack[sp]) >= 0) {
/* edit->undo_stack[sp] = '@'; */
edit->stack_pointer = (edit->stack_pointer - 1) & edit->stack_size_mask;
// if stack wasn't wraped and empty then reset modified satus
if (sp == edit->stack_bottom && !edit->stack_wrapped) {
/* if stack wasn't wraped and current stack pointer is eq to the last
saving action then reset modified satus */
if (!edit->stack_wrapped && edit->stack_last_save_pointer == sp) {
edit->modified = 0;
edit->locked = edit_unlock_file (edit->filename);
}
@ -1128,6 +1131,10 @@ static void edit_modification (WEdit * edit)
if (!edit->modified && !edit->delete_file)
edit->locked = edit_lock_file (edit->filename);
edit->modified = 1;
// This will reset save flag, if undo action was performed and text entered
if edit->stack_last_save_pointer > edit->stack_pointer
edit->stack_last_save_pointer = 0;
}
/*

View File

@ -597,6 +597,7 @@ edit_save_as_cmd (WEdit *edit)
g_free (exp);
edit->modified = 0;
edit->delete_file = 0;
edit->stack_last_save_pointer = edit->stack_pointer;
if (different_filename)
edit_load_syntax (edit, NULL, option_syntax_type);
edit->force |= REDRAW_COMPLETELY;
@ -848,6 +849,7 @@ edit_save_cmd (WEdit *edit)
if (res > 0) {
edit->delete_file = 0;
edit->modified = 0;
edit->stack_last_save_pointer = edit->stack_pointer;
}
return 1;