Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/src/sugar/sugar-key-grabber.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/sugar/sugar-key-grabber.c')
-rw-r--r--src/sugar/sugar-key-grabber.c39
1 files changed, 23 insertions, 16 deletions
diff --git a/src/sugar/sugar-key-grabber.c b/src/sugar/sugar-key-grabber.c
index 8e18c86..89b743f 100644
--- a/src/sugar/sugar-key-grabber.c
+++ b/src/sugar/sugar-key-grabber.c
@@ -155,21 +155,15 @@ sugar_key_grabber_init(SugarKeyGrabber *grabber)
* gnome-control-center/gnome-settings-daemon/gnome-settings-multimedia-keys.c
*/
-static gboolean
+static void
grab_key_real (Key *key, GdkWindow *root, gboolean grab, int result)
{
- gdk_error_trap_push ();
if (grab)
XGrabKey (GDK_DISPLAY(), key->keycode, (result | key->state),
GDK_WINDOW_XID (root), True, GrabModeAsync, GrabModeAsync);
else
XUngrabKey(GDK_DISPLAY(), key->keycode, (result | key->state),
GDK_WINDOW_XID (root));
- gdk_flush ();
-
- gdk_error_trap_pop ();
-
- return TRUE;
}
#define N_BITS 32
@@ -198,24 +192,37 @@ grab_key (SugarKeyGrabber *grabber, Key *key, gboolean grab)
result |= (1<<indexes[j]);
}
- if (grab_key_real (key, grabber->root, grab, result) == FALSE)
- return;
+ grab_key_real (key, grabber->root, grab, result);
}
}
+
void
-sugar_key_grabber_grab(SugarKeyGrabber *grabber, const char *key)
+sugar_key_grabber_grab_keys(SugarKeyGrabber *grabber, const char **keys)
{
+ char **cur = keys;
+ char *key;
Key *keyinfo;
- keyinfo = g_new0 (Key, 1);
- keyinfo->key = g_strdup(key);
- egg_accelerator_parse_virtual (key, &keyinfo->keysym,
- &keyinfo->keycode, &keyinfo->state);
+ gdk_error_trap_push();
+
+ while (*cur != NULL) {
+ key = *cur;
+ cur += 1;
+
+ keyinfo = g_new0 (Key, 1);
+ keyinfo->key = g_strdup(key);
+
+ egg_accelerator_parse_virtual (key, &keyinfo->keysym,
+ &keyinfo->keycode, &keyinfo->state);
+
+ grab_key(grabber, keyinfo, TRUE);
- grab_key(grabber, keyinfo, TRUE);
+ grabber->keys = g_list_append(grabber->keys, keyinfo);
+ }
- grabber->keys = g_list_append(grabber->keys, keyinfo);
+ gdk_flush();
+ gdk_error_trap_push();
}
gboolean