diff options
Diffstat (limited to 'src/gui/kernel/qguiapplication.cpp')
-rw-r--r-- | src/gui/kernel/qguiapplication.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/gui/kernel/qguiapplication.cpp b/src/gui/kernel/qguiapplication.cpp index 5611296385..e12183869a 100644 --- a/src/gui/kernel/qguiapplication.cpp +++ b/src/gui/kernel/qguiapplication.cpp @@ -1155,14 +1155,21 @@ void QGuiApplicationPrivate::processLeaveEvent(QWindowSystemInterfacePrivate::Le void QGuiApplicationPrivate::processActivatedEvent(QWindowSystemInterfacePrivate::ActivatedWindowEvent *e) { QWindow *previous = QGuiApplicationPrivate::focus_window; - QGuiApplicationPrivate::focus_window = e->activated.data(); + QWindow *newFocus = e->activated.data(); - if (previous == QGuiApplicationPrivate::focus_window) + if (previous == newFocus) return; QObject *previousFocusObject = previous ? previous->focusObject() : 0; if (previous) { + QFocusEvent focusAboutToChange(QEvent::FocusAboutToChange); + QCoreApplication::sendSpontaneousEvent(previous, &focusAboutToChange); + } + + QGuiApplicationPrivate::focus_window = newFocus; + + if (previous) { QFocusEvent focusOut(QEvent::FocusOut); QCoreApplication::sendSpontaneousEvent(previous, &focusOut); QObject::disconnect(previous, SIGNAL(focusObjectChanged(QObject*)), |