gimp r25992 - in trunk: . app/widgets



Author: mitch
Date: Wed Jun 25 16:41:15 2008
New Revision: 25992
URL: http://svn.gnome.org/viewvc/gimp?rev=25992&view=rev

Log:
2008-06-25  Michael Natterer  <mitch gimp org>

	* app/widgets/gimpsettingsbox.c: make sure the file dialog goes
	away when the settings box' toplevel is hidden. Set the
	alternative button order on the file dialog.



Modified:
   trunk/ChangeLog
   trunk/app/widgets/gimpsettingsbox.c

Modified: trunk/app/widgets/gimpsettingsbox.c
==============================================================================
--- trunk/app/widgets/gimpsettingsbox.c	(original)
+++ trunk/app/widgets/gimpsettingsbox.c	Wed Jun 25 16:41:15 2008
@@ -108,11 +108,11 @@
 static void  gimp_settings_box_file_response     (GtkWidget         *dialog,
                                                   gint               response_id,
                                                   GimpSettingsBox   *box);
-static void  gimp_settings_box_toplevel_unmap    (GtkWidget         *widget,
-                                                  GimpSettingsBox   *box);
 static void  gimp_settings_box_manage_response   (GtkWidget         *widget,
                                                   gint               response_id,
                                                   GimpSettingsBox   *box);
+static void  gimp_settings_box_toplevel_unmap    (GtkWidget         *toplevel,
+                                                  GtkWidget         *dialog);
 
 
 G_DEFINE_TYPE (GimpSettingsBox, gimp_settings_box, GTK_TYPE_HBOX)
@@ -327,11 +327,23 @@
       if (toplevel)
         g_signal_handlers_disconnect_by_func (toplevel,
                                               gimp_settings_box_toplevel_unmap,
-                                              box);
+                                              box->editor_dialog);
 
       gtk_widget_destroy (box->editor_dialog);
     }
 
+  if (box->file_dialog)
+    {
+      GtkWidget *toplevel = gtk_widget_get_toplevel (GTK_WIDGET (box));
+
+      if (toplevel)
+        g_signal_handlers_disconnect_by_func (toplevel,
+                                              gimp_settings_box_toplevel_unmap,
+                                              box->file_dialog);
+
+      gtk_widget_destroy (box->file_dialog);
+    }
+
   G_OBJECT_CLASS (parent_class)->finalize (object);
 }
 
@@ -611,7 +623,7 @@
                              (gpointer) &box->editor_dialog);
   g_signal_connect (toplevel, "unmap",
                     G_CALLBACK (gimp_settings_box_toplevel_unmap),
-                    box);
+                    box->editor_dialog);
 
   g_signal_connect (box->editor_dialog, "response",
                     G_CALLBACK (gimp_settings_box_manage_response),
@@ -677,12 +689,20 @@
 
                                  NULL);
 
+  gtk_dialog_set_alternative_button_order (GTK_DIALOG (dialog),
+                                           GTK_RESPONSE_OK,
+                                           GTK_RESPONSE_CANCEL,
+                                           -1);
+
   g_object_set_data (G_OBJECT (dialog), "save", GINT_TO_POINTER (save));
 
   gtk_window_set_role (GTK_WINDOW (dialog), "gimp-import-export-settings");
   gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_MOUSE);
 
   g_object_add_weak_pointer (G_OBJECT (dialog), (gpointer) &box->file_dialog);
+  g_signal_connect (toplevel, "unmap",
+                    G_CALLBACK (gimp_settings_box_toplevel_unmap),
+                    dialog);
 
   gtk_window_set_destroy_with_parent (GTK_WINDOW (dialog), TRUE);
   gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK);
@@ -729,7 +749,13 @@
                                  gint             response_id,
                                  GimpSettingsBox *box)
 {
-  gboolean save;
+  GtkWidget *toplevel = gtk_widget_get_toplevel (GTK_WIDGET (box));
+  gboolean   save;
+
+  if (toplevel)
+    g_signal_handlers_disconnect_by_func (toplevel,
+                                          gimp_settings_box_toplevel_unmap,
+                                          dialog);
 
   save = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (dialog), "save"));
 
@@ -765,15 +791,7 @@
 }
 
 static void
-gimp_settings_box_toplevel_unmap (GtkWidget       *widget,
-                                  GimpSettingsBox *box)
-{
-  gtk_dialog_response (GTK_DIALOG (box->editor_dialog),
-                       GTK_RESPONSE_CLOSE);
-}
-
-static void
-gimp_settings_box_manage_response (GtkWidget       *widget,
+gimp_settings_box_manage_response (GtkWidget       *dialog,
                                    gint             response_id,
                                    GimpSettingsBox *box)
 {
@@ -782,9 +800,16 @@
   if (toplevel)
     g_signal_handlers_disconnect_by_func (toplevel,
                                           gimp_settings_box_toplevel_unmap,
-                                          box);
+                                          dialog);
 
-  gtk_widget_destroy (widget);
+  gtk_widget_destroy (dialog);
+}
+
+static void
+gimp_settings_box_toplevel_unmap (GtkWidget *toplevel,
+                                  GtkWidget *dialog)
+{
+  gtk_dialog_response (GTK_DIALOG (dialog), GTK_RESPONSE_DELETE_EVENT);
 }
 
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]