summaryrefslogtreecommitdiff
authoralwin <alwin>2005-03-15 11:24:43 (UTC)
committer alwin <alwin>2005-03-15 11:24:43 (UTC)
commit90d940ea8244140b25552bb8a28eacb7d3db01e8 (patch) (side-by-side diff)
tree5de47f91c534f8c034f101ee6344af104d4cd31d
parent81989dcd316065c2e72ecf43fc2cb8bfbf82763f (diff)
downloadopie-90d940ea8244140b25552bb8a28eacb7d3db01e8.zip
opie-90d940ea8244140b25552bb8a28eacb7d3db01e8.tar.gz
opie-90d940ea8244140b25552bb8a28eacb7d3db01e8.tar.bz2
setup a workaround for missing autorepeat flag on specialbuttons.
eg, keyfilter of serverapp stores the last pressed button itself and checks against holdtime and releases itself. on c7x0/c8x0 it works with 2.6 kernel cause keys are repeated without this flag - on 2.4 kernel I don't know what happen (may that keys are not repeated)
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/launcher/serverapp.cpp22
-rw-r--r--core/launcher/serverapp.h2
2 files changed, 18 insertions, 6 deletions
diff --git a/core/launcher/serverapp.cpp b/core/launcher/serverapp.cpp
index 75d4ac1..6fe0479 100644
--- a/core/launcher/serverapp.cpp
+++ b/core/launcher/serverapp.cpp
@@ -146,3 +146,3 @@ void DesktopPowerAlerter::hideEvent( QHideEvent *e )
-KeyFilter::KeyFilter(QObject* parent) : QObject(parent), held_tid(0), heldButton(0)
+KeyFilter::KeyFilter(QObject* parent) : QObject(parent), held_tid(0), heldButton(0),firedHeldButton(0)
{
@@ -161,2 +161,3 @@ void KeyFilter::timerEvent(QTimerEvent* e)
emit activate(heldButton, TRUE);
+ firedHeldButton = heldButton;
heldButton = 0;
@@ -204,2 +205,3 @@ bool KeyFilter::checkButtonAction(bool db, int keycode, int press, int autoRepe
+// odebug << " KeyFilter::checkButtonAction("<<db<<","<<keycode<<","<<press<<","<<autoRepeat<<")"<<oendl;
/* check if it was registered */
@@ -209,3 +211,2 @@ bool KeyFilter::checkButtonAction(bool db, int keycode, int press, int autoRepe
} else {
-
// First check to see if DeviceButtonManager knows something about this button:
@@ -213,3 +214,12 @@ bool KeyFilter::checkButtonAction(bool db, int keycode, int press, int autoRepe
if (button && !autoRepeat) {
- if ( held_tid ) {
+ if (firedHeldButton) {
+ if (held_tid) {
+ killTimer(held_tid);
+ held_tid = 0;
+ }
+ if (!press && button == firedHeldButton) {
+ firedHeldButton = 0;
+ return TRUE;
+ }
+ } else if ( held_tid && heldButton != button) {
killTimer(held_tid);
@@ -221,4 +231,6 @@ bool KeyFilter::checkButtonAction(bool db, int keycode, int press, int autoRepe
} else if ( press ) {
- heldButton = button;
- held_tid = startTimer( ODevice::inst ()->buttonHoldTime () );
+ if (heldButton != button) {
+ heldButton = button;
+ held_tid = startTimer( ODevice::inst ()->buttonHoldTime () );
+ }
} else if ( heldButton ) {
diff --git a/core/launcher/serverapp.h b/core/launcher/serverapp.h
index 27be28b..98c5633 100644
--- a/core/launcher/serverapp.h
+++ b/core/launcher/serverapp.h
@@ -83,3 +83,3 @@ private:
int held_tid;
- const Opie::Core::ODeviceButton* heldButton;
+ const Opie::Core::ODeviceButton* heldButton,*firedHeldButton;
KeyRegisterList m_keys;