diff options
Diffstat (limited to 'src/quicktemplates2/qquickshortcutcontext.cpp')
-rw-r--r-- | src/quicktemplates2/qquickshortcutcontext.cpp | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/quicktemplates2/qquickshortcutcontext.cpp b/src/quicktemplates2/qquickshortcutcontext.cpp index 92e4c04a..e94de722 100644 --- a/src/quicktemplates2/qquickshortcutcontext.cpp +++ b/src/quicktemplates2/qquickshortcutcontext.cpp @@ -38,6 +38,8 @@ #include "qquickoverlay_p_p.h" #include "qquicktooltip_p.h" #include "qquickpopup_p.h" +#include "qquickmenu_p.h" +#include "qquickmenubaritem_p.h" #include <QtGui/qguiapplication.h> #include <QtQuick/qquickrendercontrol.h> @@ -54,8 +56,13 @@ static bool isBlockedByPopup(QQuickItem *item) for (QQuickPopup *popup : popups) { if (qobject_cast<QQuickToolTip *>(popup)) continue; // ignore tooltips (QTBUG-60492) - if (popup->isModal() || popup->closePolicy() & QQuickPopup::CloseOnEscape) + if (popup->isModal() || popup->closePolicy() & QQuickPopup::CloseOnEscape) { + if (QQuickMenu *menu = qobject_cast<QQuickMenu *>(popup)) { + if (qobject_cast<QQuickMenuBarItem *>(menu->parentItem())) + continue; + } return item != popup->popupItem() && !popup->popupItem()->isAncestorOf(item); + } } return false; @@ -69,14 +76,16 @@ bool QQuickShortcutContext::matcher(QObject *obj, Qt::ShortcutContext context) return true; case Qt::WindowShortcut: while (obj && !obj->isWindowType()) { - obj = obj->parent(); item = qobject_cast<QQuickItem *>(obj); if (item) { obj = item->window(); + break; } else if (QQuickPopup *popup = qobject_cast<QQuickPopup *>(obj)) { obj = popup->window(); item = popup->popupItem(); + break; } + obj = obj->parent(); } if (QWindow *renderWindow = QQuickRenderControl::renderWindowFor(qobject_cast<QQuickWindow *>(obj))) obj = renderWindow; |