diff options
Diffstat (limited to 'packages')
| -rw-r--r-- | packages/qte/qte-2.3.10/ramses-keyboard.patch | 2339 |
1 files changed, 2339 insertions, 0 deletions
diff --git a/packages/qte/qte-2.3.10/ramses-keyboard.patch b/packages/qte/qte-2.3.10/ramses-keyboard.patch index e69de29bb2..61b5f302cf 100644 --- a/packages/qte/qte-2.3.10/ramses-keyboard.patch +++ b/packages/qte/qte-2.3.10/ramses-keyboard.patch @@ -0,0 +1,2339 @@ + +# +# 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) |
