diff --git a/src/core/keybindings-private.h b/src/core/keybindings-private.h index 65a3c8bb0..0818244d7 100644 --- a/src/core/keybindings-private.h +++ b/src/core/keybindings-private.h @@ -145,8 +145,8 @@ gboolean meta_prefs_add_keybinding (const char *name, gboolean meta_prefs_remove_keybinding (const char *name); GList * meta_prefs_get_keybindings (void); -void meta_prefs_get_overlay_binding (MetaKeyCombo *combo); -void meta_prefs_get_locate_pointer_binding (MetaKeyCombo *combo); +void meta_prefs_get_overlay_bindings (MetaKeyCombo combos[2]); +void meta_prefs_get_locate_pointer_bindings (MetaKeyCombo combos[2]); const char * meta_prefs_get_iso_next_group_option (void); gboolean meta_prefs_is_locate_pointer_enabled (void); diff --git a/src/core/keybindings.c b/src/core/keybindings.c index 434fedce7..e579ecb8c 100644 --- a/src/core/keybindings.c +++ b/src/core/keybindings.c @@ -823,21 +823,21 @@ reload_active_keyboard_layouts (MetaKeyBindingManager *keys) static void reload_combos (MetaKeyBindingManager *keys) { - MetaKeyCombo combo; + MetaKeyCombo combos[2]; g_hash_table_remove_all (keys->key_bindings_index); reload_active_keyboard_layouts (keys); - meta_prefs_get_overlay_binding (&combo); - resolve_key_combo (keys, - &combo, - &keys->overlay_resolved_key_combo); + meta_prefs_get_overlay_bindings (combos); + resolve_special_key_combo (keys, + combos, + &keys->overlay_resolved_key_combo); - meta_prefs_get_locate_pointer_binding (&combo); - resolve_key_combo (keys, - &combo, - &keys->locate_pointer_resolved_key_combo); + meta_prefs_get_locate_pointer_bindings (combos); + resolve_special_key_combo (keys, + combos, + &keys->locate_pointer_resolved_key_combo); reload_iso_next_group_combos (keys); diff --git a/src/core/prefs.c b/src/core/prefs.c index fcbd5de56..c8e99ffef 100644 --- a/src/core/prefs.c +++ b/src/core/prefs.c @@ -77,8 +77,8 @@ static GList *listeners = NULL; static GHashTable *settings_schemas; static ClutterModifierType mouse_button_mods = CLUTTER_MOD1_MASK; -static MetaKeyCombo overlay_key_combo = { 0, 0, 0 }; -static MetaKeyCombo locate_pointer_key_combo = { 0, 0, 0 }; +static MetaKeyCombo overlay_key_combos[2] = { 0 }; +static MetaKeyCombo locate_pointer_key_combos[2] = { 0 }; static GDesktopFocusMode focus_mode = G_DESKTOP_FOCUS_MODE_CLICK; static GDesktopFocusNewWindows focus_new_windows = G_DESKTOP_FOCUS_NEW_WINDOWS_SMART; static gboolean raise_on_click = TRUE; @@ -1470,26 +1470,30 @@ overlay_key_handler (GVariant *value, gpointer *result, gpointer data) { - MetaKeyCombo combo; + MetaKeyCombo combos[2] = { 0 }; const gchar *string_value; + int i; *result = NULL; /* ignored */ string_value = g_variant_get_string (value, NULL); - if (!string_value || !meta_parse_accelerator (string_value, &combo)) + if (!string_value || !meta_parse_accelerator (string_value, &combos[0])) { meta_topic (META_DEBUG_KEYBINDINGS, "Failed to parse value for overlay-key"); return FALSE; } - combo.modifiers = 0; - - if (overlay_key_combo.keysym != combo.keysym || - overlay_key_combo.keycode != combo.keycode) + for (i = 0; i < G_N_ELEMENTS (combos); i++) { - overlay_key_combo = combo; - queue_changed (META_PREF_KEYBINDINGS); + combos[i].modifiers = 0; + + if (overlay_key_combos[i].keysym != combos[i].keysym || + overlay_key_combos[i].keycode != combos[i].keycode) + { + overlay_key_combos[i] = combos[i]; + queue_changed (META_PREF_KEYBINDINGS); + } } return TRUE; @@ -1500,26 +1504,30 @@ locate_pointer_key_handler (GVariant *value, gpointer *result, gpointer data) { - MetaKeyCombo combo; + MetaKeyCombo combos[2] = { 0 }; const gchar *string_value; + int i; *result = NULL; /* ignored */ string_value = g_variant_get_string (value, NULL); - if (!string_value || !meta_parse_accelerator (string_value, &combo)) + if (!string_value || !meta_parse_accelerator (string_value, &combos[0])) { meta_topic (META_DEBUG_KEYBINDINGS, "Failed to parse value for locate-pointer-key"); return FALSE; } - combo.modifiers = 0; - - if (locate_pointer_key_combo.keysym != combo.keysym || - locate_pointer_key_combo.keycode != combo.keycode) + for (i = 0; i < G_N_ELEMENTS (combos); i++) { - locate_pointer_key_combo = combo; - queue_changed (META_PREF_KEYBINDINGS); + combos[i].modifiers = 0; + + if (locate_pointer_key_combos[i].keysym != combos[i].keysym || + locate_pointer_key_combos[i].keycode != combos[i].keycode) + { + locate_pointer_key_combos[i] = combos[i]; + queue_changed (META_PREF_KEYBINDINGS); + } } return TRUE; @@ -1729,7 +1737,8 @@ init_bindings (void) pref = g_new0 (MetaKeyPref, 1); pref->name = g_strdup ("overlay-key"); pref->action = META_KEYBINDING_ACTION_OVERLAY_KEY; - pref->combos = g_slist_prepend (pref->combos, &overlay_key_combo); + pref->combos = g_slist_prepend (pref->combos, &overlay_key_combos[0]); + pref->combos = g_slist_prepend (pref->combos, &overlay_key_combos[1]); pref->builtin = 1; g_hash_table_insert (key_bindings, g_strdup (pref->name), pref); @@ -1737,7 +1746,8 @@ init_bindings (void) pref = g_new0 (MetaKeyPref, 1); pref->name = g_strdup ("locate-pointer-key"); pref->action = META_KEYBINDING_ACTION_LOCATE_POINTER_KEY; - pref->combos = g_slist_prepend (pref->combos, &locate_pointer_key_combo); + pref->combos = g_slist_prepend (pref->combos, &locate_pointer_key_combos[0]); + pref->combos = g_slist_prepend (pref->combos, &locate_pointer_key_combos[1]); pref->builtin = 1; g_hash_table_insert (key_bindings, g_strdup (pref->name), pref); @@ -2013,15 +2023,17 @@ meta_prefs_get_keybindings (void) } void -meta_prefs_get_overlay_binding (MetaKeyCombo *combo) +meta_prefs_get_overlay_bindings (MetaKeyCombo combos[2]) { - *combo = overlay_key_combo; + combos[0] = overlay_key_combos[0]; + combos[1] = overlay_key_combos[1]; } void -meta_prefs_get_locate_pointer_binding (MetaKeyCombo *combo) +meta_prefs_get_locate_pointer_bindings (MetaKeyCombo combos[2]) { - *combo = locate_pointer_key_combo; + combos[0] = locate_pointer_key_combos[0]; + combos[1] = locate_pointer_key_combos[1]; } gboolean