Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Montagne <montagne29@wanadoo.fr>2016-09-06 18:54:40 +0300
committerBastien Montagne <montagne29@wanadoo.fr>2016-09-06 18:54:40 +0300
commit87b3faf55708be229faf3a33b0c1db17bbe59da6 (patch)
treef5b8d1496642d13260b37f2b66eb76413a20dd7c
parent049ed1f4e7b0b50ab0f47bb698e9ad632ca5542f (diff)
GHOST X11 keyboard: Attempt to fix issues with modifier keys on some systems.
Could not reproduce it here, but since users having the issue claims it comes from rB16cb9391634dcc50e, let's try to use again ugly `XLookupKeysym()` for those modifier keys too...
-rw-r--r--intern/ghost/intern/GHOST_SystemX11.cpp33
1 files changed, 29 insertions, 4 deletions
diff --git a/intern/ghost/intern/GHOST_SystemX11.cpp b/intern/ghost/intern/GHOST_SystemX11.cpp
index 653c0ccb472..18edefa4f02 100644
--- a/intern/ghost/intern/GHOST_SystemX11.cpp
+++ b/intern/ghost/intern/GHOST_SystemX11.cpp
@@ -838,7 +838,7 @@ GHOST_SystemX11::processEvent(XEvent *xe)
case KeyRelease:
{
XKeyEvent *xke = &(xe->xkey);
- KeySym key_sym = XK_VoidSymbol;
+ KeySym key_sym;
KeySym key_sym_str;
char ascii;
#if defined(WITH_X11_XINPUT) && defined(X_HAVE_UTF8_STRING)
@@ -891,16 +891,41 @@ GHOST_SystemX11::processEvent(XEvent *xe)
if ((xke->keycode >= 10 && xke->keycode < 20) && ((xke->state & number_hack_forbidden_kmods_mask) == 0)) {
key_sym = XLookupKeysym(xke, ShiftMask);
if (!((key_sym >= XK_0) && (key_sym <= XK_9))) {
- key_sym = XK_VoidSymbol;
+ key_sym = XLookupKeysym(xke, 0);
}
}
+ else {
+ key_sym = XLookupKeysym(xke, 0);
+ }
if (!XLookupString(xke, &ascii, 1, &key_sym_str, NULL)) {
ascii = '\0';
}
- if ((gkey = convertXKey(key_sym)) == GHOST_kKeyUnknown) {
- gkey = convertXKey(key_sym_str);
+ /* Only allow a very limited set of keys from XLookupKeysym, all others we take from XLookupString... */
+ gkey = convertXKey(key_sym);
+ switch (gkey) {
+ case GHOST_kKeyRightAlt:
+ case GHOST_kKeyLeftAlt:
+ case GHOST_kKeyRightShift:
+ case GHOST_kKeyLeftShift:
+ case GHOST_kKeyRightControl:
+ case GHOST_kKeyLeftControl:
+ case GHOST_kKeyOS:
+ case GHOST_kKey0:
+ case GHOST_kKey1:
+ case GHOST_kKey2:
+ case GHOST_kKey3:
+ case GHOST_kKey4:
+ case GHOST_kKey5:
+ case GHOST_kKey6:
+ case GHOST_kKey7:
+ case GHOST_kKey8:
+ case GHOST_kKey9:
+ printf("ModKey!\n");
+ break;
+ default:
+ gkey = convertXKey(key_sym_str);
}
#else
/* In keyboards like latin ones,