@@ -258,7 +258,6 @@ void TopLevelWindowModel::connectWindow(Window *window)
258258 // eg: Do focusedWindow=A to focusedWindow=B instead of
259259 // focusedWindow=A to focusedWindow=null to focusedWindow=B
260260 if (focused) {
261− Q_ASSERT(m_newlyFocusedWindow == nullptr);
262261 m_focusedWindowChanged = true;
263262 m_newlyFocusedWindow = window;
264263 } else if (m_focusedWindow == window) {
@@ -502,6 +501,10 @@ void TopLevelWindowModel::removeAt(int index)
502501 if (m_focusedWindow == window) {
503502 setFocusedWindow(nullptr);
504503 }
504+ if (m_newlyFocusedWindow == window) {
505+ m_focusedWindowChanged = false;
506+ m_newlyFocusedWindow = nullptr;
507+ }
505508 delete window;
506509
507510 INFO_MSG << " after " << toString();
@@ -792,9 +795,7 @@ void TopLevelWindowModel::activateTopMostWindowWithoutId(int forbiddenId)
792795void TopLevelWindowModel::refreshWindows()
793796{
794797 DEBUG_MSG << "()";
795−
796− m_windowModel.clear();
797− m_allSurfaces.clear();
798+ clear();
798799
799800 if (!m_workspace || !m_applicationManager || !m_surfaceManager) return;
800801
@@ -827,3 +828,18 @@ void TopLevelWindowModel::refreshWindows()
827828 }
828829 });
829830}
831+
832+void TopLevelWindowModel::clear()
833+{
834+ DEBUG_MSG << "()";
835+
836+ while(m_windowModel.count() > 0) {
837+ ModelEntry entry = m_windowModel.takeAt(0);
838+ disconnect(entry.window, 0, this, 0);
839+ delete entry.window;
840+ }
841+ m_allSurfaces.clear();
842+ setFocusedWindow(nullptr);
843+ m_focusedWindowChanged = false;
844+ m_newlyFocusedWindow = nullptr;
845+}