summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nautilus-file-management-properties.c37
-rw-r--r--src/nautilus-file-management-properties.h2
-rw-r--r--src/nautilus-window-menus.c11
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