[Xfce4-commits] r25670 - in xfce-mcs-plugins/branches/xfce_4_4: . plugins/keyboard_plugin
Olivier Fourdan
olivier at xfce.org
Wed May 2 22:59:53 CEST 2007
Author: olivier
Date: 2007-05-02 20:59:53 +0000 (Wed, 02 May 2007)
New Revision: 25670
Modified:
xfce-mcs-plugins/branches/xfce_4_4/NEWS
xfce-mcs-plugins/branches/xfce_4_4/plugins/keyboard_plugin/keys_management.c
Log:
Fix modifier mask not working with all keymaps (Bug #3194)
Modified: xfce-mcs-plugins/branches/xfce_4_4/NEWS
===================================================================
--- xfce-mcs-plugins/branches/xfce_4_4/NEWS 2007-05-02 20:57:46 UTC (rev 25669)
+++ xfce-mcs-plugins/branches/xfce_4_4/NEWS 2007-05-02 20:59:53 UTC (rev 25670)
@@ -1,5 +1,6 @@
4.4.2
=====
+- Fix modifier mask not working with all keymaps (Bug #3194)
- Add support for xinput devices when setting left/right handed mouse.
4.4.1
Modified: xfce-mcs-plugins/branches/xfce_4_4/plugins/keyboard_plugin/keys_management.c
===================================================================
--- xfce-mcs-plugins/branches/xfce_4_4/plugins/keyboard_plugin/keys_management.c 2007-05-02 20:57:46 UTC (rev 25669)
+++ xfce-mcs-plugins/branches/xfce_4_4/plugins/keyboard_plugin/keys_management.c 2007-05-02 20:59:53 UTC (rev 25670)
@@ -224,7 +224,7 @@
}
void
-init_modifiers (void)
+initModifiers (void)
{
GdkDisplay *gdisplay;
GdkScreen *gscr;
@@ -232,10 +232,11 @@
XModifierKeymap *modmap;
KeySym *keymap;
- int i;
- int keysyms_per_keycode;
+ unsigned int keycode;
int min_keycode;
int max_keycode;
+ int keysyms_per_keycode;
+ int i;
gdisplay = gdk_display_get_default ();
gscr = gdk_display_get_default_screen (gdisplay);
@@ -255,47 +256,61 @@
modmap = XGetModifierMapping (GDK_DISPLAY_XDISPLAY (gdisplay));
keymap = XGetKeyboardMapping (GDK_DISPLAY_XDISPLAY (gdisplay), min_keycode, max_keycode - min_keycode + 1, &keysyms_per_keycode);
- for (i = 3 * modmap->max_keypermod; i < 8 * modmap->max_keypermod; i++)
- {
- unsigned int keycode = modmap->modifiermap[i];
-
- if ((keycode >= min_keycode) && (keycode <= max_keycode))
+ if (modmap && keymap)
+ {
+ for (i = 3 * modmap->max_keypermod; i < 8 * modmap->max_keypermod; i++)
{
- int j;
- KeySym *syms = keymap + (keycode - min_keycode) * keysyms_per_keycode;
+ keycode = modmap->modifiermap[i];
+ if ((keycode >= min_keycode) && (keycode <= max_keycode))
+ {
+ int j;
+ KeySym *syms = keymap + (keycode - min_keycode) * keysyms_per_keycode;
- for (j = 0; j < keysyms_per_keycode; j++)
- {
- if (syms[j] == XK_Num_Lock)
+ for (j = 0; j < keysyms_per_keycode; j++)
{
- NumLockMask |= (1 << (i / modmap->max_keypermod));
+ if (!NumLockMask && (syms[j] == XK_Num_Lock))
+ {
+ NumLockMask = (1 << (i / modmap->max_keypermod));
+ }
+ else if (!ScrollLockMask && (syms[j] == XK_Scroll_Lock))
+ {
+ ScrollLockMask = (1 << (i / modmap->max_keypermod));
+ }
+ else if (!AltMask && ((syms[j] == XK_Alt_L) || (syms[j] == XK_Alt_R)))
+ {
+ AltMask = (1 << (i / modmap->max_keypermod));
+ }
+ else if (!SuperMask && ((syms[j] == XK_Super_L) || (syms[j] == XK_Super_R)))
+ {
+ SuperMask = (1 << (i / modmap->max_keypermod));
+ }
+ else if (!HyperMask && ((syms[j] == XK_Hyper_L) || (syms[j] == XK_Hyper_R)))
+ {
+ HyperMask = (1 << (i / modmap->max_keypermod));
+ }
+ else if (!MetaMask && ((syms[j] == XK_Meta_L) || (syms[j] == XK_Meta_R)))
+ {
+ MetaMask = (1 << (i / modmap->max_keypermod));
+ }
}
- else if (syms[j] == XK_Scroll_Lock)
- {
- ScrollLockMask |= (1 << (i / modmap->max_keypermod));
- }
- else if ((syms[j] == XK_Super_L) || (syms[j] == XK_Super_R))
- {
- SuperMask |= (1 << (i / modmap->max_keypermod));
- }
- else if ((syms[j] == XK_Hyper_L) || (syms[j] == XK_Hyper_R))
- {
- HyperMask |= (1 << (i / modmap->max_keypermod));
- }
- else if ((syms[j] == XK_Meta_L) || (syms[j] == XK_Meta_R))
- {
- MetaMask |= (1 << (i / modmap->max_keypermod));
- }
- else if ((syms[j] == XK_Alt_L) || (syms[j] == XK_Alt_R))
- {
- AltMask |= (1 << (i / modmap->max_keypermod));
- }
}
}
}
- KeyMask = ControlMask | ShiftMask | AltMask | MetaMask | SuperMask | HyperMask;
- ButtonMask = Button1Mask | Button2Mask | Button3Mask | Button4Mask | Button5Mask;
+ /* Cleanup memory */
+ if (modmap)
+ {
+ XFreeModifiermap (modmap);
+ }
- ButtonKeyMask = KeyMask | ButtonMask;
+ if (keymap)
+ {
+ XFree (keymap);
+ }
+
+ /* In case we didn't find AltMask, use Mod1Mask */
+ if (AltMask == 0)
+ {
+ AltMask = Mod1Mask;
+ }
}
More information about the Xfce4-commits
mailing list