diff options
author | Matthias Clasen <mclasen@redhat.com> | 2019-04-27 03:14:04 +0000 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2019-04-29 02:37:58 +0000 |
commit | 3d486cac86d98f3524d4fc04c8c3bd8d4e5d886a (patch) | |
tree | 5d8039f6be998dd64c17466805a6dd9f7732105e | |
parent | eff272df9dfec2210a37db3301b723a95ba263b5 (diff) | |
download | gtk+-3d486cac86d98f3524d4fc04c8c3bd8d4e5d886a.tar.gz |
popover: Add the same activate-default action
-rw-r--r-- | gtk/gtkpopover.c | 40 |
1 files changed, 39 insertions, 1 deletions
diff --git a/gtk/gtkpopover.c b/gtk/gtkpopover.c index d0c73bb759..003aebb737 100644 --- a/gtk/gtkpopover.c +++ b/gtk/gtkpopover.c @@ -380,6 +380,40 @@ allocate_contents (GtkGizmo *gizmo, } static void +activate_default_cb (GSimpleAction *action, + GVariant *parameter, + gpointer data) +{ + GtkPopover *popover = data; + GtkPopoverPrivate *priv = gtk_popover_get_instance_private (popover); + GtkWidget *focus_widget; + + focus_widget = gtk_root_get_focus (gtk_widget_get_root (priv->relative_to)); + if (priv->default_widget && gtk_widget_is_sensitive (priv->default_widget) && + (!focus_widget || !gtk_widget_get_receives_default (focus_widget))) + gtk_widget_activate (priv->default_widget); + else if (focus_widget && gtk_widget_is_sensitive (focus_widget)) + gtk_widget_activate (focus_widget); +} + +static void +add_actions (GtkPopover *popover) +{ + GActionEntry entries[] = { + { "activate-default", activate_default_cb, NULL, NULL, NULL }, + }; + + GActionGroup *actions; + + actions = G_ACTION_GROUP (g_simple_action_group_new ()); + g_action_map_add_action_entries (G_ACTION_MAP (actions), + entries, G_N_ELEMENTS (entries), + popover); + gtk_widget_insert_action_group (GTK_WIDGET (popover), "gtk", actions); + g_object_unref (actions); +} + +static void gtk_popover_init (GtkPopover *popover) { GtkPopoverPrivate *priv = gtk_popover_get_instance_private (popover); @@ -407,6 +441,8 @@ gtk_popover_init (GtkPopover *popover) context = gtk_widget_get_style_context (GTK_WIDGET (popover)); gtk_style_context_add_class (context, GTK_STYLE_CLASS_BACKGROUND); + + add_actions (popover); } static void @@ -1259,5 +1295,7 @@ void gtk_popover_set_default_widget (GtkPopover *popover, GtkWidget *widget) { - // FIXME + GtkPopoverPrivate *priv = gtk_popover_get_instance_private (popover); + + priv->default_widget = widget; } |