Fix missing shortcuts for WindowContainers
Change-Id: Iee2d97e1ff2b1f0c56b1dde4f3ce22a427fbe554 Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
This commit is contained in:
parent
ad43d9a097
commit
531b7d303e
@ -2840,6 +2840,37 @@ bool QApplication::notify(QObject *receiver, QEvent *e)
|
||||
break;
|
||||
}
|
||||
|
||||
switch (e->type()) {
|
||||
case QEvent::KeyPress:
|
||||
{
|
||||
bool isWidget = receiver->isWidgetType();
|
||||
bool isWindow = receiver->isWindowType();
|
||||
bool isGraphicsWidget = false;
|
||||
#ifndef QT_NO_GRAPHICSVIEW
|
||||
isGraphicsWidget = !isWidget && !isWindow && qobject_cast<QGraphicsWidget *>(receiver);
|
||||
#endif
|
||||
if (!isWidget && !isGraphicsWidget && !isWindow) {
|
||||
return d->notify_helper(receiver, e);
|
||||
}
|
||||
|
||||
QKeyEvent* key = static_cast<QKeyEvent*>(e);
|
||||
#ifndef QT_NO_SHORTCUT
|
||||
// Try looking for a Shortcut before sending key events
|
||||
if (qApp->d_func()->shortcutMap.tryShortcutEvent(receiver, key))
|
||||
return true;
|
||||
#endif
|
||||
qt_in_tab_key_event = (key->key() == Qt::Key_Backtab
|
||||
|| key->key() == Qt::Key_Tab
|
||||
|| key->key() == Qt::Key_Left
|
||||
|| key->key() == Qt::Key_Up
|
||||
|| key->key() == Qt::Key_Right
|
||||
|| key->key() == Qt::Key_Down);
|
||||
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
bool res = false;
|
||||
if (!receiver->isWidgetType()) {
|
||||
res = d->notify_helper(receiver, e);
|
||||
@ -2853,25 +2884,7 @@ bool QApplication::notify(QObject *receiver, QEvent *e)
|
||||
#ifndef QT_NO_GRAPHICSVIEW
|
||||
isGraphicsWidget = !isWidget && qobject_cast<QGraphicsWidget *>(receiver);
|
||||
#endif
|
||||
if (!isWidget && !isGraphicsWidget) {
|
||||
res = d->notify_helper(receiver, e);
|
||||
break;
|
||||
}
|
||||
|
||||
QKeyEvent* key = static_cast<QKeyEvent*>(e);
|
||||
if (key->type()==QEvent::KeyPress) {
|
||||
#ifndef QT_NO_SHORTCUT
|
||||
// Try looking for a Shortcut before sending key events
|
||||
if ((res = qApp->d_func()->shortcutMap.tryShortcutEvent(receiver, key)))
|
||||
return res;
|
||||
#endif
|
||||
qt_in_tab_key_event = (key->key() == Qt::Key_Backtab
|
||||
|| key->key() == Qt::Key_Tab
|
||||
|| key->key() == Qt::Key_Left
|
||||
|| key->key() == Qt::Key_Up
|
||||
|| key->key() == Qt::Key_Right
|
||||
|| key->key() == Qt::Key_Down);
|
||||
}
|
||||
bool def = key->isAccepted();
|
||||
QPointer<QObject> pr = receiver;
|
||||
while (receiver) {
|
||||
|
@ -51,6 +51,7 @@
|
||||
#include <private/qapplication_p.h>
|
||||
#include <private/qshortcutmap_p.h>
|
||||
#include <private/qaction_p.h>
|
||||
#include <private/qwidgetwindow_qpa_p.h>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
@ -86,6 +87,20 @@ bool qWidgetShortcutContextMatcher(QObject *object, Qt::ShortcutContext context)
|
||||
if (QApplication::activePopupWidget())
|
||||
active_window = QApplication::activePopupWidget();
|
||||
|
||||
if (!active_window) {
|
||||
QWindow *qwindow = QGuiApplication::focusWindow();
|
||||
if (qwindow && qwindow->isActive()) {
|
||||
while (qwindow) {
|
||||
QWidgetWindow *widgetWindow = qobject_cast<QWidgetWindow *>(qwindow);
|
||||
if (widgetWindow) {
|
||||
active_window = widgetWindow->widget();
|
||||
break;
|
||||
}
|
||||
qwindow = qwindow->parent();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!active_window)
|
||||
return false;
|
||||
|
||||
@ -106,6 +121,18 @@ bool qWidgetShortcutContextMatcher(QObject *object, Qt::ShortcutContext context)
|
||||
w = s->parentWidget();
|
||||
}
|
||||
|
||||
if (!w) {
|
||||
QWindow *qwindow = qobject_cast<QWindow *>(object);
|
||||
while (qwindow) {
|
||||
QWidgetWindow *widget_window = qobject_cast<QWidgetWindow *>(qwindow);
|
||||
if (widget_window) {
|
||||
w = widget_window->widget();
|
||||
break;
|
||||
}
|
||||
qwindow = qwindow->parent();
|
||||
}
|
||||
}
|
||||
|
||||
if (!w)
|
||||
return false;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user