diff options
Diffstat (limited to 'src/quicktemplates/qquickshortcutcontext.cpp')
-rw-r--r-- | src/quicktemplates/qquickshortcutcontext.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/quicktemplates/qquickshortcutcontext.cpp b/src/quicktemplates/qquickshortcutcontext.cpp index 2d07eb44f9..503eb270a7 100644 --- a/src/quicktemplates/qquickshortcutcontext.cpp +++ b/src/quicktemplates/qquickshortcutcontext.cpp @@ -4,8 +4,11 @@ #include "qquickshortcutcontext_p_p.h" #include "qquickoverlay_p_p.h" #include "qquicktooltip_p.h" +#include <QtQmlModels/private/qtqmlmodels-config_p.h> +#if QT_CONFIG(qml_object_model) #include "qquickmenu_p.h" #include "qquickmenu_p_p.h" +#endif #include "qquickpopup_p.h" #include <QtCore/qloggingcategory.h> @@ -27,6 +30,9 @@ static bool isBlockedByPopup(QQuickItem *item) if (qobject_cast<QQuickToolTip *>(popup)) continue; // ignore tooltips (QTBUG-60492) if (popup->isModal() || popup->closePolicy() & QQuickPopup::CloseOnEscape) { + qCDebug(lcContextMatcher) << popup << "is modal or has a CloseOnEscape policy;" + << "if the following are both true," << item << "will be blocked by it:" + << (item != popup->popupItem()) << !popup->popupItem()->isAncestorOf(item); return item != popup->popupItem() && !popup->popupItem()->isAncestorOf(item); } } @@ -50,6 +56,7 @@ bool QQuickShortcutContext::matcher(QObject *obj, Qt::ShortcutContext context) obj = popup->window(); item = popup->popupItem(); +#if QT_CONFIG(qml_object_model) if (!obj) { // The popup has no associated window (yet). However, sub-menus, // unlike top-level menus, will not have an associated window @@ -61,15 +68,16 @@ bool QQuickShortcutContext::matcher(QObject *obj, Qt::ShortcutContext context) obj = parentMenu->window(); } } +#endif break; } obj = obj->parent(); } if (QWindow *renderWindow = QQuickRenderControl::renderWindowFor(qobject_cast<QQuickWindow *>(obj))) obj = renderWindow; - qCDebug(lcContextMatcher) << "obj" << obj << "focusWindow" << QGuiApplication::focusWindow() + qCDebug(lcContextMatcher) << "obj" << obj << "item" << item << "focusWindow" << QGuiApplication::focusWindow() << "!isBlockedByPopup(item)" << !isBlockedByPopup(item); - return obj && obj == QGuiApplication::focusWindow() && !isBlockedByPopup(item); + return obj && qobject_cast<QWindow*>(obj)->isActive() && !isBlockedByPopup(item); default: return false; } |