diff --git a/gtk/gtkaboutdialog.c b/gtk/gtkaboutdialog.c index 467123ea8f..62d563f1ca 100644 --- a/gtk/gtkaboutdialog.c +++ b/gtk/gtkaboutdialog.c @@ -41,7 +41,7 @@ #include "gtklabel.h" #include "gtklinkbutton.h" #include "gtkmarshalers.h" -#include "gtknotebook.h" +#include "gtkstack.h" #include "gtkorientable.h" #include "gtkscrolledwindow.h" #include "gtktextview.h" @@ -124,7 +124,7 @@ typedef struct gchar **people; } CreditSection; -struct _GtkAboutDialogPrivate +struct _GtkAboutDialogPrivate { gchar *name; gchar *version; @@ -142,10 +142,10 @@ struct _GtkAboutDialogPrivate GSList *credit_sections; - gint credits_page; - gint license_page; + gboolean credits_page_initialized; + gboolean license_page_initialized; - GtkWidget *notebook; + GtkWidget *stack; GtkWidget *logo_image; GtkWidget *name_label; GtkWidget *version_label; @@ -169,12 +169,9 @@ struct _GtkAboutDialogPrivate guint hovering_over_link : 1; guint wrap_license : 1; + guint in_child_changed : 1; }; -/* The indexes of the credits and license page in the builder xml */ -#define CREDITS_PAGE_ID 1 -#define LICENSE_PAGE_ID 2 - enum { PROP_0, @@ -558,7 +555,7 @@ gtk_about_dialog_class_init (GtkAboutDialogClass *klass) gtk_widget_class_set_template_from_resource (widget_class, "/org/gtk/libgtk/gtkaboutdialog.ui"); - gtk_widget_class_bind_template_child_private (widget_class, GtkAboutDialog, notebook); + gtk_widget_class_bind_template_child_private (widget_class, GtkAboutDialog, stack); gtk_widget_class_bind_template_child_private (widget_class, GtkAboutDialog, logo_image); gtk_widget_class_bind_template_child_private (widget_class, GtkAboutDialog, name_label); gtk_widget_class_bind_template_child_private (widget_class, GtkAboutDialog, version_label); @@ -623,11 +620,11 @@ update_credits_button_visibility (GtkAboutDialog *about) static void switch_page (GtkAboutDialog *about, - gint page) + const gchar *name) { GtkAboutDialogPrivate *priv = about->priv; - gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->notebook), page); + gtk_stack_set_visible_child_name (GTK_STACK (priv->stack), name); } static void @@ -636,7 +633,7 @@ display_main_page (GtkButton *button, { GtkAboutDialog *about = (GtkAboutDialog *)data; - switch_page (about, 0); + switch_page (about, "main"); } static void @@ -647,11 +644,16 @@ credits_button_clicked (GtkButton *button, GtkAboutDialogPrivate *priv = about->priv; gboolean active; + if (priv->in_child_changed) + return; + active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)); if (active) { + priv->in_child_changed = TRUE; gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->license_button), FALSE); + priv->in_child_changed = FALSE; display_credits_page (NULL, data); } else @@ -668,11 +670,16 @@ license_button_clicked (GtkButton *button, GtkAboutDialogPrivate *priv = about->priv; gboolean active; + if (priv->in_child_changed) + return; + active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)); if (active) { + priv->in_child_changed = TRUE; gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->credits_button), FALSE); + priv->in_child_changed = FALSE; display_license_page (NULL, data); } else @@ -712,7 +719,7 @@ gtk_about_dialog_init (GtkAboutDialog *about) gtk_widget_init_template (GTK_WIDGET (about)); - switch_page (about, 0); + switch_page (about, "main"); /* force defaults */ gtk_about_dialog_set_program_name (about, NULL); @@ -2325,13 +2332,13 @@ display_credits_page (GtkWidget *button, GtkAboutDialog *about = (GtkAboutDialog *)data; GtkAboutDialogPrivate *priv = about->priv; - if (priv->credits_page == 0) + if (!priv->credits_page_initialized) { populate_credits_page (about); - priv->credits_page = CREDITS_PAGE_ID; + priv->credits_page_initialized = TRUE; } - switch_page (about, priv->credits_page); + switch_page (about, "credits"); } static void @@ -2357,13 +2364,13 @@ display_license_page (GtkWidget *button, GtkAboutDialog *about = (GtkAboutDialog *)data; GtkAboutDialogPrivate *priv = about->priv; - if (priv->license_page == 0) + if (!priv->license_page_initialized) { populate_license_page (about); - priv->license_page = LICENSE_PAGE_ID; + priv->license_page_initialized = TRUE; } - switch_page (about, priv->license_page); + switch_page (about, "license"); } /** @@ -2388,7 +2395,7 @@ close_cb (GtkAboutDialog *about) { GtkAboutDialogPrivate *priv = about->priv; - switch_page (about, 0); + switch_page (about, "main"); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->credits_button), FALSE); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->license_button), FALSE); gtk_widget_hide (GTK_WIDGET (about)); diff --git a/gtk/gtkaboutdialog.ui b/gtk/gtkaboutdialog.ui index 0c661c3293..c0af6394ce 100644 --- a/gtk/gtkaboutdialog.ui +++ b/gtk/gtkaboutdialog.ui @@ -116,13 +116,13 @@ - + 400 100 True True - False - False + True + over-up-down True @@ -218,9 +218,9 @@ - - - + + main + @@ -291,12 +291,9 @@ - 1 + credits - - - True @@ -332,12 +329,9 @@ - 2 + license - - - True