[Xfce4-commits] r25655 - xfwm4/trunk/src
Olivier Fourdan
olivier at xfce.org
Tue May 1 16:32:52 CEST 2007
Author: olivier
Date: 2007-05-01 14:32:51 +0000 (Tue, 01 May 2007)
New Revision: 25655
Modified:
xfwm4/trunk/src/events.c
xfwm4/trunk/src/keyboard.c
xfwm4/trunk/src/keyboard.h
Log:
Revert to modifier mapping from xfwm4 version 4.0 (Bug #3194)
Modified: xfwm4/trunk/src/events.c
===================================================================
--- xfwm4/trunk/src/events.c 2007-04-28 18:59:18 UTC (rev 25654)
+++ xfwm4/trunk/src/events.c 2007-05-01 14:32:51 UTC (rev 25655)
@@ -354,7 +354,7 @@
{
screen_info = c->screen_info;
key = getKeyPressed (screen_info, ev);
- status = EVENT_FILTER_REMOVE;
+ status = EVENT_FILTER_REMOVE;
switch (key)
{
Modified: xfwm4/trunk/src/keyboard.c
===================================================================
--- xfwm4/trunk/src/keyboard.c 2007-04-28 18:59:18 UTC (rev 25654)
+++ xfwm4/trunk/src/keyboard.c 2007-05-01 14:32:51 UTC (rev 25655)
@@ -153,47 +153,61 @@
}
}
-void
+gboolean
grabKey (Display * dpy, MyKey * key, Window w)
{
+ gboolean status;
+
TRACE ("entering grabKey");
+ status=GrabSuccess;
if (key->keycode)
{
if (key->modifier == 0)
{
- XGrabKey (dpy, key->keycode, AnyModifier, w, FALSE,
- GrabModeAsync, GrabModeSync);
+ status |=
+ XGrabKey (dpy, key->keycode, AnyModifier, w, FALSE,
+ GrabModeAsync, GrabModeSync);
}
else
{
/* Here we grab all combinations of well known modifiers */
- XGrabKey (dpy, key->keycode,
- key->modifier, w, FALSE,
- GrabModeAsync, GrabModeSync);
- XGrabKey (dpy, key->keycode,
- key->modifier | ScrollLockMask, w,
- FALSE, GrabModeAsync, GrabModeSync);
- XGrabKey (dpy, key->keycode,
- key->modifier | NumLockMask, w,
- FALSE, GrabModeAsync, GrabModeSync);
- XGrabKey (dpy, key->keycode,
- key->modifier | LockMask, w,
- FALSE, GrabModeAsync, GrabModeSync);
- XGrabKey (dpy, key->keycode,
- key->modifier | ScrollLockMask | NumLockMask, w, FALSE,
- GrabModeAsync, GrabModeSync);
- XGrabKey (dpy, key->keycode,
- key->modifier | ScrollLockMask | LockMask, w, FALSE,
- GrabModeAsync, GrabModeSync);
- XGrabKey (dpy, key->keycode,
- key->modifier | LockMask | NumLockMask, w, FALSE,
- GrabModeAsync, GrabModeSync);
- XGrabKey (dpy, key->keycode,
- key->modifier | ScrollLockMask | LockMask | NumLockMask,
- w, FALSE, GrabModeAsync, GrabModeSync);
+ status |=
+ XGrabKey (dpy, key->keycode,
+ key->modifier, w, FALSE,
+ GrabModeAsync, GrabModeSync);
+ status |=
+ XGrabKey (dpy, key->keycode,
+ key->modifier | ScrollLockMask, w,
+ FALSE, GrabModeAsync, GrabModeSync);
+ status |=
+ XGrabKey (dpy, key->keycode,
+ key->modifier | NumLockMask, w,
+ FALSE, GrabModeAsync, GrabModeSync);
+ status |=
+ XGrabKey (dpy, key->keycode,
+ key->modifier | LockMask, w,
+ FALSE, GrabModeAsync, GrabModeSync);
+ status |=
+ XGrabKey (dpy, key->keycode,
+ key->modifier | ScrollLockMask | NumLockMask, w, FALSE,
+ GrabModeAsync, GrabModeSync);
+ status |=
+ XGrabKey (dpy, key->keycode,
+ key->modifier | ScrollLockMask | LockMask, w, FALSE,
+ GrabModeAsync, GrabModeSync);
+ status |=
+ XGrabKey (dpy, key->keycode,
+ key->modifier | LockMask | NumLockMask, w, FALSE,
+ GrabModeAsync, GrabModeSync);
+ status |=
+ XGrabKey (dpy, key->keycode,
+ key->modifier | ScrollLockMask | LockMask | NumLockMask,
+ w, FALSE, GrabModeAsync, GrabModeSync);
}
}
+
+ return (status == GrabSuccess);
}
void
@@ -204,53 +218,67 @@
XUngrabKey (dpy, AnyKey, AnyModifier, w);
}
-void
+gboolean
grabButton (Display * dpy, int button, int modifier, Window w)
{
+ gboolean status;
+
TRACE ("entering grabButton");
+ status=GrabSuccess;
if (modifier == AnyModifier)
{
- XGrabButton (dpy, button, AnyModifier, w, FALSE,
- ButtonPressMask|ButtonReleaseMask, GrabModeSync, GrabModeAsync,
- None, None);
+ status |=
+ XGrabButton (dpy, button, AnyModifier, w, FALSE,
+ ButtonPressMask|ButtonReleaseMask, GrabModeSync, GrabModeAsync,
+ None, None);
}
else
{
/* Here we grab all combinations of well known modifiers */
- XGrabButton (dpy, button, modifier,
- w, FALSE,
- ButtonPressMask|ButtonReleaseMask, GrabModeSync, GrabModeAsync,
- None, None);
- XGrabButton (dpy, button, modifier | ScrollLockMask,
- w, FALSE,
- ButtonPressMask|ButtonReleaseMask, GrabModeSync, GrabModeAsync,
- None, None);
- XGrabButton (dpy, button, modifier | NumLockMask,
- w, FALSE,
- ButtonPressMask|ButtonReleaseMask, GrabModeSync, GrabModeAsync,
- None, None);
- XGrabButton (dpy, button, modifier | LockMask, w, FALSE,
- ButtonPressMask|ButtonReleaseMask, GrabModeSync, GrabModeAsync,
- None, None);
- XGrabButton (dpy, button, modifier | ScrollLockMask | NumLockMask,
- w, FALSE,
- ButtonPressMask|ButtonReleaseMask, GrabModeSync, GrabModeAsync,
- None, None);
- XGrabButton (dpy, button, modifier | ScrollLockMask | LockMask,
- w, FALSE,
- ButtonPressMask|ButtonReleaseMask, GrabModeSync, GrabModeAsync,
- None, None);
- XGrabButton (dpy, button, modifier | LockMask | NumLockMask,
- w, FALSE,
- ButtonPressMask|ButtonReleaseMask, GrabModeSync, GrabModeAsync,
- None, None);
- XGrabButton (dpy, button,
- modifier | ScrollLockMask | LockMask | NumLockMask,
- w, FALSE,
- ButtonPressMask|ButtonReleaseMask, GrabModeSync, GrabModeAsync,
- None, None);
+ status |=
+ XGrabButton (dpy, button, modifier,
+ w, FALSE,
+ ButtonPressMask|ButtonReleaseMask, GrabModeSync, GrabModeAsync,
+ None, None);
+ status |=
+ XGrabButton (dpy, button, modifier | ScrollLockMask,
+ w, FALSE,
+ ButtonPressMask|ButtonReleaseMask, GrabModeSync, GrabModeAsync,
+ None, None);
+ status |=
+ XGrabButton (dpy, button, modifier | NumLockMask,
+ w, FALSE,
+ ButtonPressMask|ButtonReleaseMask, GrabModeSync, GrabModeAsync,
+ None, None);
+ status |=
+ XGrabButton (dpy, button, modifier | LockMask, w, FALSE,
+ ButtonPressMask|ButtonReleaseMask, GrabModeSync, GrabModeAsync,
+ None, None);
+ status |=
+ XGrabButton (dpy, button, modifier | ScrollLockMask | NumLockMask,
+ w, FALSE,
+ ButtonPressMask|ButtonReleaseMask, GrabModeSync, GrabModeAsync,
+ None, None);
+ status |=
+ XGrabButton (dpy, button, modifier | ScrollLockMask | LockMask,
+ w, FALSE,
+ ButtonPressMask|ButtonReleaseMask, GrabModeSync, GrabModeAsync,
+ None, None);
+ status |=
+ XGrabButton (dpy, button, modifier | LockMask | NumLockMask,
+ w, FALSE,
+ ButtonPressMask|ButtonReleaseMask, GrabModeSync, GrabModeAsync,
+ None, None);
+ status |=
+ XGrabButton (dpy, button,
+ modifier | ScrollLockMask | LockMask | NumLockMask,
+ w, FALSE,
+ ButtonPressMask|ButtonReleaseMask, GrabModeSync, GrabModeAsync,
+ None, None);
}
+
+ return (status == GrabSuccess);
}
void
@@ -281,63 +309,111 @@
void
initModifiers (Display * dpy)
{
- XModifierKeymap *modmap;
- KeySym *keymap;
- unsigned int keycode;
- int keysyms_per_keycode;
- int min_keycode;
- int max_keycode;
- int i;
+ XModifierKeymap *xmk = XGetModifierMapping (dpy);
+ int m, k;
- AltMask = 0;
- MetaMask = 0;
- NumLockMask = 0;
- ScrollLockMask = 0;
- SuperMask = 0;
- HyperMask = 0;
- keysyms_per_keycode = 0;
- min_keycode = 0;
- max_keycode = 0;
+ AltMask = MetaMask = NumLockMask = ScrollLockMask =
+ SuperMask = HyperMask = 0;
+ if (xmk)
+ {
+ KeyCode *c = xmk->modifiermap;
+ KeyCode numLockKeyCode;
+ KeyCode scrollLockKeyCode;
+ KeyCode capsLockKeyCode;
+ KeyCode altKeyCode;
+ KeyCode metaKeyCode;
+ KeyCode superKeyCode;
+ KeyCode hyperKeyCode;
- XDisplayKeycodes (dpy, &min_keycode, &max_keycode);
- modmap = XGetModifierMapping (dpy);
- keymap = XGetKeyboardMapping (dpy, min_keycode, max_keycode - min_keycode + 1, &keysyms_per_keycode);
+ numLockKeyCode = XKeysymToKeycode (dpy, XK_Num_Lock);
+ scrollLockKeyCode = XKeysymToKeycode (dpy, XK_Scroll_Lock);
+ capsLockKeyCode = XKeysymToKeycode (dpy, XK_Caps_Lock);
+ altKeyCode = XKeysymToKeycode (dpy, XK_Alt_L);
+ metaKeyCode = XKeysymToKeycode (dpy, XK_Meta_L);
+ superKeyCode = XKeysymToKeycode (dpy, XK_Super_L);
+ hyperKeyCode = XKeysymToKeycode (dpy, XK_Hyper_L);
- for (i = 3 * modmap->max_keypermod; i < 8 * modmap->max_keypermod; i++)
- {
- keycode = modmap->modifiermap[i];
- if ((keycode >= min_keycode) && (keycode <= max_keycode))
+ if (!altKeyCode)
{
- int j;
- KeySym *syms = keymap + (keycode - min_keycode) * keysyms_per_keycode;
+ altKeyCode = XKeysymToKeycode (dpy, XK_Alt_R);
+ }
+ if (!metaKeyCode)
+ {
+ metaKeyCode = XKeysymToKeycode (dpy, XK_Meta_R);
+ }
+ if (!superKeyCode)
+ {
+ superKeyCode = XKeysymToKeycode (dpy, XK_Super_R);
+ }
+ if (!hyperKeyCode)
+ {
+ hyperKeyCode = XKeysymToKeycode (dpy, XK_Hyper_R);
+ }
- for (j = 0; j < keysyms_per_keycode; j++)
+
+ for (m = 0; m < 8; m++)
+ {
+ for (k = 0; k < xmk->max_keypermod; k++, c++)
{
- if (syms[j] == XK_Num_Lock)
+ if (*c == NoSymbol)
{
- NumLockMask |= (1 << ( i / modmap->max_keypermod));
+ continue;
}
- else if (syms[j] == XK_Scroll_Lock)
+ if (*c == numLockKeyCode)
{
- ScrollLockMask |= (1 << ( i / modmap->max_keypermod));
+ NumLockMask = (1 << m);
}
- else if ((syms[j] == XK_Super_L) || (syms[j] == XK_Super_R))
+ if (*c == scrollLockKeyCode)
{
- SuperMask |= (1 << ( i / modmap->max_keypermod));
+ ScrollLockMask = (1 << m);
}
- else if ((syms[j] == XK_Hyper_L) || (syms[j] == XK_Hyper_R))
+ if (*c == altKeyCode)
{
- HyperMask |= (1 << ( i / modmap->max_keypermod));
- }
- else if ((syms[j] == XK_Meta_L) || (syms[j] == XK_Meta_R))
+ AltMask = (1 << m);
+ }
+ if (*c == metaKeyCode)
{
- MetaMask |= (1 << ( i / modmap->max_keypermod));
+ MetaMask = (1 << m);
}
- else if ((syms[j] == XK_Alt_L) || (syms[j] == XK_Alt_R))
+ if (*c == superKeyCode)
{
- AltMask |= (1 << ( i / modmap->max_keypermod));
+ SuperMask = (1 << m);
}
+ if (*c == hyperKeyCode)
+ {
+ HyperMask = (1 << m);
+ }
}
}
+ XFreeModifiermap (xmk);
}
+
+ if (MetaMask == AltMask)
+ {
+ MetaMask = 0;
+ }
+
+ if ((AltMask != 0) && (MetaMask == Mod1Mask))
+ {
+ MetaMask = AltMask;
+ AltMask = Mod1Mask;
+ }
+
+ if ((AltMask == 0) && (MetaMask != 0))
+ {
+ if (MetaMask != Mod1Mask)
+ {
+ AltMask = Mod1Mask;
+ }
+ else
+ {
+ AltMask = MetaMask;
+ MetaMask = 0;
+ }
+ }
+
+ if (AltMask == 0)
+ {
+ AltMask = Mod1Mask;
+ }
}
Modified: xfwm4/trunk/src/keyboard.h
===================================================================
--- xfwm4/trunk/src/keyboard.h 2007-04-28 18:59:18 UTC (rev 25654)
+++ xfwm4/trunk/src/keyboard.h 2007-05-01 14:32:51 UTC (rev 25655)
@@ -46,12 +46,12 @@
void parseKeyString (Display *,
MyKey *,
char *);
-void grabKey (Display *,
+gboolean grabKey (Display *,
MyKey *,
Window);
void ungrabKeys (Display *,
Window);
-void grabButton (Display *,
+gboolean grabButton (Display *,
int,
int,
Window);
More information about the Xfce4-commits
mailing list