diff options
-rw-r--r-- | src/gui/kernel/qguiapplication.cpp | 2 | ||||
-rw-r--r-- | src/gui/kernel/qwindowsysteminterface.cpp | 8 | ||||
-rw-r--r-- | src/gui/kernel/qwindowsysteminterface.h | 2 | ||||
-rw-r--r-- | src/gui/kernel/qwindowsysteminterface_p.h | 5 |
4 files changed, 11 insertions, 6 deletions
diff --git a/src/gui/kernel/qguiapplication.cpp b/src/gui/kernel/qguiapplication.cpp index e4eabc815e..7c596d5ae5 100644 --- a/src/gui/kernel/qguiapplication.cpp +++ b/src/gui/kernel/qguiapplication.cpp @@ -2162,7 +2162,7 @@ void QGuiApplicationPrivate::processActivatedEvent(QWindowSystemInterfacePrivate void QGuiApplicationPrivate::processWindowStateChangedEvent(QWindowSystemInterfacePrivate::WindowStateChangedEvent *wse) { if (QWindow *window = wse->window.data()) { - QWindowStateChangeEvent e(window->windowState()); + QWindowStateChangeEvent e(wse->oldState); window->d_func()->windowState = wse->newState; QGuiApplication::sendSpontaneousEvent(window, &e); } diff --git a/src/gui/kernel/qwindowsysteminterface.cpp b/src/gui/kernel/qwindowsysteminterface.cpp index 2fc713f708..7ad4f57198 100644 --- a/src/gui/kernel/qwindowsysteminterface.cpp +++ b/src/gui/kernel/qwindowsysteminterface.cpp @@ -241,10 +241,14 @@ QT_DEFINE_QPA_EVENT_HANDLER(void, handleWindowActivated, QWindow *window, Qt::Fo QWindowSystemInterfacePrivate::handleWindowSystemEvent<Delivery>(e); } -QT_DEFINE_QPA_EVENT_HANDLER(void, handleWindowStateChanged, QWindow *window, Qt::WindowState newState) +QT_DEFINE_QPA_EVENT_HANDLER(void, handleWindowStateChanged, QWindow *window, Qt::WindowState newState, int oldState) { + Q_ASSERT(window); + if (oldState < Qt::WindowNoState) + oldState = window->windowState(); + QWindowSystemInterfacePrivate::WindowStateChangedEvent *e = - new QWindowSystemInterfacePrivate::WindowStateChangedEvent(window, newState); + new QWindowSystemInterfacePrivate::WindowStateChangedEvent(window, newState, Qt::WindowState(oldState)); QWindowSystemInterfacePrivate::handleWindowSystemEvent<Delivery>(e); } diff --git a/src/gui/kernel/qwindowsysteminterface.h b/src/gui/kernel/qwindowsysteminterface.h index eb52dd89b6..253584314c 100644 --- a/src/gui/kernel/qwindowsysteminterface.h +++ b/src/gui/kernel/qwindowsysteminterface.h @@ -176,7 +176,7 @@ public: static void handleWindowActivated(QWindow *window, Qt::FocusReason r = Qt::OtherFocusReason); template<typename Delivery = QWindowSystemInterface::DefaultDelivery> - static void handleWindowStateChanged(QWindow *window, Qt::WindowState newState); + static void handleWindowStateChanged(QWindow *window, Qt::WindowState newState, int oldState = -1); static void handleWindowScreenChanged(QWindow *window, QScreen *newScreen); static void handleApplicationStateChanged(Qt::ApplicationState newState, bool forcePropagate = false); diff --git a/src/gui/kernel/qwindowsysteminterface_p.h b/src/gui/kernel/qwindowsysteminterface_p.h index 1db60e8cb8..1bcc79552d 100644 --- a/src/gui/kernel/qwindowsysteminterface_p.h +++ b/src/gui/kernel/qwindowsysteminterface_p.h @@ -168,12 +168,13 @@ public: class WindowStateChangedEvent : public WindowSystemEvent { public: - WindowStateChangedEvent(QWindow *_window, Qt::WindowState _newState) - : WindowSystemEvent(WindowStateChanged), window(_window), newState(_newState) + WindowStateChangedEvent(QWindow *_window, Qt::WindowState _newState, Qt::WindowState _oldState) + : WindowSystemEvent(WindowStateChanged), window(_window), newState(_newState), oldState(_oldState) { } QPointer<QWindow> window; Qt::WindowState newState; + Qt::WindowState oldState; }; class WindowScreenChangedEvent : public WindowSystemEvent { |