summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/launcher/desktop.cpp11
-rw-r--r--core/launcher/launcher.pro2
-rw-r--r--core/launcher/main.cpp91
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
@@ -237,20 +237,23 @@ bool DesktopApplication::qwsEventFilter( QWSEvent *e )
return TRUE;
}
}
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;
}
if ( ke->simpleData.keycode == Key_F32 ) {
if ( press ) QCopEnvelope e( "QPE/Desktop", "startSync()" );
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
@@ -104,17 +104,17 @@ DEPENDPATH += $(OPIEDIR)/include .
INCLUDEPATH += $(OPIEDIR)/calibrate
DEPENDPATH += $(OPIEDIR)/calibrate
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
TRANSLATIONS += ../i18n/hu/qpe.ts
TRANSLATIONS += ../i18n/ja/qpe.ts
TRANSLATIONS += ../i18n/fr/qpe.ts
TRANSLATIONS += ../i18n/ko/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
@@ -29,16 +29,18 @@
#include <qpe/custom.h>
#endif
#include <qfile.h>
#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>
#if defined(QT_QWS_CASSIOPEIA) || defined(QT_QWS_IPAQ) || defined(QT_QWS_EBX)
#include "../calibrate/calibrate.h"
#endif
@@ -179,16 +181,103 @@ void initEnvironment()
static void initBacklight()
{
QCopEnvelope e("QPE/System", "setBacklight(int)" );
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
initCassiopeia();
#endif
#ifdef QPE_OWNAPM
@@ -204,16 +293,18 @@ int initApplication( int argc, char ** argv )
#if !defined(QT_QWS_CASSIOPEIA) && !defined(QT_QWS_IPAQ) && !defined(QT_QWS_EBX)
setenv( "QWS_SIZE", "240x320", 0 );
#endif
//Don't flicker at startup:
QWSServer::setDesktopBackground( QImage() );
DesktopApplication a( argc, argv, QApplication::GuiServer );
+ (void) new ModelKeyFilter ( );
+
initBacklight();
AlarmServer::initialize();
#if defined(QT_QWS_LOGIN)
for( int i=0; i<a.argc(); i++ )
if( strcmp( a.argv()[i], "-login" ) == 0 ) {
QDMDialogImpl::login( );