-rw-r--r-- | core/launcher/desktop.cpp | 11 | ||||
-rw-r--r-- | core/launcher/launcher.pro | 2 | ||||
-rw-r--r-- | core/launcher/main.cpp | 91 |
3 files changed, 99 insertions, 5 deletions
diff --git a/core/launcher/desktop.cpp b/core/launcher/desktop.cpp index aa51898..ab4f14a 100644 --- a/core/launcher/desktop.cpp +++ b/core/launcher/desktop.cpp @@ -241,12 +241,15 @@ bool DesktopApplication::qwsEventFilter( QWSEvent *e ) if ( ke->simpleData.keycode == Key_F34 ) { if ( press ) emit power(); return TRUE; } - if ( ke->simpleData.keycode == Key_SysReq ) { - if ( press ) emit power(); - return TRUE; - } +// This was used for the iPAQ PowerButton +// See main.cpp for new KeyboardFilter +// +// if ( ke->simpleData.keycode == Key_SysReq ) { +// if ( press ) emit power(); +// return TRUE; +// } if ( ke->simpleData.keycode == Key_F35 ) { if ( press ) emit backlight(); return TRUE; } diff --git a/core/launcher/launcher.pro b/core/launcher/launcher.pro index c77da50..f94f338 100644 --- a/core/launcher/launcher.pro +++ b/core/launcher/launcher.pro @@ -108,9 +108,9 @@ INCLUDEPATH += $(OPIEDIR)/rsync DEPENDPATH += $(OPIEDIR)/rsync TARGET = qpe -LIBS += -lqpe -lcrypt +LIBS += -lqpe -lcrypt -lopie TRANSLATIONS = ../i18n/de/qpe.ts TRANSLATIONS += ../i18n/pt_BR/qpe.ts TRANSLATIONS += ../i18n/en/qpe.ts diff --git a/core/launcher/main.cpp b/core/launcher/main.cpp index fc6d829..347eee9 100644 --- a/core/launcher/main.cpp +++ b/core/launcher/main.cpp @@ -33,8 +33,10 @@ #include <qwindowsystem_qws.h> #include <qpe/qcopenvelope_qws.h> #include <qpe/alarmserver.h> +#include <opie/ohwinfo.h> + #include <stdlib.h> #include <stdio.h> #include <signal.h> #include <unistd.h> @@ -183,8 +185,95 @@ static void initBacklight() e << -3; // Forced on } +class ModelKeyFilter : public QObject, public QWSServer::KeyboardFilter +{ +public: + ModelKeyFilter ( ) : QObject ( 0, "MODEL_KEY_FILTER" ) + { + bool doinst = false; + + m_model = OHwInfo::inst ( )-> model ( ); + m_power_timer = 0; + + switch ( m_model ) { + case OMODEL_iPAQ_H31xx: + case OMODEL_iPAQ_H36xx: + case OMODEL_iPAQ_H37xx: + case OMODEL_iPAQ_H38xx: doinst = true; + break; + default : break; + } + if ( doinst ) + QWSServer::setKeyboardFilter ( this ); + } + + virtual bool filter ( int unicode, int keycode, int modifiers, bool isPress, bool autoRepeat ) + { + bool kill = false; + + // Rotate cursor keys 180° + switch ( m_model ) { + case OMODEL_iPAQ_H31xx: + case OMODEL_iPAQ_H38xx: { + int newkeycode = keycode; + + switch ( keycode ) { + case Key_Left : newkeycode = Key_Right; break; + case Key_Right: newkeycode = Key_Left; break; + case Key_Up : newkeycode = Key_Down; break; + case Key_Down : newkeycode = Key_Up; break; + } + if ( newkeycode != keycode ) { + QWSServer::sendKeyEvent ( -1, newkeycode, modifiers, isPress, autoRepeat ); + kill = true; + } + break; + } + default: break; + } + + // map Power Button short/long press to F34/F35 + switch ( m_model ) { + case OMODEL_iPAQ_H31xx: + case OMODEL_iPAQ_H36xx: + case OMODEL_iPAQ_H37xx: + case OMODEL_iPAQ_H38xx: { + if ( keycode == Key_SysReq ) { + if ( isPress ) { + m_power_timer = startTimer ( 500 ); + } + else if ( m_power_timer ) { + killTimer ( m_power_timer ); + m_power_timer = 0; + QWSServer::sendKeyEvent ( -1, Key_F34, 0, true, false ); + QWSServer::sendKeyEvent ( -1, Key_F34, 0, false, false ); + } + kill = true; + } + break; + } + default: break; + } + return kill; + } + + virtual void timerEvent ( QTimerEvent * ) + { + killTimer ( m_power_timer ); + m_power_timer = 0; + QWSServer::sendKeyEvent ( -1, Key_F35, 0, true, false ); + QWSServer::sendKeyEvent ( -1, Key_F35, 0, false, false ); + } + +private: + OHwModel m_model; + bool m_power_press; + int m_power_timer; +}; + + int initApplication( int argc, char ** argv ) { #ifdef QT_QWS_CASSIOPEIA @@ -208,8 +297,10 @@ int initApplication( int argc, char ** argv ) //Don't flicker at startup: QWSServer::setDesktopBackground( QImage() ); DesktopApplication a( argc, argv, QApplication::GuiServer ); + (void) new ModelKeyFilter ( ); + initBacklight(); AlarmServer::initialize(); |