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