on xenial help sign in
allow 4 finger simulation with mousetouchadaptor
c6a3c73Michael Zanetti
src/MouseTouchAdaptor.cpp+28−1
@@ -72,6 +72,7 @@ namespace {
72MouseTouchAdaptor *g_instance = nullptr;
72MouseTouchAdaptor *g_instance = nullptr;
73
73
74const Qt::KeyboardModifiers TRI_PRESS_MODIFIER = Qt::ShiftModifier|Qt::ControlModifier|Qt::AltModifier;
74const Qt::KeyboardModifiers TRI_PRESS_MODIFIER = Qt::ShiftModifier|Qt::ControlModifier|Qt::AltModifier;
75+const Qt::KeyboardModifiers QUAD_PRESS_MODIFIER = TRI_PRESS_MODIFIER|Qt::MetaModifier;
75
76
76Qt::MouseButton translateMouseButton(xcb_button_t detail)
77Qt::MouseButton translateMouseButton(xcb_button_t detail)
77{
78{
@@ -91,7 +92,7 @@ Qt::KeyboardModifiers translateMofidier(uint32_t mod)
91 if (mod & 0x01) qtMod |= Qt::ShiftModifier;
92 if (mod & 0x01) qtMod |= Qt::ShiftModifier;
92 if (mod & 0x04) qtMod |= Qt::ControlModifier;
93 if (mod & 0x04) qtMod |= Qt::ControlModifier;
93 if (mod & 0x08) qtMod |= Qt::AltModifier;
94 if (mod & 0x08) qtMod |= Qt::AltModifier;
94− if (mod & 0x80) qtMod |= Qt::MetaModifier;
95+ if (mod & 0x40) qtMod |= Qt::MetaModifier;
95
96
96 return qtMod;
97 return qtMod;
97}
98}
@@ -101,6 +102,7 @@ MouseTouchAdaptor::MouseTouchAdaptor()
101 : QObject(nullptr)
102 : QObject(nullptr)
102 , m_leftButtonIsPressed(false)
103 , m_leftButtonIsPressed(false)
103 , m_triPressModifier(false)
104 , m_triPressModifier(false)
105+ , m_quadPressModifier(false)
104 , m_enabled(true)
106 , m_enabled(true)
105{
107{
106 QCoreApplication::instance()->installNativeEventFilter(this);
108 QCoreApplication::instance()->installNativeEventFilter(this);
@@ -297,6 +299,13 @@ bool MouseTouchAdaptor::handleButtonPress(WId windowId, uint32_t detail, uint32_
297 touchEvent.press(2, windowPos);
299 touchEvent.press(2, windowPos);
298 m_triPressModifier = true;
300 m_triPressModifier = true;
299 }
301 }
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+
300 touchEvent.commit(false /* processEvents */);
309 touchEvent.commit(false /* processEvents */);
301
310
302 m_leftButtonIsPressed = true;
311 m_leftButtonIsPressed = true;
@@ -322,10 +331,16 @@ bool MouseTouchAdaptor::handleButtonRelease(WId windowId, uint32_t detail, uint3
322 touchEvent.release(1, windowPos);
331 touchEvent.release(1, windowPos);
323 touchEvent.release(2, windowPos);
332 touchEvent.release(2, windowPos);
324 }
333 }
334+ if (m_quadPressModifier) {
335+ touchEvent.release(1, windowPos);
336+ touchEvent.release(2, windowPos);
337+ touchEvent.release(3, windowPos);
338+ }
325 touchEvent.commit(false /* processEvents */);
339 touchEvent.commit(false /* processEvents */);
326
340
327 m_leftButtonIsPressed = false;
341 m_leftButtonIsPressed = false;
328 m_triPressModifier = false;
342 m_triPressModifier = false;
343+ m_quadPressModifier = false;
329 return true;
344 return true;
330}
345}
331
346
@@ -354,6 +369,18 @@ bool MouseTouchAdaptor::handleMotionNotify(WId windowId, uint32_t modifiers, int
354 m_triPressModifier = false;
369 m_triPressModifier = false;
355 }
370 }
356 }
371 }
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+ }
357 touchEvent.commit(false /* processEvents */);
384 touchEvent.commit(false /* processEvents */);
358
385
359 return true;
386 return true;
src/MouseTouchAdaptor.h+1
@@ -59,6 +59,7 @@ private:
59 QTouchDevice *m_touchDevice;
59 QTouchDevice *m_touchDevice;
60 bool m_leftButtonIsPressed;
60 bool m_leftButtonIsPressed;
61 bool m_triPressModifier;
61 bool m_triPressModifier;
62+ bool m_quadPressModifier;
62
63
63
64
64 bool m_enabled;
65 bool m_enabled;