From 282640bbdd14ec14bdbd9c6de58ca5b9bde76cdf Mon Sep 17 00:00:00 2001
From: johns <>
Date: Mon, 22 Jan 2001 20:58:40 +0000
Subject: [PATCH] Keypad support added.

---
 src/video/X11.cpp | 82 ++++++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 74 insertions(+), 8 deletions(-)

diff --git a/src/video/X11.cpp b/src/video/X11.cpp
index 2127eec34..2d6b1a083 100644
--- a/src/video/X11.cpp
+++ b/src/video/X11.cpp
@@ -9,11 +9,10 @@
 //	   FreeCraft - A free fantasy real time strategy game engine
 //
 /**@name X11.c		-	XWindows support. */
-/*
-**	(c) Copyright 1998-2000 by Lutz Sammer and Valery Shchedrin
-**
-**	$Id$
-*/
+//
+//	(c) Copyright 1998-2001 by Lutz Sammer and Valery Shchedrin
+//
+//	$Id$
 
 //@{
 
@@ -122,7 +121,7 @@ global void SetVideoSync(void)
 local void MyConnectionWatch
 	(Display* display,XPointer client,int fd,Bool flag,XPointer* data)
 {
-    DebugLevel0(__FUNCTION__": fildes %d flag %d\n",fd,flag);
+    DebugLevel0Fn(": fildes %d flag %d\n",fd,flag);
     if( flag ) {			// file handle opened
     } else {				// file handle closed
     }
@@ -419,6 +418,7 @@ local void X11HandleKey(KeySym code)
     /*
     **	Convert X11 keycodes into internal keycodes.
     */
+    // FIXME: Combine X11 keysym mapping to internal in up and down.
     switch( (icode=code) ) {
 	case XK_Escape:
 	    icode='\e';
@@ -483,6 +483,38 @@ local void X11HandleKey(KeySym code)
 	case XK_F12:
 	    icode=KeyCodeF12;
 	    break;
+
+	case XK_KP_0:
+	    icode=KeyCodeKP0;
+	    break;
+	case XK_KP_1:
+	    icode=KeyCodeKP1;
+	    break;
+	case XK_KP_2:
+	    icode=KeyCodeKP2;
+	    break;
+	case XK_KP_3:
+	    icode=KeyCodeKP3;
+	    break;
+	case XK_KP_4:
+	    icode=KeyCodeKP4;
+	    break;
+	case XK_KP_5:
+	    icode=KeyCodeKP5;
+	    break;
+	case XK_KP_6:
+	    icode=KeyCodeKP6;
+	    break;
+	case XK_KP_7:
+	    icode=KeyCodeKP7;
+	    break;
+	case XK_KP_8:
+	    icode=KeyCodeKP8;
+	    break;
+	case XK_KP_9:
+	    icode=KeyCodeKP9;
+	    break;
+
         // We need these because if you only hit a modifier key,
         // X doesn't set its state (modifiers) field in the keyevent.
 	case XK_Shift_L:
@@ -510,6 +542,7 @@ local void X11HandleKey(KeySym code)
 	default:
 	    break;
     }
+
     if( HandleKeyDown(icode) ) {
 	return;
     }
@@ -524,6 +557,7 @@ local void X11HandleKeyUp(KeySym code)
 {
     int icode;
 
+    // FIXME: Combine X11 keysym mapping to internal in up and down.
     switch( (icode=code) ) {
 	case XK_Shift_L:
 	case XK_Shift_R:
@@ -557,6 +591,37 @@ local void X11HandleKeyUp(KeySym code)
 	    icode = KeyCodeRight;
 	    break;
 
+	case XK_KP_0:
+	    icode=KeyCodeKP0;
+	    break;
+	case XK_KP_1:
+	    icode=KeyCodeKP1;
+	    break;
+	case XK_KP_2:
+	    icode=KeyCodeKP2;
+	    break;
+	case XK_KP_3:
+	    icode=KeyCodeKP3;
+	    break;
+	case XK_KP_4:
+	    icode=KeyCodeKP4;
+	    break;
+	case XK_KP_5:
+	    icode=KeyCodeKP5;
+	    break;
+	case XK_KP_6:
+	    icode=KeyCodeKP6;
+	    break;
+	case XK_KP_7:
+	    icode=KeyCodeKP7;
+	    break;
+	case XK_KP_8:
+	    icode=KeyCodeKP8;
+	    break;
+	case XK_KP_9:
+	    icode=KeyCodeKP9;
+	    break;
+
 	default:
 	    DebugLevel3("\tUnknown key %x\n",code);
 	    break;
@@ -636,6 +701,7 @@ local void DoEvent(void)
 	    KeySym keysym;
 
             X11HandleModifiers((XKeyEvent*)&event);
+	    // FIXME: this didn't handle keypad correct!
 	    num=XLookupString((XKeyEvent*)&event,buf,sizeof(buf),&keysym,0);
 	    DebugLevel3("\tKey %lx `%s'\n",keysym,buf);
 	    if( num==1 ) {
@@ -715,7 +781,7 @@ global void WaitEventsAndKeepSync(void)
 	    //	Get all X11 internal connections
 	    //
 	    if( !XInternalConnectionNumbers(TheDisplay,&xfd,&n) ) {
-		DebugLevel0(__FUNCTION__": out of memory\n");
+		DebugLevel0Fn(": out of memory\n");
 		abort();
 	    }
 	    for( i=n; i--; ) {
@@ -845,7 +911,7 @@ global VMemType* VideoCreateNewPalette(const Palette *palette)
 	pixels=malloc(256*sizeof(VMemType32));
 	break;
     default:
-	DebugLevel0(__FUNCTION__": Unknown depth\n");
+	DebugLevel0Fn(": Unknown depth\n");
 	return NULL;
     }