From bc2c341d604f5f4b387de7e04fdf243fa85082e1 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Fri, 27 Mar 2020 16:38:06 -0400 Subject: [PATCH 1/8] gtk-demo: Visual fixes to the model button demo --- demos/gtk-demo/modelbutton.ui | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/demos/gtk-demo/modelbutton.ui b/demos/gtk-demo/modelbutton.ui index 455b2d9feb..8f0528f761 100644 --- a/demos/gtk-demo/modelbutton.ui +++ b/demos/gtk-demo/modelbutton.ui @@ -1,6 +1,7 @@ + 0 1 @@ -36,12 +37,11 @@ + - 10 - 10 - 10 - 10 vertical @@ -68,14 +68,12 @@ + - 10 - 10 - 10 - 10 vertical - 10 win.chocolate @@ -101,14 +99,12 @@ + - 10 - 10 - 10 - 10 vertical - 10 Hammer From ba25e08e7b3fdf7a660cc378726689ac6687f188 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Fri, 27 Mar 2020 22:28:49 -0400 Subject: [PATCH 2/8] menubutton: Add a use-underline property This is necessary since apps no longer have direct access to the label. Closes: https://gitlab.gnome.org/GNOME/gtk/-/issues/2489 --- gtk/gtkmenubutton.c | 57 +++++++++++++++++++++++++++++++++++++++++++-- gtk/gtkmenubutton.h | 6 +++++ 2 files changed, 61 insertions(+), 2 deletions(-) diff --git a/gtk/gtkmenubutton.c b/gtk/gtkmenubutton.c index 77f0f5198e..14a5ff0afd 100644 --- a/gtk/gtkmenubutton.c +++ b/gtk/gtkmenubutton.c @@ -153,6 +153,7 @@ struct _GtkMenuButtonPrivate gpointer create_popup_user_data; GDestroyNotify create_popup_destroy_notify; + GtkWidget *label_widget; GtkWidget *align_widget; GtkWidget *arrow_widget; GtkArrowType arrow_type; @@ -167,6 +168,7 @@ enum PROP_POPOVER, PROP_ICON_NAME, PROP_LABEL, + PROP_USE_UNDERLINE, PROP_RELIEF, LAST_PROP }; @@ -205,6 +207,9 @@ gtk_menu_button_set_property (GObject *object, case PROP_LABEL: gtk_menu_button_set_label (self, g_value_get_string (value)); break; + case PROP_USE_UNDERLINE: + gtk_menu_button_set_use_underline (self, g_value_get_boolean (value)); + break; case PROP_RELIEF: gtk_menu_button_set_relief (self, g_value_get_enum (value)); break; @@ -241,6 +246,9 @@ gtk_menu_button_get_property (GObject *object, case PROP_LABEL: g_value_set_string (value, gtk_menu_button_get_label (GTK_MENU_BUTTON (object))); break; + case PROP_USE_UNDERLINE: + g_value_set_boolean (value, gtk_menu_button_get_use_underline (GTK_MENU_BUTTON (object))); + break; case PROP_RELIEF: g_value_set_enum (value, gtk_menu_button_get_relief (GTK_MENU_BUTTON (object))); break; @@ -415,6 +423,13 @@ gtk_menu_button_class_init (GtkMenuButtonClass *klass) NULL, GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); + menu_button_props[PROP_USE_UNDERLINE] = + g_param_spec_boolean ("use-underline", + P_("Use underline"), + P_("If set, an underline in the text indicates the next character should be used for the mnemonic accelerator key"), + FALSE, + GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); + menu_button_props[PROP_RELIEF] = g_param_spec_enum ("relief", P_("Border relief"), @@ -896,6 +911,8 @@ gtk_menu_button_set_label (GtkMenuButton *menu_button, GtkMenuButtonPrivate *priv = gtk_menu_button_get_instance_private (menu_button); GtkWidget *child; GtkWidget *box; + GtkWidget *label_widget; + GtkWidget *image; g_return_if_fail (GTK_IS_MENU_BUTTON (menu_button)); @@ -904,9 +921,17 @@ gtk_menu_button_set_label (GtkMenuButton *menu_button, gtk_container_remove (GTK_CONTAINER (priv->button), child); box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); - gtk_container_add (GTK_CONTAINER (box), gtk_label_new (label)); - gtk_container_add (GTK_CONTAINER (box), gtk_image_new_from_icon_name ("pan-down-symbolic")); + label_widget = gtk_label_new (label); + g_return_if_fail (GTK_IS_MENU_BUTTON (menu_button)); + gtk_label_set_xalign (GTK_LABEL (label_widget), 0); + gtk_label_set_use_underline (GTK_LABEL (label_widget), + gtk_button_get_use_underline (GTK_BUTTON (priv->button))); + gtk_widget_set_hexpand (label_widget, TRUE); + image = gtk_image_new_from_icon_name ("pan-down-symbolic"); + gtk_container_add (GTK_CONTAINER (box), label_widget); + gtk_container_add (GTK_CONTAINER (box), image); gtk_container_add (GTK_CONTAINER (priv->button), box); + priv->label_widget = label_widget; g_object_notify_by_pspec (G_OBJECT (menu_button), menu_button_props[PROP_LABEL]); } @@ -1067,3 +1092,31 @@ gtk_menu_button_set_create_popup_func (GtkMenuButton *menu_button update_sensitivity (menu_button); } + +void +gtk_menu_button_set_use_underline (GtkMenuButton *menu_button, + gboolean use_underline) +{ + GtkMenuButtonPrivate *priv = gtk_menu_button_get_instance_private (menu_button); + + g_return_if_fail (GTK_IS_MENU_BUTTON (menu_button)); + + if (gtk_button_get_use_underline (GTK_BUTTON (priv->button)) == use_underline) + return; + + gtk_button_set_use_underline (GTK_BUTTON (priv->button), use_underline); + if (priv->label_widget) + gtk_label_set_use_underline (GTK_LABEL (priv->label_widget), use_underline); + + g_object_notify_by_pspec (G_OBJECT (menu_button), menu_button_props[PROP_USE_UNDERLINE]); +} + +gboolean +gtk_menu_button_get_use_underline (GtkMenuButton *menu_button) +{ + GtkMenuButtonPrivate *priv = gtk_menu_button_get_instance_private (menu_button); + + g_return_val_if_fail (GTK_IS_MENU_BUTTON (menu_button), FALSE); + + return gtk_button_get_use_underline (GTK_BUTTON (priv->button)); +} diff --git a/gtk/gtkmenubutton.h b/gtk/gtkmenubutton.h index a7ff74d4a4..874a703520 100644 --- a/gtk/gtkmenubutton.h +++ b/gtk/gtkmenubutton.h @@ -89,6 +89,12 @@ void gtk_menu_button_set_label (GtkMenuButton *menu_button, GDK_AVAILABLE_IN_ALL const char * gtk_menu_button_get_label (GtkMenuButton *menu_button); +GDK_AVAILABLE_IN_ALL +void gtk_menu_button_set_use_underline (GtkMenuButton *menu_button, + gboolean use_underline); +GDK_AVAILABLE_IN_ALL +gboolean gtk_menu_button_get_use_underline (GtkMenuButton *menu_button); + GDK_AVAILABLE_IN_ALL void gtk_menu_button_set_relief (GtkMenuButton *menu_button, GtkReliefStyle relief); From 163aa82d452b687f015c986ed121c43c82f7cf71 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Fri, 27 Mar 2020 22:31:18 -0400 Subject: [PATCH 3/8] gtk-demo: Use mnemonics in menu buttons Use GtkMenuButton:use-underline in the modelbutton demo. --- demos/gtk-demo/modelbutton.ui | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/demos/gtk-demo/modelbutton.ui b/demos/gtk-demo/modelbutton.ui index 8f0528f761..818de71309 100644 --- a/demos/gtk-demo/modelbutton.ui +++ b/demos/gtk-demo/modelbutton.ui @@ -18,19 +18,22 @@ thing_a - Color + _Color + 1 thing_b - Flavors + _Flavors + 1 thing_c - Tools + _Tools + 1 From 059917b83cb38b7ef552026e66aebcc29ac5e12e Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Fri, 27 Mar 2020 22:57:10 -0400 Subject: [PATCH 4/8] gtk-demo: Fix the overlay demo We must use two separate boxes for the label and the entry, otherwise we can't keep their can-target properties apart. --- demos/gtk-demo/overlay.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/demos/gtk-demo/overlay.c b/demos/gtk-demo/overlay.c index a663580b3b..afc7c534df 100644 --- a/demos/gtk-demo/overlay.c +++ b/demos/gtk-demo/overlay.c @@ -56,23 +56,25 @@ do_overlay (GtkWidget *do_widget) } vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 10); - gtk_overlay_add_overlay (GTK_OVERLAY (overlay), vbox); gtk_widget_set_can_target (vbox, FALSE); + gtk_overlay_add_overlay (GTK_OVERLAY (overlay), vbox); gtk_widget_set_halign (vbox, GTK_ALIGN_CENTER); - gtk_widget_set_valign (vbox, GTK_ALIGN_CENTER); + gtk_widget_set_valign (vbox, GTK_ALIGN_START); label = gtk_label_new ("Numbers"); gtk_label_set_use_markup (GTK_LABEL (label), TRUE); + gtk_widget_set_can_target (label, FALSE); gtk_widget_set_margin_top (label, 8); - gtk_widget_set_margin_bottom (label, 50); + gtk_widget_set_margin_bottom (label, 8); gtk_container_add (GTK_CONTAINER (vbox), label); vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 10); gtk_overlay_add_overlay (GTK_OVERLAY (overlay), vbox); gtk_widget_set_halign (vbox, GTK_ALIGN_CENTER); gtk_widget_set_valign (vbox, GTK_ALIGN_CENTER); + gtk_entry_set_placeholder_text (GTK_ENTRY (entry), "Your Lucky Number"); - gtk_widget_set_margin_top (entry, 50); + gtk_widget_set_margin_top (entry, 8); gtk_widget_set_margin_bottom (entry, 8); gtk_container_add (GTK_CONTAINER (vbox), entry); From fbed55dff9df454e249fe4d4a7e288778019171e Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sat, 28 Mar 2020 00:04:25 -0400 Subject: [PATCH 5/8] gtk-demo: Fix the rotated text demo Off-by-one on the heart! --- demos/gtk-demo/rotated_text.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demos/gtk-demo/rotated_text.c b/demos/gtk-demo/rotated_text.c index 5a88008471..b7967880da 100644 --- a/demos/gtk-demo/rotated_text.c +++ b/demos/gtk-demo/rotated_text.c @@ -28,7 +28,7 @@ fancy_shape_renderer (cairo_t *cr, (double) attr->ink_rect.width / PANGO_SCALE, (double) attr->ink_rect.height / PANGO_SCALE); - if (GPOINTER_TO_UINT (attr->data) == 0x2664) /* U+2665 BLACK HEART SUIT */ + if (GPOINTER_TO_UINT (attr->data) == 0x2665) /* U+2665 BLACK HEART SUIT */ { cairo_move_to (cr, .5, .0); cairo_line_to (cr, .9, -.4); From 48910a6d8ed8c2d83fab2c663f5d248569057a55 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sat, 28 Mar 2020 00:05:48 -0400 Subject: [PATCH 6/8] gtk-demo: Fix the shortcuts demo We don't have margins anymore. --- demos/gtk-demo/shortcut_triggers.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/demos/gtk-demo/shortcut_triggers.c b/demos/gtk-demo/shortcut_triggers.c index d5b59c3de8..c57edea5fc 100644 --- a/demos/gtk-demo/shortcut_triggers.c +++ b/demos/gtk-demo/shortcut_triggers.c @@ -61,7 +61,10 @@ do_shortcut_triggers (GtkWidget *do_widget) G_CALLBACK (gtk_widget_destroyed), &window); list = gtk_list_box_new (); - g_object_set (list, "margin", 6, NULL); + gtk_widget_set_margin_top (list, 6); + gtk_widget_set_margin_bottom (list, 6); + gtk_widget_set_margin_start (list, 6); + gtk_widget_set_margin_end (list, 6); gtk_container_add (GTK_CONTAINER (window), list); for (i = 0; i < G_N_ELEMENTS (shortcuts); i++) From e2c327e0254a5ad9a8f43f0ecc1b3c39f3cefc8b Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sat, 28 Mar 2020 00:06:14 -0400 Subject: [PATCH 7/8] gtk-demo: Fix the sliding puzzle Update for a change in gtk_shortcut_controller_add_shortcut behavior. --- demos/gtk-demo/sliding_puzzle.c | 1 - 1 file changed, 1 deletion(-) diff --git a/demos/gtk-demo/sliding_puzzle.c b/demos/gtk-demo/sliding_puzzle.c index 5dcc0351bc..2a606fc2fc 100644 --- a/demos/gtk-demo/sliding_puzzle.c +++ b/demos/gtk-demo/sliding_puzzle.c @@ -257,7 +257,6 @@ add_move_binding (GtkShortcutController *controller, gtk_callback_action_new (puzzle_key_pressed, NULL, NULL), "(ii)", dx, dy); gtk_shortcut_controller_add_shortcut (controller, shortcut); - g_object_unref (shortcut); } static void From f3d061e8792d34e8e267b04ee5cba90a7023b01f Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sat, 28 Mar 2020 00:07:05 -0400 Subject: [PATCH 8/8] gtk-demo: Fix the stack demo The GtkSpinner:active property was renamed to :spinning. --- demos/gtk-demo/stack.ui | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demos/gtk-demo/stack.ui b/demos/gtk-demo/stack.ui index adaccfd019..adffefa10d 100644 --- a/demos/gtk-demo/stack.ui +++ b/demos/gtk-demo/stack.ui @@ -53,7 +53,7 @@ center center - 1 + 1