[Scummvm-cvs-logs] CVS: scummvm/backends/x11 x11.cpp,1.5,1.6

Lionel Ulmer bbrox at users.sourceforge.net
Sat Nov 2 09:52:10 CET 2002


Update of /cvsroot/scummvm/scummvm/backends/x11
In directory usw-pr-cvs1:/tmp/cvs-serv23163/backends/x11

Modified Files:
	x11.cpp 
Log Message:
Fix key repeat in the GUI.



Index: x11.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/backends/x11/x11.cpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- x11.cpp	2 Nov 2002 15:13:08 -0000	1.5
+++ x11.cpp	2 Nov 2002 17:44:06 -0000	1.6
@@ -842,19 +842,7 @@
 			}
 			break;
 
-		case KeyPress:
-			switch (event.xkey.keycode) {
-			case 132:
-				report_presses = 0;
-				break;
-
-			case 133:
-				fake_right_mouse = 1;
-				break;
-			}
-			break;
-
-		case KeyRelease:{
+		case KeyPress:{
 				/* I am using keycodes here and NOT keysyms to be sure that even if the user
 				   remaps his iPAQ's keyboard, it will still work.
 				 */
@@ -869,6 +857,7 @@
 				if (event.xkey.state & 0x08)
 					mode |= KBD_ALT;
 				switch (event.xkey.keycode) {
+
 				case 9:								/* Escape on my PC */
 				case 130:							/* Calendar on the iPAQ */
 					keycode = 27;
@@ -884,6 +873,48 @@
 					keycode = 32;
 					break;
 
+				case 132:
+					report_presses = 0;
+					break;
+	
+				case 133:
+					fake_right_mouse = 1;
+					break;
+
+				default:{
+						KeySym xsym;
+						xsym = XKeycodeToKeysym(display, event.xkey.keycode, 0);
+						keycode = xsym;
+						if ((xsym >= 'a') && (xsym <= 'z') && (event.xkey.state & 0x01))
+							xsym &= ~0x20;		/* Handle shifted keys */
+						ascii = xsym;
+					}
+				}
+				if (keycode != -1) {
+					scumm_event->event_code = EVENT_KEYDOWN;
+					scumm_event->kbd.keycode = keycode;
+					scumm_event->kbd.ascii = (ascii != -1 ? ascii : keycode);
+					scumm_event->kbd.flags = mode;
+					return true;
+				}
+		}
+		break;
+
+		case KeyRelease:{
+				/* I am using keycodes here and NOT keysyms to be sure that even if the user
+				   remaps his iPAQ's keyboard, it will still work.
+				 */
+				int keycode = -1;
+				int ascii = -1;
+				byte mode = 0;
+
+				if (event.xkey.state & 0x01)
+					mode |= KBD_SHIFT;
+				if (event.xkey.state & 0x04)
+					mode |= KBD_CTRL;
+				if (event.xkey.state & 0x08)
+					mode |= KBD_ALT;
+				switch (event.xkey.keycode) {
 				case 132:							/* 'Q' on the iPAQ */
 					report_presses = 1;
 					break;
@@ -902,7 +933,7 @@
 					}
 				}
 				if (keycode != -1) {
-					scumm_event->event_code = EVENT_KEYDOWN;
+					scumm_event->event_code = EVENT_KEYUP;
 					scumm_event->kbd.keycode = keycode;
 					scumm_event->kbd.ascii = (ascii != -1 ? ascii : keycode);
 					scumm_event->kbd.flags = mode;





More information about the Scummvm-git-logs mailing list