summaryrefslogtreecommitdiff
path: root/packages/qte/qte-2.3.10/ramses-keyboard.patch
diff options
context:
space:
mode:
Diffstat (limited to 'packages/qte/qte-2.3.10/ramses-keyboard.patch')
-rw-r--r--packages/qte/qte-2.3.10/ramses-keyboard.patch2339
1 files changed, 0 insertions, 2339 deletions
diff --git a/packages/qte/qte-2.3.10/ramses-keyboard.patch b/packages/qte/qte-2.3.10/ramses-keyboard.patch
deleted file mode 100644
index 61b5f302cf..0000000000
--- a/packages/qte/qte-2.3.10/ramses-keyboard.patch
+++ /dev/null
@@ -1,2339 +0,0 @@
-
-#
-# Patch managed by http://www.holgerschurig.de/patcher.html
-#
-
---- qt-2.3.10/src/kernel/qkeyboard_qws.cpp~ramses-keyboard
-+++ qt-2.3.10/src/kernel/qkeyboard_qws.cpp
-@@ -1,5 +1,5 @@
- /****************************************************************************
--** $Id$
-+** $Id$
- **
- ** Implementation of Qt/Embedded keyboard drivers
- **
-@@ -37,7 +37,6 @@
- #include <qapplication.h>
- #include <qsocketnotifier.h>
- #include <qnamespace.h>
--#include <qdatetime.h>
- #include <qtimer.h>
-
- #include <stdlib.h>
-@@ -45,9 +44,7 @@
- #include <ctype.h>
-
- #include <unistd.h>
--#ifdef _OS_LINUX_
- #include <linux/kd.h>
--#endif
- #include <sys/ioctl.h>
- #include <sys/types.h>
- #include <sys/stat.h>
-@@ -55,121 +52,13 @@
- #include <errno.h>
- #include <signal.h>
-
--#ifdef QT_QWS_TIP2
--#include <qcopchannel_qws.h>
--#endif
--
--//#define QT_QWS_USE_KEYCODES
--
- #ifndef QT_NO_QWS_KEYBOARD
-
--#ifdef QT_QWS_YOPY
--#include <qwidgetlist.h>
--#include <linux/kd.h>
--#include <linux/fb.h>
--#include <linux/yopy_button.h>
--extern "C" {
-- int getpgid(int);
--}
--#endif
--
--#if !defined(_OS_QNX6_)
--
- #include <termios.h>
--#if !defined(_OS_FREEBSD_) && !defined(_OS_SOLARIS_)
- #include <sys/kd.h>
- #include <sys/vt.h>
--#endif
--
--/*
-- * SIMpad switches handler
-- * (C) 2003-2005 Michael 'Mickey' Lauer <mickey@tm.informatik.uni-frankfurt.de>
-- */
--
--
--
--#include <linux/switches.h>
--#define SIMPAD_SWITCHES_DEVICE "/dev/misc/switches"
--
--// switches from left top to right down over the SIMpad surface
--
--#define SIMPAD_SWITCH_POWER 0x02
--#define SIMPAD_SWITCH_UPPER 0x10
--#define SIMPAD_SWITCH_UP 0x20
--#define SIMPAD_SWITCH_DOWN 0x40
--#define SIMPAD_SWITCH_LEFT 0x80
--#define SIMPAD_SWITCH_RIGHT 0x100
--#define SIMPAD_SWITCH_LOWER 0x8
--
--class QWSsimpadButtonsHandler : public QWSKeyboardHandler
--{
-- Q_OBJECT
--
-- public:
-- QWSsimpadButtonsHandler();
-- virtual ~QWSsimpadButtonsHandler();
--
-- bool isOpen() { return fd > 0; }
--
-- private slots:
-- void readSwitchesData();
-- void autoRepeat();
--
-- private:
-- switches_mask_t switches;
--
-- int fd;
-- int repeatdelay;
-- int repeatperiod;
--
-- int lastCode; // last native code
-- int lastPress; // last press/release state
--
-- int k; // last emitted Qt key code
-- int shiftKeyPressed; // true if one of the SHIFT keys has been pressed and not yet released
-- bool shiftUsed; // true if SHIFT has been used
--
-- QTime eventTimer; // tracks time between raw events
-- QTimer* repeater;
-- QSocketNotifier *notifier;
--};
--
--
--#ifdef QT_QWS_SL5XXX
--#include <asm/sharp_char.h>
--#endif
--
--#if defined(QT_QWS_IPAQ) || defined(QT_QWS_SL5XXX)
--#define QT_QWS_AUTOREPEAT_MANUALLY
--#endif
--
--
--
--#if defined(QT_QWS_IPAQ) || defined(QT_QWS_SL5XXX)
--static int dir_keyrot = -1;
--
--static int xform_dirkey(int key)
--{
-- if (dir_keyrot < 0) {
-- // get the rotation
-- char *kerot = getenv("QWS_CURSOR_ROTATION");
-- if (kerot) {
-- if (strcmp(kerot, "90") == 0)
-- dir_keyrot = 1;
-- else if (strcmp(kerot, "180") == 0)
-- dir_keyrot = 2;
-- else if (strcmp(kerot, "270") == 0)
-- dir_keyrot = 3;
-- else
-- dir_keyrot = 0;
-- } else {
-- dir_keyrot = 0;
-- }
-- }
-- int xf = qt_screen->transformOrientation() + dir_keyrot;
-- return (key-Qt::Key_Left+xf)%4+Qt::Key_Left;
--}
--#endif
-+#include <sys/wait.h>
-+#include <linux/keyboard.h>
-
- #define VTSWITCHSIG SIGUSR2
-
-@@ -177,374 +66,6 @@
- static int vtQws = 0;
- static int kbdFD = -1;
-
--class QWSyopyButtonsHandler : public QWSKeyboardHandler
--{
-- Q_OBJECT
--public:
-- QWSyopyButtonsHandler();
-- virtual ~QWSyopyButtonsHandler();
--
-- bool isOpen() { return buttonFD > 0; }
--
--private slots:
-- void readKeyboardData();
--
--private:
-- QString terminalName;
-- int buttonFD;
-- struct termios newT, oldT;
-- QSocketNotifier *notifier;
--};
--
--#endif // QNX6
--
--
--class QWSKeyboardRepeater : public QObject {
-- Q_OBJECT
--public:
-- static QWSKeyboardRepeater *current;
--
-- QWSKeyboardRepeater(QWSKeyboardHandler* parent) :
-- QObject(parent)
-- {
-- current = this;
-- repeatdelay = 400;
-- repeatperiod = 80;
-- repeater = new QTimer(this);
-- connect(repeater, SIGNAL(timeout()), this, SLOT(autoRepeat()));
-- }
--
-- ~QWSKeyboardRepeater()
-- {
-- if ( current == this )
-- current = 0;
-- }
--
-- void setAutoRepeat(int d, int p) { if ( d > 0 ) repeatdelay=d;
-- if ( p > 0 ) repeatperiod=p;}
-- void getAutoRepeat(int *d ,int *p ) { if (d) *d=repeatdelay;
-- if (p) *p=repeatperiod; }
--
-- void stop()
-- {
-- repeater->stop();
-- }
--
-- void start(int uni, int key, int mod)
-- {
-- runi = uni;
-- rkey = key;
-- rmod = mod;
-- repeater->start(repeatdelay,TRUE);
-- }
--
--private slots:
-- void autoRepeat();
--
--private:
-- int runi;
-- int rkey;
-- int rmod;
--
-- QTimer* repeater;
-- int repeatdelay, repeatperiod;
--};
--
--QWSKeyboardRepeater *QWSKeyboardRepeater::current=0;
--
--void QWSKeyboardRepeater::autoRepeat()
--{
--#ifdef QT_QWS_AUTOREPEAT_MANUALLY
-- qwsServer->processKeyEvent( runi, rkey, rmod, FALSE, TRUE );
-- qwsServer->processKeyEvent( runi, rkey, rmod, TRUE, TRUE );
-- repeater->start(repeatperiod);
--#endif
--}
--
--
--#ifdef QT_QWS_SL5XXX
--static const QWSServer::KeyMap keyM[] = {
-- { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 00
-- { Qt::Key_A, 'a' , 'A' , 'A'-64 }, // 01
-- { Qt::Key_B, 'b' , 'B' , 'B'-64 }, // 02
-- { Qt::Key_C, 'c' , 'C' , 'C'-64 }, // 03
-- { Qt::Key_D, 'd' , 'D' , 'D'-64 }, // 04
-- { Qt::Key_E, 'e' , 'E' , 'E'-64 }, // 05
-- { Qt::Key_F, 'f' , 'F' , 'F'-64 }, // 06
-- { Qt::Key_G, 'g' , 'G' , 'G'-64 }, // 07
-- { Qt::Key_H, 'h' , 'H' , 'H'-64 }, // 08
-- { Qt::Key_I, 'i' , 'I' , 'I'-64 }, // 09
-- { Qt::Key_J, 'j' , 'J' , 'J'-64 }, // 0a 10
-- { Qt::Key_K, 'k' , 'K' , 'K'-64 }, // 0b
-- { Qt::Key_L, 'l' , 'L' , 'L'-64 }, // 0c
-- { Qt::Key_M, 'm' , 'M' , 'M'-64 }, // 0d
-- { Qt::Key_N, 'n' , 'N' , 'N'-64 }, // 0e
-- { Qt::Key_O, 'o' , 'O' , 'O'-64 }, // 0f
-- { Qt::Key_P, 'p' , 'P' , 'P'-64 }, // 10
-- { Qt::Key_Q, 'q' , 'Q' , 'Q'-64 }, // 11
-- { Qt::Key_R, 'r' , 'R' , 'R'-64 }, // 12
-- { Qt::Key_S, 's' , 'S' , 'S'-64 }, // 13
-- { Qt::Key_T, 't' , 'T' , 'T'-64 }, // 14 20
-- { Qt::Key_U, 'u' , 'U' , 'U'-64 }, // 15
-- { Qt::Key_V, 'v' , 'V' , 'V'-64 }, // 16
-- { Qt::Key_W, 'w' , 'W' , 'W'-64 }, // 17
-- { Qt::Key_X, 'x' , 'X' , 'X'-64 }, // 18
-- { Qt::Key_Y, 'y' , 'Y' , 'Y'-64 }, // 19
-- { Qt::Key_Z, 'z' , 'Z' , 'Z'-64 }, // 1a
-- { Qt::Key_Shift, 0xffff , 0xffff , 0xffff }, // 1b
-- { Qt::Key_Return, 13 , 13 , 0xffff }, // 1c
-- { Qt::Key_F11, 0xffff , 0xffff , 0xffff }, // 1d todo
-- { Qt::Key_F22, 0xffff , 0xffff , 0xffff }, // 1e 30
-- { Qt::Key_Backspace, 8 , 8 , 0xffff }, // 1f
-- { Qt::Key_F31, 0xffff , 0xffff , 0xffff }, // 20
-- { Qt::Key_F35, 0xffff , 0xffff , 0xffff }, // 21 light
-- { Qt::Key_Escape, 0xffff , 0xffff , 0xffff }, // 22
--
-- // Direction key code are for *UNROTATED* display.
-- { Qt::Key_Up, 0xffff , 0xffff , 0xffff }, // 23
-- { Qt::Key_Right, 0xffff , 0xffff , 0xffff }, // 24
-- { Qt::Key_Left, 0xffff , 0xffff , 0xffff }, // 25
-- { Qt::Key_Down, 0xffff , 0xffff , 0xffff }, // 26
--
-- { Qt::Key_F33, 0xffff , 0xffff , 0xffff }, // 27 OK
-- { Qt::Key_F12, 0xffff , 0xffff , 0xffff }, // 28 40 home
-- { Qt::Key_1, '1' , 'q' , 'Q'-64 }, // 29
-- { Qt::Key_2, '2' , 'w' , 'W'-64 }, // 2a
-- { Qt::Key_3, '3' , 'e' , 'E'-64 }, // 2b
-- { Qt::Key_4, '4' , 'r' , 'R'-64 }, // 2c
-- { Qt::Key_5, '5' , 't' , 'T'-64 }, // 2d
-- { Qt::Key_6, '6' , 'y' , 'Y'-64 }, // 2e
-- { Qt::Key_7, '7' , 'u' , 'U'-64 }, // 2f
-- { Qt::Key_8, '8' , 'i' , 'I'-64 }, // 30
-- { Qt::Key_9, '9' , 'o' , 'O'-64 }, // 31
-- { Qt::Key_0, '0' , 'p' , 'P'-64 }, // 32 50
-- { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 33
-- { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 34
-- { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 35
-- { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 36
-- { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 37
-- { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 38
-- { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 39
-- { Qt::Key_Minus, '-' , 'b' , 'B'-64 }, // 3a
-- { Qt::Key_Plus, '+' , 'n' , 'N'-64 }, // 3b
-- { Qt::Key_CapsLock, 0xffff , 0xffff , 0xffff }, // 3c 60
-- { Qt::Key_At, '@' , 's' , 'S'-64 }, // 3d
-- { Qt::Key_Question, '?' , '?' , 0xffff }, // 3e
-- { Qt::Key_Comma, ',' , ',' , 0xffff }, // 3f
-- { Qt::Key_Period, '.' , '.' , 0xffff }, // 40
-- { Qt::Key_Tab, 9 , '\\' , 0xffff }, // 41
-- { Qt::Key_X, 0xffff , 'x' , 'X'-64 }, // 42
-- { Qt::Key_C, 0xffff , 'c' , 'C'-64 }, // 43
-- { Qt::Key_V, 0xffff , 'v' , 'V'-64 }, // 44
-- { Qt::Key_Slash, '/' , '/' , 0xffff }, // 45
-- { Qt::Key_Apostrophe, '\'' , '\'' , 0xffff }, // 46 70
-- { Qt::Key_Semicolon, ';' , ';' , 0xffff }, // 47
-- { Qt::Key_QuoteDbl, '\"' , '\"' , 0xffff }, // 48
-- { Qt::Key_Colon, ':' , ':' , 0xffff }, // 49
-- { Qt::Key_NumberSign, '#' , 'd' , 'D'-64 }, // 4a
-- { Qt::Key_Dollar, '$' , 'f' , 'F'-64 }, // 4b
-- { Qt::Key_Percent, '%' , 'g' , 'G'-64 }, // 4c
-- { Qt::Key_Underscore, '_' , 'h' , 'H'-64 }, // 4d
-- { Qt::Key_Ampersand, '&' , 'j' , 'J'-64 }, // 4e
-- { Qt::Key_Asterisk, '*' , 'k' , 'K'-64 }, // 4f
-- { Qt::Key_ParenLeft, '(' , 'l' , 'L'-64 }, // 50 80
-- { Qt::Key_Delete, '[' , '[' , '[' }, // 51
-- { Qt::Key_Z, 0xffff , 'z' , 'Z'-64 }, // 52
-- { Qt::Key_Equal, '=' , 'm' , 'M'-64 }, // 53
-- { Qt::Key_ParenRight, ')' , ']' , ']' }, // 54
-- { Qt::Key_AsciiTilde, '~' , '^' , '^' }, // 55
-- { Qt::Key_Less, '<' , '{' , '{' }, // 56
-- { Qt::Key_Greater, '>' , '}' , '}' }, // 57
-- { Qt::Key_F9, 0xffff , 0xffff , 0xffff }, // 58 datebook
-- { Qt::Key_F10, 0xffff , 0xffff , 0xffff }, // 59 address
-- { Qt::Key_F13, 0xffff , 0xffff , 0xffff }, // 5a 90 email
-- { Qt::Key_F30, ' ' , ' ' , 0xffff }, // 5b select
-- { Qt::Key_Space, ' ' , '|' , '`' }, // 5c
-- { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 5d
-- { Qt::Key_Exclam, '!' , 'a' , 'A'-64 }, // 5e
-- { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 5f
-- { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 60
-- { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 61
-- { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 62
-- { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 63
-- { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 64
-- { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 65
-- { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 66
-- { Qt::Key_Meta, 0xffff , 0xffff , 0xffff }, // 67
-- { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 68
-- { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 69
-- { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 6a
-- { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 6b
-- { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 6c
-- { Qt::Key_F34, 0xffff , 0xffff , 0xffff }, // 6d power
-- { Qt::Key_F13, 0xffff , 0xffff , 0xffff }, // 6e mail long
-- { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 6f
-- { Qt::Key_NumLock, 0xffff , 0xffff , 0xffff }, // 70
-- { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 71
-- { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 72
-- { 0x20ac, 0xffff , 0x20ac , 0x20ac }, // 73 Euro sign
-- { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 74
-- { Qt::Key_F32, 0xffff , 0xffff , 0xffff }, // 75 Sync
-- { 0, 0xffff , 0xffff , 0xffff }
--};
--#else
--// Standard PC101
--static const QWSServer::KeyMap keyM[] = {
-- { Qt::Key_unknown, 0xffff , 0xffff , 0xffff },
-- { Qt::Key_Escape, 27 , 27 , 0xffff },
-- { Qt::Key_1, '1' , '!' , 0xffff },
-- { Qt::Key_2, '2' , '@' , 0xffff },
-- { Qt::Key_3, '3' , '#' , 0xffff },
-- { Qt::Key_4, '4' , '$' , 0xffff },
-- { Qt::Key_5, '5' , '%' , 0xffff },
-- { Qt::Key_6, '6' , '^' , 0xffff },
-- { Qt::Key_7, '7' , '&' , 0xffff },
-- { Qt::Key_8, '8' , '*' , 0xffff },
-- { Qt::Key_9, '9' , '(' , 0xffff }, // 10
-- { Qt::Key_0, '0' , ')' , 0xffff },
-- { Qt::Key_Minus, '-' , '_' , 0xffff },
-- { Qt::Key_Equal, '=' , '+' , 0xffff },
-- { Qt::Key_Backspace, 8 , 8 , 0xffff },
-- { Qt::Key_Tab, 9 , 9 , 0xffff },
-- { Qt::Key_Q, 'q' , 'Q' , 'Q'-64 },
-- { Qt::Key_W, 'w' , 'W' , 'W'-64 },
-- { Qt::Key_E, 'e' , 'E' , 'E'-64 },
-- { Qt::Key_R, 'r' , 'R' , 'R'-64 },
-- { Qt::Key_T, 't' , 'T' , 'T'-64 }, // 20
-- { Qt::Key_Y, 'y' , 'Y' , 'Y'-64 },
-- { Qt::Key_U, 'u' , 'U' , 'U'-64 },
-- { Qt::Key_I, 'i' , 'I' , 'I'-64 },
-- { Qt::Key_O, 'o' , 'O' , 'O'-64 },
-- { Qt::Key_P, 'p' , 'P' , 'P'-64 },
-- { Qt::Key_BraceLeft, '[' , '{' , 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
-- { Qt::Key_S, 's' , 'S' , 'S'-64 },
-- { Qt::Key_D, 'd' , 'D' , 'D'-64 },
-- { Qt::Key_F, 'f' , 'F' , 'F'-64 },
-- { Qt::Key_G, 'g' , 'G' , 'G'-64 },
-- { Qt::Key_H, 'h' , 'H' , 'H'-64 },
-- { Qt::Key_J, 'j' , 'J' , 'J'-64 },
-- { Qt::Key_K, 'k' , 'K' , 'K'-64 },
-- { Qt::Key_L, 'l' , 'L' , 'L'-64 },
-- { Qt::Key_Semicolon, ';' , ':' , 0xffff },
-- { Qt::Key_Apostrophe, '\'' , '"' , 0xffff }, // 40
-- { Qt::Key_QuoteLeft, '`' , '~' , 0xffff },
-- { Qt::Key_Shift, 0xffff , 0xffff , 0xffff },
-- { Qt::Key_Backslash, '\\' , '|' , 0xffff },
-- { Qt::Key_Z, 'z' , 'Z' , 'Z'-64 },
-- { Qt::Key_X, 'x' , 'X' , 'X'-64 },
-- { Qt::Key_C, 'c' , 'C' , 'C'-64 },
-- { Qt::Key_V, 'v' , 'V' , 'V'-64 },
-- { Qt::Key_B, 'b' , 'B' , 'B'-64 },
-- { Qt::Key_N, 'n' , 'N' , 'N'-64 },
-- { Qt::Key_M, 'm' , 'M' , 'M'-64 }, // 50
-- { Qt::Key_Comma, ',' , '<' , 0xffff },
-- { Qt::Key_Period, '.' , '>' , 0xffff },
-- { Qt::Key_Slash, '/' , '?' , 0xffff },
-- { Qt::Key_Shift, 0xffff , 0xffff , 0xffff },
-- { Qt::Key_Asterisk, '*' , '*' , 0xffff },
-- { Qt::Key_Alt, 0xffff , 0xffff , 0xffff },
-- { Qt::Key_Space, ' ' , ' ' , 0xffff },
-- { Qt::Key_CapsLock, 0xffff , 0xffff , 0xffff },
-- { Qt::Key_F1, 0xffff , 0xffff , 0xffff },
-- { Qt::Key_F2, 0xffff , 0xffff , 0xffff }, // 60
-- { Qt::Key_F3, 0xffff , 0xffff , 0xffff },
-- { Qt::Key_F4, 0xffff , 0xffff , 0xffff },
-- { Qt::Key_F5, 0xffff , 0xffff , 0xffff },
-- { Qt::Key_F6, 0xffff , 0xffff , 0xffff },
--#if defined(QT_KEYPAD_MODE)
-- { Qt::Key_Menu, 0xffff , 0xffff , 0xffff },
-- { Qt::Key_Back, 0xffff , 0xffff , 0xffff },
-- { Qt::Key_Yes, 0xffff , 0xffff , 0xffff },
-- { Qt::Key_No, 0xffff , 0xffff , 0xffff },
--#else
-- { Qt::Key_F7, 0xffff , 0xffff , 0xffff },
-- { Qt::Key_F8, 0xffff , 0xffff , 0xffff },
-- { Qt::Key_F9, 0xffff , 0xffff , 0xffff },
-- { Qt::Key_F10, 0xffff , 0xffff , 0xffff },
--#endif
-- { Qt::Key_NumLock, 0xffff , 0xffff , 0xffff },
-- { Qt::Key_ScrollLock, 0xffff , 0xffff , 0xffff }, // 70
-- { Qt::Key_7, '7' , '7' , 0xffff },
-- { Qt::Key_8, '8' , '8' , 0xffff },
-- { Qt::Key_9, '9' , '9' , 0xffff },
-- { Qt::Key_Minus, '-' , '-' , 0xffff },
-- { Qt::Key_4, '4' , '4' , 0xffff },
-- { Qt::Key_5, '5' , '5' , 0xffff },
-- { Qt::Key_6, '6' , '6' , 0xffff },
-- { Qt::Key_Plus, '+' , '+' , 0xffff },
-- { Qt::Key_1, '1' , '1' , 0xffff },
-- { Qt::Key_2, '2' , '2' , 0xffff }, // 80
-- { Qt::Key_3, '3' , '3' , 0xffff },
-- { Qt::Key_0, '0' , '0' , 0xffff },
-- { Qt::Key_Period, '.' , '.' , 0xffff },
-- { Qt::Key_unknown, 0xffff , 0xffff , 0xffff },
-- { Qt::Key_unknown, 0xffff , 0xffff , 0xffff },
-- { Qt::Key_Less, '<' , '>' , 0xffff },
--#if defined(QT_KEYPAD_MODE)
-- { Qt::Key_Call, 0xffff , 0xffff , 0xffff },
-- { Qt::Key_Hangup, 0xffff , 0xffff , 0xffff },
--#else
-- { Qt::Key_F11, 0xffff , 0xffff , 0xffff },
-- { Qt::Key_F12, 0xffff , 0xffff , 0xffff },
--#endif
-- { Qt::Key_unknown, 0xffff , 0xffff , 0xffff },
-- { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 90
-- { Qt::Key_unknown, 0xffff , 0xffff , 0xffff },
-- { Qt::Key_unknown, 0xffff , 0xffff , 0xffff },
-- { Qt::Key_unknown, 0xffff , 0xffff , 0xffff },
-- { Qt::Key_unknown, 0xffff , 0xffff , 0xffff },
-- { Qt::Key_unknown, 0xffff , 0xffff , 0xffff },
-- { Qt::Key_Enter, 13 , 13 , 0xffff },
-- { Qt::Key_Control, 0xffff , 0xffff , 0xffff },
-- { Qt::Key_Slash, '/' , '/' , 0xffff },
-- { Qt::Key_unknown, 0xffff , 0xffff , 0xffff },
-- { Qt::Key_Meta, 0xffff , 0xffff , 0xffff }, // 100
-- { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // break
-- { Qt::Key_Home, 0xffff , 0xffff , 0xffff },
-- { Qt::Key_Up, 0xffff , 0xffff , 0xffff },
-- { Qt::Key_Prior, 0xffff , 0xffff , 0xffff },
-- { Qt::Key_Left, 0xffff , 0xffff , 0xffff },
-- { Qt::Key_Right, 0xffff , 0xffff , 0xffff },
-- { Qt::Key_End, 0xffff , 0xffff , 0xffff },
-- { Qt::Key_Down, 0xffff , 0xffff , 0xffff },
-- { Qt::Key_Next, 0xffff , 0xffff , 0xffff },
-- { Qt::Key_Insert, 0xffff , 0xffff , 0xffff }, // 110
-- { Qt::Key_Delete, 0xffff , 0xffff , 0xffff },
-- { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // macro
-- { Qt::Key_F13, 0xffff , 0xffff , 0xffff },
-- { Qt::Key_F14, 0xffff , 0xffff , 0xffff },
-- { Qt::Key_Help, 0xffff , 0xffff , 0xffff },
--#if defined(QT_KEYPAD_MODE)
-- { Qt::Key_Select, 0xffff , 0xffff , 0xffff }, // do
--#else
-- { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // do
--#endif
-- { Qt::Key_F17, 0xffff , 0xffff , 0xffff },
-- { Qt::Key_Plus, '+' , '-' , 0xffff },
-- { Qt::Key_Pause, 0xffff , 0xffff , 0xffff }, // 120
-- { Qt::Key_F31, 0xffff , 0xffff , 0xffff }, // IM toggle
-- { Qt::Key_F32, 0xffff , 0xffff , 0xffff }, // Sync
-- { Qt::Key_F34, 0xffff , 0xffff , 0xffff }, // Power
-- { Qt::Key_F35, 0xffff , 0xffff , 0xffff }, // Backlight
--#if defined(QT_KEYPAD_MODE)
-- { Qt::Key_Context1, 0xffff , 0xffff , 0xffff },
-- { Qt::Key_Context2, 0xffff , 0xffff , 0xffff },
-- { Qt::Key_Context3, 0xffff , 0xffff , 0xffff },
-- { Qt::Key_Context4, 0xffff , 0xffff , 0xffff },
--#else
-- { Qt::Key_unknown, 0xffff , 0xffff , 0xffff },
-- { Qt::Key_unknown, 0xffff , 0xffff , 0xffff },
-- { Qt::Key_unknown, 0xffff , 0xffff , 0xffff },
-- { Qt::Key_unknown, 0xffff , 0xffff , 0xffff },
--#endif
-- { 0, 0xffff , 0xffff , 0xffff }
--};
--#endif
--static const int keyMSize = sizeof(keyM)/sizeof(QWSServer::KeyMap)-1;
- static QIntDict<QWSServer::KeyMap> *overrideMap = 0;
-
- /*!
-@@ -562,8 +83,6 @@
- overrideMap = map;
- }
-
--#if !defined(_OS_QNX6_)
--
- /*!
- \class QWSKeyboardHandler qkeyboard_qws.h
- \brief Keyboard driver/handler for Qt/Embedded
-@@ -597,114 +116,28 @@
- qwsServer->processKeyEvent( unicode, keycode, modifiers, isPress, autoRepeat );
- }
-
--class QWSPC101KeyboardHandler : public QWSKeyboardHandler
--{
-- Q_OBJECT
--public:
-- QWSPC101KeyboardHandler();
-- virtual ~QWSPC101KeyboardHandler();
--
-- void doKey(uchar scancode);
--
--
-- void restoreLeds();
-
--private:
-- bool shift;
-- bool alt;
-- bool ctrl;
--#if defined(QT_QWS_SL5XXX)
-- bool meta;
-- bool fn;
-- bool numLock;
--#endif
-- bool caps;
--#if defined(QT_QWS_IPAQ)
-- uint ipaq_return_pressed:1;
--#endif
--#ifndef QT_QWS_USE_KEYCODES
-- int extended;
--#endif
-- int modifiers;
-- int prevuni;
-- int prevkey;
--
--#ifdef QT_QWS_AUTOREPEAT_MANUALLY
-- QWSKeyboardRepeater *rep;
--#endif
--};
--
--void QWSPC101KeyboardHandler::restoreLeds()
-+bool qwsSetKeyboardAutoRepeat( int /* delay */ , int /* period */ )
- {
-- char leds;
-- ioctl(0, KDGETLED, &leds);
-- leds = leds & ~LED_CAP;
-- if ( caps ) leds |= LED_CAP;
-- ioctl(0, KDSETLED, leds);
-+ return FALSE;
- }
-
--class QWSTtyKeyboardHandler : public QWSPC101KeyboardHandler
--{
-- Q_OBJECT
--public:
-- QWSTtyKeyboardHandler(const QString&);
-- virtual ~QWSTtyKeyboardHandler();
--
--private slots:
-- void readKeyboardData();
--
--private:
-- struct termios origTermData;
--};
--
--
--// can't ifdef this out because moc runs on this file
--class QWSSamsungKeypadHandler : public QWSPC101KeyboardHandler
-+bool qwsGetKeyboardAutoRepeat( int /* delay */ , int /* period */ )
- {
-- Q_OBJECT
--public:
-- QWSSamsungKeypadHandler(const QString&);
-- virtual ~QWSSamsungKeypadHandler();
--
--private slots:
-- void readKeyboardData();
--};
-+ return FALSE;
-+}
-
--class QWSUsbKeyboardHandler : public QWSPC101KeyboardHandler
-+void qwsRestoreKeyboardLeds()
- {
-- Q_OBJECT
--public:
-- QWSUsbKeyboardHandler(const QString& device);
-- virtual ~QWSUsbKeyboardHandler();
-+}
-
--private slots:
-- void readKeyboardData();
-
--private:
-- int fd;
-- QWSServer::KeyMap *lastPress;
--};
-
--class QWSVr41xxButtonsHandler : public QWSKeyboardHandler
--{
-- Q_OBJECT
--public:
-- QWSVr41xxButtonsHandler();
-- virtual ~QWSVr41xxButtonsHandler();
-
-- bool isOpen() { return buttonFD > 0; }
--
--private slots:
-- void readKeyboardData();
-
--private:
-- QString terminalName;
-- int buttonFD;
-- int kbdIdx;
-- int kbdBufferLen;
-- unsigned char *kbdBuffer;
-- QSocketNotifier *notifier;
--};
-+/*
-+ * Virtual framebuffer keyboard driver
-+ */
-
- class QWSVFbKeyboardHandler : public QWSKeyboardHandler
- {
-@@ -727,1097 +160,393 @@
- QSocketNotifier *notifier;
- };
-
--
--static void vtSwitchHandler(int /*sig*/)
--{
--#if !defined(_OS_FREEBSD_) && !defined(_OS_SOLARIS_)
-- if (vtActive) {
-- qwsServer->enablePainting(false);
-- qt_screen->save();
-- if (ioctl(kbdFD, VT_RELDISP, 1) == 0) {
-- vtActive = false;
-- qwsServer->closeMouse();
-- }
-- else {
-- qwsServer->enablePainting(true);
-- }
-- usleep(200000);
-- }
-- else {
-- if (ioctl(kbdFD, VT_RELDISP, VT_ACKACQ) == 0) {
-- qwsServer->enablePainting(true);
-- vtActive = true;
-- qt_screen->restore();
-- qwsServer->openMouse();
-- qwsServer->refresh();
-- }
-- }
-- signal(VTSWITCHSIG, vtSwitchHandler);
--#endif
--}
--
--//
--// PC-101 type keyboards
--//
--
--
--
--static QWSPC101KeyboardHandler *currentPC101=0;
--
--bool qwsSetKeyboardAutoRepeat( int delay, int period )
--{
--#ifdef QT_QWS_AUTOREPEAT_MANUALLY
-- if ( QWSKeyboardRepeater::current )
-- QWSKeyboardRepeater::current->setAutoRepeat( delay, period );
-- return QWSKeyboardRepeater::current != 0;
--#else
-- Q_UNUSED(delay);
-- Q_UNUSED(period);
-- return FALSE;
--#endif
--}
--
--bool qwsGetKeyboardAutoRepeat( int *delay, int *period )
--{
--#ifdef QT_QWS_AUTOREPEAT_MANUALLY
-- if ( QWSKeyboardRepeater::current )
-- QWSKeyboardRepeater::current->getAutoRepeat( delay, period );
-- return QWSKeyboardRepeater::current != 0;
--#else
-- Q_UNUSED(delay);
-- Q_UNUSED(period);
-- return FALSE;
-+#ifndef QT_NO_QWS_VFB
-+#include "qvfbhdr.h"
-+extern int qws_display_id;
- #endif
--}
-
--void qwsRestoreKeyboardLeds()
-+QWSVFbKeyboardHandler::QWSVFbKeyboardHandler()
- {
-- if ( currentPC101 )
-- currentPC101->restoreLeds();
--}
--
-+ kbdFD = -1;
-+#ifndef QT_NO_QWS_VFB
-+ kbdIdx = 0;
-+ kbdBufferLen = sizeof( QVFbKeyData ) * 5;
-+ kbdBuffer = new unsigned char [kbdBufferLen];
-
-+ terminalName = QString(QT_VFB_KEYBOARD_PIPE).arg(qws_display_id);
-
--QWSPC101KeyboardHandler::QWSPC101KeyboardHandler()
--{
-- shift = false;
-- alt = false;
-- ctrl = false;
--#ifndef QT_QWS_USE_KEYCODES
-- extended = 0;
--#endif
-- prevuni = 0;
-- prevkey = 0;
-- caps = FALSE;
--#if defined(QT_QWS_SL5XXX)
-- meta = FALSE;
-- fn = FALSE;
-+ if ((kbdFD = open( terminalName.local8Bit(), O_RDWR | O_NDELAY)) < 0) {
-+ qDebug( "Cannot open %s (%s)", terminalName.latin1(),
-+ strerror(errno));
-+ } else {
-+ // Clear pending input
-+ char buf[2];
-+ while (read(kbdFD, buf, 1) > 0) { }
-
-- numLock = FALSE;
-- sharp_kbdctl_modifstat st;
-- int dev = ::open("/dev/sharp_kbdctl", O_RDWR);
-- if( dev >= 0 ) {
-- memset(&st, 0, sizeof(st));
-- st.which = 3;
-- int ret = ioctl(dev, SHARP_KBDCTL_GETMODIFSTAT, (char*)&st);
-- if( !ret )
-- numLock = (bool)st.stat;
-- ::close(dev);
-+ notifier = new QSocketNotifier( kbdFD, QSocketNotifier::Read, this );
-+ connect(notifier, SIGNAL(activated(int)),this, SLOT(readKeyboardData()));
- }
- #endif
--#if defined(QT_QWS_IPAQ)
-- // iPAQ Action Key has ScanCode 0x60: 0x60|0x80 = 0xe0 == extended mode 1 !
-- ipaq_return_pressed = FALSE;
--#endif
--#ifdef QT_QWS_AUTOREPEAT_MANUALLY
-- rep = new QWSKeyboardRepeater(this);
--#endif
-- currentPC101 = this;
- }
-
--QWSPC101KeyboardHandler::~QWSPC101KeyboardHandler()
-+QWSVFbKeyboardHandler::~QWSVFbKeyboardHandler()
- {
-- if ( currentPC101 == this )
-- currentPC101 = 0;
-+#ifndef QT_NO_QWS_VFB
-+ if ( kbdFD >= 0 )
-+ close( kbdFD );
-+ delete [] kbdBuffer;
-+#endif
- }
-
--void QWSPC101KeyboardHandler::doKey(uchar code)
-+
-+void QWSVFbKeyboardHandler::readKeyboardData()
- {
-- const QWSServer::KeyMap *currentKey = 0;
-- int keyCode = Qt::Key_unknown;
-- bool release = false;
-- int keypad = 0;
-+#ifndef QT_NO_QWS_VFB
-+ int n;
-+ do {
-+ n = read(kbdFD, kbdBuffer+kbdIdx, kbdBufferLen - kbdIdx );
-+ if ( n > 0 )
-+ kbdIdx += n;
-+ } while ( n > 0 );
-
--#ifndef QT_QWS_USE_KEYCODES
--#if defined(QT_QWS_IPAQ)
-- // map ipaq 'action' key (0x60, 0xe0)
-- if ((code & 0x7f) == 0x60) {
--#if defined(QT_KEYPAD_MODE)
-- // to keycode for select (keypad mode)
-- code = (code & 0x80) | 116;
--#else
-- // to keycode for space. (no keypad mode0
-- code = (code & 0x80) | 57;
--#endif
-+ int idx = 0;
-+ while ( kbdIdx - idx >= (int)sizeof( QVFbKeyData ) ) {
-+ QVFbKeyData *kd = (QVFbKeyData *)(kbdBuffer + idx);
-+ if ( kd->unicode == 0 && kd->modifiers == 0 && kd->press ) {
-+ // magic exit key
-+ qWarning( "Instructed to quit by Virtual Keyboard" );
-+ qApp->quit();
-+ }
-+ processKeyEvent( kd->unicode&0xffff, kd->unicode>>16,
-+ kd->modifiers, kd->press, kd->repeat );
-+ idx += sizeof( QVFbKeyData );
- }
--#endif
-
--#if !defined(QT_QWS_SL5XXX)
-- if (code == 224
--#if defined(QT_QWS_IPAQ)
-- && !ipaq_return_pressed
--#endif
-- ) {
-- // extended
-- extended = 1;
-- return;
-- }
-- else if (code == 225) {
-- // extended 2
-- extended = 2;
-- return;
-- }
--#endif
-+ int surplus = kbdIdx - idx;
-+ for ( int i = 0; i < surplus; i++ )
-+ kbdBuffer[i] = kbdBuffer[idx+i];
-+ kbdIdx = surplus;
- #endif
-+}
-
-
-- /*------------------------------------------------------------------
-- First find the Qt KeyCode
-- ------------------------------------------------------------------*/
--
-- if (code & 0x80) {
-- release = true;
-- code &= 0x7f;
-- }
--
--#ifndef QT_QWS_USE_KEYCODES
-- if (extended == 1) {
-- currentKey = overrideMap ? overrideMap->find( code+0xe000 ) : 0;
-- if ( currentKey )
-- keyCode = currentKey->key_code;
-- else
-- switch (code) {
-- case 72:
-- keyCode = Qt::Key_Up;
-- break;
-- case 75:
-- keyCode = Qt::Key_Left;
-- break;
-- case 77:
-- keyCode = Qt::Key_Right;
-- break;
-- case 80:
-- keyCode = Qt::Key_Down;
-- break;
-- case 82:
-- keyCode = Qt::Key_Insert;
-- break;
-- case 71:
-- keyCode = Qt::Key_Home;
-- break;
-- case 73:
-- keyCode = Qt::Key_Prior;
-- break;
-- case 83:
-- keyCode = Qt::Key_Delete;
-- break;
-- case 79:
-- keyCode = Qt::Key_End;
-- break;
-- case 81:
-- keyCode = Qt::Key_Next;
-- break;
-- case 28:
-- keyCode = Qt::Key_Enter;
-- break;
-- 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
--#endif
-- {
--#if defined(QT_QWS_SL5XXX)
-- if ( fn && !meta && (code >= 0x42 && code <= 0x52) ) {
-- ushort unicode=0xffff;
-- int scan=0;
-- if ( code == 0x42 ) { unicode='X'-'@'; scan=Key_X; } // Cut
-- else if ( code == 0x43 ) { unicode='C'-'@'; scan=Key_C; } // Copy
-- else if ( code == 0x44 ) { unicode='V'-'@'; scan=Key_V; } // Paste
-- else if ( code == 0x52 ) { unicode='Z'-'@'; scan=Key_Z; } // Undo
-- if ( scan ) {
-- processKeyEvent( unicode, scan, ControlButton, !release, FALSE );
-- return;
-- }
-- }
--#endif
-- currentKey = overrideMap ? overrideMap->find( code ) : 0;
-- if ( !currentKey && code < keyMSize ) {
-- currentKey = &QWSServer::keyMap()[code];
-- }
-- if ( currentKey )
-- keyCode = currentKey->key_code;
--
--#if defined(QT_QWS_IPAQ) || defined(QT_QWS_SL5XXX) // need autorepeat implemented here?
-- bool repeatable = TRUE;
-
--#if defined(QT_QWS_IPAQ)
-- switch (code) {
--#if defined(QT_QWS_SL5XXX)
--#if defined(QT_KEYPAD_MODE)
-- case 0x7a:
-- keyCode = Key_Call;
-- repeatable = FALSE;
-- break;
-- case 0x7b:
-- keyCode = Key_Context1;
-- repeatable = FALSE;
-- break;
-- case 0x7c:
-- keyCode = Key_Back;
-- repeatable = FALSE;
-- break;
-- case 0x7d:
-- keyCode = Key_Hangup;
-- repeatable = FALSE;
-- break;
--#else
-- case 0x7a: case 0x7b: case 0x7c: case 0x7d:
-- keyCode = code - 0x7a + Key_F9;
-- repeatable = FALSE;
-- break;
--#endif
-- case 0x79:
-- keyCode = Key_F34;
-- repeatable = FALSE;
-- break;
--#endif
-- case 0x78:
--# if defined(QT_QWS_IPAQ)
-- keyCode = Key_F24; // record
--# else
-- keyCode = Key_Escape;
--# endif
-- repeatable = FALSE;
-- break;
-- case 0x60:
-- keyCode = Key_Return;
--# ifdef QT_QWS_IPAQ
-- ipaq_return_pressed = !release;
--# endif
-- break;
-- case 0x67:
-- keyCode = Key_Right;
-- break;
-- case 0x69:
-- keyCode = Key_Up;
-- break;
-- case 0x6a:
-- keyCode = Key_Down;
-- break;
-- case 0x6c:
-- keyCode = Key_Left;
-- break;
-- }
--#endif
-
-- /*------------------------------------------------------------------
-- Then do special processing of magic keys
-- ------------------------------------------------------------------*/
-+struct termios origTermData;
-
-+static void init_kbd(void)
-+{
-+ struct termios termdata;
-
--#if defined(QT_QWS_SL5XXX)
-- if ( release && ( keyCode == Key_F34 || keyCode == Key_F35 ) )
-- return; // no release for power and light keys
-- if ( keyCode >= Key_F1 && keyCode <= Key_F35
-- || keyCode == Key_Escape || keyCode == Key_Home
-- || keyCode == Key_Shift || keyCode == Key_Meta )
-- repeatable = FALSE;
--#endif
-+ tcgetattr( kbdFD, &origTermData );
-+ tcgetattr( kbdFD, &termdata );
-
--#if defined(QT_QWS_IPAQ) || defined(QT_QWS_SL5XXX)
-- if ( qt_screen->isTransformed()
-- && keyCode >= Qt::Key_Left && keyCode <= Qt::Key_Down )
-- {
-- keyCode = xform_dirkey(keyCode);
-- }
--#endif
--
--#ifdef QT_QWS_AUTOREPEAT_MANUALLY
-- if ( repeatable && !release )
-- rep->start(prevuni,prevkey,modifiers);
-- else
-- rep->stop();
--#endif
--#endif
-- /*
-- Translate shift+Key_Tab to Key_Backtab
-- */
-- if (( keyCode == Key_Tab ) && shift )
-- keyCode = Key_Backtab;
-- }
-+ ioctl(kbdFD, KDSKBMODE, K_XLATE);
-
--#ifndef QT_QWS_USE_KEYCODES
-- /*
-- Keypad consists of extended keys 53 and 28,
-- and non-extended keys 55 and 71 through 83.
-- */
-- if (( extended == 1 ) ? (code == 53 || code == 28) :
-- (code == 55 || ( code >= 71 && code <= 83 )) )
-- keypad = Qt::Keypad;
--#else
-- if ( code == 55 || code >= 71 && code <= 83 || code == 96
-- || code == 98 || code == 118 )
-- keypad = Qt::Keypad;
--#endif
-+ termdata.c_iflag = (IGNPAR | IGNBRK) & (~PARMRK) & (~ISTRIP);
-+ termdata.c_oflag = 0;
-+ termdata.c_cflag = CREAD | CS8;
-+ termdata.c_lflag = 0;
-+ termdata.c_cc[VTIME]=0;
-+ termdata.c_cc[VMIN]=1;
-+ cfsetispeed(&termdata, 9600);
-+ cfsetospeed(&termdata, 9600);
-+ tcsetattr(kbdFD, TCSANOW, &termdata);
-+}
-
-- // Virtual console switching
-- int term = 0;
-- if (ctrl && alt && keyCode >= Qt::Key_F1 && keyCode <= Qt::Key_F10)
-- term = keyCode - Qt::Key_F1 + 1;
-- else if (ctrl && alt && keyCode == Qt::Key_Left)
-- term = QMAX(vtQws - 1, 1);
-- else if (ctrl && alt && keyCode == Qt::Key_Right)
-- term = QMIN(vtQws + 1, 10);
-- if (term && !release) {
-- ctrl = false;
-- alt = false;
--#if !defined(_OS_FREEBSD_) && !defined(_OS_SOLARIS_)
-- ioctl(kbdFD, VT_ACTIVATE, term);
--#endif
-- return;
-+static void done_kbd(void)
-+{
-+ if (kbdFD >= 0) {
-+ tcsetattr(kbdFD, TCSANOW, &origTermData);
- }
-+}
-
--#if defined(QT_QWS_SL5XXX)
-- // Ctrl-Alt-Delete exits qws
-- if (ctrl && alt && keyCode == Qt::Key_Delete) {
-- qApp->quit();
-+static void vtSwitchHandler(int /*sig*/)
-+{
-+ if (vtActive) {
-+ qwsServer->enablePainting(false);
-+ qt_screen->save();
-+ if (ioctl(kbdFD, VT_RELDISP, VT_ACKACQ) == 0) {
-+ vtActive = false;
-+ qwsServer->closeMouse();
-+ done_kbd();
-+ }
-+ else {
-+ qwsServer->enablePainting(true);
-+ }
-+ usleep(200000);
- }
--#else
-- // Ctrl-Alt-Backspace exits qws
-- if (ctrl && alt && keyCode == Qt::Key_Backspace) {
-- qApp->quit();
-+ else {
-+ if (ioctl(kbdFD, VT_RELDISP, VT_ACKACQ) == 0) {
-+ init_kbd();
-+ qwsServer->enablePainting(true);
-+ vtActive = true;
-+ qt_screen->restore();
-+ qwsServer->openMouse();
-+ qwsServer->refresh();
-+ }
- }
--#endif
-+ signal(VTSWITCHSIG, vtSwitchHandler);
-+}
-
--#if defined(QT_QWS_SL5XXX)
-- if (keyCode == Qt::Key_F22) { /* Fn key */
-- fn = !release;
-- } else if ( keyCode == Key_NumLock ) {
-- if ( release )
-- numLock = !numLock;
-- } else
--#endif
-
-- if (keyCode == Qt::Key_Alt) {
-- alt = !release;
-- } else if (keyCode == Qt::Key_Control) {
-- ctrl = !release;
-- } else if (keyCode == Qt::Key_Shift) {
-- shift = !release;
--#if defined(QT_QWS_SL5XXX)
-- } else if (keyCode == Qt::Key_Meta) {
-- meta = !release;
--#endif
-- } else if ( keyCode == Qt::Key_CapsLock && release ) {
-- caps = !caps;
--#if defined(_OS_LINUX_) && !defined(QT_QWS_SL5XXX)
-- char leds;
-- ioctl(0, KDGETLED, &leds);
-- leds = leds & ~LED_CAP;
-- if ( caps ) leds |= LED_CAP;
-- ioctl(0, KDSETLED, leds);
--#endif
-- }
-
-- /*------------------------------------------------------------------
-- Then find the Unicode value and send the event
-- ------------------------------------------------------------------*/
-- //If we map the keyboard to a non-latin1 layout, we may have
-- //valid keys with unknown key codes.
-- if ( currentKey || keyCode != Qt::Key_unknown ) {
-- bool bAlt = alt;
-- bool bCtrl = ctrl;
-- bool bShift = shift;
-- int unicode = 0xffff;
-- if ( currentKey ) {
--#if !defined(QT_QWS_SL5XXX)
-- bool bCaps = shift ||
-- (caps ? QChar(QWSServer::keyMap()[code].unicode).isLetter() : FALSE);
--#else
-- bool bCaps = caps ^ shift;
-- if (fn) {
-- if ( shift ) {
-- bCaps = bShift = FALSE;
-- bCtrl = TRUE;
-- }
-- if ( meta ) {
-- bCaps = bShift = TRUE;
-- bAlt = TRUE;
-- }
-- } else if ( meta ) {
-- bCaps = bShift = TRUE;
-- }
-- if ( code > 40 && caps ) {
-- // fn-keys should only react to shift, not caps
-- bCaps = bShift = shift;
-- }
-- if ( numLock ) {
-- if ( keyCode != Key_Space && keyCode != Key_Tab )
-- bCaps = bShift = FALSE;
-- }
-- if ( keyCode == Key_Delete && (bAlt || bCtrl) ) {
-- keyCode = Key_BraceLeft;
-- unicode = '[';
-- bCaps = bShift = bAlt = bCtrl = FALSE;
-- } else if (keyCode == Qt::Key_F31 && bCtrl) {
-- keyCode = Key_QuoteLeft;
-- unicode = '`';
-- } else
--#endif
--
-- if (bCtrl)
-- unicode = currentKey->ctrl_unicode;
-- else if (bCaps)
-- unicode = currentKey->shift_unicode;
-- else
-- unicode = currentKey->unicode;
--#ifndef QT_QWS_USE_KEYCODES
-- } else if ( extended == 1 ) {
-- if ( keyCode == Qt::Key_Slash )
-- unicode = '/';
-- else if ( keyCode == Qt::Key_Enter )
-- unicode = 0xd;
--#endif
-- }
-+class QWSRamsesKbPrivate;
-+class QWSRamsesKeyboardHandler : public QWSKeyboardHandler
-+{
-+public:
-+ QWSRamsesKeyboardHandler( const QString& );
-+ virtual ~QWSRamsesKeyboardHandler();
-
-- modifiers = 0;
-- if ( bAlt ) modifiers |= AltButton;
-- if ( bCtrl ) modifiers |= ControlButton;
-- if ( bShift ) modifiers |= ShiftButton;
-- if ( keypad ) modifiers |= Keypad;
-+ virtual void processKeyEvent(int unicode, int keycode, int modifiers,
-+ bool isPress, bool autoRepeat);
-
-- // looks wrong -- WWA
-- bool repeat = FALSE;
-- if (prevuni == unicode && prevkey == keyCode && !release)
-- repeat = TRUE;
-+private:
-+ QWSRamsesKbPrivate *d;
-+};
-
-- processKeyEvent( unicode, keyCode, modifiers, !release, repeat );
-
-- if (!release) {
-- prevuni = unicode;
-- prevkey = keyCode;
-- } else {
-- prevkey = prevuni = 0;
-- }
-- }
--#ifndef QT_QWS_USE_KEYCODES
-- extended = 0;
--#endif
--}
-+class QWSRamsesKbPrivate : public QObject
-+{
-+ Q_OBJECT
-+public:
-+ QWSRamsesKbPrivate( QWSRamsesKeyboardHandler *, const QString &device );
-+ ~QWSRamsesKbPrivate();
-
-+private slots:
-+ void readKeyboardData();
-
--//
--// Tty keyboard
--//
-+private:
-+ void handleKey(unsigned char code, int n);
-
--QWSTtyKeyboardHandler::QWSTtyKeyboardHandler(const QString& device)
-+ QWSRamsesKeyboardHandler *handler;
-+ char rbuf[255];
-+ int rptr;
-+};
-+
-+QWSRamsesKbPrivate::QWSRamsesKbPrivate( QWSRamsesKeyboardHandler *h, const QString &device )
-+ : handler(h), rptr(0)
- {
- #ifdef QT_QWS_DEVFS
-- kbdFD=open(device.isEmpty() ? "/dev/vc/1" : device.latin1(), O_RDWR | O_NDELAY, 0);
-+ kbdFD = ::open(device.isEmpty()?"/dev/vc/2":device.latin1(), O_RDWR|O_NDELAY, 0);
- #else
-- kbdFD=open(device.isEmpty() ? "/dev/tty0" : device.latin1(), O_RDWR | O_NDELAY, 0);
-+ kbdFD = ::open(device.isEmpty()?"/dev/tty2":device.latin1(), O_RDWR|O_NDELAY, 0);
- #endif
-
- if ( kbdFD >= 0 ) {
-- QSocketNotifier *notifier;
-- notifier = new QSocketNotifier( kbdFD, QSocketNotifier::Read, this );
-- connect( notifier, SIGNAL(activated(int)),this,
-- SLOT(readKeyboardData()) );
--
-- // save for restore.
-- tcgetattr( kbdFD, &origTermData );
--
-- struct termios termdata;
-- tcgetattr( kbdFD, &termdata );
--
--#if !defined(_OS_FREEBSD_) && !defined(_OS_SOLARIS_)
--# ifdef QT_QWS_USE_KEYCODES
-- ioctl(kbdFD, KDSKBMODE, K_MEDIUMRAW);
--# else
-- ioctl(kbdFD, KDSKBMODE, K_RAW);
--# endif
--#endif
--
-- termdata.c_iflag = (IGNPAR | IGNBRK) & (~PARMRK) & (~ISTRIP);
-- termdata.c_oflag = 0;
-- termdata.c_cflag = CREAD | CS8;
-- termdata.c_lflag = 0;
-- termdata.c_cc[VTIME]=0;
-- termdata.c_cc[VMIN]=1;
-- cfsetispeed(&termdata, 9600);
-- cfsetospeed(&termdata, 9600);
-- tcsetattr(kbdFD, TCSANOW, &termdata);
--
-- signal(VTSWITCHSIG, vtSwitchHandler);
--
--#if !defined(_OS_FREEBSD_) && !defined(_OS_SOLARIS_)
-- struct vt_mode vtMode;
-- ioctl(kbdFD, VT_GETMODE, &vtMode);
--
-- // let us control VT switching
-- vtMode.mode = VT_PROCESS;
-- vtMode.relsig = VTSWITCHSIG;
-- vtMode.acqsig = VTSWITCHSIG;
-- ioctl(kbdFD, VT_SETMODE, &vtMode);
--
-- struct vt_stat vtStat;
-- ioctl(kbdFD, VT_GETSTATE, &vtStat);
-- vtQws = vtStat.v_active;
--#endif
-+ QSocketNotifier *notifier;
-+ notifier = new QSocketNotifier( kbdFD, QSocketNotifier::Read, this );
-+ connect( notifier, SIGNAL(activated(int)),this, SLOT(readKeyboardData()) );
-+ } else {
-+ qDebug( "Cannot open keyboard" );
- }
--}
--
--QWSTtyKeyboardHandler::~QWSTtyKeyboardHandler()
--{
-- if (kbdFD >= 0)
-- {
-+ init_kbd();
-
--#if !defined(_OS_FREEBSD_) && !defined(_OS_SOLARIS_)
-- struct vt_mode vtMode;
-- ioctl(kbdFD, VT_GETMODE, &vtMode);
-+ struct vt_mode vtMode;
-+ ioctl(kbdFD, VT_GETMODE, &vtMode);
-
-- /* Mickey says: "Better give up control of VT switching.
-- * Hey, I really hate that OS-will-reacquire-resources on process-death
-- * kind of thinking!
-- */
-- vtMode.mode = VT_AUTO;
-- vtMode.relsig = 0;
-- vtMode.acqsig = 0;
-- ioctl(kbdFD, VT_SETMODE, &vtMode);
-+ // let us control VT switching
-+ vtMode.mode = VT_PROCESS;
-+ vtMode.relsig = VTSWITCHSIG;
-+ vtMode.acqsig = VTSWITCHSIG;
-+ ioctl(kbdFD, VT_SETMODE, &vtMode);
-
-- signal(VTSWITCHSIG, 0);
-- qDebug( "~QWSTtyKeyboardHandler() - released VT." );
--#endif
-+ struct vt_stat vtStat;
-+ ioctl(kbdFD, VT_GETSTATE, &vtStat);
-+ vtQws = vtStat.v_active;
-
--#if !defined(_OS_FREEBSD_) && !defined(_OS_SOLARIS_)
-- ioctl(kbdFD, KDSKBMODE, K_XLATE);
--#endif
-- tcsetattr(kbdFD, TCSANOW, &origTermData);
-- ::close(kbdFD);
-- kbdFD = -1;
-- }
-+ signal(VTSWITCHSIG, vtSwitchHandler);
- }
-
--void QWSTtyKeyboardHandler::readKeyboardData()
-+QWSRamsesKbPrivate::~QWSRamsesKbPrivate()
- {
-- unsigned char buf[81];
-- int n = ::read(kbdFD, buf, 80 );
-- for ( int loop = 0; loop < n; loop++ )
-- doKey(buf[loop]);
--}
-+ signal(VTSWITCHSIG, 0);
-
--typedef struct {
-- unsigned short key;
-- unsigned short status;
--} SamsungKeypadInput;
-+ done_kbd();
-
--QWSSamsungKeypadHandler::QWSSamsungKeypadHandler(const QString& device)
--{
-- kbdFD=open(device.isEmpty() ? "/dev/keypad/0" : device.latin1(), O_RDONLY, 0);
-- if( kbdFD < 0 )
-- qWarning("could not open keypad device");
-+ struct vt_mode vtMode;
-+ ioctl(kbdFD, VT_GETMODE, &vtMode);
-+ /* Mickey says: "Better give up control of VT switching.
-+ * Hey, I really hate that OS-will-reacquire-resources on process-death
-+ * kind of thinking!
-+ */
-+ vtMode.mode = VT_AUTO;
-+ vtMode.relsig = 0;
-+ vtMode.acqsig = 0;
-+ ioctl(kbdFD, VT_SETMODE, &vtMode);
-
-- if ( kbdFD >= 0 ) {
-- QSocketNotifier *notifier;
-- notifier = new QSocketNotifier( kbdFD, QSocketNotifier::Read, this );
-- connect( notifier, SIGNAL(activated(int)),this,
-- SLOT(readKeyboardData()) );
-- }
-+ ::close(kbdFD);
-+ kbdFD = -1;
- }
-
--QWSSamsungKeypadHandler::~QWSSamsungKeypadHandler()
--{
-- if (kbdFD >= 0)
-- {
-- ::close(kbdFD);
-- kbdFD = -1;
-- }
--}
-
--void QWSSamsungKeypadHandler::readKeyboardData()
-+static inline int map_to_modif(int current_map)
- {
-- SamsungKeypadInput input;
-- int n = ::read(kbdFD, &input, sizeof(SamsungKeypadInput) );
-- if( n < sizeof(SamsungKeypadInput) )
-- {
-- qWarning("Error reading input from keypad device.");
-- return;
-- }
-- unsigned short key = input.key;
-- unsigned short unicode = 0;
- int modifiers = 0;
-- QWSServer::KeyMap *km = (overrideMap ? overrideMap->find( input.key ) : 0);
-- if( km ) {
-- key = km->key_code;
-- unicode = km->unicode;
-- }
-- switch( key ) {
--#ifdef QT_KEYPAD_MODE
-- case Key_Menu:
-- case Key_Back:
-- case Key_Yes:
-- case Key_No:
-- case Key_Call:
-- case Key_Hangup:
-- case Key_Select:
-- case Key_Context1:
-- case Key_Context2:
-- case Key_Context3:
-- case Key_Context4:
-- modifiers |= Qt::Keypad;
-- break;
--#endif
-- }
-- processKeyEvent( unicode, key, modifiers, input.status != 0, FALSE );
--}
-
--/* USB driver */
-+ if (current_map & KG_ALT)
-+ modifiers |= Qt::ALT;
-+ else if (current_map & KG_CTRL)
-+ modifiers |= Qt::CTRL;
-+ else if (current_map & KG_SHIFT)
-+ modifiers |= Qt::SHIFT;
-
--QWSUsbKeyboardHandler::QWSUsbKeyboardHandler(const QString& device)
--{
-- lastPress = 0;
-- fd = ::open(device.isEmpty()?"/dev/input/event0":device.latin1(),O_RDONLY, 0);
-- if ( fd >= 0 ) {
-- QSocketNotifier *notifier;
-- notifier = new QSocketNotifier( fd, QSocketNotifier::Read, this );
-- connect( notifier, SIGNAL(activated(int)),this,
-- SLOT(readKeyboardData()) );
-- }
-+ return modifiers;
- }
-
--QWSUsbKeyboardHandler::~QWSUsbKeyboardHandler()
--{
-- ::close(fd);
--}
-+struct {
-+ const char *code;
-+ unsigned short qtcode;
-+} qtesc_lookup[] = {
-+ { "\e[A", Qt::Key_Up },
-+ { "\e[B", Qt::Key_Down },
-+ { "\e[C", Qt::Key_Right },
-+ { "\e[D", Qt::Key_Left },
-+ { "\e[1~", Qt::Key_Home },
-+ { "\e[4~", Qt::Key_End },
-+ { "\e[5~", Qt::Key_PageUp },
-+ { "\e[6~", Qt::Key_PageDown },
-
--struct Myinputevent {
-+ { "\e[[A", Qt::Key_F1 },
-+ { "\e[[B", Qt::Key_F2 },
-+ { "\e[[C", Qt::Key_F3 },
-+ { "\e[[D", Qt::Key_F4 },
-+ { "\e[[E", Qt::Key_F5 },
-+ { "\e[17~", Qt::Key_F6 },
-+ { "\e[18~", Qt::Key_F7 },
-+ { "\e[19~", Qt::Key_F8 },
-+ { "\e[20~", Qt::Key_F9 },
-+ { "\e[21~", Qt::Key_F10 },
-+ { "\e[23~", Qt::Key_F11 },
-+ { "\e[24~", Qt::Key_F12 },
-
-- unsigned int dummy1;
-- unsigned int dummy2;
-- unsigned short type;
-- unsigned short code;
-- unsigned int value;
-+ // { "\ex", Qt::FieldExit },
-+ // { "\er", Qt::FieldReset },
-
- };
-
--void QWSUsbKeyboardHandler::readKeyboardData()
--{
-- Myinputevent event;
-- int n = ::read(fd, &event, sizeof(Myinputevent) );
-- if ( n != 16 )
-- return;
--#ifdef QT_QWS_TIP2
-- // custom scan codes - translate them and create a key event immediately
-- if( overrideMap && event.value == 0 || overrideMap->find( event.value ) )
-- {
-- if( event.value )
-- {
-- int modifiers = 0;
-- QWSServer::KeyMap *km = overrideMap->find( event.value );
-- switch( km->unicode )
-- {
-- case Key_Menu:
-- case Key_Back:
-- case Key_Yes:
-- case Key_No:
-- case Key_Call:
-- case Key_Hangup:
-- case Key_Select:
-- case Key_Context1:
-- case Key_Context2:
-- case Key_Context3:
-- case Key_Context4:
-- {
-- modifiers |= Keypad;
-- break;
-- }
-- default:
-- break;
-- }
-- if( km->key_code == Key_F10 && QCopChannel::isRegistered( "QPE/System" ) ) {
-- //hardcoded for now
-- QCopChannel::send( "QPE/System", "showHomeScreen()" );
-- } else {
-- processKeyEvent( km->unicode, km->key_code, modifiers,
-- TRUE, FALSE );
-- }
-- lastPress = km;
-- }
-- else if( lastPress )
-- {
-- processKeyEvent( lastPress->unicode, lastPress->key_code, 0,
-- FALSE, FALSE );
-- lastPress = 0;
-- }
-- }
-- else
--#endif
-- {
-- int key=event.code;
-- if(key==103) {
-- processKeyEvent( 0, Qt::Key_Up, 0, event.value!=0, false );
-- } else if(key==106) {
-- processKeyEvent( 0, Qt::Key_Right, 0, event.value!=0, false );
-- } else if(key==108) {
-- processKeyEvent( 0, Qt::Key_Down, 0, event.value!=0, false );
-- } else if(key==105) {
-- processKeyEvent( 0, Qt::Key_Left, 0, event.value!=0, false );
-- } else {
-- if(event.value==0) {
-- key=key | 0x80;
-- }
-- doKey(key);
-- }
-- }
--}
--
--/*
-- * YOPY buttons driver
-- * Contributed by Ron Victorelli (victorrj at icubed.com)
-- */
-+struct {
-+ unsigned char code;
-+ unsigned short qtcode;
-+} qtkey_lookup[] = {
-+ { 0x08, Qt::Key_Backspace },
-+ { 0x09, Qt::Key_Tab },
-+ { 0x0d, Qt::Key_Enter },
-+ { 0x1b, Qt::Key_Escape },
-+};
-
--QWSyopyButtonsHandler::QWSyopyButtonsHandler() : QWSKeyboardHandler()
-+void QWSRamsesKbPrivate::handleKey(unsigned char code, int n)
- {
--#ifdef QT_QWS_YOPY
-- terminalName = "/dev/tty1";
-- buttonFD = -1;
-- notifier = 0;
--
-- if ((buttonFD = ::open(terminalName, O_RDWR | O_NDELAY, 0)) < 0) {
-- qFatal("Cannot open %s\n", terminalName.latin1());
-- } else {
-+ int qtKeyCode = Qt::Key_unknown;
-+ unsigned int i;
-
-- tcsetpgrp(buttonFD, getpgid(0));
-+ //qDebug("\nhandleKey %02x %d %c", code, n, code >= ' ' ? code : ' ');
-
-- /* put tty into "straight through" mode.
-- */
-- if (tcgetattr(buttonFD, &oldT) < 0) {
-- qFatal("Linux-kbd: tcgetattr failed");
-- }
-+ // Single keys
-+ if ((n==1) && (rptr==0)) {
-+ qtKeyCode = code;
-+ for (i=0; i < sizeof(qtkey_lookup)/sizeof(qtkey_lookup[0]); i++) {
-+ if (qtkey_lookup[i].code == code) {
-+ qtKeyCode = qtkey_lookup[i].qtcode;
-+ code = 0;
-+ break;
-+ }
-+ }
-+ } else
-
-- newT = oldT;
-- newT.c_lflag &= ~(ICANON | ECHO | ISIG);
-- newT.c_iflag &= ~(ISTRIP | IGNCR | ICRNL | INLCR | IXOFF | IXON);
-- newT.c_iflag |= IGNBRK;
-- newT.c_cc[VMIN] = 0;
-- newT.c_cc[VTIME] = 0;
-+ // Alt-<KEY> sequence
-+ if ((n==1) && (rptr==1) && (rbuf[0] == '\e')) {
-+ //qDebug("alt-key %d", code);
-+ handler->processKeyEvent(0, Qt::Key_Alt, 0, 1, 0);
-+ handler->processKeyEvent(0, code-32, Qt::ALT, 1, 0);
-+ handler->processKeyEvent(0, code-32, Qt::ALT, 0, 0);
-+ handler->processKeyEvent(0, Qt::Key_Alt, 0, 0, 0);
-+ rptr = 0;
-+ return;
-+ } else
-
-+ // End of a function key sequence
-+ if ((n==1) && (rptr!=0)) {
-+ rbuf[rptr++] = code;
-+ rbuf[rptr] = 0;
-+ for (i=0; i < sizeof(qtesc_lookup)/sizeof(qtesc_lookup[0]); i++) {
-+ if (strncmp(rbuf, qtesc_lookup[i].code, sizeof(rbuf)) == 0) {
-+ qtKeyCode = qtesc_lookup[i].qtcode;
-+ code = 0;
-+ break;
-+ }
-+ }
-+ if (code != 0) {
-+ //qWarning("no entry in key sequence table for %s", &rbuf[1]);
-+ int oldrptr = rptr;
-+ rptr = 0;
-+ for (i=0; i <= oldrptr; i++) {
-+ handleKey(rbuf[i], 1);
-+ }
-+ return;
-+ }
-+ rptr = 0;
-+ } else
-
-- if (tcsetattr(buttonFD, TCSANOW, &newT) < 0) {
-- qFatal("Linux-kbd: TCSANOW tcsetattr failed");
-- }
-+ // Middle of a function key sequence
-+ {
-+ if (rptr < sizeof(rbuf))
-+ rbuf[rptr++] = code;
-+ return;
-+ }
-
-- if (ioctl(buttonFD, KDSKBMODE, K_MEDIUMRAW) < 0) {
-- qFatal("Linux-kbd: KDSKBMODE tcsetattr failed");
-- }
-+ //qDebug(" code 0x%2x %d -> qtKeyCode 0x%04x", code, code, qtKeyCode);
-
-- notifier = new QSocketNotifier( buttonFD, QSocketNotifier::Read, this );
-- connect( notifier, SIGNAL(activated(int)),this,
-- SLOT(readKeyboardData()) );
-- }
--#endif
-+ handler->processKeyEvent(code, qtKeyCode, 0, 1, 0);
-+ handler->processKeyEvent(code, qtKeyCode, 0, 0, 0);
- }
-
--QWSyopyButtonsHandler::~QWSyopyButtonsHandler()
--{
--#ifdef QT_QWS_YOPY
-- if ( buttonFD > 0 ) {
-- ::close( buttonFD );
-- buttonFD = -1;
-- }
--#endif
--}
-
--void QWSyopyButtonsHandler::readKeyboardData()
-+void QWSRamsesKbPrivate::readKeyboardData()
- {
--#ifdef QT_QWS_YOPY
-- uchar buf[1];
-- char c='1';
-- int fd;
--
-- int n = ::read(buttonFD,buf,1);
-- if (n<0) {
-- qDebug("Keyboard read error %s",strerror(errno));
-- } else {
-- uint code = buf[0]&YPBUTTON_CODE_MASK;
-- bool press = !(buf[0]&0x80);
-- // printf("Key=%d/%d/%d\n",buf[1],code,press);
-- int k=(-1);
-- switch(code) {
-- case 39: k=Qt::Key_Up; break;
-- case 44: k=Qt::Key_Down; break;
-- case 41: k=Qt::Key_Left; break;
-- case 42: k=Qt::Key_Right; break;
-- case 56: k=Qt::Key_F1; break; //windows
-- case 29: k=Qt::Key_F2; break; //cycle
-- case 24: k=Qt::Key_F3; break; //record
-- case 23: k=Qt::Key_F4; break; //mp3
-- case 4: k=Qt::Key_F5; break; // PIMS
-- case 1: k=Qt::Key_Escape; break; // Escape
-- case 40: k=Qt::Key_Up; break; // prev
-- case 45: k=Qt::Key_Down; break; // next
-- case 35: if( !press ) {
-- fd = ::open("/proc/sys/pm/sleep",O_RDWR,0);
-- if( fd >= 0 ) {
-- ::write(fd,&c,sizeof(c));
-- ::close(fd);
-- //
-- // Updates all widgets.
-- //
-- QWidgetList *list = QApplication::allWidgets();
-- QWidgetListIt it( *list ); // iterate over the widgets
-- QWidget * w;
-- while ( (w=it.current()) != 0 ) { // for each widget...
-- ++it;
-- w->update();
-- }
-- delete list;
-- // qApp->desktop()->repaint();
-- }
-- }
-- break;
--
-- default: k=(-1); break;
-- }
--
-- if ( k >= 0 ) {
-- qwsServer->processKeyEvent( 0, k, 0, press, false );
-- }
-+ unsigned char buf[81];
-+ int n = read(kbdFD, buf, 80 );
-+ for ( int loop = 0; loop < n; loop++ ) {
-+ handleKey(buf[loop], n-loop);
- }
--#endif
- }
-
-
--/*
-- * vr41xx buttons driver
-- */
--
--QWSVr41xxButtonsHandler::QWSVr41xxButtonsHandler() : QWSKeyboardHandler()
--{
--#ifdef QT_QWS_CASSIOPEIA
-- terminalName = "/dev/buttons";
-- buttonFD = -1;
-- notifier = 0;
-
-- if ((buttonFD = ::open(terminalName, O_RDWR | O_NDELAY, 0)) < 0)
-- {
-- qWarning("Cannot open %s\n", terminalName.latin1());
-- }
--
-- if ( buttonFD >= 0 ) {
-- notifier = new QSocketNotifier( buttonFD, QSocketNotifier::Read, this );
-- connect( notifier, SIGNAL(activated(int)),this,
-- SLOT(readKeyboardData()) );
-- }
-
-- kbdBufferLen = 80;
-- kbdBuffer = new unsigned char [kbdBufferLen];
-- kbdIdx = 0;
--#endif
--}
-
--QWSVr41xxButtonsHandler::~QWSVr41xxButtonsHandler()
-+QWSRamsesKeyboardHandler::QWSRamsesKeyboardHandler( const QString &device )
- {
--#ifdef QT_QWS_CASSIOPEIA
-- if ( buttonFD > 0 ) {
-- ::close( buttonFD );
-- buttonFD = -1;
-- }
-- delete notifier;
-- notifier = 0;
-- delete [] kbdBuffer;
--#endif
-+ d = new QWSRamsesKbPrivate( this, device );
- }
-
--void QWSVr41xxButtonsHandler::readKeyboardData()
-+QWSRamsesKeyboardHandler::~QWSRamsesKeyboardHandler()
- {
--#ifdef QT_QWS_CASSIOPEIA
-- int n = 0;
-- do {
-- n = ::read(buttonFD, kbdBuffer+kbdIdx, kbdBufferLen - kbdIdx );
-- if ( n > 0 )
-- kbdIdx += n;
-- } while ( n > 0 );
--
-- int idx = 0;
-- while ( kbdIdx - idx >= 2 ) {
-- unsigned char *next = kbdBuffer + idx;
-- unsigned short *code = (unsigned short *)next;
-- int keycode = Qt::Key_unknown;
-- switch ( (*code) & 0x0fff ) {
-- case 0x7:
-- keycode = Qt::Key_Up;
-- break;
-- case 0x9:
-- keycode = Qt::Key_Right;
-- break;
-- case 0x8:
-- keycode = Qt::Key_Down;
-- break;
-- case 0xa:
-- keycode = Qt::Key_Left;
-- break;
-- case 0x3:
-- keycode = Qt::Key_Up;
-- break;
-- case 0x4:
-- keycode = Qt::Key_Down;
-- break;
-- case 0x1:
-- keycode = Qt::Key_Return;
-- break;
-- case 0x2:
-- keycode = Qt::Key_F4;
-- break;
-- default:
-- qDebug("Unrecognised key sequence %d", (int)code );
-- }
-- if ( (*code) & 0x8000 )
-- processKeyEvent( 0, keycode, 0, FALSE, FALSE );
-- else
-- processKeyEvent( 0, keycode, 0, TRUE, FALSE );
--/*
-- unsigned short t = *code;
-- for ( int i = 0; i < 16; i++ ) {
-- keycode = (t & 0x8000) ? Qt::Key_1 : Qt::Key_0;
-- int unicode = (t & 0x8000) ? '1' : '0';
-- processKeyEvent( unicode, keycode, 0, TRUE, FALSE );
-- processKeyEvent( unicode, keycode, 0, FALSE, FALSE );
-- t <<= 1;
-- }
-- keycode = Qt::Key_Space;
--// processKeyEvent( ' ', keycode, 0, TRUE, FALSE );
--// processKeyEvent( ' ', keycode, 0, FALSE, FALSE );
--*/
-- idx += 2;
-- }
--
-- int surplus = kbdIdx - idx;
-- for ( int i = 0; i < surplus; i++ )
-- kbdBuffer[i] = kbdBuffer[idx+i];
-- kbdIdx = surplus;
--#endif
-+ delete d;
- }
-
--
--/*
-- * Virtual framebuffer keyboard driver
-- */
--
--#ifndef QT_NO_QWS_VFB
--#include "qvfbhdr.h"
--extern int qws_display_id;
--#endif
--
--QWSVFbKeyboardHandler::QWSVFbKeyboardHandler()
-+void QWSRamsesKeyboardHandler::processKeyEvent(int unicode, int keycode,
-+ int modifiers, bool isPress, bool autoRepeat)
- {
-- kbdFD = -1;
--#ifndef QT_NO_QWS_VFB
-- kbdIdx = 0;
-- kbdBufferLen = sizeof( QVFbKeyData ) * 5;
-- kbdBuffer = new unsigned char [kbdBufferLen];
--
-- terminalName = QString(QT_VFB_KEYBOARD_PIPE).arg(qws_display_id);
--
-- if ((kbdFD = ::open(terminalName.local8Bit().data(), O_RDWR | O_NDELAY)) < 0) {
-- qDebug( "Cannot open %s (%s)", terminalName.latin1(),
-- strerror(errno));
-- } else {
-- // Clear pending input
-- char buf[2];
-- while (::read(kbdFD, buf, 1) > 0) { }
--
-- notifier = new QSocketNotifier( kbdFD, QSocketNotifier::Read, this );
-- connect(notifier, SIGNAL(activated(int)),this, SLOT(readKeyboardData()));
-+ // Virtual console switching
-+ int term = 0;
-+ bool ctrl = modifiers & Qt::ControlButton;
-+ bool alt = modifiers & Qt::AltButton;
-+ if (ctrl && alt && keycode >= Qt::Key_F1 && keycode <= Qt::Key_F10)
-+ term = keycode - Qt::Key_F1 + 1;
-+ else if (ctrl && alt && keycode == Qt::Key_Left)
-+ term = QMAX(vtQws - 1, 1);
-+ else if (ctrl && alt && keycode == Qt::Key_Right)
-+ term = QMIN(vtQws + 1, 10);
-+ if (term && !isPress) {
-+ ioctl(kbdFD, VT_ACTIVATE, term);
-+ return;
- }
--#endif
--}
-
--QWSVFbKeyboardHandler::~QWSVFbKeyboardHandler()
--{
--#ifndef QT_NO_QWS_VFB
-- if ( kbdFD >= 0 )
-- ::close( kbdFD );
-- delete [] kbdBuffer;
--#endif
-+ QWSKeyboardHandler::processKeyEvent( unicode, keycode, modifiers, isPress, autoRepeat );
- }
-
-
--void QWSVFbKeyboardHandler::readKeyboardData()
--{
--#ifndef QT_NO_QWS_VFB
-- int n;
-- do {
-- n = ::read(kbdFD, kbdBuffer+kbdIdx, kbdBufferLen - kbdIdx );
-- if ( n > 0 )
-- kbdIdx += n;
-- } while ( n > 0 );
--
-- int idx = 0;
-- while ( kbdIdx - idx >= (int)sizeof( QVFbKeyData ) ) {
-- QVFbKeyData *kd = (QVFbKeyData *)(kbdBuffer + idx);
-- if ( kd->unicode == 0 && kd->modifiers == 0 && kd->press ) {
-- // magic exit key
-- qWarning( "Instructed to quit by Virtual Keyboard" );
-- qApp->quit();
-- }
--#ifdef QT_KEYPAD_MODE
-- QWSServer::KeyMap *currentKey = overrideMap ? overrideMap->find( (kd->unicode >> 16) ) : 0;
-- if ( currentKey )
-- processKeyEvent( currentKey->unicode, currentKey->key_code,
-- kd->modifiers, kd->press, kd->repeat );
-- else
--#endif
-- processKeyEvent( kd->unicode&0xffff, kd->unicode>>16,
-- kd->modifiers, kd->press, kd->repeat );
--
-- idx += sizeof( QVFbKeyData );
-- }
--
-- int surplus = kbdIdx - idx;
-- for ( int i = 0; i < surplus; i++ )
-- kbdBuffer[i] = kbdBuffer[idx+i];
-- kbdIdx = surplus;
--#endif
--}
--
-
- /*
- * keyboard driver instantiation
-@@ -1836,26 +565,12 @@
- } else {
- type = spec;
- }
-- if ( type == "Buttons" ) {
--#if defined(QT_QWS_SIMPAD)
-- qDebug( "QWSKeyboardHandler: using SIMpad switches handler..." );
-- handler = new QWSsimpadButtonsHandler();
--#elif defined(QT_QWS_YOPY)
-- handler = new QWSyopyButtonsHandler();
--#elif defined(QT_QWS_CASSIOPEIA)
-- handler = new QWSVr41xxButtonsHandler();
--#endif
-- } else if ( type == "QVFbKeyboard" ) {
-+
-+ if ( type == "QVFbKeyboard" ) {
- handler = new QWSVFbKeyboardHandler();
-- } else if ( type == "USB" ) {
-- handler = new QWSUsbKeyboardHandler(device);
- } else if ( type == "TTY" ) {
-- handler = new QWSTtyKeyboardHandler(device);
-- }
-- else if( type == "Samsung" ) {
-- handler = new QWSSamsungKeypadHandler(device);
-- }
-- else {
-+ handler = new QWSRamsesKeyboardHandler(device);
-+ } else {
- qWarning( "Keyboard type %s:%s unsupported", spec.latin1(), device.latin1() );
- }
-
-@@ -1864,231 +579,6 @@
-
- #include "qkeyboard_qws.moc"
-
--#endif // QNX6
--
--/*!
-- \internal
-- Returns the map of scancodes to Qt key codes and text
--*/
--const QWSServer::KeyMap *QWSServer::keyMap()
--{
-- return keyM;
--}
--
--
--/*
-- * SIMpad switches handler
-- * (C) 2003 Michael 'Mickey' Lauer <mickey@tm.informatik.uni-frankfurt.de>
-- */
--
--
--QWSsimpadButtonsHandler::QWSsimpadButtonsHandler()
-- :QWSKeyboardHandler(), fd( -1 ),
-- repeatdelay( 700 ), repeatperiod( 80 ),
-- lastCode( 0 ), lastPress( 0 ),
-- k( -1 ), shiftKeyPressed( 0 ), shiftUsed( false )
--{
-- qDebug( "SimpadButtonsHandler() - V4.1" );
-- fd = ::open( SIMPAD_SWITCHES_DEVICE, O_RDWR | O_NDELAY, 0 );
-- if ( fd < 0 )
-- {
-- qWarning( "SimpadButtonsHandler(): can't open %s", SIMPAD_SWITCHES_DEVICE );
-- return;
-- }
--
-- notifier = new QSocketNotifier( fd, QSocketNotifier::Read, this );
-- connect( notifier, SIGNAL( activated(int) ),this, SLOT( readSwitchesData() ) );
--
-- repeater = new QTimer(this);
-- connect(repeater, SIGNAL(timeout()), this, SLOT(autoRepeat()));
--
--}
--
--
--QWSsimpadButtonsHandler::~QWSsimpadButtonsHandler()
--{
-- qDebug( "~SimpadButtonsHandler()" );
-- if ( fd > 0 )
-- {
-- ::close( fd );
-- fd = -1;
-- }
--}
--
--
--void QWSsimpadButtonsHandler::readSwitchesData()
--{
-- qDebug( "SimpadButtonsHandler() - detected switches action" );
--
-- if ( ::read( fd, &switches, sizeof switches ) < 0 )
-- {
-- qWarning( "SimpadButtonsHandler() - switches read error!" );
-- return;
-- }
--
-- qDebug( "SimpadButtonsHandler() - Shift: %0x [used: %0x] + Event = %0x | %0x",
-- shiftKeyPressed, shiftUsed, switches.events[0], switches.states[0] );
--
-- bool press = switches.states[0]; // == switches.event[0];
-- int code = switches.events[0];
--
-- //=========================================================================
--
-- /**
-- * Work around a bug in the kernel keyboard driver emitting
-- * bogus events when pressing multiple switches at once
-- **/
--
-- if ( lastCode == 0 )
-- {
-- // first press ever
-- eventTimer.start();
-- lastPress = press;
-- lastCode = code;
-- }
-- else
-- {
-- int interval = eventTimer.restart();
-- qDebug( "event interval = %d", interval );
-- if ( code == lastCode && interval < 10 )
-- {
-- qDebug( "event interval too small - ignoring bogus event" );
-- qDebug( "did I say i hate buggy kernel drivers? :-D" );
-- return;
-- }
--
-- lastPress = press;
-- lastCode = code;
-- }
--
-- /**
-- * Actually it may also be a hardware problem, but I really don't like
-- * to review kernel code for further inquiry. So just being lazy and
-- * do the workaround in user space :-D
-- **/
--
-- //=====================================================================
--
-- if ( shiftKeyPressed )
-- {
-- // a shift key obviously is being held
-- qDebug( "while shift key is being held..." );
--
-- if ( code != shiftKeyPressed )
-- {
-- // another key is being touched - that means shift mode for us!
-- qDebug( " another key is being touched -> shift use now = true" );
--
-- shiftUsed = true;
--
-- if ( shiftKeyPressed == SIMPAD_SWITCH_LOWER ) // SHIFT 1
-- {
-- qDebug( " shift mode 1" );
-- switch(code)
-- {
-- case SIMPAD_SWITCH_UP: k = Qt::Key_F9; break; // Shift1-Up = Calendar
-- case SIMPAD_SWITCH_DOWN: k = Qt::Key_F10; break; // Shift1-Down = Contacts
-- case SIMPAD_SWITCH_LEFT: k = Qt::Key_F13; break; // Shift1-Left = Mail
-- case SIMPAD_SWITCH_RIGHT: k = Qt::Key_F11; break; // Shift1-Up = Menu
-- case SIMPAD_SWITCH_UPPER: k = Qt::Key_F12; break; // Shift1-Upper = Home
-- default: k=-1; qWarning( "SimpadButtonsHandler() - unhandled event for Shift 1 !" ); break;
-- }
-- }
-- else if ( shiftKeyPressed == SIMPAD_SWITCH_UPPER ) // SHIFT 2
-- {
-- qDebug( " shift mode 2" );
-- switch(code)
-- {
-- case SIMPAD_SWITCH_UP: k = Qt::Key_F5; break; // Shift2-Up = F5
-- case SIMPAD_SWITCH_DOWN: k = Qt::Key_F6; break; // Shift2-Down = F6
-- case SIMPAD_SWITCH_LEFT: k = Qt::Key_F7; break; // Shift2-Left = F7
-- case SIMPAD_SWITCH_RIGHT: k = Qt::Key_F8; break; // Shift2-Up = F8
-- case SIMPAD_SWITCH_LOWER: k = Qt::Key_F9; break; // Shift2-Lower = F9
-- default: k=-1; qWarning( "SimpadButtonsHandler() - unhandled event for Shift 2!" ); break;
-- }
-- }
-- }
-- else
-- {
-- qDebug( " shift key has been released. checking if being used..." );
-- shiftKeyPressed = 0;
--
-- if ( !shiftUsed )
-- {
-- qDebug( " ... has _not_ being used -> really emit the key" );
-- k = ( code == SIMPAD_SWITCH_UPPER ? Qt::Key_Escape : Qt::Key_Return );
-- qDebug( "Emitting key = %d (pressed)", k );
-- processKeyEvent( 0, k, 0, true, true );
-- qDebug( "Emitting key = %d (released)", k );
-- processKeyEvent( 0, k, 0, false, true );
-- return;
-- }
-- else
-- {
-- qDebug( " ... has being used -> doing nothing" );
-- return;
-- }
-- }
-- }
-- else
-- {
-- qDebug( "standard mode - no shift yet..." );
--
-- switch(code)
-- {
-- case SIMPAD_SWITCH_UP: k = Qt::Key_Up; break;
-- case SIMPAD_SWITCH_DOWN: k = Qt::Key_Down; break;
-- case SIMPAD_SWITCH_LEFT: k = Qt::Key_Left; break;
-- case SIMPAD_SWITCH_RIGHT: k = Qt::Key_Right; break;
-- case SIMPAD_SWITCH_POWER: k = Qt::Key_F34; break; // Power Button
--
-- case SIMPAD_SWITCH_UPPER: k=-1; shiftKeyPressed = press? code:0; shiftUsed = false; qDebug( "shiftkey pressed now = %d", shiftKeyPressed ); return;
-- case SIMPAD_SWITCH_LOWER: k=-1; shiftKeyPressed = press? code:0; shiftUsed = false; qDebug( "shiftkey pressed now = %d", shiftKeyPressed ); return;
--
-- default: k=-1; qWarning( "SimpadButtonsHandler() - unhandled event!" ); break;
-- }
-- }
--
-- if ( k == -1 )
-- {
-- qDebug( "no key to emit - returning." );
-- return;
-- }
--
-- bool repeatable = ( k == Qt::Key_Up || k == Qt::Key_Down ||
-- k == Qt::Key_Right || k == Qt::Key_Left );
--
-- qDebug( "key to emit = %d [%s] [repeat=%s]", k,
-- press ? "press" : "release",
-- repeatable ? "true":"false" );
--
--#if defined(QT_QWS_IPAQ) || defined(QT_QWS_SL5XXX)
-- if ( qt_screen->isTransformed() && k >= Qt::Key_Left && k <= Qt::Key_Down )
-- {
-- qDebug( "SimpadButtonsHandler() - We are transformed! Correcting..." );
-- int oldK = k;
-- k = xform_dirkey( k );
-- qDebug( "SimpadButtonsHandler() - Old Key: %d - New Key %d", oldK, k );
-- }
--#endif
--
-- if ( repeatable && press )
-- repeater->start( repeatdelay, true );
-- else
-- repeater->stop();
--
-- qwsServer->processKeyEvent( 0, k, 0, press, false );
--}
--
--
--void QWSsimpadButtonsHandler::autoRepeat()
--{
-- qDebug( "Emitting key = %d (released)", k );
-- processKeyEvent( 0, k, 0, false, true );
-- qDebug( "Emitting key = %d (pressed)", k );
-- processKeyEvent( 0, k, 0, true, true );
-- repeater->start(repeatperiod);
--}
-+#endif // QT_NO_QWS_KEYBOARD
-
-
--#endif // QT_NO_QWS_KEYBOARD
---- qt-2.3.10/src/kernel/qwindowsystem_qws.cpp~ramses-keyboard
-+++ qt-2.3.10/src/kernel/qwindowsystem_qws.cpp
-@@ -1791,6 +1791,7 @@
- }
-
- #ifndef QT_NO_QWS_KEYBOARD
-+#ifndef QT_QWS_RAMSES
- static int keyUnicode(int keycode)
- {
- const QWSServer::KeyMap *km = QWSServer::keyMap();
-@@ -1803,6 +1804,7 @@
- return 0xffff;
- }
- #endif
-+#endif
- /*!
- Send a key event. You can use this to send key events generated by
- "virtual keyboards".
-@@ -1845,8 +1847,10 @@
-
- event.simpleData.unicode =
- #ifndef QT_NO_QWS_KEYBOARD
-+#ifndef QT_QWS_RAMSES
- unicode < 0 ? keyUnicode(keycode) :
- #endif
-+#endif
- unicode;
- event.simpleData.keycode = keycode;
- event.simpleData.modifiers = modifiers;