summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2021-07-10 12:59:39 +0000
committerMatthias Clasen <mclasen@redhat.com>2021-07-10 12:59:39 +0000
commita64087d4814a5e2f562ee8a0cef8b349f7a8667b (patch)
tree39bfe2fe282e4cda7453ced67822f2e596a20269
parentc85f3f49422c9059fca34a7cb958ab1398d2214b (diff)
parentf328175e2fe013616990a6333e55a5714be62364 (diff)
downloadgtk+-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.c32
-rw-r--r--gtk/gtkcolorbutton.c31
-rw-r--r--gtk/gtkfontbutton.c31
-rw-r--r--gtk/gtkmenubutton.c38
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);
}