diff options
author | Matthias Clasen <mclasen@redhat.com> | 2013-09-23 13:10:19 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2014-03-03 18:58:36 -0500 |
commit | fac8d6deeaeb43d82274a68bbc1ed08de8219ba6 (patch) | |
tree | 99993e7d6fa1dca7faabd408e4859867e5b271b1 /gtk/gtkmenubar.c | |
parent | ba0542dc51f89a0df0b42c26eaab530143c0678c (diff) | |
download | gtk+-fac8d6deeaeb43d82274a68bbc1ed08de8219ba6.tar.gz |
Allow applications to use gtk-menu-bar-accel in 3.12
gnome-terminal is still using this setting, so we'll let
applications override it for another cycle. It is no longer
backed by a system-wide setting, though, and it will still
go away eventually.
This partically reverts b26c74e5dac0b5fd869d2c8cc7a0edb6b01aeebd
Diffstat (limited to 'gtk/gtkmenubar.c')
-rw-r--r-- | gtk/gtkmenubar.c | 53 |
1 files changed, 36 insertions, 17 deletions
diff --git a/gtk/gtkmenubar.c b/gtk/gtkmenubar.c index 217308577f..3b5f7752e7 100644 --- a/gtk/gtkmenubar.c +++ b/gtk/gtkmenubar.c @@ -696,35 +696,54 @@ window_key_press_handler (GtkWidget *widget, GdkEventKey *event, gpointer data) { + gchar *accel = NULL; gboolean retval = FALSE; - guint keyval = GDK_KEY_F10; - /* FIXME this is wrong, needs to be in the global accel resolution - * thing, to properly consider i18n etc., but that probably requires - * AccelGroup changes etc. - */ - if (event->keyval == keyval && event->state == 0) + g_object_get (gtk_widget_get_settings (widget), + "gtk-menu-bar-accel", &accel, + NULL); + + if (accel && *accel) { - GList *tmp_menubars = get_viewable_menu_bars (GTK_WINDOW (widget)); - GList *menubars; + guint keyval = 0; + GdkModifierType mods = 0; - menubars = _gtk_container_focus_sort (GTK_CONTAINER (widget), tmp_menubars, - GTK_DIR_TAB_FORWARD, NULL); - g_list_free (tmp_menubars); + gtk_accelerator_parse (accel, &keyval, &mods); - if (menubars) + if (keyval == 0) + g_warning ("Failed to parse menu bar accelerator '%s'\n", accel); + + /* FIXME this is wrong, needs to be in the global accel resolution + * thing, to properly consider i18n etc., but that probably requires + * AccelGroup changes etc. + */ + if (event->keyval == keyval && + ((event->state & gtk_accelerator_get_default_mod_mask ()) == + (mods & gtk_accelerator_get_default_mod_mask ()))) { - GtkMenuShell *menu_shell = GTK_MENU_SHELL (menubars->data); + GList *tmp_menubars = get_viewable_menu_bars (GTK_WINDOW (widget)); + GList *menubars; - _gtk_menu_shell_set_keyboard_mode (menu_shell, TRUE); - gtk_menu_shell_select_first (menu_shell, FALSE); + menubars = _gtk_container_focus_sort (GTK_CONTAINER (widget), tmp_menubars, + GTK_DIR_TAB_FORWARD, NULL); + g_list_free (tmp_menubars); - g_list_free (menubars); + if (menubars) + { + GtkMenuShell *menu_shell = GTK_MENU_SHELL (menubars->data); + + _gtk_menu_shell_set_keyboard_mode (menu_shell, TRUE); + gtk_menu_shell_select_first (menu_shell, FALSE); + + g_list_free (menubars); - retval = TRUE; + retval = TRUE; + } } } + g_free (accel); + return retval; } |