From: Emmanuele Bassi Date: Fri, 14 Apr 2023 12:08:13 +0000 (+0100) Subject: Add GtkMenuButton:can-shrink X-Git-Tag: archive/raspbian/4.12.3+ds-1+rpi1~1^2^2^2~22^2~1^2~380^2 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=e28676869e5b4dc9d1431329c537740bd4348f27;p=gtk4.git Add GtkMenuButton:can-shrink Map the GtkMenuButton property to the underlying GtkButton widget. --- diff --git a/gtk/gtkmenubutton.c b/gtk/gtkmenubutton.c index ad723aa38b..e6870523b5 100644 --- a/gtk/gtkmenubutton.c +++ b/gtk/gtkmenubutton.c @@ -128,6 +128,7 @@ struct _GtkMenuButton gboolean always_show_arrow; gboolean primary; + gboolean can_shrink; }; struct _GtkMenuButtonClass @@ -151,6 +152,7 @@ enum PROP_PRIMARY, PROP_CHILD, PROP_ACTIVE, + PROP_CAN_SHRINK, LAST_PROP }; @@ -212,6 +214,9 @@ gtk_menu_button_set_property (GObject *object, case PROP_ACTIVE: gtk_menu_button_set_active (self, g_value_get_boolean (value)); break; + case PROP_CAN_SHRINK: + gtk_menu_button_set_can_shrink (self, g_value_get_boolean (value)); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } @@ -260,6 +265,9 @@ gtk_menu_button_get_property (GObject *object, case PROP_ACTIVE: g_value_set_boolean (value, gtk_menu_button_get_active (self)); break; + case PROP_CAN_SHRINK: + g_value_set_boolean (value, gtk_menu_button_get_can_shrink (self)); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } @@ -534,6 +542,19 @@ gtk_menu_button_class_init (GtkMenuButtonClass *klass) FALSE, GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); + /** + * GtkMenuButton:can-shrink: (attributes org.gtk.Property.get=gtk_menu_button_get_can_shrink org.gtk.Property.set=gtk_menu_button_set_can_shrink) + * + * Whether the size of the button can be made smaller than the natural + * size of its contents. + * + * Since: 4.12 + */ + menu_button_props[PROP_CAN_SHRINK] = + g_param_spec_boolean ("can-shrink", NULL, NULL, + FALSE, + GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); + g_object_class_install_properties (gobject_class, LAST_PROP, menu_button_props); /** @@ -1150,6 +1171,9 @@ gtk_menu_button_set_label (GtkMenuButton *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 (menu_button->button))); + gtk_label_set_ellipsize (GTK_LABEL (label_widget), + menu_button->can_shrink ? PANGO_ELLIPSIZE_END + : PANGO_ELLIPSIZE_NONE); gtk_widget_set_hexpand (label_widget, TRUE); gtk_widget_set_halign (label_widget, GTK_ALIGN_CENTER); arrow = gtk_builtin_icon_new ("arrow"); @@ -1566,3 +1590,59 @@ gtk_menu_button_get_active (GtkMenuButton *menu_button) return gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (menu_button->button)); } + +/** + * gtk_menu_button_set_can_shrink: + * @menu_button: a menu button + * @can_shrink: whether the button can shrink + * + * Sets whether the button size can be smaller than the natural size of + * its contents. + * + * For text buttons, setting @can_shrink to true will ellipsize the label. + * + * For icon buttons, this function has no effect. + * + * Since: 4.12 + */ +void +gtk_menu_button_set_can_shrink (GtkMenuButton *menu_button, + gboolean can_shrink) +{ + g_return_if_fail (GTK_IS_MENU_BUTTON (menu_button)); + + can_shrink = !!can_shrink; + + if (menu_button->can_shrink == can_shrink) + return; + + menu_button->can_shrink = can_shrink; + + if (menu_button->label_widget != NULL) + { + gtk_label_set_ellipsize (GTK_LABEL (menu_button->label_widget), + can_shrink ? PANGO_ELLIPSIZE_END + : PANGO_ELLIPSIZE_NONE); + } + + g_object_notify_by_pspec (G_OBJECT (menu_button), menu_button_props[PROP_CAN_SHRINK]); +} + +/** + * gtk_menu_button_get_can_shrink: + * @menu_button: a button + * + * Retrieves whether the button can be smaller than the natural + * size of its contents. + * + * Returns: true if the button can shrink, and false otherwise + * + * Since: 4.12 + */ +gboolean +gtk_menu_button_get_can_shrink (GtkMenuButton *menu_button) +{ + g_return_val_if_fail (GTK_IS_MENU_BUTTON (menu_button), FALSE); + + return menu_button->can_shrink; +} diff --git a/gtk/gtkmenubutton.h b/gtk/gtkmenubutton.h index 566f592d35..5b2e3322b4 100644 --- a/gtk/gtkmenubutton.h +++ b/gtk/gtkmenubutton.h @@ -127,10 +127,17 @@ GDK_AVAILABLE_IN_4_6 GtkWidget * gtk_menu_button_get_child (GtkMenuButton *menu_button); GDK_AVAILABLE_IN_4_10 -void gtk_menu_button_set_active (GtkMenuButton *menu_button, +void gtk_menu_button_set_active (GtkMenuButton *menu_button, gboolean active); GDK_AVAILABLE_IN_4_10 -gboolean gtk_menu_button_get_active (GtkMenuButton *menu_button); +gboolean gtk_menu_button_get_active (GtkMenuButton *menu_button); + +GDK_AVAILABLE_IN_4_12 +void gtk_menu_button_set_can_shrink (GtkMenuButton *menu_button, + gboolean can_shrink); +GDK_AVAILABLE_IN_4_12 +gboolean gtk_menu_button_get_can_shrink (GtkMenuButton *menu_button); + G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkMenuButton, g_object_unref)