aboutsummaryrefslogtreecommitdiffstats
path: root/src/quicktemplates2/qquickshortcutcontext.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/quicktemplates2/qquickshortcutcontext.cpp')
-rw-r--r--src/quicktemplates2/qquickshortcutcontext.cpp13
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;