Ignore system-synthesized mouse events in widgets accepting touch

This commit is contained in:
Ilya Fedin
2026-03-27 10:45:38 +00:00
committed by John Preston
parent 4015192c4a
commit 79d97463ec
2 changed files with 23 additions and 0 deletions
+22
View File
@@ -729,6 +729,28 @@ bool Application::eventFilter(QObject *object, QEvent *e) {
} break;
}
const auto widget = static_cast<QWidget*>(object);
if (!object->isWidgetType()
|| !widget->testAttribute(Qt::WA_AcceptTouchEvents)) {
return QObject::eventFilter(object, e);
}
switch (e->type()) {
case QEvent::MouseButtonPress:
case QEvent::MouseButtonRelease:
case QEvent::MouseButtonDblClick:
case QEvent::MouseMove: {
const auto ev = static_cast<QMouseEvent*>(e);
_lastMouseEventSource = ev->source();
return _lastMouseEventSource == Qt::MouseEventSynthesizedBySystem;
} break;
case QEvent::ContextMenu: {
const auto ev = static_cast<QContextMenuEvent*>(e);
return ev->reason() == QContextMenuEvent::Mouse
&& _lastMouseEventSource == Qt::MouseEventSynthesizedBySystem;
} break;
}
return QObject::eventFilter(object, e);
}
+1
View File
@@ -433,6 +433,7 @@ private:
Window::Controller *_lastActiveWindow = nullptr;
Window::Controller *_lastActivePrimaryWindow = nullptr;
Window::Controller *_windowInSettings = nullptr;
Qt::MouseEventSource _lastMouseEventSource = Qt::MouseEventNotSynthesized;
std::unique_ptr<Media::View::OverlayWidget> _mediaView;
const std::unique_ptr<Lang::Instance> _langpack;