diff --git a/src/core/prefs.c b/src/core/prefs.c index c8e99ffef..5f68f09d0 100644 --- a/src/core/prefs.c +++ b/src/core/prefs.c @@ -1465,6 +1465,27 @@ button_layout_handler (GVariant *value, return TRUE; } +static gboolean +parse_special_key (const gchar *string_value, + MetaKeyCombo combos[2]) +{ + g_autofree gchar *string_value_l = NULL; + g_autofree gchar *string_value_r = NULL; + + if (meta_parse_accelerator (string_value, &combos[0])) + return TRUE; + + string_value_l = g_strconcat (string_value, "_L", NULL); + if (!meta_parse_accelerator (string_value_l, &combos[0])) + return FALSE; + + string_value_r = g_strconcat (string_value, "_R", NULL); + if (!meta_parse_accelerator (string_value_r, &combos[1])) + return FALSE; + + return TRUE; +} + static gboolean overlay_key_handler (GVariant *value, gpointer *result, @@ -1477,7 +1498,7 @@ overlay_key_handler (GVariant *value, *result = NULL; /* ignored */ string_value = g_variant_get_string (value, NULL); - if (!string_value || !meta_parse_accelerator (string_value, &combos[0])) + if (!string_value || !parse_special_key (string_value, combos)) { meta_topic (META_DEBUG_KEYBINDINGS, "Failed to parse value for overlay-key"); @@ -1511,7 +1532,7 @@ locate_pointer_key_handler (GVariant *value, *result = NULL; /* ignored */ string_value = g_variant_get_string (value, NULL); - if (!string_value || !meta_parse_accelerator (string_value, &combos[0])) + if (!string_value || !parse_special_key (string_value, combos)) { meta_topic (META_DEBUG_KEYBINDINGS, "Failed to parse value for locate-pointer-key");