diff options
| author | Volodymyr Zibarov <gogan419@gmail.com> | 2024-05-03 15:58:50 +0300 |
|---|---|---|
| committer | Volodymyr Zibarov <gogan419@gmail.com> | 2024-05-13 22:32:34 +0000 |
| commit | 4585cacaa9f9329a10aaf13a449151f5e9bc7a2c (patch) | |
| tree | f51b362b3308966dd7843fe153b7d35f98af57b3 /src/widgets/kernel/qwidgetwindow.cpp | |
| parent | 3d59a0f7c7321b611fd08a9fed94819c43e5dd79 (diff) | |
Add way to override when to show context menu
Add Qt::ContextMenuTrigger enum used with
QStyleHints::setContextMenuTrigger() to override default platform
behavior when to trigger context menu event.
The default is to show context menu on mouse press on
UNIX systems and on mouse release on Windows.
Give developer a possibility to override platform default behavior
to make cross platform application that behaves the same way on all
platforms
Task-number: QTBUG-93486
Change-Id: Ic832d3d8a7c355a8adb46868fff9cfd19988cf3c
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Diffstat (limited to 'src/widgets/kernel/qwidgetwindow.cpp')
| -rw-r--r-- | src/widgets/kernel/qwidgetwindow.cpp | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/src/widgets/kernel/qwidgetwindow.cpp b/src/widgets/kernel/qwidgetwindow.cpp index e7f0a840041..03dde9ca69e 100644 --- a/src/widgets/kernel/qwidgetwindow.cpp +++ b/src/widgets/kernel/qwidgetwindow.cpp @@ -505,9 +505,6 @@ void QWidgetWindow::handleNonClientAreaMouseEvent(QMouseEvent *e) void QWidgetWindow::handleMouseEvent(QMouseEvent *event) { - static const QEvent::Type contextMenuTrigger = - QGuiApplicationPrivate::platformTheme()->themeHint(QPlatformTheme::ContextMenuOnMouseRelease).toBool() ? - QEvent::MouseButtonRelease : QEvent::MouseButtonPress; if (QApplicationPrivate::inPopupMode()) { QPointer<QWidget> activePopupWidget = QApplication::activePopupWidget(); QPointF mapped = event->position(); @@ -624,7 +621,7 @@ void QWidgetWindow::handleMouseEvent(QMouseEvent *event) } qt_replay_popup_mouse_event = false; #ifndef QT_NO_CONTEXTMENU - } else if (event->type() == contextMenuTrigger + } else if (event->type() == QGuiApplicationPrivate::contextMenuEventType() && event->button() == Qt::RightButton && (openPopupCount == oldOpenPopupCount)) { QWidget *receiver = activePopupWidget; @@ -637,7 +634,6 @@ void QWidgetWindow::handleMouseEvent(QMouseEvent *event) QApplication::forwardEvent(receiver, &e, event); } #else - Q_UNUSED(contextMenuTrigger); Q_UNUSED(oldOpenPopupCount); } #endif @@ -684,7 +680,8 @@ void QWidgetWindow::handleMouseEvent(QMouseEvent *event) event->setAccepted(translated.isAccepted()); } #ifndef QT_NO_CONTEXTMENU - if (event->type() == contextMenuTrigger && event->button() == Qt::RightButton + if (event->type() == QGuiApplicationPrivate::contextMenuEventType() + && event->button() == Qt::RightButton && m_widget->rect().contains(event->position().toPoint())) { QContextMenuEvent e(QContextMenuEvent::Mouse, mapped, event->globalPosition().toPoint(), event->modifiers()); QGuiApplication::forwardEvent(receiver, &e, event); |
