-rw-r--r-- | noncore/applets/zkbapplet/zkbwidget.cpp | 235 | ||||
-rw-r--r-- | noncore/applets/zkbapplet/zkbwidget.h | 32 | ||||
-rw-r--r-- | noncore/apps/keyz-cfg/zkb.cpp | 3 |
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 | ||
11 | using namespace Opie::Ui; | 12 | using namespace Opie::Ui; |
12 | ZkbWidget::ZkbWidget(QWidget* parent):QLabel(parent),keymap(0), | ||
13 | disabled(Resource::loadPixmap("zkb-disabled")) { | ||
14 | 13 | ||
15 | labels = new QPopupMenu(); | 14 | ZkbWidget::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 | ||
28 | ZkbWidget::~ZkbWidget() { | 30 | ZkbWidget::~ZkbWidget() |
31 | { | ||
32 | if (keymap != 0) { | ||
33 | delete keymap; | ||
34 | keymap = 0; | ||
35 | } | ||
29 | } | 36 | } |
30 | 37 | ||
31 | int ZkbWidget::position() | 38 | int ZkbWidget::position() |
32 | { | 39 | { |
33 | return 8; | 40 | return 8; |
34 | } | 41 | } |
35 | 42 | ||
36 | bool ZkbWidget::loadKeymap() { | 43 | bool 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 | ||
92 | QSize ZkbWidget::sizeHint() const { | 101 | QSize ZkbWidget::sizeHint() const { |
93 | return QSize(AppLnk::smallIconSize(),AppLnk::smallIconSize()); | 102 | return QSize(AppLnk::smallIconSize(),AppLnk::smallIconSize()); |
94 | } | 103 | } |
95 | 104 | ||
96 | void ZkbWidget::stateChanged(const QString& s) { | 105 | void 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 | ||
101 | void ZkbWidget::labelChanged(int id) { | 110 | void 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 | ||
121 | void ZkbWidget::mouseReleaseEvent(QMouseEvent*) { | 130 | void 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 | ||
127 | void ZkbWidget::signalReceived(const QCString& msg, const QByteArray& data) { | 136 | void 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 | ||
154 | void ZkbWidget::reload() { | 163 | void ZkbWidget::reload() { |
155 | loadKeymap(); | 164 | loadKeymap(); |
156 | QCopEnvelope("QPE/System", "notBusy()"); | 165 | QCopEnvelope("QPE/System", "notBusy()"); |
157 | } | 166 | } |
158 | 167 | ||
159 | EXPORT_OPIE_APPLET_v1( ZkbWidget ) | 168 | EXPORT_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 | ||
12 | class ZkbWidget : public QLabel { | 12 | class ZkbWidget : public QLabel { |
13 | Q_OBJECT | 13 | Q_OBJECT |
14 | 14 | ||
15 | public: | 15 | public: |
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 | ||
22 | protected: | 22 | protected: |
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 | ||
33 | protected slots: | 33 | protected 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 |
9 | Action::Action():state(0), keycode(0), unicode(0), flags(0) { | 10 | Action::Action():state(0), keycode(0), unicode(0), flags(0) { |
10 | } | 11 | } |
11 | 12 | ||
12 | Action::Action(State* s, ushort kc, ushort uni, int f): | 13 | Action::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 | ||
16 | Action::~Action() { | 17 | Action::~Action() { |
17 | } | 18 | } |
18 | 19 | ||
19 | State* Action::getState() const { | 20 | State* Action::getState() const { |
20 | return state; | 21 | return state; |
21 | } | 22 | } |
22 | 23 | ||
23 | void Action::setState(State* s) { | 24 | void Action::setState(State* s) { |
24 | state = s; | 25 | state = s; |
25 | setDefined(true); | 26 | setDefined(true); |
26 | } | 27 | } |
27 | 28 | ||
28 | bool Action::hasEvent() const { | 29 | bool Action::hasEvent() const { |
29 | return flags & Event; | 30 | return flags & Event; |
30 | } | 31 | } |
31 | 32 | ||
32 | void Action::setEvent(bool e) { | 33 | void 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 | ||
44 | bool Action::isDefined() const { | 45 | bool Action::isDefined() const { |
45 | return flags & Defined; | 46 | return flags & Defined; |
46 | } | 47 | } |
47 | 48 | ||
48 | void Action::setDefined(bool d) { | 49 | void Action::setDefined(bool d) { |
49 | flags = (flags & ~Defined) | ((d) ? Defined : 0); | 50 | flags = (flags & ~Defined) | ((d) ? Defined : 0); |
50 | } | 51 | } |
51 | 52 | ||
52 | int Action::getKeycode() const { | 53 | int 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 | ||
213 | State* State::getParent() const { | 214 | State* State::getParent() const { |
214 | return parent; | 215 | return parent; |
215 | } | 216 | } |
216 | 217 | ||
217 | void State::setParent(State* s) { | 218 | void State::setParent(State* s) { |
218 | parent = s; | 219 | parent = s; |
219 | } | 220 | } |
220 | 221 | ||
221 | int State::translateKeycode(int keycode) const { | 222 | int 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 |
242 | Keymap::Keymap():enabled(true), currentState(0), autoRepeatAction(0), repeater(this) { | 243 | Keymap::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 | ||
248 | Keymap::~Keymap() { | 249 | Keymap::~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 | ||
256 | bool Keymap::filter(int unicode, int keycode, int modifiers, | 259 | bool 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 | ||