summaryrefslogtreecommitdiffstats
path: root/client/x11
diff options
context:
space:
mode:
authorChristophe Fergeau <cfergeau@redhat.com>2011-08-16 11:26:54 +0200
committerChristophe Fergeau <cfergeau@redhat.com>2011-08-17 10:42:19 +0200
commit3d31e36bf2db0c42b21e8e27b5b6f3aea9ea4181 (patch)
tree475459984bc67102d13ca97e1a2337c1b8550453 /client/x11
parentf2b4c3d21aed0018dc7014542f76b64e6aa57ce6 (diff)
downloadspice-3d31e36bf2db0c42b21e8e27b5b6f3aea9ea4181.tar.gz
spice-3d31e36bf2db0c42b21e8e27b5b6f3aea9ea4181.tar.xz
spice-3d31e36bf2db0c42b21e8e27b5b6f3aea9ea4181.zip
use Xkb to get keyboard modifier mask
To be able to enable/disable keyboard leds on X11, we need to query the X server for which mask correspond to which led (NumLock, CapsLock). So far this was done using XKeysymToKeycode and iterating over X modifier mapping. Xkb provides XkbKeysymToModifiers for this purpose, and since we're using Xkb anyway, it makes more sense to use it. At some point, on my Fedora 15 box, XKeysymToKeycode was returning NoSymbol for CapsLock and NumLock leading to spicec not being able to change the keyboard leds when qemu tells it to. However, I couldn't reproduce this when I tried again :-/
Diffstat (limited to 'client/x11')
-rw-r--r--client/x11/platform.cpp25
1 files changed, 2 insertions, 23 deletions
diff --git a/client/x11/platform.cpp b/client/x11/platform.cpp
index 09ca61d0..f3fb4441 100644
--- a/client/x11/platform.cpp
+++ b/client/x11/platform.cpp
@@ -2953,27 +2953,6 @@ static void init_xfixes()
XFixesQueryVersion(x_display, &major, &minor) && major >= 1;
}
-static unsigned int get_modifier_mask(KeySym modifier)
-{
- int mask = 0;
- int i;
-
- XModifierKeymap* map = XGetModifierMapping(x_display);
- KeyCode keycode = XKeysymToKeycode(x_display, modifier);
- if (keycode == NoSymbol) {
- XFreeModifiermap(map);
- return 0;
- }
-
- for (i = 0; i < 8; i++) {
- if (map->modifiermap[map->max_keypermod * i] == keycode) {
- mask = 1 << i;
- }
- }
- XFreeModifiermap(map);
- return mask;
-}
-
static void init_kbd()
{
int xkb_major = XkbMajorVersion;
@@ -2986,8 +2965,8 @@ static void init_kbd()
!XkbQueryExtension(x_display, &opcode, &event, &error, &xkb_major, &xkb_minor)) {
return;
}
- caps_lock_mask = get_modifier_mask(XK_Caps_Lock);
- num_lock_mask = get_modifier_mask(XK_Num_Lock);
+ caps_lock_mask = XkbKeysymToModifiers(x_display, XK_Caps_Lock);
+ num_lock_mask = XkbKeysymToModifiers(x_display, XK_Num_Lock);
}
static void init_XIM()