Only show the mnemonic underline when pressing Alt

...and show them in menus when navigating the menu with the keyboard.
This is similar to what other platforms do, and reduces visual clutter.
There is a setting to control this. Most of the work on this patch was
done by Thomas Wood. See bug 588554.
This commit is contained in:
Matthias Clasen
2009-12-20 03:04:52 -05:00
committed by Tristan Van Berkom
parent ce9c3df4c8
commit d68d78de81
11 changed files with 352 additions and 8 deletions

View File

@ -63,6 +63,8 @@
#include "gtktooltip.h"
#include "gtkdebug.h"
#include "gtkalias.h"
#include "gtkmenu.h"
#include "gdk/gdkkeysyms.h"
#include "gdk/gdkprivate.h" /* for GDK_WINDOW_DESTROYED */
@ -1613,6 +1615,27 @@ gtk_main_do_event (GdkEvent *event)
if (gtk_invoke_key_snoopers (grab_widget, event))
break;
}
/* catch alt press to enable auto-mnemonics */
if (event->key.keyval == GDK_Alt_L || event->key.keyval == GDK_Alt_R)
{
gboolean auto_mnemonics;
g_object_get (gtk_widget_get_settings (grab_widget),
"gtk-auto-mnemonics", &auto_mnemonics, NULL);
if (auto_mnemonics)
{
gboolean mnemonics_visible;
GtkWidget *window;
mnemonics_visible = (event->type == GDK_KEY_PRESS);
window = gtk_widget_get_toplevel (grab_widget);
if (GTK_IS_WINDOW (window))
gtk_window_set_mnemonics_visible (GTK_WINDOW (window), mnemonics_visible);
}
}
/* else fall through */
case GDK_MOTION_NOTIFY:
case GDK_BUTTON_RELEASE: