summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarsten Haitzler (Rasterman) <raster@rasterman.com>2014-08-05 11:23:28 +0900
committerDaniel Kolesa <d.kolesa@samsung.com>2014-08-08 10:28:51 +0100
commitc15d8800fdfc81e95b7d14d90922bc31479588b2 (patch)
tree9227c4f808f983db65d67b1c4c851e4e3ca2534c
parente3e29db3b0813a507b2a058a35b2eb40fcac1200 (diff)
downloadefl-c15d8800fdfc81e95b7d14d90922bc31479588b2.tar.gz
ecore-x - use last modifier mask found, not first to match xserver logic
this makes altgr not conflict as per https://phab.enlightenment.org/T1273 by using the last, not first occurance of the key in the mask modifier bits
-rw-r--r--src/lib/ecore_x/xcb/ecore_xcb_keymap.c12
-rw-r--r--src/lib/ecore_x/xlib/ecore_x.c52
2 files changed, 23 insertions, 41 deletions
diff --git a/src/lib/ecore_x/xcb/ecore_xcb_keymap.c b/src/lib/ecore_x/xcb/ecore_xcb_keymap.c
index 3c3072fdab..530a3d4e37 100644
--- a/src/lib/ecore_x/xcb/ecore_xcb_keymap.c
+++ b/src/lib/ecore_x/xcb/ecore_xcb_keymap.c
@@ -361,19 +361,13 @@ _ecore_xcb_keymap_mask_get(void *reply,
for (j = 0; j < 8; j++)
{
- sym2 =
- xcb_key_symbols_get_keysym(_ecore_xcb_keysyms,
- modmap[i], j);
+ sym2 = xcb_key_symbols_get_keysym(_ecore_xcb_keysyms,
+ modmap[i], j);
if (sym2 != 0) break;
}
- if (sym2 == sym)
- {
- mask = masks[i / rep->keycodes_per_modifier];
- break;
- }
+ if (sym2 == sym) mask = masks[i / rep->keycodes_per_modifier];
}
}
-
return mask;
}
diff --git a/src/lib/ecore_x/xlib/ecore_x.c b/src/lib/ecore_x/xlib/ecore_x.c
index db1cfa43d5..2e849681e6 100644
--- a/src/lib/ecore_x/xlib/ecore_x.c
+++ b/src/lib/ecore_x/xlib/ecore_x.c
@@ -1124,46 +1124,34 @@ _ecore_x_key_mask_get(KeySym sym)
{
XModifierKeymap *mod;
KeySym sym2;
- int i, j;
+ int i, j, mask = 0;
const int masks[8] =
- {
- ShiftMask, LockMask, ControlMask,
- Mod1Mask, Mod2Mask, Mod3Mask, Mod4Mask, Mod5Mask
- };
+ {
+ ShiftMask, LockMask, ControlMask,
+ Mod1Mask, Mod2Mask, Mod3Mask, Mod4Mask, Mod5Mask
+ };
mod = XGetModifierMapping(_ecore_x_disp);
if ((mod) && (mod->max_keypermod > 0))
- for (i = 0; i < (8 * mod->max_keypermod); i++)
- {
- for (j = 0; j < 8; j++)
- {
- sym2 = _ecore_x_XKeycodeToKeysym(_ecore_x_disp,
- mod->modifiermap[i], j);
- if (sym2 != 0)
- break;
- }
- if (sym2 == sym)
- {
- int mask;
-
- mask = masks[i / mod->max_keypermod];
- if (mod->modifiermap)
- XFree(mod->modifiermap);
-
- XFree(mod);
- return mask;
- }
- }
-
+ {
+ for (i = 0; i < (8 * mod->max_keypermod); i++)
+ {
+ for (j = 0; j < 8; j++)
+ {
+ sym2 = _ecore_x_XKeycodeToKeysym(_ecore_x_disp,
+ mod->modifiermap[i], j);
+ if (sym2 != 0)
+ break;
+ }
+ if (sym2 == sym) mask = masks[i / mod->max_keypermod];
+ }
+ }
if (mod)
{
- if (mod->modifiermap)
- XFree(mod->modifiermap);
-
+ if (mod->modifiermap) XFree(mod->modifiermap);
XFree(mod);
}
-
- return 0;
+ return mask;
}
/*****************************************************************************/