void LipstickCompositorWindow::touchEvent(QTouchEvent *event) { QWaylandSurface *m_surface = surface(); if (touchEventsEnabled() && m_surface) { QList<QTouchEvent::TouchPoint> points = event->touchPoints(); if (m_mouseRegionValid && points.count() == 1 && event->touchPointStates() & Qt::TouchPointPressed && !m_mouseRegion.contains(points.at(0).pos().toPoint())) { event->ignore(); return; } QWaylandInputDevice *inputDevice = m_surface->compositor()->defaultInputDevice(); event->accept(); if (inputDevice->mouseFocus() != m_surface) { QPoint pointPos; if (!points.isEmpty()) pointPos = points.at(0).pos().toPoint(); inputDevice->setMouseFocus(m_surface, pointPos, pointPos); } inputDevice->sendFullTouchEvent(event); } else { event->ignore(); } }
void LipstickCompositorWindow::handleTouchCancel() { QWaylandSurface *m_surface = surface(); if (!m_surface) return; QWaylandInputDevice *inputDevice = m_surface->compositor()->defaultInputDevice(); if (inputDevice->mouseFocus() == m_surface && (!isVisible() || !isEnabled() || !touchEventsEnabled())) { inputDevice->sendTouchCancelEvent(); inputDevice->setMouseFocus(0, QPointF()); } }
void LipstickCompositorWindow::touchEvent(QTouchEvent *event) { if (touchEventsEnabled() && surface()) { handleTouchEvent(event); #if QT_VERSION >= 0x050202 static bool lipstick_touch_interception = qEnvironmentVariableIsEmpty("LIPSTICK_NO_TOUCH_INTERCEPTION"); if (lipstick_touch_interception && event->type() == QEvent::TouchBegin) { // On TouchBegin, start intercepting if (event->isAccepted() && !m_interceptingTouch) { m_interceptingTouch = true; window()->installEventFilter(this); } } #endif } else { event->ignore(); } }