Index: /Users/rti/Development/ryzom/code =================================================================== diff with working copy (641d2dbed6e9) --- a/code/nel/include/nel/misc/events.h Wed May 19 17:50:49 2010 +0200 +++ b/code/nel/include/nel/misc/events.h Sat May 22 17:04:12 2010 +0200 @@ -80,6 +80,7 @@ enum TKey { + KeyNOKEY = 0, Key0 ='0', Key1 ='1', Key2 ='2', Index: /Users/rti/Development/ryzom/code =================================================================== diff with working copy (641d2dbed6e9) --- a/code/nel/src/3d/driver/opengl/unix_event_emitter.cpp Wed May 19 17:50:49 2010 +0200 +++ b/code/nel/src/3d/driver/opengl/unix_event_emitter.cpp Sat May 22 17:04:12 2010 +0200 @@ -52,20 +52,37 @@ } } +#ifndef AltMask +# ifdef NL_OS_MAC +# define AltMask (8192) +# else +# define AltMask (Mod1Mask|Mod2Mask|Mod3Mask|Mod4Mask|Mod5Mask) +# endif +#endif + TMouseButton getMouseButton (uint32 state) { - TMouseButton button=noButton; - if (state&ControlMask) (int&)button|=ctrlButton; - if (state&Button1Mask) (int&)button|=leftButton; - if (state&Button3Mask) (int&)button|=rightButton; - if (state&Button2Mask) (int&)button|=middleButton; - if (state&ShiftMask) (int&)button|=shiftButton; - // TODO manage ALT key - // if (GetAsyncKeyState(VK_MENU)&(1<<15)) - // (int&)button|=altButton; - return button; + uint32 button=noButton; + if (state&Button1Mask) button|=leftButton; + if (state&Button2Mask) button|=middleButton; + if (state&Button3Mask) button|=rightButton; + if (state&ControlMask) button|=ctrlButton; + if (state&ShiftMask) button|=shiftButton; + if (state&AltMask) button|=altButton; + // TODO: handle meta / windows / apple key if possible + return (TMouseButton)button; } +TKeyButton getKeyButton (uint32 state) +{ + uint32 button=noKeyButton; + if (state&ControlMask) button|=ctrlKeyButton; + if (state&ShiftMask) button|=shiftKeyButton; + if (state&AltMask) button|=altKeyButton; + // TODO: handle meta / windows / apple key if possible + return (TKeyButton)button; +} + TKey getKey (KeySym keysym) { switch (keysym) @@ -125,8 +142,10 @@ /// case XK_Caps_Lock: return Key; /// case XK_Meta_L: return Key; /// case XK_Meta_R: return Key; -/// case XK_Alt_L: return Key; -/// case XK_Alt_R: return Key; + case XK_Mode_switch: return KeyMENU; + case XK_ISO_Level3_Shift: return KeyMENU; + case XK_Alt_L: return KeyMENU; + case XK_Alt_R: return KeyMENU; case XK_space: return KeySPACE; // case XK_comma: return Key; // case XK_minus: return Key; @@ -199,9 +218,10 @@ case XK_y: return KeyY; case XK_Z: case XK_z: return KeyZ; - default: nldebug ("0x%x %d '%c'", keysym, keysym, keysym); + default: //nldebug ("0x%x %d '%c'", keysym, keysym, keysym); + break; } - return KeyNUMLOCK; + return KeyNOKEY; } @@ -282,9 +302,11 @@ int c; c = XLookupString(&event.xkey, Text, 1024-1, &k, NULL); - TKey key = getKey (k); + TKey key = getKey(XKeycodeToKeysym(_dpy, ((XKeyEvent*)&event)->keycode, 0)); + if(key == KeyNOKEY) + key = getKey(XKeycodeToKeysym(_dpy, ((XKeyEvent*)&event)->keycode, 1)); // TODO manage the bool (first time pressed) - server.postEvent (new CEventKeyDown (key, noKeyButton, true, this)); + server.postEvent (new CEventKeyDown (key, getKeyButton(event.xbutton.state), true, this)); Text[c] = '\0'; if(c>0) @@ -303,9 +325,11 @@ int c; c = XLookupString(&event.xkey, Text, 1024-1, &k, NULL); - TKey key = getKey (k); + TKey key = getKey(XKeycodeToKeysym(_dpy, ((XKeyEvent*)&event)->keycode, 0)); + if(key == KeyNOKEY) + key = getKey(XKeycodeToKeysym(_dpy, ((XKeyEvent*)&event)->keycode, 1)); // TODO manage the bool (first time pressed) - server.postEvent (new CEventKeyUp (key, noKeyButton, this)); + server.postEvent (new CEventKeyUp (key, getKeyButton(event.xbutton.state), this)); break; } Case(FocusIn)