It's quiet dumb to register a file monitor with a pointer that isn't guaranteed to be constant among the lifecycle of the properties dialog - or am I missing something? Also, if a file isn't deleted while the properties dialog is alife, the "changed" callback is not disconnected until the file is destroyed. -- Christian Neumair <chris gnome-de org>
Index: src/file-manager/fm-properties-window.c =================================================================== RCS file: /cvs/gnome/nautilus/src/file-manager/fm-properties-window.c,v retrieving revision 1.219 diff -u -p -r1.219 fm-properties-window.c --- src/file-manager/fm-properties-window.c 20 Sep 2005 16:05:44 -0000 1.219 +++ src/file-manager/fm-properties-window.c 3 Oct 2005 16:20:44 -0000 @@ -3356,8 +3326,7 @@ create_properties_window (StartupData *s attributes |= NAUTILUS_FILE_ATTRIBUTE_DISPLAY_NAME | NAUTILUS_FILE_ATTRIBUTE_SLOW_MIME_TYPE; - nautilus_file_monitor_add (NAUTILUS_FILE (l->data), - &window->details->original_files, + nautilus_file_monitor_add (NAUTILUS_FILE (l->data), window, attributes); } @@ -3373,7 +3342,7 @@ create_properties_window (StartupData *s } attributes |= NAUTILUS_FILE_ATTRIBUTE_METADATA; - nautilus_file_monitor_add (file, &window->details->target_files, attributes); + nautilus_file_monitor_add (file, window, attributes); } for (l = window->details->target_files; l != NULL; l = l->next) { @@ -3679,13 +3648,21 @@ real_destroy (GtkObject *object) remove_window (window); for (l = window->details->original_files; l != NULL; l = l->next) { - nautilus_file_monitor_remove (NAUTILUS_FILE (l->data), &window->details->original_files); + nautilus_file_monitor_remove (NAUTILUS_FILE (l->data), window); + + g_signal_handlers_disconnect_by_func (l->data, + G_CALLBACK (file_changed_callback), + window); } nautilus_file_list_free (window->details->original_files); window->details->original_files = NULL; for (l = window->details->target_files; l != NULL; l = l->next) { - nautilus_file_monitor_remove (NAUTILUS_FILE (l->data), &window->details->target_files); + nautilus_file_monitor_remove (NAUTILUS_FILE (l->data), window); + + g_signal_handlers_disconnect_by_func (l->data, + G_CALLBACK (file_changed_callback), + window); } nautilus_file_list_free (window->details->target_files); window->details->target_files = NULL;
Attachment:
signature.asc
Description: This is a digitally signed message part