diff options
author | Mike Engber <engber@src.gnome.org> | 2001-03-30 22:25:34 +0000 |
---|---|---|
committer | Mike Engber <engber@src.gnome.org> | 2001-03-30 22:25:34 +0000 |
commit | 168c194bd3e9b41c5bb06ff370c979c693382e77 (patch) | |
tree | 4ccc64423d720ef1bf11658f8a5f5a6608230220 /components/notes | |
parent | c857ceecf00cf666bd3d050c72a42ee8f1481f59 (diff) | |
download | nautilus-168c194bd3e9b41c5bb06ff370c979c693382e77.tar.gz |
Ensure notes have actually changed, by comparing to a copy of the old
* components/notes/nautilus-notes.c:
(load_note_text_from_metadata), (done_with_file),
(notes_load_metainfo), (notes_save_metainfo):
Ensure notes have actually changed, by comparing to a
copy of the old value, before responding to change signals.
Diffstat (limited to 'components/notes')
-rw-r--r-- | components/notes/nautilus-notes.c | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/components/notes/nautilus-notes.c b/components/notes/nautilus-notes.c index 81a1541c1..6cf6079b7 100644 --- a/components/notes/nautilus-notes.c +++ b/components/notes/nautilus-notes.c @@ -39,6 +39,7 @@ #include <libnautilus-extensions/nautilus-metadata.h> #include <libnautilus-extensions/nautilus-font-factory.h> #include <libnautilus-extensions/nautilus-gtk-extensions.h> +#include <libnautilus-extensions/nautilus-string.h> /* FIXME bugzilla.eazel.com 4436: * Undo not working in notes-view. @@ -60,6 +61,7 @@ typedef struct { char *uri; NautilusFile *file; guint save_timeout_id; + char* previous_saved_text; } Notes; static void notes_save_metainfo (Notes *notes); @@ -102,23 +104,22 @@ schedule_save (Notes *notes) } static void -set_note_text_from_metadata (NautilusFile *file, - Notes *notes) +load_note_text_from_metadata (NautilusFile *file, + Notes *notes) { int position; char *saved_text; - char *current_text; g_assert (NAUTILUS_IS_FILE (file)); g_assert (notes->file == file); saved_text = nautilus_file_get_metadata (file, NAUTILUS_METADATA_KEY_ANNOTATION, ""); - current_text = gtk_editable_get_chars (GTK_EDITABLE (notes->note_text_field), 0, -1); /* This fn is called for any change signal on the file, so make sure that the * metadata has actually changed. */ - if (strcmp (saved_text, current_text) != 0) { + if (nautilus_strcmp (saved_text, notes->previous_saved_text) != 0) { + notes->previous_saved_text = saved_text; cancel_pending_save (notes); gtk_editable_delete_text (GTK_EDITABLE (notes->note_text_field), 0, -1); @@ -128,11 +129,10 @@ set_note_text_from_metadata (NautilusFile *file, saved_text, strlen (saved_text), &position); + } else { + g_free (saved_text); } - g_free (saved_text); - g_free (current_text); - /* FIXME bugzilla.eazel.com 4436: * Undo not working in notes-view. */ @@ -145,11 +145,13 @@ static void done_with_file (Notes *notes) { cancel_pending_save (notes); - + g_free (notes->previous_saved_text); + notes->previous_saved_text = NULL; + if (notes->file != NULL) { nautilus_file_monitor_remove (notes->file, notes); gtk_signal_disconnect_by_func (GTK_OBJECT (notes->file), - GTK_SIGNAL_FUNC (set_note_text_from_metadata), + GTK_SIGNAL_FUNC (load_note_text_from_metadata), notes); nautilus_file_unref (notes->file); } @@ -173,14 +175,14 @@ notes_load_metainfo (Notes *notes) nautilus_file_monitor_add (notes->file, notes, attributes); if (nautilus_file_check_if_ready (notes->file, attributes)) { - set_note_text_from_metadata (notes->file, notes); + load_note_text_from_metadata (notes->file, notes); } g_list_free (attributes); gtk_signal_connect (GTK_OBJECT (notes->file), "changed", - GTK_SIGNAL_FUNC (set_note_text_from_metadata), + GTK_SIGNAL_FUNC (load_note_text_from_metadata), notes); } @@ -200,7 +202,7 @@ notes_save_metainfo (Notes *notes) /* Block the handler, so we don't respond to our own change. */ gtk_signal_handler_block_by_func (GTK_OBJECT (notes->file), - set_note_text_from_metadata, + load_note_text_from_metadata, notes); notes_text = gtk_editable_get_chars (GTK_EDITABLE (notes->note_text_field), 0 , -1); @@ -208,7 +210,7 @@ notes_save_metainfo (Notes *notes) g_free (notes_text); gtk_signal_handler_unblock_by_func (GTK_OBJECT (notes->file), - set_note_text_from_metadata, + load_note_text_from_metadata, notes); } |