summaryrefslogtreecommitdiff
path: root/gtk/gtkmenu.c
diff options
context:
space:
mode:
authorWilliam Jon McCann <william.jon.mccann@gmail.com>2013-06-26 12:00:42 -0400
committerWilliam Jon McCann <william.jon.mccann@gmail.com>2013-06-26 12:00:42 -0400
commit2d79334bb069224966b3dcd8456967c9800e8fd0 (patch)
tree2b1cecfebba0214b5367da539e4cd0b6d1176ecf /gtk/gtkmenu.c
parent7cfa7e6b72d0f16158e78fe6a5231499dbb3cd76 (diff)
downloadgtk+-2d79334bb069224966b3dcd8456967c9800e8fd0.tar.gz
Deprecate and ignore gtk-can-change-accels
It is disabled by default
Diffstat (limited to 'gtk/gtkmenu.c')
-rw-r--r--gtk/gtkmenu.c161
1 files changed, 1 insertions, 160 deletions
diff --git a/gtk/gtkmenu.c b/gtk/gtkmenu.c
index e1b0d9125b..1be4f765cd 100644
--- a/gtk/gtkmenu.c
+++ b/gtk/gtkmenu.c
@@ -3391,179 +3391,20 @@ gtk_menu_button_release (GtkWidget *widget,
return GTK_WIDGET_CLASS (gtk_menu_parent_class)->button_release_event (widget, event);
}
-static const gchar *
-get_accel_path (GtkWidget *menu_item,
- gboolean *locked)
-{
- const gchar *path;
- GtkWidget *label;
- GClosure *accel_closure;
- GtkAccelGroup *accel_group;
-
- path = _gtk_widget_get_accel_path (menu_item, locked);
- if (!path)
- {
- path = GTK_MENU_ITEM (menu_item)->priv->accel_path;
-
- if (locked)
- {
- *locked = TRUE;
-
- label = gtk_bin_get_child (GTK_BIN (menu_item));
-
- if (GTK_IS_ACCEL_LABEL (label))
- {
- g_object_get (label,
- "accel-closure", &accel_closure,
- NULL);
- if (accel_closure)
- {
- accel_group = gtk_accel_group_from_accel_closure (accel_closure);
-
- *locked = gtk_accel_group_get_is_locked (accel_group);
- }
- }
- }
- }
-
- return path;
-}
-
static gboolean
gtk_menu_key_press (GtkWidget *widget,
GdkEventKey *event)
{
- GtkMenuShell *menu_shell;
GtkMenu *menu;
- gboolean delete = FALSE;
- gboolean can_change_accels;
- gchar *accel = NULL;
- guint accel_key, accel_mods;
- GdkModifierType consumed_modifiers;
- GdkDisplay *display;
g_return_val_if_fail (GTK_IS_MENU (widget), FALSE);
g_return_val_if_fail (event != NULL, FALSE);
- menu_shell = GTK_MENU_SHELL (widget);
menu = GTK_MENU (widget);
gtk_menu_stop_navigating_submenu (menu);
- if (GTK_WIDGET_CLASS (gtk_menu_parent_class)->key_press_event (widget, event))
- return TRUE;
-
- display = gtk_widget_get_display (widget);
-
- g_object_get (gtk_widget_get_settings (widget),
- "gtk-menu-bar-accel", &accel,
- "gtk-can-change-accels", &can_change_accels,
- NULL);
-
- if (accel && *accel)
- {
- guint keyval = 0;
- GdkModifierType mods = 0;
-
- gtk_accelerator_parse (accel, &keyval, &mods);
-
- 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 && (mods & event->state) == mods)
- {
- gtk_menu_shell_cancel (menu_shell);
- g_free (accel);
- return TRUE;
- }
- }
-
- g_free (accel);
-
- switch (event->keyval)
- {
- case GDK_KEY_Delete:
- case GDK_KEY_KP_Delete:
- case GDK_KEY_BackSpace:
- delete = TRUE;
- break;
- default:
- break;
- }
-
- /* Figure out what modifiers went into determining the key symbol */
- _gtk_translate_keyboard_accel_state (gdk_keymap_get_for_display (display),
- event->hardware_keycode,
- event->state,
- gtk_accelerator_get_default_mod_mask (),
- event->group,
- &accel_key, NULL, NULL, &consumed_modifiers);
-
- accel_key = gdk_keyval_to_lower (accel_key);
- accel_mods = event->state & gtk_accelerator_get_default_mod_mask () & ~consumed_modifiers;
-
- /* If lowercasing affects the keysym, then we need to include SHIFT
- * in the modifiers, We re-upper case when we match against the
- * keyval, but display and save in caseless form.
- */
- if (accel_key != event->keyval)
- accel_mods |= GDK_SHIFT_MASK;
-
- /* Modify the accelerators */
- if (can_change_accels &&
- menu_shell->priv->active_menu_item &&
- gtk_bin_get_child (GTK_BIN (menu_shell->priv->active_menu_item)) && /* no separators */
- GTK_MENU_ITEM (menu_shell->priv->active_menu_item)->priv->submenu == NULL && /* no submenus */
- (delete || gtk_accelerator_valid (accel_key, accel_mods)))
- {
- GtkWidget *menu_item = menu_shell->priv->active_menu_item;
- gboolean locked, replace_accels = TRUE;
- const gchar *path;
-
- path = get_accel_path (menu_item, &locked);
- if (!path || locked)
- {
- /* Can't change accelerators on menu_items without paths
- * (basically, those items are accelerator-locked).
- */
- gtk_widget_error_bell (widget);
- }
- else
- {
- gboolean changed;
-
- /* For the keys that act to delete the current setting,
- * we delete the current setting if there is one, otherwise,
- * we set the key as the accelerator.
- */
- if (delete)
- {
- GtkAccelKey key;
-
- if (gtk_accel_map_lookup_entry (path, &key) &&
- (key.accel_key || key.accel_mods))
- {
- accel_key = 0;
- accel_mods = 0;
- }
- }
- changed = gtk_accel_map_change_entry (path, accel_key, accel_mods, replace_accels);
-
- if (!changed)
- {
- /* We failed, probably because this key is in use
- * and locked already.
- */
- gtk_widget_error_bell (widget);
- }
- }
- }
-
- return TRUE;
+ return GTK_WIDGET_CLASS (gtk_menu_parent_class)->key_press_event (widget, event);
}
static gboolean