nel_x11_key_handling.patch

rti, 05/22/2010 05:57 pm

Download (3.9 kB)

b/code/nel/include/nel/misc/events.h Sat May 22 17:04:12 2010 +0200
80 80

81 81
enum TKey
82 82
{
83
	KeyNOKEY    = 0,
83 84
	Key0				='0',
84 85
	Key1				='1',
85 86
	Key2				='2',
b/code/nel/src/3d/driver/opengl/unix_event_emitter.cpp Sat May 22 17:04:12 2010 +0200
52 52
	}
53 53
}
54 54

55
#ifndef AltMask
56
# ifdef NL_OS_MAC
57
#  define AltMask (8192)
58
# else
59
#  define AltMask (Mod1Mask|Mod2Mask|Mod3Mask|Mod4Mask|Mod5Mask)
60
# endif
61
#endif
62

55 63
TMouseButton getMouseButton (uint32 state)
56 64
{
57
	TMouseButton button=noButton;
58
	if (state&ControlMask) (int&)button|=ctrlButton;
59
	if (state&Button1Mask) (int&)button|=leftButton;
60
	if (state&Button3Mask) (int&)button|=rightButton;
61
	if (state&Button2Mask) (int&)button|=middleButton;
62
	if (state&ShiftMask)   (int&)button|=shiftButton;
63
	// TODO manage ALT key
64
	//	if (GetAsyncKeyState(VK_MENU)&(1<<15))
65
	//	(int&)button|=altButton;
66
	return button;
65
	uint32 button=noButton;
66
	if (state&Button1Mask) button|=leftButton;
67
	if (state&Button2Mask) button|=middleButton;
68
	if (state&Button3Mask) button|=rightButton;
69
	if (state&ControlMask) button|=ctrlButton;
70
	if (state&ShiftMask)   button|=shiftButton;
71
	if (state&AltMask)     button|=altButton;
72
	// TODO: handle meta / windows / apple key if possible
73
	return (TMouseButton)button;
67 74
}
68 75

76
TKeyButton getKeyButton (uint32 state)
77
{
78
	uint32 button=noKeyButton;
79
	if (state&ControlMask) button|=ctrlKeyButton;
80
	if (state&ShiftMask)   button|=shiftKeyButton;
81
	if (state&AltMask)     button|=altKeyButton;
82
	// TODO: handle meta / windows / apple key if possible
83
	return (TKeyButton)button;
84
}	
85

69 86
TKey getKey (KeySym keysym)
70 87
{
71 88
	switch (keysym)
......
125 142
///	case XK_Caps_Lock: return Key;
126 143
///	case XK_Meta_L: return Key;
127 144
///	case XK_Meta_R: return Key;
128
///	case XK_Alt_L: return Key;
129
///	case XK_Alt_R: return Key;
145
	case XK_Mode_switch: return KeyMENU;
146
	case XK_ISO_Level3_Shift: return KeyMENU;
147
	case XK_Alt_L: return KeyMENU;
148
	case XK_Alt_R: return KeyMENU;
130 149
	case XK_space: return KeySPACE;
131 150
//	case XK_comma: return Key;
132 151
//	case XK_minus: return Key;
......
199 218
	case XK_y: return KeyY;
200 219
	case XK_Z:
201 220
	case XK_z: return KeyZ;
202
	default: nldebug ("0x%x %d '%c'", keysym, keysym, keysym);
221
	default: //nldebug ("0x%x %d '%c'", keysym, keysym, keysym);
222
	break;
203 223
	}
204
	return KeyNUMLOCK;
224
	return KeyNOKEY;
205 225
}
206 226

207 227

......
282 302
		int c;
283 303
		c = XLookupString(&event.xkey, Text, 1024-1, &k, NULL);
284 304

285
		TKey key = getKey (k);
305
		TKey key = getKey(XKeycodeToKeysym(_dpy, ((XKeyEvent*)&event)->keycode, 0));
306
		if(key == KeyNOKEY)
307
			key = getKey(XKeycodeToKeysym(_dpy, ((XKeyEvent*)&event)->keycode, 1));
286 308
		// TODO manage the bool (first time pressed)
287
		server.postEvent (new CEventKeyDown (key, noKeyButton, true, this));
309
		server.postEvent (new CEventKeyDown (key, getKeyButton(event.xbutton.state), true, this));
288 310

289 311
		Text[c] = '\0';
290 312
		if(c>0)
......
303 325
		int c;
304 326
		c = XLookupString(&event.xkey, Text, 1024-1, &k, NULL);
305 327

306
		TKey key = getKey (k);
328
		TKey key = getKey(XKeycodeToKeysym(_dpy, ((XKeyEvent*)&event)->keycode, 0));
329
		if(key == KeyNOKEY)
330
			key = getKey(XKeycodeToKeysym(_dpy, ((XKeyEvent*)&event)->keycode, 1));
307 331
		// TODO manage the bool (first time pressed)
308
		server.postEvent (new CEventKeyUp (key, noKeyButton, this));
332
		server.postEvent (new CEventKeyUp (key, getKeyButton(event.xbutton.state), this));
309 333
		break;
310 334
	}
311 335
	Case(FocusIn)