summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2019-06-21 03:15:58 +0000
committerMatthias Clasen <mclasen@redhat.com>2019-06-24 22:40:29 +0000
commitd000bed15f0e17191364b2a31b015176f87ca713 (patch)
treee5132f106ad86c706da39b328e6a3b0cae479769
parentb1ac7b667c2a5527815737ff8e6c10458cfb1893 (diff)
downloadgtk+-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.c15
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