--- qkeyboard_qws.cpp.orig	Thu May 23 16:17:43 2002
+++ qkeyboard_qws.cpp	Thu May 23 16:27:34 2002
@@ -266,7 +266,7 @@
     {   Qt::Key_O,      'o'     , 'O'     , 'O'-64  },
     {   Qt::Key_P,      'p'     , 'P'     , 'P'-64  },
     {   Qt::Key_BraceLeft,  '['     , '{'     , 0xffff  },
-    {   Qt::Key_Escape,     ']'     , '}'     , 0xffff  },
+    {   Qt::Key_BraceRight, ']'     , '}'     , 0xffff  },
     {   Qt::Key_Return,     13      , 13      , 0xffff  },
     {   Qt::Key_Control,    0xffff  , 0xffff  , 0xffff  },
     {   Qt::Key_A,      'a'     , 'A'     , 'A'-64  },  // 30
@@ -391,7 +391,7 @@
     bool numLock;
 #endif
     bool caps;
-    bool extended;
+    int extended;
     int modifiers;
     int prevuni;
     int prevkey;
@@ -521,7 +521,7 @@
     shift = false;
     alt   = false;
     ctrl  = false;
-    extended = false;
+    extended = 0;
     prevuni = 0;
     prevkey = 0;
     caps = FALSE;
@@ -561,9 +561,14 @@
 #if !defined(QT_QWS_CUSTOM)
     if (code == 224) {
 	// extended
-	extended = true;
+	extended = 1;
 	return;
     }
+    else if (code == 225) {
+    	// extended 2
+    	extended = 2;
+    	return;
+    }	
 #endif
 
     if (code & 0x80) {
@@ -571,7 +576,7 @@
 	code &= 0x7f;
     }
 
-    if (extended) {
+    if (extended == 1) {
 	switch (code) {
 	case 72:
 	    keyCode = Qt::Key_Up;
@@ -609,7 +614,33 @@
 	case 53:
 	    keyCode = Qt::Key_Slash;
 	    break;
+	case 0x1d:
+	    keyCode = Qt::Key_Control;
+	    break;
+	case 0x2a:
+	    keyCode = Qt::Key_SysReq;
+	    break;
+	case 0x38:
+	    keyCode = Qt::Key_Alt;
+	    break;
+	case 0x5b:
+	    keyCode = Qt::Key_Super_L;
+	    break;
+	case 0x5c:
+	    keyCode = Qt::Key_Super_R;
+	    break;
+	case 0x5d:
+	    keyCode = Qt::Key_Menu;
+	    break;	    
 	}
+    } else if (extended == 2) {
+	switch (code) {
+	case 0x1d:
+	    return;
+	case 0x45:
+	    keyCode = Qt::Key_Pause;
+	    break;
+	}    
     } else {
 #if defined(QT_QWS_CUSTOM)
 	if ( fn && !meta && (code >= 0x42 && code <= 0x52) ) {
@@ -684,13 +715,19 @@
 	else
 	    repeater->stop();
 #endif
+
+	/*
+	 Translate shift+Key_Tab to Key_Backtab
+	*/
+	if (( keyCode == Key_Tab ) && shift )
+	    keyCode = Key_Backtab;
     }
 
     /*
       Keypad consists of extended keys 53 and 28,
       and non-extended keys 55 and 71 through 83.
     */
-    if ( extended ? (code == 53 || code == 28) :
+    if ((extended == 1) ? (code == 53 || code == 28) :
 	 (code == 55 || ( code >= 71 && code <= 83 )) )
 	keypad = Qt::Keypad;
 
@@ -751,7 +788,7 @@
 	bool bShift = shift;
 	int unicode = 0;
 	if (code < keyMSize) {
-	    if (!extended) {
+	    if (extended == 0) {
                 bool bCaps = caps ^ shift;
 #if defined(QT_QWS_CUSTOM)
 		if (fn) {
@@ -790,7 +827,7 @@
 		    unicode =  QWSServer::keyMap()[code].shift_unicode ?  QWSServer::keyMap()[code].shift_unicode : 0xffff;
 		else
 		    unicode =  QWSServer::keyMap()[code].unicode ?  QWSServer::keyMap()[code].unicode : 0xffff;
-	    } else {
+	    } else if (extended == 1) {
 		if ( code == 53 )
 		    unicode = '/';
 	    }
@@ -816,7 +853,7 @@
 	    prevkey = prevuni = 0;
 	}
     }
-    extended = false;
+    extended = 0;
 }
 
 
