diff options
-rw-r--r-- | src/nautilus-file-management-properties.c | 37 | ||||
-rw-r--r-- | src/nautilus-file-management-properties.h | 2 | ||||
-rw-r--r-- | src/nautilus-window-menus.c | 11 |
3 files changed, 17 insertions, 33 deletions
diff --git a/src/nautilus-file-management-properties.c b/src/nautilus-file-management-properties.c index 8998ff8ea..309d03c25 100644 --- a/src/nautilus-file-management-properties.c +++ b/src/nautilus-file-management-properties.c @@ -158,6 +158,8 @@ static const char * const icon_captions_components[] = { NULL }; +static GtkWidget *preferences_dialog = NULL; + static void nautilus_file_management_properties_size_group_create (GtkBuilder *builder, char *prefix, @@ -246,6 +248,8 @@ nautilus_file_management_properties_dialog_response_cb (GtkDialog *parent, break; } preferences_show_help (GTK_WINDOW (parent), "user-guide", section); + } else if (response_id == GTK_RESPONSE_CLOSE) { + gtk_widget_destroy (GTK_WIDGET (parent)); } } @@ -839,11 +843,13 @@ nautilus_file_management_properties_dialog_setup (GtkBuilder *builder, GtkWindow /* UI callbacks */ dialog = GTK_WIDGET (gtk_builder_get_object (builder, "file_management_dialog")); - g_signal_connect_data (G_OBJECT (dialog), "response", + g_signal_connect_data (dialog, "response", G_CALLBACK (nautilus_file_management_properties_dialog_response_cb), g_object_ref (builder), (GClosureNotify)g_object_unref, 0); + g_signal_connect (dialog, "delete-event", + G_CALLBACK (gtk_widget_destroy), NULL); gtk_window_set_icon_name (GTK_WINDOW (dialog), "system-file-manager"); @@ -851,39 +857,26 @@ nautilus_file_management_properties_dialog_setup (GtkBuilder *builder, GtkWindow gtk_window_set_screen (GTK_WINDOW (dialog), gtk_window_get_screen(window)); } + preferences_dialog = dialog; + g_object_add_weak_pointer (G_OBJECT (dialog), (gpointer *) &preferences_dialog); gtk_widget_show (dialog); } -static gboolean -delete_event_callback (GtkWidget *widget, - GdkEventAny *event, - gpointer data) -{ - void (*response_callback) (GtkDialog *dialog, - gint response_id); - - response_callback = data; - - response_callback (GTK_DIALOG (widget), GTK_RESPONSE_CLOSE); - - return TRUE; -} - void -nautilus_file_management_properties_dialog_show (GCallback close_callback, GtkWindow *window) +nautilus_file_management_properties_dialog_show (GtkWindow *window) { GtkBuilder *builder; + if (preferences_dialog != NULL) { + gtk_window_present (GTK_WINDOW (preferences_dialog)); + return; + } + builder = gtk_builder_new (); gtk_builder_add_from_file (builder, UIDIR "/nautilus-file-management-properties.ui", NULL); - - g_signal_connect (G_OBJECT (gtk_builder_get_object (builder, "file_management_dialog")), - "response", close_callback, NULL); - g_signal_connect (G_OBJECT (gtk_builder_get_object (builder, "file_management_dialog")), - "delete_event", G_CALLBACK (delete_event_callback), close_callback); nautilus_file_management_properties_dialog_setup (builder, window); diff --git a/src/nautilus-file-management-properties.h b/src/nautilus-file-management-properties.h index f03eaf9a4..48857f78c 100644 --- a/src/nautilus-file-management-properties.h +++ b/src/nautilus-file-management-properties.h @@ -30,7 +30,7 @@ G_BEGIN_DECLS -void nautilus_file_management_properties_dialog_show (GCallback close_callback, GtkWindow *window); +void nautilus_file_management_properties_dialog_show (GtkWindow *window); G_END_DECLS diff --git a/src/nautilus-window-menus.c b/src/nautilus-window-menus.c index b8c0cc1d6..702c37ac0 100644 --- a/src/nautilus-window-menus.c +++ b/src/nautilus-window-menus.c @@ -425,15 +425,6 @@ show_hidden_files_preference_callback (gpointer callback_data) } static void -preferences_respond_callback (GtkDialog *dialog, - gint response_id) -{ - if (response_id == GTK_RESPONSE_CLOSE) { - gtk_widget_destroy (GTK_WIDGET (dialog)); - } -} - -static void action_preferences_callback (GtkAction *action, gpointer user_data) { @@ -441,7 +432,7 @@ action_preferences_callback (GtkAction *action, window = GTK_WINDOW (user_data); - nautilus_file_management_properties_dialog_show (G_CALLBACK (preferences_respond_callback), window); + nautilus_file_management_properties_dialog_show (window); } static void |