]> Pileus Git - ~andy/gtk/commitdiff
Mimic the behavior of gtk_dialog_add_action_widget closer, to make
authorJohan Dahlin <jdahlin@async.com.br>
Tue, 3 Jul 2007 03:26:07 +0000 (03:26 +0000)
committerJohan Dahlin <johan@src.gnome.org>
Tue, 3 Jul 2007 03:26:07 +0000 (03:26 +0000)
2007-07-03  Johan Dahlin  <jdahlin@async.com.br>

    * gtk/gtkdialog.c (gtk_dialog_buildable_custom_finished): Mimic the behavior
    of gtk_dialog_add_action_widget closer, to make clicking on the buttons
    actually work.

svn path=/trunk/; revision=18349

ChangeLog
gtk/gtkdialog.c

index a681173fc270e7f55d8b07352a654c6cd6156c69..e0aa30a353fe731ae486367e08c1b6faf2328e80 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2007-07-03  Johan Dahlin  <jdahlin@async.com.br>
+
+       * gtk/gtkdialog.c (gtk_dialog_buildable_custom_finished): Mimic the behavior
+       of gtk_dialog_add_action_widget closer, to make clicking on the buttons
+       actually work.
+
 2007-07-02  Matthias Clasen  <mclasen@redhat.com>
 
        * configure.in: Bump version
index 2419689487c9a2976c74b8ad4766b93f11a20963..83c771a044ff77f4d44e8d6e1080658da3577b8d 100644 (file)
@@ -1354,11 +1354,14 @@ gtk_dialog_buildable_custom_finished (GtkBuildable *buildable,
   GSList *l;
   ActionWidgetsSubParserData *parser_data;
   GObject *object;
-  ResponseData* data;
-
+  GtkDialog *dialog;
+  ResponseData *ad;
+  guint signal_id;
+  
   if (strcmp (tagname, "action-widgets"))
     return;
 
+  dialog = GTK_DIALOG (buildable);
   parser_data = (ActionWidgetsSubParserData*)user_data;
   parser_data->items = g_slist_reverse (parser_data->items);
 
@@ -1369,14 +1372,36 @@ gtk_dialog_buildable_custom_finished (GtkBuildable *buildable,
       object = gtk_builder_get_object (builder, item->widget_name);
       if (!object)
        {
-         g_warning ("Unknown object %s specified in action-widgets %s",
+         g_warning ("Unknown object %s specified in action-widgets of %s",
                     item->widget_name,
-                    gtk_buildable_get_name (GTK_BUILDABLE (object)));
+                    gtk_buildable_get_name (GTK_BUILDABLE (buildable)));
          continue;
        }
 
-      data = get_response_data (GTK_WIDGET (object), TRUE);
-      data->response_id = atoi (item->response_id);
+      ad = get_response_data (GTK_WIDGET (object), TRUE);
+      ad->response_id = atoi (item->response_id);
+
+      if (GTK_IS_BUTTON (object))
+       signal_id = g_signal_lookup ("clicked", GTK_TYPE_BUTTON);
+      else
+       signal_id = GTK_WIDGET_GET_CLASS (object)->activate_signal;
+      
+      if (signal_id)
+       {
+         GClosure *closure;
+         
+         closure = g_cclosure_new_object (G_CALLBACK (action_widget_activated),
+                                          G_OBJECT (dialog));
+         g_signal_connect_closure_by_id (object,
+                                         signal_id,
+                                         0,
+                                         closure,
+                                         FALSE);
+       }
+
+      if (ad->response_id == GTK_RESPONSE_HELP)
+       gtk_button_box_set_child_secondary (GTK_BUTTON_BOX (dialog->action_area),
+                                           GTK_WIDGET (object), TRUE);
 
       g_free (item->widget_name);
       g_free (item->response_id);