From 8afd4b71e97ab5d307ef079cb8add914e1041dc9 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Wed, 9 Jul 2014 19:40:11 -0400 Subject: [PATCH] GtkDialog: Fix setting of default action The recent reshuffling caused an ordering problem where we would hide the action area before relocating the buttons to the header bar. But hiding makes the default button loose its defaultness. Rearrange things so that we move the buttons before hiding the action area, and thus preserve the default. --- gtk/gtkdialog.c | 75 +++++++++++++++++++------------------------------ 1 file changed, 29 insertions(+), 46 deletions(-) diff --git a/gtk/gtkdialog.c b/gtk/gtkdialog.c index 48d6426962..c8dd5829dd 100644 --- a/gtk/gtkdialog.c +++ b/gtk/gtkdialog.c @@ -264,33 +264,6 @@ gtk_dialog_set_use_header_bar_from_setting (GtkDialog *dialog) NULL); } -static void -add_cb (GtkContainer *container, - GtkWidget *widget, - GtkDialog *dialog) -{ - GtkDialogPrivate *priv = dialog->priv; - - if (priv->use_header_bar) - g_warning ("Content added to the action area of a dialog using header bars"); - - gtk_widget_show (GTK_WIDGET (priv->action_box)); -} - -static void -apply_use_header_bar (GtkDialog *dialog) -{ - GtkDialogPrivate *priv = dialog->priv; - - gtk_widget_set_visible (priv->action_box, !priv->use_header_bar); - gtk_widget_set_visible (priv->headerbar, priv->use_header_bar); - if (priv->use_header_bar) - { - gtk_window_set_titlebar (GTK_WINDOW (dialog), priv->headerbar); - g_signal_connect (priv->action_area, "add", G_CALLBACK (add_cb), dialog); - } -} - static void gtk_dialog_set_property (GObject *object, guint prop_id, @@ -458,14 +431,36 @@ update_suggested_action (GtkDialog *dialog) } static void -add_action_widgets (GtkDialog *dialog) +add_cb (GtkContainer *container, + GtkWidget *widget, + GtkDialog *dialog) { GtkDialogPrivate *priv = dialog->priv; - GList *children; - GList *l; + + if (priv->use_header_bar) + g_warning ("Content added to the action area of a dialog using header bars"); + + gtk_widget_show (GTK_WIDGET (priv->action_box)); +} + +static void +gtk_dialog_constructed (GObject *object) +{ + GtkDialog *dialog = GTK_DIALOG (object); + GtkDialogPrivate *priv = dialog->priv; + + G_OBJECT_CLASS (gtk_dialog_parent_class)->constructed (object); + + priv->constructed = TRUE; + if (priv->use_header_bar == -1) + priv->use_header_bar = FALSE; if (priv->use_header_bar) { + GList *children, *l; + + gtk_window_set_titlebar (GTK_WINDOW (dialog), priv->headerbar); + children = gtk_container_get_children (GTK_CONTAINER (priv->action_area)); for (l = children; l != NULL; l = l->next) { @@ -489,23 +484,12 @@ add_action_widgets (GtkDialog *dialog) g_list_free (children); update_suggested_action (dialog); + + g_signal_connect (priv->action_area, "add", G_CALLBACK (add_cb), dialog); } -} -static void -gtk_dialog_constructed (GObject *object) -{ - GtkDialog *dialog = GTK_DIALOG (object); - GtkDialogPrivate *priv = dialog->priv; - - G_OBJECT_CLASS (gtk_dialog_parent_class)->constructed (object); - - priv->constructed = TRUE; - if (priv->use_header_bar == -1) - priv->use_header_bar = FALSE; - - apply_use_header_bar (dialog); - add_action_widgets (dialog); + gtk_widget_set_visible (priv->headerbar, priv->use_header_bar); + gtk_widget_set_visible (priv->action_box, !priv->use_header_bar); } static void @@ -1894,7 +1878,6 @@ gtk_dialog_buildable_add_child (GtkBuildable *buildable, priv->headerbar = GTK_WIDGET (child); else if (g_strcmp0 (type, "action") == 0) gtk_dialog_add_action_widget (GTK_DIALOG (buildable), GTK_WIDGET (child), GTK_RESPONSE_NONE); - else GTK_BUILDER_WARN_INVALID_CHILD_TYPE (buildable, type); }