diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp
index d94afcab5c908fc2a21e8db1a54cb4cf30bbd75d..3fd2aa56515e122859d23f49491188dbfecc3764 100644
--- a/src/client/qwaylanddisplay.cpp
+++ b/src/client/qwaylanddisplay.cpp
@@ -422,6 +422,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 f4fb3fa56a847a21762f0f614beba1519a6f43fa..2864b357d8053668e85d25f2d705a8f9ca5807c7 100644
--- a/src/client/qwaylanddisplay_p.h
+++ b/src/client/qwaylanddisplay_p.h
@@ -176,6 +176,7 @@ public:
     void handleWindowActivated(QWaylandWindow *window);
     void handleWindowDeactivated(QWaylandWindow *window);
     void handleKeyboardFocusChanged(QWaylandInputDevice *inputDevice);
+    void handleWindowDestroyed(QWaylandWindow *window);
 
 public slots:
     void blockingReadEvents();
@@ -217,7 +218,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 59c446bb300edcd2dce6bc8911e66a9bbc77cdc2..2b7d81f88974a96219a97c8973d46f3ce33c8f4d 100644
--- a/src/client/qwaylandwindow.cpp
+++ b/src/client/qwaylandwindow.cpp
@@ -102,6 +102,8 @@ QWaylandWindow::QWaylandWindow(QWindow *window)
 
 QWaylandWindow::~QWaylandWindow()
 {
+    mDisplay->handleWindowDestroyed(this);
+
     delete mWindowDecoration;
 
     if (isInitialized())