Merge branch 'activatable-buttons' into 'master'
menubutton: Make menu buttons activatable again Closes #4079 See merge request GNOME/gtk!3728
This commit is contained in:
@@ -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,
|
||||
@@ -647,6 +649,12 @@ app_chooser_iface_init (GtkAppChooserIface *iface)
|
||||
iface->refresh = gtk_app_chooser_button_refresh;
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_app_chooser_button_activate (GtkAppChooserButton *self)
|
||||
{
|
||||
gtk_widget_activate (self->combobox);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_app_chooser_button_class_init (GtkAppChooserButtonClass *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"));
|
||||
}
|
||||
|
||||
@@ -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
|
||||
};
|
||||
|
||||
@@ -137,6 +139,12 @@ G_DEFINE_TYPE_WITH_CODE (GtkColorButton, gtk_color_button, GTK_TYPE_WIDGET,
|
||||
G_IMPLEMENT_INTERFACE (GTK_TYPE_COLOR_CHOOSER,
|
||||
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)
|
||||
{
|
||||
@@ -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");
|
||||
@@ -194,6 +203,28 @@ gtk_color_button_class_init (GtkColorButtonClass *klass)
|
||||
NULL,
|
||||
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:
|
||||
*
|
||||
|
||||
@@ -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
|
||||
};
|
||||
|
||||
@@ -453,6 +455,12 @@ gtk_font_button_font_chooser_notify (GObject *object,
|
||||
g_object_notify_by_pspec (user_data, pspec);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_font_button_activate (GtkFontButton *self)
|
||||
{
|
||||
gtk_widget_activate (self->button);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_font_button_class_init (GtkFontButtonClass *klass)
|
||||
{
|
||||
@@ -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"));
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user