diff options
author | Matthias Clasen <mclasen@redhat.com> | 2021-07-10 12:59:39 +0000 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2021-07-10 12:59:39 +0000 |
commit | a64087d4814a5e2f562ee8a0cef8b349f7a8667b (patch) | |
tree | 39bfe2fe282e4cda7453ced67822f2e596a20269 | |
parent | c85f3f49422c9059fca34a7cb958ab1398d2214b (diff) | |
parent | f328175e2fe013616990a6333e55a5714be62364 (diff) | |
download | gtk+-a64087d4814a5e2f562ee8a0cef8b349f7a8667b.tar.gz |
Merge branch 'activatable-buttons' into 'master'
menubutton: Make menu buttons activatable again
Closes #4079
See merge request GNOME/gtk!3728
-rw-r--r-- | gtk/gtkappchooserbutton.c | 32 | ||||
-rw-r--r-- | gtk/gtkcolorbutton.c | 31 | ||||
-rw-r--r-- | gtk/gtkfontbutton.c | 31 | ||||
-rw-r--r-- | gtk/gtkmenubutton.c | 38 |
4 files changed, 132 insertions, 0 deletions
diff --git a/gtk/gtkappchooserbutton.c b/gtk/gtkappchooserbutton.c index 79d18f21c6..0878a9f81b 100644 --- a/gtk/gtkappchooserbutton.c +++ b/gtk/gtkappchooserbutton.c @@ -79,6 +79,7 @@ enum { enum { SIGNAL_CHANGED, SIGNAL_CUSTOM_ITEM_ACTIVATED, + ACTIVATE, NUM_SIGNALS }; @@ -134,6 +135,7 @@ struct _GtkAppChooserButtonClass { void (* changed) (GtkAppChooserButton *self); void (* custom_item_activated) (GtkAppChooserButton *self, const char *item_name); + void (* activate) (GtkAppChooserButton *self); }; G_DEFINE_TYPE_WITH_CODE (GtkAppChooserButton, gtk_app_chooser_button, GTK_TYPE_WIDGET, @@ -648,6 +650,12 @@ app_chooser_iface_init (GtkAppChooserIface *iface) } static void +gtk_app_chooser_button_activate (GtkAppChooserButton *self) +{ + gtk_widget_activate (self->combobox); +} + +static void gtk_app_chooser_button_class_init (GtkAppChooserButtonClass *klass) { GObjectClass *oclass = G_OBJECT_CLASS (klass); @@ -663,6 +671,8 @@ gtk_app_chooser_button_class_init (GtkAppChooserButtonClass *klass) widget_class->grab_focus = gtk_widget_grab_focus_child; widget_class->focus = gtk_widget_focus_child; + klass->activate = gtk_app_chooser_button_activate; + g_object_class_override_property (oclass, PROP_CONTENT_TYPE, "content-type"); /** @@ -755,6 +765,28 @@ gtk_app_chooser_button_class_init (GtkAppChooserButtonClass *klass) G_TYPE_NONE, 1, G_TYPE_STRING); + /** + * GtkAppChooserButton::activate: + * @widget: the object which received the signal. + * + * Emitted to when the button is activated. + * + * The `::activate` signal on `GtkAppChooserButton` is an action signal and + * emitting it causes the button to pop up its dialog. + * + * Since: 4.4 + */ + signals[ACTIVATE] = + g_signal_new (I_ ("activate"), + G_OBJECT_CLASS_TYPE (oclass), + G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, + G_STRUCT_OFFSET (GtkAppChooserButtonClass, 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_("appchooserbutton")); } diff --git a/gtk/gtkcolorbutton.c b/gtk/gtkcolorbutton.c index 90d3225351..d34e0c3cf3 100644 --- a/gtk/gtkcolorbutton.c +++ b/gtk/gtkcolorbutton.c @@ -91,6 +91,7 @@ struct _GtkColorButtonClass { GtkWidgetClass parent_class; void (* color_set) (GtkColorButton *cp); + void (* activate) (GtkColorButton *self); }; /* Properties */ @@ -108,6 +109,7 @@ enum enum { COLOR_SET, + ACTIVATE, LAST_SIGNAL }; @@ -138,6 +140,12 @@ G_DEFINE_TYPE_WITH_CODE (GtkColorButton, gtk_color_button, GTK_TYPE_WIDGET, gtk_color_button_iface_init)) static void +gtk_color_button_activate (GtkColorButton *self) +{ + gtk_widget_activate (self->button); +} + +static void gtk_color_button_class_init (GtkColorButtonClass *klass) { GObjectClass *gobject_class; @@ -155,6 +163,7 @@ gtk_color_button_class_init (GtkColorButtonClass *klass) widget_class->root = gtk_color_button_root; klass->color_set = NULL; + klass->activate = gtk_color_button_activate; g_object_class_override_property (gobject_class, PROP_RGBA, "rgba"); g_object_class_override_property (gobject_class, PROP_USE_ALPHA, "use-alpha"); @@ -195,6 +204,28 @@ gtk_color_button_class_init (GtkColorButtonClass *klass) G_TYPE_NONE, 0); /** + * GtkColorButton::activate: + * @widget: the object which received the signal. + * + * Emitted to when the color button is activated. + * + * The `::activate` signal on `GtkMenuButton` is an action signal and + * emitting it causes the button to pop up its dialog. + * + * Since: 4.4 + */ + color_button_signals[ACTIVATE] = + g_signal_new (I_ ("activate"), + G_OBJECT_CLASS_TYPE (gobject_class), + G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, + G_STRUCT_OFFSET (GtkColorButtonClass, activate), + NULL, NULL, + NULL, + G_TYPE_NONE, 0); + + gtk_widget_class_set_activate_signal (widget_class, color_button_signals[ACTIVATE]); + + /** * GtkColorButton:show-editor: * * Whether the color chooser should open in editor mode. diff --git a/gtk/gtkfontbutton.c b/gtk/gtkfontbutton.c index 2e2d136fdc..a207c5a403 100644 --- a/gtk/gtkfontbutton.c +++ b/gtk/gtkfontbutton.c @@ -110,12 +110,14 @@ struct _GtkFontButtonClass GtkWidgetClass parent_class; void (* font_set) (GtkFontButton *gfp); + void (* activate) (GtkFontButton *self); }; /* Signals */ enum { FONT_SET, + ACTIVATE, LAST_SIGNAL }; @@ -454,6 +456,12 @@ gtk_font_button_font_chooser_notify (GObject *object, } static void +gtk_font_button_activate (GtkFontButton *self) +{ + gtk_widget_activate (self->button); +} + +static void gtk_font_button_class_init (GtkFontButtonClass *klass) { GObjectClass *gobject_class; @@ -470,6 +478,7 @@ gtk_font_button_class_init (GtkFontButtonClass *klass) widget_class->focus = gtk_widget_focus_child; klass->font_set = NULL; + klass->activate = gtk_font_button_activate; _gtk_font_chooser_install_properties (gobject_class); @@ -546,6 +555,28 @@ gtk_font_button_class_init (GtkFontButtonClass *klass) NULL, G_TYPE_NONE, 0); + /** + * GtkFontButton::activate: + * @widget: the object which received the signal. + * + * Emitted to when the font button is activated. + * + * The `::activate` signal on `GtkFontButton` is an action signal and + * emitting it causes the button to present its dialog. + * + * Since: 4.4 + */ + font_button_signals[ACTIVATE] = + g_signal_new (I_ ("activate"), + G_OBJECT_CLASS_TYPE (gobject_class), + G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, + G_STRUCT_OFFSET (GtkFontButtonClass, activate), + NULL, NULL, + NULL, + G_TYPE_NONE, 0); + + gtk_widget_class_set_activate_signal (widget_class, font_button_signals[ACTIVATE]); + gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT); gtk_widget_class_set_css_name (widget_class, I_("fontbutton")); } diff --git a/gtk/gtkmenubutton.c b/gtk/gtkmenubutton.c index c17f340df7..0c2d53ad8c 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); } |