Merge lp:~aacid/unity-2d/kill_keyboardmodifiersmonitor into lp:unity-2d

Proposed by Albert Astals Cid
Status: Merged
Approved by: Gerry Boland
Approved revision: 1075
Merged at revision: 1072
Proposed branch: lp:~aacid/unity-2d/kill_keyboardmodifiersmonitor
Merge into: lp:unity-2d
Diff against target: 600 lines (+136/-252)
9 files modified
libunity-2d-private/src/CMakeLists.txt (+0/-1)
libunity-2d-private/src/keyboardmodifiersmonitor.cpp (+0/-162)
libunity-2d-private/src/keyboardmodifiersmonitor.h (+0/-69)
libunity-2d-private/src/keymonitor.cpp (+83/-3)
libunity-2d-private/src/keymonitor.h (+13/-3)
libunity-2d-private/tests/CMakeLists.txt (+3/-1)
libunity-2d-private/tests/keymonitortest.cpp (+31/-6)
panel/applets/appname/appnameapplet.cpp (+3/-3)
shell/app/shellmanager.cpp (+3/-4)
To merge this branch: bzr merge lp:~aacid/unity-2d/kill_keyboardmodifiersmonitor
Reviewer Review Type Date Requested Status
Gerry Boland (community) Approve
Review via email: mp+102646@code.launchpad.net

This proposal supersedes a proposal from 2012-04-18.

Commit message

[lib] Kill keyboardmodifiersmonitor, and integrate its functionality into keymonitor

This helps to prevent wrong HUD triggers on ultrafast alt+key presses

Description of the change

Kill keyboardmodifiersmonitor

Integrate its functionality in keymonitor, helps preventing wrong HUD triggers on ultrafast alt+key presses
UNBLOCK

To post a comment you must log in.
Revision history for this message
Albert Astals Cid (aacid) wrote : Posted in a previous version of this proposal

I'll try to integrate the test code from https://bugs.launchpad.net/unity-2d/+bug/968840/comments/4 next

Revision history for this message
Albert Astals Cid (aacid) wrote :

Branch dependency on lp:~aacid/unity-2d/fast_alt_left_press_fail_test removed as per Gerry's request

Revision history for this message
Gerry Boland (gerboland) wrote :

Works well, I notice a improvement in the tap detection so I get even fewer false HUD appearances. Approved!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'libunity-2d-private/src/CMakeLists.txt'
--- libunity-2d-private/src/CMakeLists.txt 2012-04-02 14:03:32 +0000
+++ libunity-2d-private/src/CMakeLists.txt 2012-04-19 08:51:21 +0000
@@ -9,7 +9,6 @@
9 gconnector.cpp9 gconnector.cpp
10 gimageutils.cpp10 gimageutils.cpp
11 gnomesessionclient.cpp11 gnomesessionclient.cpp
12 keyboardmodifiersmonitor.cpp
13 hotmodifier.cpp12 hotmodifier.cpp
14 hotkeymonitor.cpp13 hotkeymonitor.cpp
15 hotkey.cpp14 hotkey.cpp
1615
=== removed file 'libunity-2d-private/src/keyboardmodifiersmonitor.cpp'
--- libunity-2d-private/src/keyboardmodifiersmonitor.cpp 2012-02-15 14:45:17 +0000
+++ libunity-2d-private/src/keyboardmodifiersmonitor.cpp 1970-01-01 00:00:00 +0000
@@ -1,162 +0,0 @@
1/*
2 * This file is part of unity-2d
3 *
4 * Copyright 2011 Canonical Ltd.
5 *
6 * Authors:
7 * - Aurélien Gâteau <aurelien.gateau@canonical.com>
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; version 3.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program. If not, see <http://www.gnu.org/licenses/>.
20 */
21
22// Self
23#include "keyboardmodifiersmonitor.h"
24
25// Local
26#include <hotmodifier.h>
27#include <debug_p.h>
28
29// Qt
30#include <QX11Info>
31
32// X11
33#include <X11/Xlib.h>
34#include <X11/XKBlib.h>
35#include <X11/extensions/XKB.h>
36
37static int sXkbBaseEventType = 0;
38
39static void setupXkb()
40{
41 int opcode, error;
42 XkbQueryExtension(QX11Info::display(), &opcode, &sXkbBaseEventType, &error, NULL, NULL);
43 XkbSelectEvents(QX11Info::display(), XkbUseCoreKbd, XkbStateNotifyMask, XkbStateNotifyMask);
44}
45
46struct KeyboardModifiersMonitorPrivate
47{
48 KeyboardModifiersMonitorPrivate()
49 : m_modifiers(0)
50 {}
51
52 int m_modifiers;
53};
54
55KeyboardModifiersMonitor::KeyboardModifiersMonitor(QObject *parent)
56: QObject(parent)
57, d(new KeyboardModifiersMonitorPrivate)
58{
59 if (sXkbBaseEventType == 0) {
60 setupXkb();
61 }
62
63 Unity2dApplication* application = Unity2dApplication::instance();
64 if (application == NULL) {
65 /* This can happen for example when using qmlviewer to run the launcher */
66 UQ_WARNING << "The application is not an Unity2dApplication."
67 "Modifiers will not be monitored.";
68 } else {
69 application->installX11EventFilter(this);
70 }
71}
72
73KeyboardModifiersMonitor::~KeyboardModifiersMonitor()
74{
75 delete d;
76}
77
78KeyboardModifiersMonitor* KeyboardModifiersMonitor::instance()
79{
80 static KeyboardModifiersMonitor* monitor = new KeyboardModifiersMonitor();
81 return monitor;
82}
83
84bool KeyboardModifiersMonitor::x11EventFilter(XEvent* event)
85{
86 if (event->type == sXkbBaseEventType + XkbEventCode) {
87 XkbEvent *xkbEvent = (XkbEvent*)event;
88 if (xkbEvent->any.xkb_type == XkbStateNotify) {
89 d->m_modifiers = xkbEvent->state.mods;
90 Qt::KeyboardModifiers modifiers = keyboardModifiers();
91 keyboardModifiersChanged(modifiers);
92
93 Q_FOREACH(HotModifier* hotModifier, m_hotModifiers) {
94 if (hotModifier->modifiers() & m_disabledModifiers) {
95 /* If any of the modifiers have been disabled, the
96 * hotModifier cannot be triggered */
97 continue;
98 }
99 hotModifier->onModifiersChanged(modifiers);
100 }
101 }
102 }
103 return false;
104}
105
106Qt::KeyboardModifiers KeyboardModifiersMonitor::keyboardModifiers() const
107{
108 Qt::KeyboardModifiers value = 0;
109 if (d->m_modifiers & ShiftMask) {
110 value |= Qt::ShiftModifier;
111 }
112 if (d->m_modifiers & ControlMask) {
113 value |= Qt::ControlModifier;
114 }
115 if (d->m_modifiers & Mod1Mask) {
116 value |= Qt::AltModifier;
117 }
118 if (d->m_modifiers & Mod4Mask) {
119 value |= Qt::MetaModifier;
120 }
121 return value;
122}
123
124HotModifier*
125KeyboardModifiersMonitor::getHotModifierFor(Qt::KeyboardModifiers modifiers)
126{
127 Q_FOREACH(HotModifier* hotModifier, m_hotModifiers) {
128 if (hotModifier->modifiers() == modifiers) {
129 return hotModifier;
130 }
131 }
132
133 HotModifier *hotModifier = new HotModifier(modifiers, this);
134 m_hotModifiers.append(hotModifier);
135 return hotModifier;
136}
137
138void
139KeyboardModifiersMonitor::disableModifiers(Qt::KeyboardModifiers modifiers)
140{
141 m_disabledModifiers |= modifiers;
142 Q_FOREACH(HotModifier* hotModifier, m_hotModifiers) {
143 if (hotModifier->modifiers() & m_disabledModifiers) {
144 hotModifier->disable();
145 }
146 }
147}
148
149void
150KeyboardModifiersMonitor::enableModifiers(Qt::KeyboardModifiers modifiers)
151{
152 Qt::KeyboardModifiers previouslyDisabled = m_disabledModifiers;
153 m_disabledModifiers &= ~modifiers;
154 Q_FOREACH(HotModifier* hotModifier, m_hotModifiers) {
155 if (hotModifier->modifiers() & previouslyDisabled
156 && !hotModifier->modifiers() & m_disabledModifiers) {
157 hotModifier->onModifiersChanged(keyboardModifiers());
158 }
159 }
160}
161
162#include "keyboardmodifiersmonitor.moc"
1630
=== removed file 'libunity-2d-private/src/keyboardmodifiersmonitor.h'
--- libunity-2d-private/src/keyboardmodifiersmonitor.h 2012-02-15 14:45:17 +0000
+++ libunity-2d-private/src/keyboardmodifiersmonitor.h 1970-01-01 00:00:00 +0000
@@ -1,69 +0,0 @@
1/*
2 * This file is part of unity-2d
3 *
4 * Copyright 2011 Canonical Ltd.
5 *
6 * Authors:
7 * - Aurélien Gâteau <aurelien.gateau@canonical.com>
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; version 3.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program. If not, see <http://www.gnu.org/licenses/>.
20 */
21
22#ifndef KEYBOARDMODIFIERMONITOR_H
23#define KEYBOARDMODIFIERMONITOR_H
24
25// Local
26#include <unity2dapplication.h>
27
28class HotModifier;
29
30struct KeyboardModifiersMonitorPrivate;
31
32/**
33 * This class monitor keyboard modifiers. It is able to track changes even if
34 * the active window does not belong to the application.
35 *
36 * You *must* use Unity2dApplication to be able to use this class.
37 *
38 * In most case you don't need your own instance: use the one returned by
39 * instance() instead.
40 */
41class KeyboardModifiersMonitor : public QObject, protected AbstractX11EventFilter
42{
43Q_OBJECT
44public:
45 KeyboardModifiersMonitor(QObject *parent = 0);
46 ~KeyboardModifiersMonitor();
47
48 Qt::KeyboardModifiers keyboardModifiers() const;
49
50 HotModifier* getHotModifierFor(Qt::KeyboardModifiers modifiers);
51
52 void disableModifiers(Qt::KeyboardModifiers modifiers);
53 void enableModifiers(Qt::KeyboardModifiers modifiers);
54
55 static KeyboardModifiersMonitor* instance();
56
57Q_SIGNALS:
58 void keyboardModifiersChanged(Qt::KeyboardModifiers);
59
60protected:
61 bool x11EventFilter(XEvent*);
62
63private:
64 KeyboardModifiersMonitorPrivate* const d;
65 QList<HotModifier*> m_hotModifiers;
66 Qt::KeyboardModifiers m_disabledModifiers;
67};
68
69#endif /* KEYBOARDMODIFIERMONITOR_H */
700
=== modified file 'libunity-2d-private/src/keymonitor.cpp'
--- libunity-2d-private/src/keymonitor.cpp 2012-04-10 16:05:39 +0000
+++ libunity-2d-private/src/keymonitor.cpp 2012-04-19 08:51:21 +0000
@@ -27,20 +27,23 @@
27// X1127// X11
28#include <X11/Xlib.h>28#include <X11/Xlib.h>
29#include <X11/keysym.h>29#include <X11/keysym.h>
30#include <X11/XKBlib.h>
3031
31// Local32// Local
32#include <debug_p.h>33#include <debug_p.h>
34#include <hotmodifier.h>
3335
34#define INVALID_EVENT_TYPE -136#define INVALID_EVENT_TYPE -1
3537
36static int key_press_type = INVALID_EVENT_TYPE;38static int key_press_type = INVALID_EVENT_TYPE;
37static int notify_type = INVALID_EVENT_TYPE;39static int notify_type = INVALID_EVENT_TYPE;
3840static int sXkbBaseEventType = 0;
3941
40KeyMonitor::KeyMonitor(QObject* parent)42KeyMonitor::KeyMonitor(QObject* parent)
41: QObject(parent)43: QObject(parent),
44 m_modifiers(Qt::NoModifier)
42{45{
43 if (this->registerEvents()) {46 if (registerEvents()) {
44 getModifiers();47 getModifiers();
45 }48 }
46}49}
@@ -57,6 +60,45 @@
57 return monitor;60 return monitor;
58}61}
5962
63Qt::KeyboardModifiers KeyMonitor::keyboardModifiers() const
64{
65 return m_modifiers;
66}
67
68HotModifier *KeyMonitor::getHotModifierFor(Qt::KeyboardModifiers modifiers)
69{
70 Q_FOREACH(HotModifier* hotModifier, m_hotModifiers) {
71 if (hotModifier->modifiers() == modifiers) {
72 return hotModifier;
73 }
74 }
75
76 HotModifier *hotModifier = new HotModifier(modifiers, this);
77 m_hotModifiers.append(hotModifier);
78 return hotModifier;
79}
80
81void KeyMonitor::disableModifiers(Qt::KeyboardModifiers modifiers)
82{
83 m_disabledModifiers |= modifiers;
84 Q_FOREACH(HotModifier* hotModifier, m_hotModifiers) {
85 if (hotModifier->modifiers() & m_disabledModifiers) {
86 hotModifier->disable();
87 }
88 }
89}
90
91void KeyMonitor::enableModifiers(Qt::KeyboardModifiers modifiers)
92{
93 Qt::KeyboardModifiers previouslyDisabled = m_disabledModifiers;
94 m_disabledModifiers &= ~modifiers;
95 Q_FOREACH(HotModifier* hotModifier, m_hotModifiers) {
96 if (hotModifier->modifiers() & previouslyDisabled
97 && !hotModifier->modifiers() & m_disabledModifiers) {
98 hotModifier->onModifiersChanged(keyboardModifiers());
99 }
100 }
101}
60102
61void KeyMonitor::getModifiers()103void KeyMonitor::getModifiers()
62{104{
@@ -134,6 +176,10 @@
134 return false;176 return false;
135 }177 }
136178
179 int opcode, error;
180 XkbQueryExtension(m_display, &opcode, &sXkbBaseEventType, &error, NULL, NULL);
181 XkbSelectEvents(m_display, XkbUseCoreKbd, XkbStateNotifyMask, XkbStateNotifyMask);
182
137 /* Dispatch XEvents when there is activity on the X11 file descriptor */183 /* Dispatch XEvents when there is activity on the X11 file descriptor */
138 x11FileDescriptor = ConnectionNumber(m_display);184 x11FileDescriptor = ConnectionNumber(m_display);
139 QSocketNotifier* socketNotifier = new QSocketNotifier(x11FileDescriptor, QSocketNotifier::Read, this);185 QSocketNotifier* socketNotifier = new QSocketNotifier(x11FileDescriptor, QSocketNotifier::Read, this);
@@ -142,6 +188,23 @@
142 return true;188 return true;
143}189}
144190
191static Qt::KeyboardModifiers qtModifiersFromXcbMods(int xcbModifiers)
192{
193 Qt::KeyboardModifiers value = Qt::NoModifier;
194 if (xcbModifiers & ShiftMask) {
195 value |= Qt::ShiftModifier;
196 }
197 if (xcbModifiers & ControlMask) {
198 value |= Qt::ControlModifier;
199 }
200 if (xcbModifiers & Mod1Mask) {
201 value |= Qt::AltModifier;
202 }
203 if (xcbModifiers & Mod4Mask) {
204 value |= Qt::MetaModifier;
205 }
206 return value;
207}
145208
146void KeyMonitor::x11EventDispatch()209void KeyMonitor::x11EventDispatch()
147{210{
@@ -158,6 +221,23 @@
158 }221 }
159 else if (event.type == notify_type) {222 else if (event.type == notify_type) {
160 getModifiers();223 getModifiers();
224 } else if (event.type == sXkbBaseEventType + XkbEventCode) {
225 XkbEvent *xkbEvent = (XkbEvent*)&event;
226 if (xkbEvent->any.xkb_type == XkbStateNotify) {
227 const Qt::KeyboardModifiers prevMods = m_modifiers;
228 m_modifiers = qtModifiersFromXcbMods(xkbEvent->state.mods);
229 if (prevMods != m_modifiers) {
230 Q_EMIT keyboardModifiersChanged(m_modifiers);
231 Q_FOREACH(HotModifier* hotModifier, m_hotModifiers) {
232 if (hotModifier->modifiers() & m_disabledModifiers) {
233 /* If any of the modifiers have been disabled, the
234 * hotModifier cannot be triggered */
235 continue;
236 }
237 hotModifier->onModifiersChanged(m_modifiers);
238 }
239 }
240 }
161 }241 }
162 }242 }
163}243}
164244
=== modified file 'libunity-2d-private/src/keymonitor.h'
--- libunity-2d-private/src/keymonitor.h 2011-10-28 22:14:18 +0000
+++ libunity-2d-private/src/keymonitor.h 2012-04-19 08:51:21 +0000
@@ -28,12 +28,11 @@
28// X1128// X11
29#include <X11/extensions/XInput.h>29#include <X11/extensions/XInput.h>
3030
31class HotModifier;
32
31/**33/**
32 * This class monitors global keypresses. Whenever a non-modifier is pressed,34 * This class monitors global keypresses. Whenever a non-modifier is pressed,
33 * keyPressed() is emitted.35 * keyPressed() is emitted.
34 *
35 * In most case you don't need your own instance: use the one returned by
36 * instance() instead.
37 */36 */
38class KeyMonitor : public QObject37class KeyMonitor : public QObject
39{38{
@@ -43,8 +42,16 @@
43 static KeyMonitor* instance();42 static KeyMonitor* instance();
44 ~KeyMonitor();43 ~KeyMonitor();
4544
45 Qt::KeyboardModifiers keyboardModifiers() const;
46
47 HotModifier* getHotModifierFor(Qt::KeyboardModifiers modifiers);
48
49 void disableModifiers(Qt::KeyboardModifiers modifiers);
50 void enableModifiers(Qt::KeyboardModifiers modifiers);
51
46Q_SIGNALS:52Q_SIGNALS:
47 void keyPressed();53 void keyPressed();
54 void keyboardModifiersChanged(Qt::KeyboardModifiers);
4855
49private:56private:
50 KeyMonitor(QObject* parent=0);57 KeyMonitor(QObject* parent=0);
@@ -59,6 +66,9 @@
59 Display *m_display;66 Display *m_display;
60 QVector<XEventClass> m_eventList;67 QVector<XEventClass> m_eventList;
61 QVector<KeyCode> m_modList;68 QVector<KeyCode> m_modList;
69 Qt::KeyboardModifiers m_modifiers;
70 QList<HotModifier*> m_hotModifiers;
71 Qt::KeyboardModifiers m_disabledModifiers;
62};72};
6373
64#endif // KEYMONITOR_H74#endif // KEYMONITOR_H
6575
=== modified file 'libunity-2d-private/tests/CMakeLists.txt'
--- libunity-2d-private/tests/CMakeLists.txt 2012-04-02 15:15:59 +0000
+++ libunity-2d-private/tests/CMakeLists.txt 2012-04-19 08:51:21 +0000
@@ -33,7 +33,7 @@
3333
34libunity_2d_tests(34libunity_2d_tests(
35 gconnectortest35 gconnectortest
36 keyboardmodifiersmonitortest36 keymonitortest
37 launchermenutest37 launchermenutest
38 listaggregatormodeltest38 listaggregatormodeltest
39 qsortfilterproxymodeltest39 qsortfilterproxymodeltest
@@ -47,6 +47,8 @@
47target_link_libraries(pointerbarriertest ${X11_XTest_LIB})47target_link_libraries(pointerbarriertest ${X11_XTest_LIB})
4848
49target_link_libraries(hotkeytest ${X11_XTest_LIB})49target_link_libraries(hotkeytest ${X11_XTest_LIB})
50
51target_link_libraries(keymonitortest ${X11_XTest_LIB})
50 52
51# unity2dtrtest - FIXME53# unity2dtrtest - FIXME
52#add_test(NAME unity2dtrtest_check54#add_test(NAME unity2dtrtest_check
5355
=== renamed file 'libunity-2d-private/tests/keyboardmodifiersmonitortest.cpp' => 'libunity-2d-private/tests/keymonitortest.cpp'
--- libunity-2d-private/tests/keyboardmodifiersmonitortest.cpp 2011-11-17 20:10:19 +0000
+++ libunity-2d-private/tests/keymonitortest.cpp 2012-04-19 08:51:21 +0000
@@ -22,7 +22,8 @@
22// Local22// Local
23#include <unitytestmacro.h>23#include <unitytestmacro.h>
24#include <debug_p.h>24#include <debug_p.h>
25#include <keyboardmodifiersmonitor.h>25#include <keymonitor.h>
26#include <hotmodifier.h>
2627
27// Qt28// Qt
28#include <QSignalSpy>29#include <QSignalSpy>
@@ -33,6 +34,8 @@
33#include <X11/Xlib.h>34#include <X11/Xlib.h>
34#include <X11/XKBlib.h>35#include <X11/XKBlib.h>
35#include <X11/extensions/XKB.h>36#include <X11/extensions/XKB.h>
37#include <X11/extensions/XTest.h>
38#include <X11/keysym.h>
3639
37Q_DECLARE_METATYPE(Qt::KeyboardModifiers)40Q_DECLARE_METATYPE(Qt::KeyboardModifiers)
3841
@@ -70,23 +73,45 @@
70 {73 {
71 QFETCH(int, x11Mask);74 QFETCH(int, x11Mask);
72 QFETCH(Qt::KeyboardModifiers, qtModifiers);75 QFETCH(Qt::KeyboardModifiers, qtModifiers);
73 KeyboardModifiersMonitor monitor;76 KeyMonitor *monitor = KeyMonitor::instance();
74 QSignalSpy spy(&monitor, SIGNAL(keyboardModifiersChanged(Qt::KeyboardModifiers)));77 QSignalSpy spy(monitor, SIGNAL(keyboardModifiersChanged(Qt::KeyboardModifiers)));
7578
76 setModifierState(x11Mask, true);79 setModifierState(x11Mask, true);
77 QTest::qWait(200);80 QTest::qWait(200);
78 QCOMPARE(monitor.keyboardModifiers(), qtModifiers);81 QCOMPARE(monitor->keyboardModifiers(), qtModifiers);
79 QCOMPARE(spy.count(), 1);82 QCOMPARE(spy.count(), 1);
80 QCOMPARE(spy.takeFirst().at(0).value<Qt::KeyboardModifiers>(), qtModifiers);83 QCOMPARE(spy.takeFirst().at(0).value<Qt::KeyboardModifiers>(), qtModifiers);
8184
82 setModifierState(x11Mask, false);85 setModifierState(x11Mask, false);
83 QTest::qWait(200);86 QTest::qWait(200);
84 QCOMPARE(monitor.keyboardModifiers(), 0);87 QCOMPARE(monitor->keyboardModifiers(), 0);
85 QCOMPARE(spy.count(), 1);88 QCOMPARE(spy.count(), 1);
86 QCOMPARE(spy.takeFirst().at(0).value<Qt::KeyboardModifiers>(), 0);89 QCOMPARE(spy.takeFirst().at(0).value<Qt::KeyboardModifiers>(), 0);
87 }90 }
91
92 void testFastModifierKeyPress()
93 {
94 Display *display = XOpenDisplay(0);
95
96 HotModifier* hm = KeyMonitor::instance()->getHotModifierFor(Qt::AltModifier);
97 QSignalSpy spy(hm, SIGNAL(tapped()));
98
99 XTestGrabControl(display, 1);
100 XTestFakeKeyEvent(display, XKeysymToKeycode(display, XK_Alt_L), 1 /* PRESS */, CurrentTime);
101 XTestFakeKeyEvent(display, XKeysymToKeycode(display, XK_Left), 1 /* PRESS */, CurrentTime);
102 XFlush(display);
103
104 XTestGrabControl(display, 1);
105 XTestFakeKeyEvent(display, XKeysymToKeycode(display, XK_Alt_L), 0 /* RELEASE */, CurrentTime);
106 XTestFakeKeyEvent(display, XKeysymToKeycode(display, XK_Left), 0 /* RELEASE */, CurrentTime);
107 XFlush(display);
108
109 QTest::qWait(200);
110
111 QCOMPARE(spy.count(), 0);
112 }
88};113};
89114
90UAPP_TEST_MAIN(KeyboardModifiersMonitorTest)115UAPP_TEST_MAIN(KeyboardModifiersMonitorTest)
91116
92#include "keyboardmodifiersmonitortest.moc"117#include "keymonitortest.moc"
93118
=== modified file 'panel/applets/appname/appnameapplet.cpp'
--- panel/applets/appname/appnameapplet.cpp 2012-04-05 09:34:40 +0000
+++ panel/applets/appname/appnameapplet.cpp 2012-04-19 08:51:21 +0000
@@ -34,7 +34,7 @@
3434
35// Unity-2d35// Unity-2d
36#include <debug_p.h>36#include <debug_p.h>
37#include <keyboardmodifiersmonitor.h>37#include <keymonitor.h>
38#include <launcherclient.h>38#include <launcherclient.h>
39#include <hotkey.h>39#include <hotkey.h>
40#include <hotkeymonitor.h>40#include <hotkeymonitor.h>
@@ -271,7 +271,7 @@
271271
272 void setupKeyboardModifiersMonitor()272 void setupKeyboardModifiersMonitor()
273 {273 {
274 QObject::connect(KeyboardModifiersMonitor::instance(), SIGNAL(keyboardModifiersChanged(Qt::KeyboardModifiers)),274 QObject::connect(KeyMonitor::instance(), SIGNAL(keyboardModifiersChanged(Qt::KeyboardModifiers)),
275 q, SLOT(updateWidgets()));275 q, SLOT(updateWidgets()));
276 }276 }
277};277};
@@ -321,7 +321,7 @@
321 bool isUnderMouse = rect().contains(mapFromGlobal(QCursor::pos()));321 bool isUnderMouse = rect().contains(mapFromGlobal(QCursor::pos()));
322 bool isOpened = isOnSameScreen &&322 bool isOpened = isOnSameScreen &&
323 (isUnderMouse323 (isUnderMouse
324 || KeyboardModifiersMonitor::instance()->keyboardModifiers() == Qt::AltModifier324 || KeyMonitor::instance()->keyboardModifiers() == Qt::AltModifier
325 || d->m_menuBarWidget->isOpened()325 || d->m_menuBarWidget->isOpened()
326 );326 );
327 bool showDesktopLabel = !app;327 bool showDesktopLabel = !app;
328328
=== modified file 'shell/app/shellmanager.cpp'
--- shell/app/shellmanager.cpp 2012-04-06 15:16:39 +0000
+++ shell/app/shellmanager.cpp 2012-04-19 08:51:21 +0000
@@ -31,7 +31,6 @@
31#include <hotmodifier.h>31#include <hotmodifier.h>
32#include <hotkeymonitor.h>32#include <hotkeymonitor.h>
33#include <hotkey.h>33#include <hotkey.h>
34#include <keyboardmodifiersmonitor.h>
35#include <keymonitor.h>34#include <keymonitor.h>
36#include <screeninfo.h>35#include <screeninfo.h>
3736
@@ -300,7 +299,7 @@
300 updateSuperKeyMonitoring();299 updateSuperKeyMonitoring();
301300
302 /* Super tap shows the dash, super held shows the launcher hints */301 /* Super tap shows the dash, super held shows the launcher hints */
303 d->m_superHotModifier = KeyboardModifiersMonitor::instance()->getHotModifierFor(Qt::MetaModifier);302 d->m_superHotModifier = KeyMonitor::instance()->getHotModifierFor(Qt::MetaModifier);
304 connect(d->m_superHotModifier, SIGNAL(tapped()), SLOT(toggleDashRequested()));303 connect(d->m_superHotModifier, SIGNAL(tapped()), SLOT(toggleDashRequested()));
305 connect(d->m_superHotModifier, SIGNAL(heldChanged(bool)), SIGNAL(superKeyHeldChanged(bool)));304 connect(d->m_superHotModifier, SIGNAL(heldChanged(bool)), SIGNAL(superKeyHeldChanged(bool)));
306305
@@ -514,7 +513,7 @@
514 d->m_hudHotKey = HotkeyMonitor::instance().getHotkeyFor(x11KeyCode, modifiers);513 d->m_hudHotKey = HotkeyMonitor::instance().getHotkeyFor(x11KeyCode, modifiers);
515 connect(d->m_hudHotKey, SIGNAL(pressed()), SLOT(toggleHudRequested()));514 connect(d->m_hudHotKey, SIGNAL(pressed()), SLOT(toggleHudRequested()));
516 } else if (modifiers != Qt::NoModifier) {515 } else if (modifiers != Qt::NoModifier) {
517 d->m_hudHotModifier = KeyboardModifiersMonitor::instance()->getHotModifierFor(modifiers);516 d->m_hudHotModifier = KeyMonitor::instance()->getHotModifierFor(modifiers);
518 connect(d->m_hudHotModifier, SIGNAL(tapped()), SLOT(toggleHudRequested()));517 connect(d->m_hudHotModifier, SIGNAL(tapped()), SLOT(toggleHudRequested()));
519 }518 }
520 } else {519 } else {
@@ -527,7 +526,7 @@
527void526void
528ShellManager::updateSuperKeyMonitoring()527ShellManager::updateSuperKeyMonitoring()
529{528{
530 KeyboardModifiersMonitor *modifiersMonitor = KeyboardModifiersMonitor::instance();529 KeyMonitor *modifiersMonitor = KeyMonitor::instance();
531 HotkeyMonitor& hotkeyMonitor = HotkeyMonitor::instance();530 HotkeyMonitor& hotkeyMonitor = HotkeyMonitor::instance();
532531
533 QVariant value = launcher2dConfiguration().property("superKeyEnable");532 QVariant value = launcher2dConfiguration().property("superKeyEnable");

Subscribers

People subscribed via source and target branches