summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJasper St. Pierre <jstpierre@mecheye.net>2015-01-06 18:59:53 -0800
committerJasper St. Pierre <jstpierre@mecheye.net>2015-01-06 19:11:57 -0800
commit13acf9e35d9d23e87b5bbf116b31e1373572674f (patch)
treecacff22231e6673c799aa8e6d9384c9212c0131f
parent3beb187cac00d76b32742b2a9bb56a77f1f374f9 (diff)
downloadmutter-13acf9e35d9d23e87b5bbf116b31e1373572674f.tar.gz
keybindings: Have meta_accelerator_parse take a MetaKeyCombo
-rw-r--r--src/core/keybindings.c2
-rw-r--r--src/core/meta-accel-parse.c39
-rw-r--r--src/core/meta-accel-parse.h8
-rw-r--r--src/core/prefs.c29
4 files changed, 32 insertions, 46 deletions
diff --git a/src/core/keybindings.c b/src/core/keybindings.c
index 6684d4f48..68f32b0bc 100644
--- a/src/core/keybindings.c
+++ b/src/core/keybindings.c
@@ -1407,7 +1407,7 @@ meta_display_grab_accelerator (MetaDisplay *display,
MetaKeyCombo combo;
MetaKeyDevirtCombo devirt_combo;
- if (!meta_parse_accelerator (accelerator, &combo.keysym, &combo.keycode, &combo.modifiers))
+ if (!meta_parse_accelerator (accelerator, &combo))
{
meta_topic (META_DEBUG_KEYBINDINGS,
"Failed to parse accelerator\n");
diff --git a/src/core/meta-accel-parse.c b/src/core/meta-accel-parse.c
index f4c5ee0bb..e32f6b940 100644
--- a/src/core/meta-accel-parse.c
+++ b/src/core/meta-accel-parse.c
@@ -25,6 +25,7 @@
#include "config.h"
#include "meta-accel-parse.h"
+#include "keybindings-private.h"
#include <xkbcommon/xkbcommon.h>
#include <string.h>
@@ -173,21 +174,16 @@ is_keycode (const gchar *string)
static gboolean
accelerator_parse (const gchar *accelerator,
- guint *accelerator_key,
- guint *accelerator_keycode,
- MetaVirtualModifier *accelerator_mods)
+ MetaKeyCombo *combo)
{
gboolean error = FALSE;
guint keyval, keycode;
MetaVirtualModifier mods;
gint len;
- if (accelerator_key)
- *accelerator_key = 0;
- if (accelerator_keycode)
- *accelerator_keycode = 0;
- if (accelerator_mods)
- *accelerator_mods = 0;
+ combo->keysym = 0;
+ combo->keycode = 0;
+ combo->modifiers = 0;
if (accelerator == NULL)
{
@@ -330,34 +326,35 @@ out:
if (error)
return FALSE;
- if (accelerator_key)
- *accelerator_key = keyval;
- if (accelerator_keycode)
- *accelerator_keycode = keycode;
- if (accelerator_mods)
- *accelerator_mods = mods;
+ combo->keysym = keyval;
+ combo->keycode = keycode;
+ combo->modifiers = mods;
return TRUE;
}
gboolean
-meta_parse_accelerator (const char *accel,
- unsigned int *keysym,
- unsigned int *keycode,
- MetaVirtualModifier *mask)
+meta_parse_accelerator (const char *accel,
+ MetaKeyCombo *combo)
{
if (!accel[0] || strcmp (accel, "disabled") == 0)
return TRUE;
- return accelerator_parse (accel, keysym, keycode, mask);
+ return accelerator_parse (accel, combo);
}
gboolean
meta_parse_modifier (const char *accel,
MetaVirtualModifier *mask)
{
+ MetaKeyCombo combo;
+
if (accel == NULL || !accel[0] || strcmp (accel, "disabled") == 0)
return TRUE;
- return accelerator_parse (accel, NULL, NULL, mask);
+ if (!accelerator_parse (accel, &combo))
+ return FALSE;
+
+ *mask = combo.modifiers;
+ return TRUE;
}
diff --git a/src/core/meta-accel-parse.h b/src/core/meta-accel-parse.h
index 1d58375e6..54b4d3d93 100644
--- a/src/core/meta-accel-parse.h
+++ b/src/core/meta-accel-parse.h
@@ -27,16 +27,16 @@
#include <glib.h>
#include <meta/common.h>
+typedef struct _MetaKeyCombo MetaKeyCombo;
+
/* Not a real key symbol but means "key above the tab key"; this is
* used as the default keybinding for cycle_group.
* 0x2xxxxxxx is a range not used by GDK or X. the remaining digits are
* randomly chosen */
#define META_KEY_ABOVE_TAB 0x2f7259c9
-gboolean meta_parse_accelerator (const char *accel,
- unsigned int *keysym,
- unsigned int *keycode,
- MetaVirtualModifier *mask);
+gboolean meta_parse_accelerator (const char *accel,
+ MetaKeyCombo *combo);
gboolean meta_parse_modifier (const char *accel,
MetaVirtualModifier *mask);
diff --git a/src/core/prefs.c b/src/core/prefs.c
index ff38f14bd..85432a075 100644
--- a/src/core/prefs.c
+++ b/src/core/prefs.c
@@ -1672,10 +1672,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,
- &combo.keysym,
- &combo.keycode,
- NULL))
+ if (string_value && meta_parse_accelerator (string_value, &combo))
;
else
{
@@ -1684,6 +1681,8 @@ overlay_key_handler (GVariant *value,
return FALSE;
}
+ combo.modifiers = 0;
+
if (overlay_key_combo.keysym != combo.keysym ||
overlay_key_combo.keycode != combo.keycode)
{
@@ -1916,10 +1915,6 @@ update_binding (MetaKeyPref *binding,
{
GSList *old_combos, *a, *b;
gboolean changed;
- unsigned int keysym;
- unsigned int keycode;
- MetaVirtualModifier mods;
- MetaKeyCombo *combo;
int i;
meta_topic (META_DEBUG_KEYBINDINGS,
@@ -1931,31 +1926,25 @@ update_binding (MetaKeyPref *binding,
for (i = 0; strokes && strokes[i]; i++)
{
- keysym = 0;
- keycode = 0;
- mods = 0;
+ MetaKeyCombo *combo;
+
+ combo = g_malloc0 (sizeof (MetaKeyCombo));
- if (!meta_parse_accelerator (strokes[i], &keysym, &keycode, &mods))
+ if (!meta_parse_accelerator (strokes[i], combo))
{
meta_topic (META_DEBUG_KEYBINDINGS,
"Failed to parse new GSettings value\n");
meta_warning ("\"%s\" found in configuration database is not a valid value for keybinding \"%s\"\n",
strokes[i], binding->name);
+ g_free (combo);
+
/* Value is kept and will thus be removed next time we save the key.
* Changing the key in response to a modification could lead to cyclic calls. */
continue;
}
- combo = g_malloc0 (sizeof (MetaKeyCombo));
- combo->keysym = keysym;
- combo->keycode = keycode;
- combo->modifiers = mods;
binding->combos = g_slist_prepend (binding->combos, combo);
-
- meta_topic (META_DEBUG_KEYBINDINGS,
- "New keybinding for \"%s\" is keysym = 0x%x keycode = 0x%x mods = 0x%x\n",
- binding->name, keysym, keycode, mods);
}
binding->combos = g_slist_reverse (binding->combos);