diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp index ae28eb7797095f66a9544d7c5787036c9eae8e57..f9a556f4db86064aa43752224099da9f64ea04ff 100644 --- a/src/client/qwaylanddisplay.cpp +++ b/src/client/qwaylanddisplay.cpp @@ -411,6 +411,12 @@ void QWaylandDisplay::handleKeyboardFocusChanged(QWaylandInputDevice *inputDevic mLastKeyboardFocus = keyboardFocus; } +void QWaylandDisplay::handleWindowDestroyed(QWaylandWindow *window) +{ + if (mActiveWindows.contains(window)) + handleWindowDeactivated(window); +} + void QWaylandDisplay::handleWaylandSync() { // This callback is used to set the window activation because we may get an activate/deactivate diff --git a/src/client/qwaylanddisplay_p.h b/src/client/qwaylanddisplay_p.h index ea127d2f4f06a8f7fce6fa7a716fda7f7c194687..a65916481063af60b3dcf4b9b65cc2cb6f13f283 100644 --- a/src/client/qwaylanddisplay_p.h +++ b/src/client/qwaylanddisplay_p.h @@ -170,6 +170,7 @@ public: void handleWindowActivated(QWaylandWindow *window); void handleWindowDeactivated(QWaylandWindow *window); void handleKeyboardFocusChanged(QWaylandInputDevice *inputDevice); + void handleWindowDestroyed(QWaylandWindow *window); public slots: void blockingReadEvents(); @@ -211,7 +212,7 @@ private: uint32_t mLastInputSerial; QWaylandInputDevice *mLastInputDevice; QPointer<QWaylandWindow> mLastInputWindow; - QWaylandWindow *mLastKeyboardFocus; + QPointer<QWaylandWindow> mLastKeyboardFocus; QVector<QWaylandWindow *> mActiveWindows; struct wl_callback *mSyncCallback; static const wl_callback_listener syncCallbackListener; diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp index a1daa07f0166745b014e5ce08d663830f3f9577e..e504de37725665653bdea8c65cb28720f03512cf 100644 --- a/src/client/qwaylandwindow.cpp +++ b/src/client/qwaylandwindow.cpp @@ -93,6 +93,8 @@ QWaylandWindow::QWaylandWindow(QWindow *window) QWaylandWindow::~QWaylandWindow() { + mDisplay->handleWindowDestroyed(this); + delete mWindowDecoration; if (isInitialized())