summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/applets/zkbapplet/zkbwidget.cpp235
-rw-r--r--noncore/applets/zkbapplet/zkbwidget.h32
-rw-r--r--noncore/apps/keyz-cfg/zkb.cpp3
3 files changed, 140 insertions, 130 deletions
diff --git a/noncore/applets/zkbapplet/zkbwidget.cpp b/noncore/applets/zkbapplet/zkbwidget.cpp
index 38bfba9..8499500 100644
--- a/noncore/applets/zkbapplet/zkbwidget.cpp
+++ b/noncore/applets/zkbapplet/zkbwidget.cpp
@@ -1,161 +1,168 @@
1#include <opie2/otaskbarapplet.h> 1#include <opie2/otaskbarapplet.h>
2#include <opie2/okeyfilter.h>
2#include <qpe/qcopenvelope_qws.h> 3#include <qpe/qcopenvelope_qws.h>
3#include <qpe/applnk.h> 4#include <qpe/applnk.h>
4#include <qpe/qpeapplication.h> 5#include <qpe/qpeapplication.h>
5#include <qpe/resource.h> 6#include <qpe/resource.h>
6#include <stdio.h> 7#include <stdio.h>
7#include <unistd.h> 8#include <unistd.h>
8#include "zkbwidget.h" 9#include "zkbwidget.h"
9#include "zkbcfg.h" 10#include "zkbcfg.h"
10 11
11using namespace Opie::Ui; 12using namespace Opie::Ui;
12ZkbWidget::ZkbWidget(QWidget* parent):QLabel(parent),keymap(0),
13 disabled(Resource::loadPixmap("zkb-disabled")) {
14 13
15 labels = new QPopupMenu(); 14ZkbWidget::ZkbWidget(QWidget* parent)
16 connect(labels, SIGNAL(activated(int)), this, 15 :QLabel(parent),keymap(0),disabled(Resource::loadPixmap("zkb-disabled")) {
17 SLOT(labelChanged(int)));
18 16
19 loadKeymap(); 17 labels = new QPopupMenu();
18 connect(labels, SIGNAL(activated(int)), this,
19 SLOT(labelChanged(int)));
20 20
21 channel = new QCopChannel("QPE/zkb", this); 21 loadKeymap();
22 connect(channel, SIGNAL(received(const QCString&,const QByteArray&)), 22
23 this, SLOT(signalReceived(const QCString&,const QByteArray&))); 23 channel = new QCopChannel("QPE/zkb", this);
24 connect(channel, SIGNAL(received(const QCString&,const QByteArray&)),
25 this, SLOT(signalReceived(const QCString&,const QByteArray&)));
24 setFixedWidth ( AppLnk::smallIconSize() ); 26 setFixedWidth ( AppLnk::smallIconSize() );
25 setFixedHeight ( AppLnk::smallIconSize() ); 27 setFixedHeight ( AppLnk::smallIconSize() );
26} 28}
27 29
28ZkbWidget::~ZkbWidget() { 30ZkbWidget::~ZkbWidget()
31{
32 if (keymap != 0) {
33 delete keymap;
34 keymap = 0;
35 }
29} 36}
30 37
31int ZkbWidget::position() 38int ZkbWidget::position()
32{ 39{
33 return 8; 40 return 8;
34} 41}
35 42
36bool ZkbWidget::loadKeymap() { 43bool ZkbWidget::loadKeymap() {
37 ZkbConfig c(QPEApplication::qpeDir()+"/share/zkb"); 44 ZkbConfig c(QPEApplication::qpeDir()+"/share/zkb");
38 QFontMetrics fm(font()); 45 QFontMetrics fm(font());
39 46
40 if (keymap != 0) { 47 if (keymap != 0) {
41 delete keymap; 48 delete keymap;
42 keymap = 0; 49 keymap = 0;
43 } 50 }
44 51
45 Keymap* km = new Keymap(); 52 Keymap* km = new Keymap();
46 53
47 if (!c.load("zkb.xml", *km, "")) { 54 if (!c.load("zkb.xml", *km, "")) {
48 delete km; 55 delete km;
49 setPixmap(disabled); 56 setPixmap(disabled);
50 return false; 57 return false;
51 } 58 }
52 59
53 connect(km, SIGNAL(stateChanged(const QString&)), 60 connect(km, SIGNAL(stateChanged(const QString&)),
54 this, SLOT(stateChanged(const QString&))); 61 this, SLOT(stateChanged(const QString&)));
55 62
56 qwsServer->setKeyboardFilter(km); 63 Opie::Core::OKeyFilter::inst()->addHandler(km);
57 64
58 Keymap* oldkm = keymap; 65 Keymap* oldkm = keymap;
59 keymap = km; 66 keymap = km;
60 67
61 if (oldkm != 0) { 68 if (oldkm != 0) {
62 delete oldkm; 69 delete oldkm;
63 } 70 }
64 71
65 setText(keymap->getCurrentLabel()); 72 QString ltext = keymap->getCurrentLabel();
66 73 if (ltext.length()==0) ltext = "??";
67 labels->clear(); 74 setText(ltext);
68 QStringList l = keymap->listLabels(); 75
69 labels->insertItem(disabled, 0, 0); 76 labels->clear();
70 int n = 1; 77 QStringList l = keymap->listLabels();
71 w = 0; 78 labels->insertItem(disabled, 0, 0);
72 for(QStringList::Iterator it = l.begin(); it != l.end(); 79 int n = 1;
73 ++it, n++) { 80 w = 0;
74 81 for(QStringList::Iterator it = l.begin(); it != l.end();
75 // printf("label: %s\n", (const char*) (*it).utf8()); 82 ++it, n++) {
76 83
77 labels->insertItem(*it, n, n); 84// printf("label: %s\n", (const char*) (*it).utf8());
78 int lw = fm.width(*it); 85
79 if (lw > w) { 86 labels->insertItem(*it, n, n);
80 w = lw; 87 int lw = fm.width(*it);
81 } 88 if (lw > w) {
82 } 89 w = lw;
83 90 }
84 if (w == 0) { 91 }
85 hide(); 92
86 } else { 93 if (w == 0) {
87 show(); 94 hide();
88 } 95 } else {
89 return true; 96 show();
97 }
98 return true;
90} 99}
91 100
92QSize ZkbWidget::sizeHint() const { 101QSize ZkbWidget::sizeHint() const {
93 return QSize(AppLnk::smallIconSize(),AppLnk::smallIconSize()); 102 return QSize(AppLnk::smallIconSize(),AppLnk::smallIconSize());
94} 103}
95 104
96void ZkbWidget::stateChanged(const QString& s) { 105void ZkbWidget::stateChanged(const QString& s) {
97 //odebug << "stateChanged: " << s.utf8() << "\n" << oendl; 106// odebug << "stateChanged: " << s.utf8() << "\n" << oendl;
98 setText(s); 107 setText(s);
99} 108}
100 109
101void ZkbWidget::labelChanged(int id) { 110void ZkbWidget::labelChanged(int id) {
102 if (id == 0) { 111 if (id == 0) {
103 keymap->disable(); 112 keymap->disable();
104 setPixmap(disabled); 113 setPixmap(disabled);
105 return; 114 return;
106 } 115 }
107 116
108 keymap->enable(); 117 keymap->enable();
109 118
110 QStringList l = keymap->listLabels(); 119 QStringList l = keymap->listLabels();
111 QString lbl = l[id-1]; 120 QString lbl = l[id-1];
112 121
113 //printf("labelChanged: %s\n", (const char*) lbl.utf8()); 122// printf("labelChanged: %s\n", (const char*) lbl.utf8());
114 State* state = keymap->getStateByLabel(lbl); 123 State* state = keymap->getStateByLabel(lbl);
115 if (state != 0) { 124 if (state != 0) {
116 keymap->setCurrentState(state); 125 keymap->setCurrentState(state);
117 setText(lbl); 126 setText(lbl);
118 } 127 }
119} 128}
120 129
121void ZkbWidget::mouseReleaseEvent(QMouseEvent*) { 130void ZkbWidget::mouseReleaseEvent(QMouseEvent*) {
122 QSize sh = labels->sizeHint(); 131 QSize sh = labels->sizeHint();
123 QPoint p = mapToGlobal(QPoint((width()-sh.width())/2,-sh.height())); 132 QPoint p = mapToGlobal(QPoint((width()-sh.width())/2,-sh.height()));
124 labels->exec(p); 133 labels->exec(p);
125} 134}
126 135
127void ZkbWidget::signalReceived(const QCString& msg, const QByteArray& data) { 136void ZkbWidget::signalReceived(const QCString& msg, const QByteArray& data) {
128 QDataStream stream(data, IO_ReadOnly); 137 QDataStream stream(data, IO_ReadOnly);
129 138
130 if (msg == "enable()") { 139 if (msg == "enable()") {
131 keymap->enable(); 140 keymap->enable();
132 } else if (msg == "disable()") { 141 } else if (msg == "disable()") {
133 keymap->disable(); 142 keymap->disable();
134 } else if (msg == "reload()") { 143 } else if (msg == "reload()") {
135 QCopEnvelope("QPE/System", "busy()"); 144 QCopEnvelope("QPE/System", "busy()");
136 QTimer::singleShot(0, this, SLOT(reload())); 145 QTimer::singleShot(0, this, SLOT(reload()));
137 } else if (msg == "switch(QString)") { 146 } else if (msg == "switch(QString)") {
138 QString lbl; 147 QString lbl;
139 stream >> lbl; 148 stream >> lbl;
140 149
141 if (keymap != 0) { 150 if (keymap != 0) {
142 State* state = keymap->getStateByLabel(lbl); 151 State* state = keymap->getStateByLabel(lbl);
143 if (state != 0) { 152 if (state != 0) {
144 keymap->setCurrentState(state); 153 keymap->setCurrentState(state);
145 setText(lbl); 154 setText(lbl);
146 } 155 }
147 } 156 }
148 } else if (msg == "debug(QString)") { 157 } else if (msg == "debug(QString)") {
149 QString flag; 158 QString flag;
150 stream >> flag; 159 stream >> flag;
151 } 160 }
152} 161}
153 162
154void ZkbWidget::reload() { 163void ZkbWidget::reload() {
155 loadKeymap(); 164 loadKeymap();
156 QCopEnvelope("QPE/System", "notBusy()"); 165 QCopEnvelope("QPE/System", "notBusy()");
157} 166}
158 167
159EXPORT_OPIE_APPLET_v1( ZkbWidget ) 168EXPORT_OPIE_APPLET_v1( ZkbWidget )
160
161
diff --git a/noncore/applets/zkbapplet/zkbwidget.h b/noncore/applets/zkbapplet/zkbwidget.h
index 7c67794..9bce85a 100644
--- a/noncore/applets/zkbapplet/zkbwidget.h
+++ b/noncore/applets/zkbapplet/zkbwidget.h
@@ -1,39 +1,39 @@
1#ifndef ZKBWIDGET_H 1#ifndef ZKBWIDGET_H
2#define ZKBWIDGET_H 2#define ZKBWIDGET_H
3 3
4#include <qwidget.h> 4#include <qwidget.h>
5#include <qlabel.h> 5#include <qlabel.h>
6#include <qpopupmenu.h> 6#include <qpopupmenu.h>
7#include <qpixmap.h> 7#include <qpixmap.h>
8#include <qcopchannel_qws.h> 8#include <qcopchannel_qws.h>
9 9
10#include "zkb.h" 10#include "zkb.h"
11 11
12class ZkbWidget : public QLabel { 12class ZkbWidget : public QLabel {
13Q_OBJECT 13Q_OBJECT
14 14
15public: 15public:
16 ZkbWidget(QWidget* parent); 16 ZkbWidget(QWidget* parent);
17 ~ZkbWidget(); 17 ~ZkbWidget();
18 static int position(); 18 static int position();
19 19
20 QSize sizeHint() const; 20 QSize sizeHint() const;
21 21
22protected: 22protected:
23 QLabel* label; 23 QLabel* label;
24 Keymap* keymap; 24 Keymap* keymap;
25 QPopupMenu* labels; 25 QPopupMenu* labels;
26 QCopChannel* channel; 26 QCopChannel* channel;
27 int w, h; 27 int w, h;
28 QPixmap disabled; 28 QPixmap disabled;
29 29
30 bool loadKeymap(); 30 bool loadKeymap();
31 void mouseReleaseEvent(QMouseEvent*); 31 void mouseReleaseEvent(QMouseEvent*);
32 32
33protected slots: 33protected slots:
34 void stateChanged(const QString&); 34 void stateChanged(const QString&);
35 void labelChanged(int id); 35 void labelChanged(int id);
36 void signalReceived(const QCString& msg, const QByteArray& data); 36 void signalReceived(const QCString& msg, const QByteArray& data);
37 void reload(); 37 void reload();
38}; 38};
39#endif 39#endif
diff --git a/noncore/apps/keyz-cfg/zkb.cpp b/noncore/apps/keyz-cfg/zkb.cpp
index c9e1dc5..a357b88 100644
--- a/noncore/apps/keyz-cfg/zkb.cpp
+++ b/noncore/apps/keyz-cfg/zkb.cpp
@@ -1,52 +1,53 @@
1#include "zkb.h" 1#include "zkb.h"
2 2
3/* OPIE */ 3/* OPIE */
4#include <opie2/odebug.h> 4#include <opie2/odebug.h>
5#include <opie2/okeyfilter.h>
5 6
6#include <stdio.h> 7#include <stdio.h>
7 8
8// Implementation of Action class 9// Implementation of Action class
9Action::Action():state(0), keycode(0), unicode(0), flags(0) { 10Action::Action():state(0), keycode(0), unicode(0), flags(0) {
10} 11}
11 12
12Action::Action(State* s, ushort kc, ushort uni, int f): 13Action::Action(State* s, ushort kc, ushort uni, int f):
13 state(s), keycode(kc), unicode(uni), flags(f) { 14 state(s), keycode(kc), unicode(uni), flags(f) {
14} 15}
15 16
16Action::~Action() { 17Action::~Action() {
17} 18}
18 19
19State* Action::getState() const { 20State* Action::getState() const {
20 return state; 21 return state;
21} 22}
22 23
23void Action::setState(State* s) { 24void Action::setState(State* s) {
24 state = s; 25 state = s;
25 setDefined(true); 26 setDefined(true);
26} 27}
27 28
28bool Action::hasEvent() const { 29bool Action::hasEvent() const {
29 return flags & Event; 30 return flags & Event;
30} 31}
31 32
32void Action::setEvent(bool e) { 33void Action::setEvent(bool e) {
33 flags = (flags & ~Event) | ((e) ? Event : 0); 34 flags = (flags & ~Event) | ((e) ? Event : 0);
34 35
35 if (e) { 36 if (e) {
36 setDefined(true); 37 setDefined(true);
37 } else { 38 } else {
38 if (state == 0) { 39 if (state == 0) {
39 setDefined(false); 40 setDefined(false);
40 } 41 }
41 } 42 }
42} 43}
43 44
44bool Action::isDefined() const { 45bool Action::isDefined() const {
45 return flags & Defined; 46 return flags & Defined;
46} 47}
47 48
48void Action::setDefined(bool d) { 49void Action::setDefined(bool d) {
49 flags = (flags & ~Defined) | ((d) ? Defined : 0); 50 flags = (flags & ~Defined) | ((d) ? Defined : 0);
50} 51}
51 52
52int Action::getKeycode() const { 53int Action::getKeycode() const {
@@ -201,96 +202,98 @@ bool State::set(int keycode, bool pressed, Action& action) {
201 if (n==-1 || keys==0) { 202 if (n==-1 || keys==0) {
202 return false; 203 return false;
203 } 204 }
204 205
205 if (pressed) { 206 if (pressed) {
206 n += Key_Max + 1; 207 n += Key_Max + 1;
207 } 208 }
208 209
209 keys[n] = action; 210 keys[n] = action;
210 return true; 211 return true;
211} 212}
212 213
213State* State::getParent() const { 214State* State::getParent() const {
214 return parent; 215 return parent;
215} 216}
216 217
217void State::setParent(State* s) { 218void State::setParent(State* s) {
218 parent = s; 219 parent = s;
219} 220}
220 221
221int State::translateKeycode(int keycode) const { 222int State::translateKeycode(int keycode) const {
222 if (keycode < 0x20) { 223 if (keycode < 0x20) {
223 return -1; 224 return -1;
224 } 225 }
225 226
226 if (keycode < 0x80) { 227 if (keycode < 0x80) {
227 return x1[keycode - 0x20]; 228 return x1[keycode - 0x20];
228 } 229 }
229 230
230 if (keycode < 0x1000) { 231 if (keycode < 0x1000) {
231 return -1; 232 return -1;
232 } 233 }
233 234
234 if (keycode < 0x1057) { 235 if (keycode < 0x1057) {
235 return x2[keycode - 0x1000]; 236 return x2[keycode - 0x1000];
236 } 237 }
237 238
238 return -1; 239 return -1;
239} 240}
240 241
241// Implementation of Keymap class 242// Implementation of Keymap class
242Keymap::Keymap():enabled(true), currentState(0), autoRepeatAction(0), repeater(this) { 243Keymap::Keymap():enabled(true), currentState(0), autoRepeatAction(0), repeater(this) {
243 repeatDelay=400; 244 repeatDelay=400;
244 repeatPeriod=80; 245 repeatPeriod=80;
245 connect(&repeater, SIGNAL(timeout()), this, SLOT(autoRepeat())); 246 connect(&repeater, SIGNAL(timeout()), this, SLOT(autoRepeat()));
246} 247}
247 248
248Keymap::~Keymap() { 249Keymap::~Keymap() {
250 odebug << "removing keyboard filter for zkb"<<oendl;
251 Opie::Core::OKeyFilter::inst()->remHandler(this);
249 QMap<QString, State*>::Iterator it; 252 QMap<QString, State*>::Iterator it;
250 for(it = states.begin(); it != states.end(); ++it) { 253 for(it = states.begin(); it != states.end(); ++it) {
251 delete it.data(); 254 delete it.data();
252 } 255 }
253 states.clear(); 256 states.clear();
254} 257}
255 258
256bool Keymap::filter(int unicode, int keycode, int modifiers, 259bool Keymap::filter(int unicode, int keycode, int modifiers,
257 bool isPress, bool autoRepeat) { 260 bool isPress, bool autoRepeat) {
258 261
259 odebug << "filter: >>> unicode=" << unicode << ", keycode=" << keycode 262 odebug << "filter: >>> unicode=" << unicode << ", keycode=" << keycode
260 << ", modifiers=" << modifiers << ", ispressed=" << isPress << oendl; 263 << ", modifiers=" << modifiers << ", ispressed=" << isPress << oendl;
261 264
262 if (!enabled) { 265 if (!enabled) {
263 return false; 266 return false;
264 } 267 }
265 268
266 // the second check is workaround to make suspend work if 269 // the second check is workaround to make suspend work if
267 // the user pressed it right after he did resume. for some 270 // the user pressed it right after he did resume. for some
268 // reason the event sent by qt has autoRepeat true in this 271 // reason the event sent by qt has autoRepeat true in this
269 // case 272 // case
270 if (autoRepeat && keycode != 4177) { 273 if (autoRepeat && keycode != 4177) {
271 return true; 274 return true;
272 } 275 }
273 276
274 (void) unicode; (void) modifiers; 277 (void) unicode; (void) modifiers;
275 278
276 Action* action = currentState->get(keycode, isPress, true); 279 Action* action = currentState->get(keycode, isPress, true);
277 if (action==0 || !action->isDefined()) { 280 if (action==0 || !action->isDefined()) {
278 return true; 281 return true;
279 } 282 }
280 283
281 if (action->hasEvent()) { 284 if (action->hasEvent()) {
282 odebug << "filter:<<< unicode=" << action->getUnicode() << ", keycode=" << action->getKeycode() 285 odebug << "filter:<<< unicode=" << action->getUnicode() << ", keycode=" << action->getKeycode()
283 << ", modifiers=" << action->getModifiers() << ", ispressed=" << action->isPressed() << oendl; 286 << ", modifiers=" << action->getModifiers() << ", ispressed=" << action->isPressed() << oendl;
284 287
285 QWSServer::sendKeyEvent(action->getUnicode(), 288 QWSServer::sendKeyEvent(action->getUnicode(),
286 action->getKeycode(), action->getModifiers(), 289 action->getKeycode(), action->getModifiers(),
287 action->isPressed(), false); 290 action->isPressed(), false);
288 } 291 }
289 292
290 if (action->isAutorepeat()) { 293 if (action->isAutorepeat()) {
291 autoRepeatAction = action; 294 autoRepeatAction = action;
292 repeater.start(repeatDelay, TRUE); 295 repeater.start(repeatDelay, TRUE);
293 } else { 296 } else {
294 autoRepeatAction = 0; 297 autoRepeatAction = 0;
295 } 298 }
296 299