@@ -35,7 +35,7 @@
3535#include <qtmir/mirserverapplication.h>
3636#include <qtmir/windowmodelnotifier.h>
3737
38−Q_LOGGING_CATEGORY(TOPLEVELWINDOWMODEL, "toplevelwindowmodel", QtInfoMsg)
38+Q_LOGGING_CATEGORY(TOPLEVELWINDOWMODEL, "toplevelwindowmodel")
3939
4040#define DEBUG_MSG qCDebug(TOPLEVELWINDOWMODEL).nospace().noquote() << __func__
4141#define INFO_MSG qCInfo(TOPLEVELWINDOWMODEL).nospace().noquote() << __func__
@@ -136,6 +136,7 @@ void TopLevelWindowModel::setWorkspace(Workspace *workspace)
136136
137137 if (m_workspace) {
138138 m_windowModel.clear();
139+ m_allSurfaces.clear();
139140 if (m_applicationManager) {
140141 disconnect(m_applicationManager, 0, this, 0);
141142 }
@@ -237,6 +238,7 @@ void TopLevelWindowModel::prependSurfaceHelper(unityapi::MirSurfaceInterface *su
237238 Window *window = createWindow(surface);
238239
239240 m_windowModel.prepend(ModelEntry(window, application));
241+ m_allSurfaces.insert(surface);
240242 if (surface) {
241243 connectSurface(surface);
242244 }
@@ -371,6 +373,7 @@ void TopLevelWindowModel::onSurfaceDestroyed(unityapi::MirSurfaceInterface *surf
371373 auto window = m_windowModel[i].window;
372374 window->setSurface(nullptr);
373375 window->setFocused(false);
376+ m_allSurfaces.remove(surface);
374377 INFO_MSG << " Removed surface from entry. After: " << toString();
375378 }
376379}
@@ -397,7 +400,7 @@ void TopLevelWindowModel::onSurfacesAddedToWorkspace(const std::shared_ptr<miral
397400 if (workspace != m_workspace->workspace()) return;
398401
399402 Q_FOREACH(auto surface, surfaces) {
400− DEBUG_MSG << "(" << surface << ")";
403+ if (m_allSurfaces.contains(surface)) continue;
401404
402405 if (surface->parentSurface()) {
403406 // Wrap it in a Window so that we keep focusedWindow() up to date.
@@ -444,6 +447,7 @@ void TopLevelWindowModel::removeAt(int index)
444447 window->setFocused(false);
445448
446449 m_windowModel.removeAt(index);
450+ m_allSurfaces.remove(window->surface());
447451
448452 if (m_modelState == RemovingState) {
449453 endRemoveRows();
@@ -765,7 +769,11 @@ void TopLevelWindowModel::activateTopMostWindowWithoutId(int forbiddenId)
765769
766770void TopLevelWindowModel::refreshWindows()
767771{
772+ DEBUG_MSG << "()";
773+
768774 m_windowModel.clear();
775+ m_allSurfaces.clear();
776+
769777 WindowManagementPolicy::instance()->forEachWindowInWorkspace(m_workspace->workspace(), [this](const miral::Window &window) {
770778 auto surface = m_surfaceManager->surfaceFor(window);
771779 if (surface) {