summaryrefslogtreecommitdiff
path: root/noncore/applets/keyhelper/keyhelperapplet/applet
Side-by-side diff
Diffstat (limited to 'noncore/applets/keyhelper/keyhelperapplet/applet') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelper.cpp112
-rw-r--r--noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelper.h42
-rw-r--r--noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelperApplet.cpp65
-rw-r--r--noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelperApplet.h26
-rw-r--r--noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelperWidget.cpp490
-rw-r--r--noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelperWidget.h75
-rw-r--r--noncore/applets/keyhelper/keyhelperapplet/applet/QSafeDataStream.cpp203
-rw-r--r--noncore/applets/keyhelper/keyhelperapplet/applet/QSafeDataStream.h51
8 files changed, 1064 insertions, 0 deletions
diff --git a/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelper.cpp b/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelper.cpp
new file mode 100644
index 0000000..4afdc1f
--- a/dev/null
+++ b/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelper.cpp
@@ -0,0 +1,112 @@
+#include "KeyHelper.h"
+#include <opie2/okeyfilter.h>
+
+KeyHelper::KeyHelper()
+{
+ qDebug("KeyHelper::KeyHelper()");
+ load();
+
+ m_oAction.setKeyModifiers(&m_oModifiers);
+ m_oAction.setKeyMappings(&m_oMappings);
+ m_oAction.setKeyExtensions(&m_oExtensions);
+ m_oAction.setKeyRepeater(&m_oRepeater);
+ m_oExtensions.setKeyModifiers(&m_oModifiers);
+}
+
+KeyHelper::~KeyHelper()
+{
+ unset();
+ qDebug("KeyHelper::~KeyHelper()");
+}
+
+bool KeyHelper::filter(int unicode, int keycode, int modifiers,
+ bool isPress, bool autoRepeat)
+{
+ m_oAction.setAction(unicode, keycode, modifiers,
+ isPress, autoRepeat);
+ return(m_oAction.doAction());
+}
+
+void KeyHelper::unset()
+{
+ Opie::Core::OKeyFilter::inst()->remHandler(this);;
+}
+
+void KeyHelper::set()
+{
+ Opie::Core::OKeyFilter::inst()->addHandler(this);
+ m_oModifiers.resetStates();
+}
+
+void KeyHelper::enable()
+{
+ m_oAction.enable();
+}
+
+void KeyHelper::disable()
+{
+ m_oAction.disable();
+ m_oRepeater.stop();
+}
+
+bool KeyHelper::load(const QString& file)
+{
+ KeycfgReader oReader;
+ oReader.setKeyModifiers(&m_oModifiers);
+ oReader.setKeyMappings(&m_oMappings);
+ oReader.setKeyExtensions(&m_oExtensions);
+ oReader.setKeyRepeater(&m_oRepeater);
+
+ bool success;
+ if(file.length() == 0){
+ success = oReader.load();
+ } else if(file[0] == '/'){
+ success = oReader.load(file);
+ } else {
+ //QString filepath = QString(::getenv("HOME")) + "/Settings/" + file;
+ QString filepath = QDir::homeDirPath() + "/Settings/" + file;
+ success = oReader.load(filepath);
+ }
+ if(success == false){
+ qDebug("config xml load error");
+ setDefault();
+ }
+ return(success);
+}
+
+bool KeyHelper::reload(const QString& file)
+{
+ m_oModifiers.reset();
+ m_oMappings.reset();
+ m_oExtensions.reset();
+ m_oRepeater.reset();
+
+ return(load(file));
+}
+
+void KeyHelper::setDefault()
+{
+ /* default settings */
+ m_oExtensions.assign("switch", Qt::Key_F12,
+ m_oModifiers.getMask("Shift"), KeyNames::getCode("Shift"));
+ m_oExtensions.assign("select", Qt::Key_F11,
+ m_oModifiers.getMask("Shift"), KeyNames::getCode("Shift"));
+}
+
+void KeyHelper::statistics()
+{
+ m_oModifiers.statistics();
+ m_oMappings.statistics();
+ m_oExtensions.statistics();
+ m_oRepeater.statistics();
+}
+
+void KeyHelper::dumpkeymap()
+{
+ const QWSServer::KeyMap* m = QWSServer::keyMap();
+ qWarning("KeyHelper::dumpkeymap()");
+ while(m->key_code != 0){
+ qWarning(" [%04x][%04x][%04x][%04x]", m->key_code, m->unicode, m->shift_unicode, m->ctrl_unicode);
+ m++;
+ }
+}
diff --git a/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelper.h b/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelper.h
new file mode 100644
index 0000000..aabb6eb
--- a/dev/null
+++ b/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelper.h
@@ -0,0 +1,42 @@
+#ifndef _KEY_HELPER_H_
+#define _KEY_HELPER_H_
+
+#include <qdir.h>
+#include <qwindowsystem_qws.h>
+#include "KeyNames.h"
+#include "KeyMappings.h"
+#include "KeyModifiers.h"
+#include "KeyExtensions.h"
+#include "KeyRepeater.h"
+#include "KeyAction.h"
+#include "KeycfgReader.h"
+
+class KeyHelper : public QWSServer::KeyboardFilter
+{
+public:
+ KeyHelper();
+ virtual ~KeyHelper();
+ bool filter(int unicode, int keycode, int modifiers,
+ bool isPress, bool autoRepeat);
+
+ void enable();
+ void disable();
+ void set();
+ void unset();
+ void statistics();
+ void dumpkeymap();
+ bool reload(const QString& file=QString::null);
+private:
+ friend class KeyHelperWidget;
+
+ bool load(const QString& file=QString::null);
+ void setDefault();
+
+ KeyAction m_oAction;
+ KeyMappings m_oMappings;
+ KeyModifiers m_oModifiers;
+ KeyExtensions m_oExtensions;
+ KeyRepeater m_oRepeater;
+};
+
+#endif /* _KEY_HELPER_H_ */
diff --git a/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelperApplet.cpp b/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelperApplet.cpp
new file mode 100644
index 0000000..28304d7
--- a/dev/null
+++ b/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelperApplet.cpp
@@ -0,0 +1,65 @@
+#include "KeyHelperApplet.h"
+#include "KeyHelperWidget.h"
+
+#if 0
+KeyHelperApplet::KeyHelperApplet()
+ : widget(0), ref(0)
+{
+ qDebug("KeyHelperApplet::KeyHelperApplet()");
+}
+
+KeyHelperApplet::~KeyHelperApplet()
+{
+ qDebug("KeyHelperApplet::~KeyHelperApplet()");
+ delete widget;
+}
+
+QWidget* KeyHelperApplet::applet(QWidget* parent)
+{
+ if(!widget){
+ widget = new KeyHelperWidget(parent);
+ }
+ return(widget);
+}
+
+int KeyHelperApplet::position() const
+{
+ return(6);
+}
+
+QRESULT KeyHelperApplet::queryInterface(const QUuid& uuid,
+ QUnknownInterface** iface)
+{
+ *iface = 0;
+
+ if(QFile::exists("/tmp/disable-keyhelper")
+ || QFile::exists("/mnt/card/disable-keyhelper")
+ || QFile::exists("/mnt/cf/disable-keyhelper")){
+ return QS_FALSE;
+ }
+
+ if(uuid == IID_QUnknown){
+ *iface = this;
+ } else if(uuid == IID_TaskbarApplet){
+ *iface = this;
+ }
+
+ if(*iface){
+ (*iface)->addRef();
+ }
+ return QS_OK;
+}
+
+Q_EXPORT_INTERFACE()
+{
+ Q_CREATE_INSTANCE(KeyHelperApplet)
+}
+
+#else
+#include <opie2/otaskbarapplet.h>
+
+using namespace Opie::Ui;
+
+EXPORT_OPIE_APPLET_v1( KeyHelperWidget )
+
+#endif
diff --git a/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelperApplet.h b/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelperApplet.h
new file mode 100644
index 0000000..ef164dc
--- a/dev/null
+++ b/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelperApplet.h
@@ -0,0 +1,26 @@
+#ifndef _KEY_HELPER_APPLET_H_
+#define _KEY_HELPER_APPLET_H_
+
+#if 0
+#include <qpe/taskbarappletinterface.h>
+#include "KeyHelperWidget.h"
+
+class KeyHelperApplet : public TaskbarAppletInterface
+{
+public:
+ KeyHelperApplet();
+ virtual ~KeyHelperApplet();
+
+ QRESULT queryInterface(const QUuid&, QUnknownInterface**);
+ Q_REFCOUNT
+
+ virtual QWidget* applet(QWidget* parent);
+ virtual int position() const;
+private:
+ KeyHelperWidget* widget;
+ ulong ref;
+};
+
+#endif
+
+#endif /* _KEY_HELPER_APPLET_H_ */
diff --git a/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelperWidget.cpp b/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelperWidget.cpp
new file mode 100644
index 0000000..7beb511
--- a/dev/null
+++ b/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelperWidget.cpp
@@ -0,0 +1,490 @@
+#include "KeyHelperWidget.h"
+#include "QSafeDataStream.h"
+#include "KHUtil.h"
+
+QWidget* g_Widget = NULL;
+int g_level = 0;
+
+static const char* _version_ = "1.2.2";
+
+KeyHelperWidget::KeyHelperWidget(QWidget* parent, const char* name)
+ : QLabel(parent, name),disabled(Resource::loadPixmap("zkb-disabled"))
+{
+ qDebug("KeyHelperWidget::KeyHelperWidget()");
+ g_Widget = this;
+ m_defHandler = NULL;
+ //m_reset = false;
+ m_reset = true;
+ m_useFilter = false;
+ m_pHelper = NULL;
+ m_status = false;
+
+ //unset();
+ initDebugLevel();
+
+ m_pHelper = new KeyHelper();
+
+ //qApp->installEventFilter(this);
+
+ connect(qwsServer,
+ SIGNAL(windowEvent(QWSWindow*, QWSServer::WindowEvent)),
+ this,
+ SLOT(windowEvent(QWSWindow*, QWSServer::WindowEvent)));
+
+ m_pChannel = new QCopChannel("QPE/KeyHelper", this);
+ connect(m_pChannel, SIGNAL(received(const QCString&, const QByteArray&)),
+ this, SLOT(receiveMessage(const QCString&, const QByteArray&)));
+ m_pSysChannel = new QCopChannel("QPE/System", this);
+ connect(m_pSysChannel, SIGNAL(received(const QCString&, const QByteArray&)),
+ this, SLOT(sysMessage(const QCString&, const QByteArray&)));
+
+ //AppLnkManager::init();
+ setFixedWidth ( AppLnk::smallIconSize() );
+ setFixedHeight ( AppLnk::smallIconSize() );
+ setPixmap(disabled);
+ init();
+}
+
+KeyHelperWidget::~KeyHelperWidget()
+{
+ qDebug("KeyHelperWidget::~KeyHelperWidget()");
+ disconnect(qwsServer,
+ SIGNAL(windowEvent(QWSWindow*, QWSServer::WindowEvent)),
+ this,
+ SLOT(windowEvent(QWSWindow*, QWSServer::WindowEvent)));
+ disconnect(m_pChannel, SIGNAL(received(const QCString&, const QByteArray&)),
+ this, SLOT(receiveMessage(const QCString&, const QByteArray&)));
+ unset();
+ if (m_pHelper) delete m_pHelper;
+ if (m_pChannel) delete m_pChannel;
+ if (m_pSysChannel) delete m_pSysChannel;
+ m_pHelper = NULL;
+ setDebugLevel(0);
+}
+
+void KeyHelperWidget::mouseReleaseEvent(QMouseEvent*)
+{
+ ConfigEx::getInstance("keyhelper").setConfig("keyhelper");
+}
+
+void KeyHelperWidget::receiveMessage(
+ const QCString& msg, const QByteArray& data)
+{
+ if(m_pHelper == NULL){
+ return;
+ }
+ QSafeDataStream stream(data, IO_ReadOnly);
+ if(msg == "event(int,int,int,int,int)"){
+ int unicode;
+ int keycode;
+ int modifiers;
+ int isPress;
+ int autoRepeat;
+ stream >> unicode >> keycode >> modifiers >> isPress >> autoRepeat;
+ doEvent(unicode, keycode, modifiers, isPress, autoRepeat);
+ } else if(msg == "event(QString,int)"){
+ QString key;
+ int isPress;
+ stream >> key >> isPress;
+ doEvent(key, isPress);
+ } else if(msg == "enable()"){
+ enable();
+ } else if(msg == "disable()"){
+ disable();
+ } else if(msg == "pause()"){
+ pause();
+ } else if(msg == "restart()"){
+ restart();
+ } else if(msg == "reload()"){
+ m_xmlfile = QString::null;
+ doReload();
+ } else if(msg == "reload(QString)"){
+ stream >> m_xmlfile;
+ doReload(false);
+ } else if(msg == "version()"){
+ version();
+ } else if(msg == "repeater(int)"){
+ int mode;
+ stream >> mode;
+ m_pHelper->m_oRepeater.setMode(mode);
+ } else if(msg == "hook(QString)"){
+ QString s;
+ stream >> s;
+ m_pHelper->m_oAction.setHook(s.local8Bit());
+ } else if(msg == "unhook()"){
+ m_pHelper->m_oAction.setHook("");
+ } else if(msg == "config()"){
+ ConfigEx::getInstance("keyhelper").setConfig("keyhelper");
+ } else if(msg == "config(QString)"){
+ QString name;
+ stream >> name;
+ if(name == QString::null){
+ ConfigEx::getInstance("keyhelper").setConfig("keyhelper");
+ } else {
+ ConfigEx::getInstance("keyhelper").setConfig(name);
+ }
+ } else if(msg == "capture(int)"){
+ int enable;
+ stream >> enable;
+ m_pHelper->m_oAction.setCapture(enable);
+ } else if(msg == "statistics()"){
+ int level = g_level;
+ if(level == 0){
+ setDebugLevel(1);
+ }
+ m_pHelper->statistics();
+ if(level == 0){
+ setDebugLevel(0);
+ }
+ } else if(msg == "dumpkeymap()"){
+ int level = g_level;
+ if(level == 0){
+ setDebugLevel(1);
+ }
+ m_pHelper->dumpkeymap();
+ if(level == 0){
+ setDebugLevel(0);
+ }
+ } else if(msg == "debug(int)"){
+ int level;
+ stream >> level;
+ setDebugLevel(level);
+ }
+}
+
+void KeyHelperWidget::doReload(bool showstatus)
+{
+ ConfigEx& cfg = ConfigEx::getInstance("keyhelper");
+ QString oldgroup = cfg.getGroup();
+ cfg.setGroup("Global");
+ m_status = false;
+ if(showstatus && (cfg.readNumEntry("ShowStatusOnReload", 1) == 1)){
+ m_status = true;
+ version();
+ QCopEnvelope("QPE/System", "busy()");
+ }
+ cfg.setGroup(oldgroup);
+ QTimer::singleShot(0, this, SLOT(reload()));
+}
+
+void KeyHelperWidget::doEvent(int unicode, int keycode, int modifiers, int isPress, int autoRepeat)
+{
+ if(isPress == 0 || isPress == 1){
+ m_pHelper->m_oAction.setAction(unicode, keycode, modifiers, isPress, autoRepeat);
+ m_pHelper->m_oAction.doAction();
+ } else {
+ /* press & release */
+ m_pHelper->m_oAction.setAction(unicode, keycode, modifiers, 1, autoRepeat);
+ m_pHelper->m_oAction.doAction();
+ m_pHelper->m_oAction.setAction(unicode, keycode, modifiers, 0, autoRepeat);
+ m_pHelper->m_oAction.doAction();
+ }
+}
+
+void KeyHelperWidget::doEvent(const QString& key, int isPress)
+{
+ int unicode,keycode;
+ int modifiers = 0;
+ int pos;
+ QString keyname = key;
+ pos = keyname.find("+SHIFT", 0, FALSE);
+ if(pos > 0){
+ modifiers |= Qt::ShiftButton;
+ keyname.remove(pos, 6);
+ }
+ pos = keyname.find("+CTRL", 0, FALSE);
+ if(pos > 0){
+ modifiers |= Qt::ControlButton;
+ keyname.remove(pos, 5);
+ }
+ pos = keyname.find("+ALT", 0, FALSE);
+ if(pos > 0){
+ modifiers |= Qt::AltButton;
+ keyname.remove(pos, 4);
+ }
+ if(keyname.length() > 1){
+ unicode = 0xffff;
+ keycode = KeyNames::getCode(keyname);
+ /* get unicode */
+ const QWSServer::KeyMap* m;
+ for(m=QWSServer::keyMap(); m->key_code != 0; m++){
+ if(m->key_code == keycode){
+ if(modifiers & Qt::ControlButton){
+ unicode = m->ctrl_unicode;
+ } else if(modifiers & Qt::ShiftButton){
+ unicode = m->shift_unicode;
+ } else {
+ unicode = m->unicode;
+ }
+ break;
+ }
+ }
+ } else {
+ const QWSServer::KeyMap* m;
+ keycode = 0;
+ unicode = keyname[0].unicode();
+ /* check unicode */
+ for(m=QWSServer::keyMap(); keycode == 0 && m->key_code != 0; m++){
+ if(m->unicode == unicode){
+ keycode = m->key_code;
+ break;
+ }
+ }
+ /* check shift_unicode */
+ for(m=QWSServer::keyMap(); keycode == 0 && m->key_code != 0; m++){
+ if(m->shift_unicode == unicode){
+ keycode = m->key_code;
+ modifiers |= Qt::ShiftButton;
+ break;
+ }
+ }
+ /* check ctrl_unicode */
+ for(m=QWSServer::keyMap(); keycode == 0 && m->key_code != 0; m++){
+ if(m->ctrl_unicode == unicode){
+ keycode = m->key_code;
+ modifiers |= Qt::ControlButton;
+ break;
+ }
+ }
+ }
+ doEvent(unicode, keycode, modifiers, isPress, 0);
+}
+
+void KeyHelperWidget::sysMessage(
+ const QCString& msg, const QByteArray& data)
+{
+ QSafeDataStream stream(data, IO_ReadOnly);
+ if(msg == "linkChanged(QString)"){
+ ConfigEx& cfg = ConfigEx::getInstance("keyhelper");
+ QString oldgroup = cfg.getGroup();
+ if(cfg.readNumEntry("DetectLinkChange", 1) == 1){
+ AppLnkManager::init(true);
+ reload();
+ }
+ cfg.setGroup(oldgroup);
+ }
+}
+
+void MsgHandler(QtMsgType type, const char* msg)
+{
+ switch(type){
+ case QtDebugMsg:
+ if(g_level >= 2){
+ syslog(LOG_LOCAL5|LOG_DEBUG,
+ "<2>%s", msg);
+ }
+ break;
+ case QtWarningMsg:
+ if(g_level >= 1){
+ syslog(LOG_LOCAL5|LOG_DEBUG,
+ "<1>%s", msg);
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+void KeyHelperWidget::initDebugLevel()
+{
+ ConfigEx& cfg = ConfigEx::getInstance("keyhelper");
+ cfg.setGroup("Global");
+
+ int level = cfg.readNumEntry("DebugLevel", 0);
+ setDebugLevel(level);
+}
+
+void KeyHelperWidget::setDebugLevel(int level)
+{
+#ifdef QT_QWS_EBX
+ static bool noDebug = true;
+ g_level = level;
+ if(g_level > 0){
+ if(noDebug){
+ m_defHandler = qInstallMsgHandler(MsgHandler);
+ noDebug = false;
+ }
+ } else {
+ qInstallMsgHandler(m_defHandler);
+ noDebug = true;
+ }
+#endif
+}
+
+void KeyHelperWidget::enable()
+{
+ m_enable = true;
+ m_pHelper->enable();
+ //set();
+ QTimer::singleShot(0, this, SLOT(set()));
+}
+
+void KeyHelperWidget::disable()
+{
+ m_enable = false;
+ m_pHelper->disable();
+ unset();
+}
+
+void KeyHelperWidget::pause()
+{
+ m_saved = m_enable;
+ disable();
+}
+
+void KeyHelperWidget::restart()
+{
+ if(m_saved){
+ enable();
+ }
+}
+
+void KeyHelperWidget::reload()
+{
+ disable();
+ ConfigEx& cfg = ConfigEx::getInstance("keyhelper");
+ cfg.reload();
+ if(m_pHelper->reload(m_xmlfile) == false){
+ if(m_status){
+ Global::statusMessage("KeyHelper: Load Error");
+ }
+ }
+ init();
+ if(m_status){
+ QCopEnvelope e("QPE/System", "notBusy(QString)");
+ const QString app = KHUtil::currentApp();
+ e << app;
+ m_status = false;
+ }
+}
+
+void KeyHelperWidget::version()
+{
+ QString ver = "KeyHelper ";
+ ver.append(_version_);
+ Global::statusMessage(ver);
+}
+
+void KeyHelperWidget::init()
+{
+ AppLnkManager::init();
+#if 0
+ if(m_pHelper == NULL){
+ m_pHelper = new KeyHelper();
+ }
+#endif
+ loadUseFilterApps();
+ enable();
+}
+
+void KeyHelperWidget::set()
+{
+ if(m_pHelper != NULL && m_enable == true && m_useFilter == false){
+ qWarning("KeyHelperWidget::set()");
+ m_pHelper->set();
+ }
+}
+
+void KeyHelperWidget::unset()
+{
+ m_pHelper->unset();
+}
+
+void KeyHelperWidget::loadUseFilterApps()
+{
+ ConfigEx& cfg = ConfigEx::getInstance("keyhelper");
+
+ cfg.setGroup("Global");
+ m_apps = cfg.readListEntry("UseFilterApps", ',');
+
+ if(m_apps.isEmpty()){
+ /* default */
+ m_apps.append("CRIM");
+ m_apps.append("Jpn50Pad");
+ m_apps.append("JpnKtnPad");
+ m_apps.append("JpnNumPad");
+ m_apps.append("JpnSymPad");
+ m_apps.append("Keyboard");
+ m_apps.append("IMWidget"); /* IMKit */
+ m_apps.append("POBox"); /* QPOBox */
+ }
+}
+
+#if 0
+void KeyHelperWidget::windowEvent(QWSWindow* w, QWSServer::WindowEvent e)
+{
+ if(m_apps.contains(w->name())){
+ switch(e){
+ case QWSServer::Hide:
+ case QWSServer::Destroy:
+ m_useFilter = false;
+ //m_reset = true;
+ QTimer::singleShot(0, this, SLOT(set()));
+ break;
+ case QWSServer::Create:
+ case QWSServer::Raise:
+ case QWSServer::Show:
+ m_useFilter = true;
+ //m_reset = false;
+ m_reset = true;
+ break;
+ default:
+ break;
+ }
+ } else if(w->client()->identity() != NULL && w->name() != NULL){
+ switch(e){
+#if 0
+ case QWSServer::Create:
+ case QWSServer::Hide:
+ if(m_useFilter == false && m_reset){
+ m_reset = false;
+ set();
+ //QTimer::singleShot(0, this, SLOT(set()));
+ }
+ break;
+#else
+ case QWSServer::Hide:
+ case QWSServer::Destroy:
+ //if(m_useFilter == false && m_reset){
+ if(m_reset){
+ m_reset = false;
+ set();
+ //QTimer::singleShot(0, this, SLOT(set()));
+ }
+ break;
+ case QWSServer::Create:
+ case QWSServer::Raise:
+ case QWSServer::Show:
+ m_reset = true;
+ break;
+#endif
+ default:
+#if 0
+ if(m_reset == true){
+ m_reset = false;
+ set();
+ }
+#endif
+ break;
+ }
+ }
+ if(w->name() != NULL){
+ qWarning("[%s][%s][%x][%s]",
+ w->name().latin1(),
+ w->caption().latin1(),
+ e,
+ w->client()->identity().latin1());
+ }
+}
+
+#endif
+
+bool KeyHelperWidget::eventFilter(QObject* o, QEvent* e)
+{
+ return QWidget::eventFilter(o, e);
+}
+
+int KeyHelperWidget::position()
+{
+ return 3;
+}
diff --git a/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelperWidget.h b/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelperWidget.h
new file mode 100644
index 0000000..4798c5c
--- a/dev/null
+++ b/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelperWidget.h
@@ -0,0 +1,75 @@
+#ifndef _KEY_HELPER_WIDGET_H_
+#define _KEY_HELPER_WIDGET_H_
+
+#include <qwidget.h>
+#include <qlabel.h>
+#include <qpixmap.h>
+#include <qtimer.h>
+#include <qaccel.h>
+#include <opie2/otaskbarapplet.h>
+#include <opie2/okeyfilter.h>
+
+#include <qpe/qcopenvelope_qws.h>
+#include <qpe/qpeapplication.h>
+#include <qpe/global.h>
+#include <qpe/resource.h>
+#include "KeyHelper.h"
+#include "AppLnkManager.h"
+#include "ConfigEx.h"
+
+#include <syslog.h>
+
+Q_EXPORT void MsgHandler(QtMsgType type, const char* msg);
+
+class KeyHelperWidget : public QLabel
+{
+ Q_OBJECT
+public:
+ KeyHelperWidget(QWidget* parent = 0, const char* name=0);
+ ~KeyHelperWidget();
+ static int position();
+
+ virtual bool eventFilter(QObject* o, QEvent* e);
+
+public slots:
+ //void windowEvent(QWSWindow* w, QWSServer::WindowEvent e);
+protected:
+ QCopChannel* m_pChannel;
+ QCopChannel* m_pSysChannel;
+ QPixmap disabled;
+
+protected slots:
+ void receiveMessage(const QCString& msg, const QByteArray& data);
+ void sysMessage(const QCString& msg, const QByteArray& data);
+ void reload();
+ void set();
+ void unset();
+ void init();
+ void mouseReleaseEvent(QMouseEvent*);
+
+private:
+ void loadUseFilterApps();
+ void enable();
+ void disable();
+ void pause();
+ void restart();
+ void version();
+ void setDebugLevel(int level);
+ void initDebugLevel();
+
+ bool m_reset;
+ bool m_useFilter;
+ bool m_status;
+ QString m_xmlfile;
+ msg_handler m_defHandler;
+ bool m_enable;
+ bool m_saved;
+ QStringList m_apps;
+ KeyHelper* m_pHelper;
+private slots:
+ void doReload(bool showstatus=true);
+ void doEvent(int,int,int,int,int);
+ void doEvent(const QString&, int);
+};
+
+#endif /* _KEY_HELPER_WIDGET_H_ */
diff --git a/noncore/applets/keyhelper/keyhelperapplet/applet/QSafeDataStream.cpp b/noncore/applets/keyhelper/keyhelperapplet/applet/QSafeDataStream.cpp
new file mode 100644
index 0000000..69ba562
--- a/dev/null
+++ b/noncore/applets/keyhelper/keyhelperapplet/applet/QSafeDataStream.cpp
@@ -0,0 +1,203 @@
+#include "QSafeDataStream.h"
+
+#include <qstring.h>
+#include <qstringlist.h>
+#include <qdatetime.h>
+
+QSafeDataStream &QSafeDataStream::operator>>( Q_INT8 &i )
+{
+ if(atEnd()){
+ i = 0;
+ return *this;
+ } else {
+ return (QSafeDataStream&)QDataStream::operator>>(i);
+ }
+}
+
+QSafeDataStream &QSafeDataStream::operator>>( Q_UINT8 &i )
+{
+ if(atEnd()){
+ i = 0;
+ return *this;
+ } else {
+ return (QSafeDataStream&)QDataStream::operator>>(i);
+ }
+}
+
+QSafeDataStream &QSafeDataStream::operator>>( Q_INT16 &i )
+{
+ if(atEnd()){
+ i = 0;
+ return *this;
+ } else {
+ return (QSafeDataStream&)QDataStream::operator>>(i);
+ }
+}
+
+QSafeDataStream &QSafeDataStream::operator>>( Q_UINT16 &i )
+{
+ if(atEnd()){
+ i = 0;
+ return *this;
+ } else {
+ return (QSafeDataStream&)QDataStream::operator>>(i);
+ }
+}
+
+QSafeDataStream &QSafeDataStream::operator>>( Q_INT32 &i )
+{
+ if(atEnd()){
+ i = 0;
+ return *this;
+ } else {
+ return (QSafeDataStream&)QDataStream::operator>>(i);
+ }
+}
+
+QSafeDataStream &QSafeDataStream::operator>>( Q_UINT32 &i )
+{
+ if(atEnd()){
+ i = 0;
+ return *this;
+ } else {
+ return (QSafeDataStream&)QDataStream::operator>>(i);
+ }
+}
+
+QSafeDataStream &QSafeDataStream::operator>>( Q_INT64 &i )
+{
+ if(atEnd()){
+ i = 0;
+ return *this;
+ } else {
+ return (QSafeDataStream&)QDataStream::operator>>(i);
+ }
+}
+
+QSafeDataStream &QSafeDataStream::operator>>( Q_UINT64 &i )
+{
+ if(atEnd()){
+ i = 0;
+ return *this;
+ } else {
+ return (QSafeDataStream&)QDataStream::operator>>(i);
+ }
+}
+
+
+QSafeDataStream &QSafeDataStream::operator>>( float &f )
+{
+ if(atEnd()){
+ f = 0;
+ return *this;
+ } else {
+ return (QSafeDataStream&)QDataStream::operator>>(f);
+ }
+}
+
+QSafeDataStream &QSafeDataStream::operator>>( double &f )
+{
+ if(atEnd()){
+ f = 0;
+ return *this;
+ } else {
+ return (QSafeDataStream&)QDataStream::operator>>(f);
+ }
+}
+
+QSafeDataStream &QSafeDataStream::operator>>( char *&str )
+{
+ if(atEnd()){
+ str = 0;
+ return *this;
+ } else {
+ return (QSafeDataStream&)QDataStream::operator>>(str);
+ }
+}
+
+QSafeDataStream &QSafeDataStream::readBytes( char *&s, uint &len )
+{
+ if(atEnd()){
+ s = 0;
+ len = 0;
+ return *this;
+ } else {
+ return (QSafeDataStream&)QDataStream::readBytes(s, len);
+ }
+}
+
+QSafeDataStream &QSafeDataStream::readRawBytes( char *s, uint len )
+{
+ if(atEnd()){
+ return *this;
+ } else {
+ return (QSafeDataStream&)QDataStream::readRawBytes(s, len);
+ }
+}
+
+QSafeDataStream &QSafeDataStream::operator>>( QString& s )
+{
+ if(atEnd()){
+ s = QString::null;
+ return *this;
+ } else {
+ return (QSafeDataStream&)(*((QDataStream*)this) >> s);
+ }
+}
+
+QSafeDataStream &QSafeDataStream::operator>>( QStringList& list )
+{
+ if(atEnd()){
+ list.clear();
+ return *this;
+ } else {
+ return (QSafeDataStream&)(*((QDataStream*)this) >> list);
+ }
+}
+
+QSafeDataStream &QSafeDataStream::operator>>( QByteArray& a )
+{
+ if(atEnd()){
+ a.resize(0);
+ return *this;
+ } else {
+ return (QSafeDataStream&)(*((QDataStream*)this) >> a);
+ }
+}
+
+QSafeDataStream &QSafeDataStream::operator>>( QCString& s )
+{
+ if(atEnd()){
+ s.resize(0);
+ return *this;
+ } else {
+ return (QSafeDataStream&)(*((QDataStream*)this) >> s);
+ }
+}
+
+QSafeDataStream &QSafeDataStream::operator>>( QDate& d )
+{
+ if(atEnd()){
+ return *this;
+ } else {
+ return (QSafeDataStream&)(*((QDataStream*)this) >> d);
+ }
+}
+
+QSafeDataStream &QSafeDataStream::operator>>( QTime& t )
+{
+ if(atEnd()){
+ return *this;
+ } else {
+ return (QSafeDataStream&)(*((QDataStream*)this) >> t);
+ }
+}
+
+QSafeDataStream &QSafeDataStream::operator>>( QDateTime& dt )
+{
+ if(atEnd()){
+ return *this;
+ } else {
+ return (QSafeDataStream&)(*((QDataStream*)this) >> dt);
+ }
+}
diff --git a/noncore/applets/keyhelper/keyhelperapplet/applet/QSafeDataStream.h b/noncore/applets/keyhelper/keyhelperapplet/applet/QSafeDataStream.h
new file mode 100644
index 0000000..2152b23
--- a/dev/null
+++ b/noncore/applets/keyhelper/keyhelperapplet/applet/QSafeDataStream.h
@@ -0,0 +1,51 @@
+#ifndef _QSAFEDATASTREAM_H_
+#define _QSAFEDATASTREAM_H_
+
+#include <qdatastream.h>
+
+class QString;
+class QStringList;
+class QCString;
+class QDate;
+class QTime;
+class QDateTime;
+
+class QSafeDataStream : public QDataStream
+{
+public:
+ /* constructors */
+ QSafeDataStream()
+ : QDataStream() {}
+ QSafeDataStream(QIODevice* d)
+ : QDataStream(d) {}
+ QSafeDataStream(QByteArray a, int mode)
+ : QDataStream(a, mode) {}
+
+ /* read functions */
+ QSafeDataStream &operator>>( Q_INT8 &i );
+ QSafeDataStream &operator>>( Q_UINT8 &i );
+ QSafeDataStream &operator>>( Q_INT16 &i );
+ QSafeDataStream &operator>>( Q_UINT16 &i );
+ QSafeDataStream &operator>>( Q_INT32 &i );
+ QSafeDataStream &operator>>( Q_UINT32 &i );
+ QSafeDataStream &operator>>( Q_INT64 &i );
+ QSafeDataStream &operator>>( Q_UINT64 &i );
+
+ QSafeDataStream &operator>>( float &f );
+ QSafeDataStream &operator>>( double &f );
+ QSafeDataStream &operator>>( char *&str );
+
+ QSafeDataStream &readBytes( char *&, uint &len );
+ QSafeDataStream &readRawBytes( char *, uint len );
+
+ QSafeDataStream &operator>>( QString& s );
+ QSafeDataStream &operator>>( QStringList& list );
+ QSafeDataStream &operator>>( QByteArray& a );
+ QSafeDataStream &operator>>( QCString& s );
+ QSafeDataStream &operator>>( QDate& d );
+ QSafeDataStream &operator>>( QTime& t );
+ QSafeDataStream &operator>>( QDateTime& dt );
+
+};
+
+#endif /* _QSAFEDATASTREAM_H_ */