diff options
author | Matthias Clasen <mclasen@redhat.com> | 2019-06-21 03:15:58 +0000 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2019-06-24 22:40:29 +0000 |
commit | d000bed15f0e17191364b2a31b015176f87ca713 (patch) | |
tree | e5132f106ad86c706da39b328e6a3b0cae479769 | |
parent | b1ac7b667c2a5527815737ff8e6c10458cfb1893 (diff) | |
download | gtk+-d000bed15f0e17191364b2a31b015176f87ca713.tar.gz |
popover menu: Make mnemonics visible
For menus, mnemonics trigger without pressing Alt,
and the expectation is that we show them whenever
keynav is happening. Reinstate this behavior for
popover menus.
-rw-r--r-- | gtk/gtkpopovermenu.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/gtk/gtkpopovermenu.c b/gtk/gtkpopovermenu.c index 0badd92d43..735b51980f 100644 --- a/gtk/gtkpopovermenu.c +++ b/gtk/gtkpopovermenu.c @@ -35,6 +35,7 @@ #include "gtkshortcutcontroller.h" #include "gtkshortcuttrigger.h" #include "gtkshortcutmanager.h" +#include "gtklabelprivate.h" /** @@ -189,6 +190,17 @@ focus_out (GtkEventController *controller, gtk_popover_popdown (popover); } +static gboolean +key_pressed (GtkEventController *controller, + guint keyval, + guint keycode, + GdkModifierType state, + GtkWidget *widget) +{ + _gtk_label_mnemonics_visible_apply_recursively (widget, TRUE); + return FALSE; +} + static void gtk_popover_menu_init (GtkPopoverMenu *popover) { @@ -209,7 +221,9 @@ gtk_popover_menu_init (GtkPopoverMenu *popover) gtk_style_context_add_class (style_context, GTK_STYLE_CLASS_MENU); controller = gtk_event_controller_key_new (); + gtk_event_controller_set_propagation_phase (controller, GTK_PHASE_CAPTURE); g_signal_connect (controller, "focus-out", G_CALLBACK (focus_out), popover); + g_signal_connect (controller, "key-pressed", G_CALLBACK (key_pressed), popover); gtk_widget_add_controller (GTK_WIDGET (popover), controller); /* Trigger mnemonics without Alt */ @@ -234,6 +248,7 @@ gtk_popover_menu_unmap (GtkWidget *widget) { gtk_popover_menu_open_submenu (GTK_POPOVER_MENU (widget), "main"); GTK_WIDGET_CLASS (gtk_popover_menu_parent_class)->unmap (widget); + _gtk_label_mnemonics_visible_apply_recursively (widget, FALSE); } static void |