- static bool tap_detected = false;
- static bool double_tap_detected = false;
- static bool tap_drag_detected = false;
- static QTime press_time;
- static QTime up_time; //used for double clicks/tap&drag, for time after first tap
-
- const int TAP_PRESS_TIME = 200;
- const int DOUBLE_TAP_UP_TIME = 500;
-
- if(!e) { //flush held taps
- if(tap_detected) {
- m_buttonMask |= 0x01;
- vncThread.mouseEvent(cursor_x, cursor_y, m_buttonMask);
- m_buttonMask &= 0xfe;
- vncThread.mouseEvent(cursor_x, cursor_y, m_buttonMask);
- tap_detected = false;
- } else if(double_tap_detected and press_time.elapsed() > TAP_PRESS_TIME) { //got tap + another press -> tap & drag
- m_buttonMask |= 0x01;
- vncThread.mouseEvent(cursor_x, cursor_y, m_buttonMask);
- double_tap_detected = false;
- tap_drag_detected = true;
- }
-
- return;
- }
-
- if(e->x() < 0 or e->y() < 0) { //QScrollArea tends to send invalid events sometimes...
- e->ignore();
- return;
- }
-
- cursor_x = qRound(e->x()/m_horizontalFactor);
- cursor_y = qRound(e->y()/m_verticalFactor);
- vncThread.mouseEvent(cursor_x, cursor_y, m_buttonMask); // plain move event
-
- if(e->type() == QEvent::MouseButtonPress or e->type() == QEvent::MouseButtonDblClick) {
- press_time.start();
- if(tap_detected and up_time.elapsed() < DOUBLE_TAP_UP_TIME) {
- tap_detected = false;
- double_tap_detected = true;
-
- QTimer::singleShot(TAP_PRESS_TIME, this, SLOT(mouseEventHandler()));
- }
- } else if(e->type() == QEvent::MouseButtonRelease) {
- if(tap_drag_detected) {
- m_buttonMask &= 0xfe;
- vncThread.mouseEvent(cursor_x, cursor_y, m_buttonMask);
- tap_drag_detected = false;
- } else if(double_tap_detected) { //double click
- double_tap_detected = false;
-
- m_buttonMask |= 0x01;
- vncThread.mouseEvent(cursor_x, cursor_y, m_buttonMask);
- m_buttonMask &= 0xfe;
- vncThread.mouseEvent(cursor_x, cursor_y, m_buttonMask);
- m_buttonMask |= 0x01;
- vncThread.mouseEvent(cursor_x, cursor_y, m_buttonMask);
- m_buttonMask &= 0xfe;
- vncThread.mouseEvent(cursor_x, cursor_y, m_buttonMask);
- } else if(press_time.elapsed() < TAP_PRESS_TIME) { //tap
- up_time.start();
- tap_detected = true;
- QTimer::singleShot(DOUBLE_TAP_UP_TIME, this, SLOT(mouseEventHandler()));
- }
-
- }
-
-/* for reference:
- if (e->type() != QEvent::MouseMove) {
+ static bool tap_detected = false;
+ static bool double_tap_detected = false;
+ static bool tap_drag_detected = false;
+ static QTime press_time;
+ static QTime up_time; //used for double clicks/tap&drag, for time after first tap
+
+
+ if(!e) { //flush held taps
+ if(tap_detected) {
+ m_buttonMask |= rfbButton1Mask;
+ m_vncThread->mouseEvent(m_cursor_x, m_cursor_y, m_buttonMask);
+ m_buttonMask &= ~rfbButton1Mask;
+ m_vncThread->mouseEvent(m_cursor_x, m_cursor_y, m_buttonMask);
+ tap_detected = false;
+ } else if(double_tap_detected and press_time.elapsed() > TAP_PRESS_TIME) { //got tap + another press -> tap & drag
+ m_buttonMask |= rfbButton1Mask;
+ m_vncThread->mouseEvent(m_cursor_x, m_cursor_y, m_buttonMask);
+ double_tap_detected = false;
+ tap_drag_detected = true;
+ }
+
+ return;
+ }
+
+ if(e->x() < 0 or e->y() < 0) { //QScrollArea tends to send invalid events sometimes...
+ e->ignore();
+ return;
+ }
+
+ m_cursor_x = qRound(e->x()/m_horizontalFactor);
+ m_cursor_y = qRound(e->y()/m_verticalFactor);
+ m_vncThread->mouseEvent(m_cursor_x, m_cursor_y, m_buttonMask); // plain move event
+
+ if(!m_disable_tapping and e->button() == Qt::LeftButton) { //implement touchpad-like input for left button
+ if(e->type() == QEvent::MouseButtonPress or e->type() == QEvent::MouseButtonDblClick) {
+ press_time.start();
+ if(tap_detected and up_time.elapsed() < DOUBLE_TAP_UP_TIME) {
+ tap_detected = false;
+ double_tap_detected = true;
+
+ QTimer::singleShot(TAP_PRESS_TIME, this, SLOT(mouseEventHandler()));
+ }
+ } else if(e->type() == QEvent::MouseButtonRelease) {
+ if(tap_drag_detected) { //end tap & drag
+ m_buttonMask &= ~rfbButton1Mask;
+ m_vncThread->mouseEvent(m_cursor_x, m_cursor_y, m_buttonMask);
+ tap_drag_detected = false;
+ } else if(double_tap_detected) { //double click
+ double_tap_detected = false;
+
+ m_buttonMask |= rfbButton1Mask;
+ m_vncThread->mouseEvent(m_cursor_x, m_cursor_y, m_buttonMask);
+ m_buttonMask &= ~rfbButton1Mask;
+ m_vncThread->mouseEvent(m_cursor_x, m_cursor_y, m_buttonMask);
+ m_buttonMask |= rfbButton1Mask;
+ m_vncThread->mouseEvent(m_cursor_x, m_cursor_y, m_buttonMask);
+ m_buttonMask &= ~rfbButton1Mask;
+ m_vncThread->mouseEvent(m_cursor_x, m_cursor_y, m_buttonMask);
+ } else if(press_time.elapsed() < TAP_PRESS_TIME) { //tap
+ up_time.start();
+ tap_detected = true;
+ QTimer::singleShot(DOUBLE_TAP_UP_TIME, this, SLOT(mouseEventHandler()));
+ }
+
+ }
+ } else { //middle or right button, send directly