author | mickeyl <mickeyl> | 2003-05-24 16:11:25 (UTC) |
---|---|---|
committer | mickeyl <mickeyl> | 2003-05-24 16:11:25 (UTC) |
commit | 5667ded1d4583cfb79b2ddfd7aaae0e58ed6d552 (patch) (side-by-side diff) | |
tree | 761118ba87a2f97a526acac7e53b1b664c541282 /qt | |
parent | 3fb06f85a52b6fcbece50ed30c196efc2a91e8ce (diff) | |
download | opie-5667ded1d4583cfb79b2ddfd7aaae0e58ed6d552.zip opie-5667ded1d4583cfb79b2ddfd7aaae0e58ed6d552.tar.gz opie-5667ded1d4583cfb79b2ddfd7aaae0e58ed6d552.tar.bz2 |
add QWSsimpadButtonHandler and patch it into qte
-rw-r--r-- | qt/qte234-for-opie091-simpad.patch | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/qt/qte234-for-opie091-simpad.patch b/qt/qte234-for-opie091-simpad.patch index e2e323a..fd535d4 100644 --- a/qt/qte234-for-opie091-simpad.patch +++ b/qt/qte234-for-opie091-simpad.patch @@ -26 +26,137 @@ # endif +--- src/kernel/qkeyboard_qws.cpp.orig Sat May 24 16:49:38 2003 ++++ src/kernel/qkeyboard_qws.cpp Sat May 24 17:58:22 2003 +@@ -131,6 +131,46 @@ + + #endif // QNX6 + ++/* ++ * SIMpad switches handler ++ * (C) 2003 Michael 'Mickey' Lauer <mickey@tm.informatik.uni-frankfurt.de> ++ */ ++ ++//TODO: guard this against inclusion with #ifdef QT_QWS_SIMPAD ++ ++#include <linux/switches.h> ++#define SIMPAD_SWITCHES_DEVICE "/dev/misc/switches" ++ ++// switches from top to down over the SIMpad surface ++ ++#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(); ++ ++ private: ++ switches_mask_t switches; ++ int fd; ++ QSocketNotifier *notifier; ++}; ++ + #ifdef QT_QWS_SL5XXX + static const QWSServer::KeyMap keyM[] = { + { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 00 +@@ -1440,7 +1480,11 @@ + } else { + type = spec; + } +- ++ if ( type == "SIMpad" ) ++ { ++ qDebug( "QWSKeyboardHandler: using SIMpad keyboard handler..." ); ++ handler = new QWSsimpadButtonsHandler(); ++ } + if ( type == "Buttons" ) { + #if defined(QT_QWS_YOPY) + handler = new QWSyopyButtonsHandler(); +@@ -1469,6 +1513,72 @@ + return keyM; + } + +-#endif // QT_NO_QWS_KEYBOARD + ++/* ++ * SIMpad switches handler ++ * (C) 2003 Michael 'Mickey' Lauer <mickey@tm.informatik.uni-frankfurt.de> ++ */ ++ ++ ++QWSsimpadButtonsHandler::QWSsimpadButtonsHandler() ++ :QWSKeyboardHandler(), fd( -1 ) ++{ ++ qDebug( "SimpadButtonsHandler()" ); ++ 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() ) ); ++} + ++ ++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() - EVENT = %04xd | %04xd", ++ switches.events[0], switches.states[0] ); ++ ++ bool press = switches.states[0]; // == switches.event[0]; ++ int code = switches.events[0]; ++ int k = -1; ++ ++ switch(code) ++ { ++ case SIMPAD_SWITCH_UPPER: k = Qt::Key_Escape; break; ++ 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_LOWER: k = Qt::Key_Return; break; ++ default: k=-1; qWarning( "SimpadButtonsHandler() - unhandled event!" ); break; ++ } ++ ++ if ( k >= 0 ) ++ { ++ qwsServer->processKeyEvent( 0, k, 0, press, false ); ++ } ++} ++ ++#endif // QT_NO_QWS_KEYBOARD |