summaryrefslogtreecommitdiff
authormickeyl <mickeyl>2003-05-26 18:22:40 (UTC)
committer mickeyl <mickeyl>2003-05-26 18:22:40 (UTC)
commitbafafde5e5777e6af8c5f7dcc93472d75e942a8f (patch) (side-by-side diff)
tree3bc7de6766d39664f89c66c32160d52015b0aadf
parent304b92e24c7a7da309977cd996fc89848d8899dc (diff)
downloadopie-bafafde5e5777e6af8c5f7dcc93472d75e942a8f.zip
opie-bafafde5e5777e6af8c5f7dcc93472d75e942a8f.tar.gz
opie-bafafde5e5777e6af8c5f7dcc93472d75e942a8f.tar.bz2
add improved version of QWSSimpadButtonHandler
this one now features automatic keyrepeat and adapts to rotation :-D
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--qt/qte234-for-opie091-simpad.patch69
1 files changed, 58 insertions, 11 deletions
diff --git a/qt/qte234-for-opie091-simpad.patch b/qt/qte234-for-opie091-simpad.patch
index fd535d4..93f4be3 100644
--- a/qt/qte234-for-opie091-simpad.patch
+++ b/qt/qte234-for-opie091-simpad.patch
@@ -25,8 +25,8 @@
if ((mouseFD = open( "/dev/h3600_ts", O_RDONLY | O_NDELAY)) < 0) {
# 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 @@
++++ src/kernel/qkeyboard_qws.cpp Mon May 26 19:52:05 2003
+@@ -131,6 +131,53 @@
#endif // QNX6
@@ -63,17 +63,33 @@
+
+ private slots:
+ void readSwitchesData();
++ void autoRepeat();
+
+ private:
+ switches_mask_t switches;
++
+ int fd;
++ int repeatdelay;
++ int repeatperiod;
++ int k;
++
++ QTimer* repeater;
+ QSocketNotifier *notifier;
+};
+
#ifdef QT_QWS_SL5XXX
static const QWSServer::KeyMap keyM[] = {
{ Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 00
-@@ -1440,7 +1480,11 @@
+@@ -396,7 +443,7 @@
+ for the list of codes).
+ <li>\a modifiers is the set of modifier keys (see Qt::Modifier).
+ <li>\a isPress says whether this is a press or a release.
+- <li>\a autoRepeat says whether this event was generated by an auto-repeat
++ <li>\a time says whether this event was generated by an auto-repeat
+ mechanism, or an actual key press.
+ </ul>
+ */
+@@ -1440,7 +1486,11 @@
} else {
type = spec;
}
@@ -86,20 +102,21 @@
if ( type == "Buttons" ) {
#if defined(QT_QWS_YOPY)
handler = new QWSyopyButtonsHandler();
-@@ -1469,6 +1513,72 @@
+@@ -1469,6 +1519,103 @@
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 )
++ :QWSKeyboardHandler(), fd( -1 ),
++ repeatdelay( 400 ), repeatperiod( 80 )
+{
+ qDebug( "SimpadButtonsHandler()" );
+ fd = ::open( SIMPAD_SWITCHES_DEVICE, O_RDWR | O_NDELAY, 0 );
@@ -111,8 +128,12 @@
+
+ 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()
+{
@@ -135,12 +156,12 @@
+ return;
+ }
+
-+ qDebug( "SimpadButtonsHandler() - EVENT = %04xd | %04xd",
++ qDebug( "SimpadButtonsHandler() - SwitchEvent = %0x | %0x",
+ switches.events[0], switches.states[0] );
+
+ bool press = switches.states[0]; // == switches.event[0];
+ int code = switches.events[0];
-+ int k = -1;
++ k = -1;
+
+ switch(code)
+ {
@@ -153,10 +174,36 @@
+ default: k=-1; qWarning( "SimpadButtonsHandler() - unhandled event!" ); break;
+ }
+
++ bool repeatable = ( k != SIMPAD_SWITCH_UPPER && k != SIMPAD_SWITCH_LOWER );
++
++ qDebug( "SimpadButtonsHandler() - Repeatable = %s", repeatable? "true":"false" );
++
++ 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 );
++ }
++
++ if ( repeatable && press )
++ repeater->start( repeatdelay, true );
++ else
++ repeater->stop();
++
+ if ( k >= 0 )
+ {
+ qwsServer->processKeyEvent( 0, k, 0, press, false );
+ }
+}
+
++
++void QWSsimpadButtonsHandler::autoRepeat()
++{
++ processKeyEvent( 0, k, 0, false, true );
++ processKeyEvent( 0, k, 0, true, true );
++ repeater->start(repeatperiod);
++}
++
++
+#endif // QT_NO_QWS_KEYBOARD