diff options
author | Matthias Clasen <mclasen@redhat.com> | 2021-07-05 10:08:43 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2021-07-05 10:08:43 -0400 |
commit | 76133dbea7190454daaff3e991ec6b510724e659 (patch) | |
tree | db5233dc743eba7f6337b3f521a20ad5533e6a91 | |
parent | 9885bedb7d1e370918308f8eb2bbff2867ce9022 (diff) | |
download | gtk+-76133dbea7190454daaff3e991ec6b510724e659.tar.gz |
menubutton: Make menu buttons activatable again
The activation is simply forwarded to the toggle button
within.
Fixes: #4079
-rw-r--r-- | gtk/gtkmenubutton.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/gtk/gtkmenubutton.c b/gtk/gtkmenubutton.c index 5e5e70acae..72ae4241bd 100644 --- a/gtk/gtkmenubutton.c +++ b/gtk/gtkmenubutton.c @@ -131,6 +131,8 @@ struct _GtkMenuButton struct _GtkMenuButtonClass { GtkWidgetClass parent_class; + + void (* activate) (GtkMenuButton *self); }; enum @@ -148,7 +150,13 @@ enum LAST_PROP }; +enum { + ACTIVATE, + LAST_SIGNAL +}; + static GParamSpec *menu_button_props[LAST_PROP]; +static guint signals[LAST_SIGNAL] = { 0 }; G_DEFINE_TYPE (GtkMenuButton, gtk_menu_button, GTK_TYPE_WIDGET) @@ -350,6 +358,12 @@ gtk_menu_button_grab_focus (GtkWidget *widget) return gtk_widget_grab_focus (self->button); } +static void +gtk_menu_button_activate (GtkMenuButton *self) +{ + gtk_widget_activate (self->button); +} + static void gtk_menu_button_root (GtkWidget *widget); static void gtk_menu_button_unroot (GtkWidget *widget); @@ -372,6 +386,8 @@ gtk_menu_button_class_init (GtkMenuButtonClass *klass) widget_class->focus = gtk_menu_button_focus; widget_class->grab_focus = gtk_menu_button_grab_focus; + klass->activate = gtk_menu_button_activate; + /** * GtkMenuButton:menu-model: (attributes org.gtk.Property.get=gtk_menu_button_get_menu_model org.gtk.Property.set=gtk_menu_button_set_menu_model) * @@ -491,6 +507,28 @@ gtk_menu_button_class_init (GtkMenuButtonClass *klass) g_object_class_install_properties (gobject_class, LAST_PROP, menu_button_props); + /** + * GtkMenuButton::activate: + * @widget: the object which received the signal. + * + * Emitted to when the menu button is activated. + * + * The `::activate` signal on `GtkMenuButton` is an action signal and + * emitting it causes the button to pop up its menu. + * + * Since: 4.4 + */ + signals[ACTIVATE] = + g_signal_new (I_ ("activate"), + G_OBJECT_CLASS_TYPE (gobject_class), + G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, + G_STRUCT_OFFSET (GtkMenuButtonClass, activate), + NULL, NULL, + NULL, + G_TYPE_NONE, 0); + + gtk_widget_class_set_activate_signal (widget_class, signals[ACTIVATE]); + gtk_widget_class_set_css_name (widget_class, I_("menubutton")); gtk_widget_class_set_accessible_role (widget_class, GTK_ACCESSIBLE_ROLE_BUTTON); } |