diff --git a/Telegram/SourceFiles/core/application.cpp b/Telegram/SourceFiles/core/application.cpp index 7a0eed85c6..3f2b4645a4 100644 --- a/Telegram/SourceFiles/core/application.cpp +++ b/Telegram/SourceFiles/core/application.cpp @@ -729,6 +729,28 @@ bool Application::eventFilter(QObject *object, QEvent *e) { } break; } + const auto widget = static_cast(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(e); + _lastMouseEventSource = ev->source(); + return _lastMouseEventSource == Qt::MouseEventSynthesizedBySystem; + } break; + case QEvent::ContextMenu: { + const auto ev = static_cast(e); + return ev->reason() == QContextMenuEvent::Mouse + && _lastMouseEventSource == Qt::MouseEventSynthesizedBySystem; + } break; + } + return QObject::eventFilter(object, e); } diff --git a/Telegram/SourceFiles/core/application.h b/Telegram/SourceFiles/core/application.h index 4ce78c8074..25e0fbbd9d 100644 --- a/Telegram/SourceFiles/core/application.h +++ b/Telegram/SourceFiles/core/application.h @@ -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 _mediaView; const std::unique_ptr _langpack;