on xenial help sign in
allow 4 finger simulation with mousetouchadaptor

Approved by: Lukáš Tinkl, Unity8 CI Bot

commitc6a3c7303ed30bf95fae7f7be9cd79855e93d9ef authorMichael Zanetti <michael.zanetti@canonical.com> dateTue 24 Jan 2017, 07:44 (10 years ago) parentf71c48a5927a72
2 files changed+29−1
src/MouseTouchAdaptor.cpp+28−1 src/MouseTouchAdaptor.h+1
src/MouseTouchAdaptor.cpp+28−1
@@ -72,6 +72,7 @@ namespace {
7272MouseTouchAdaptor *g_instance = nullptr;
7373
7474const Qt::KeyboardModifiers TRI_PRESS_MODIFIER = Qt::ShiftModifier|Qt::ControlModifier|Qt::AltModifier;
75+const Qt::KeyboardModifiers QUAD_PRESS_MODIFIER = TRI_PRESS_MODIFIER|Qt::MetaModifier;
7576
7677Qt::MouseButton translateMouseButton(xcb_button_t detail)
7778{
@@ -91,7 +92,7 @@ Qt::KeyboardModifiers translateMofidier(uint32_t mod)
9192 if (mod & 0x01) qtMod |= Qt::ShiftModifier;
9293 if (mod & 0x04) qtMod |= Qt::ControlModifier;
9394 if (mod & 0x08) qtMod |= Qt::AltModifier;
94− if (mod & 0x80) qtMod |= Qt::MetaModifier;
95+ if (mod & 0x40) qtMod |= Qt::MetaModifier;
9596
9697 return qtMod;
9798}
@@ -101,6 +102,7 @@ MouseTouchAdaptor::MouseTouchAdaptor()
101102 : QObject(nullptr)
102103 , m_leftButtonIsPressed(false)
103104 , m_triPressModifier(false)
105+ , m_quadPressModifier(false)
104106 , m_enabled(true)
105107{
106108 QCoreApplication::instance()->installNativeEventFilter(this);
@@ -297,6 +299,13 @@ bool MouseTouchAdaptor::handleButtonPress(WId windowId, uint32_t detail, uint32_
297299 touchEvent.press(2, windowPos);
298300 m_triPressModifier = true;
299301 }
302+ if (qtMod == QUAD_PRESS_MODIFIER) {
303+ touchEvent.press(1, windowPos);
304+ touchEvent.press(2, windowPos);
305+ touchEvent.press(3, windowPos);
306+ m_quadPressModifier = true;
307+ }
308+
300309 touchEvent.commit(false /* processEvents */);
301310
302311 m_leftButtonIsPressed = true;
@@ -322,10 +331,16 @@ bool MouseTouchAdaptor::handleButtonRelease(WId windowId, uint32_t detail, uint3
322331 touchEvent.release(1, windowPos);
323332 touchEvent.release(2, windowPos);
324333 }
334+ if (m_quadPressModifier) {
335+ touchEvent.release(1, windowPos);
336+ touchEvent.release(2, windowPos);
337+ touchEvent.release(3, windowPos);
338+ }
325339 touchEvent.commit(false /* processEvents */);
326340
327341 m_leftButtonIsPressed = false;
328342 m_triPressModifier = false;
343+ m_quadPressModifier = false;
329344 return true;
330345}
331346
@@ -354,6 +369,18 @@ bool MouseTouchAdaptor::handleMotionNotify(WId windowId, uint32_t modifiers, int
354369 m_triPressModifier = false;
355370 }
356371 }
372+ if (m_quadPressModifier) {
373+ if (qtMod == QUAD_PRESS_MODIFIER) {
374+ touchEvent.move(1, windowPos);
375+ touchEvent.move(2, windowPos);
376+ touchEvent.move(3, windowPos);
377+ } else {
378+ touchEvent.release(1, windowPos);
379+ touchEvent.release(2, windowPos);
380+ touchEvent.release(3, windowPos);
381+ m_quadPressModifier = false;
382+ }
383+ }
357384 touchEvent.commit(false /* processEvents */);
358385
359386 return true;
src/MouseTouchAdaptor.h+1
@@ -59,6 +59,7 @@ private:
5959 QTouchDevice *m_touchDevice;
6060 bool m_leftButtonIsPressed;
6161 bool m_triPressModifier;
62+ bool m_quadPressModifier;
6263
6364
6465 bool m_enabled;