@@ -65,18 +65,29 @@ void TopLevelWindowModel::setApplicationManager(unityapi::ApplicationManagerInte
6565
6666 m_applicationManager = value;
6767
68− if (m_applicationManager && m_workspace) {
69−
70− if (m_workspace->isActive()) {
71− connectApplicationManager();
72− }
68+ if (m_applicationManager) {
69+ connect(m_applicationManager, &QAbstractItemModel::rowsInserted,
70+ this, [this](const QModelIndex &/*parent*/, int first, int last) {
71+ if (!m_workspace || !m_workspace->isActive())
72+ return;
73+
74+ for (int i = first; i <= last; ++i) {
75+ auto application = m_applicationManager->get(i);
76+ addApplication(application);
77+ }
78+ });
7379
74− if (m_surfaceManager) {
75− refreshWindows();
76− }
80+ connect(m_applicationManager, &QAbstractItemModel::rowsAboutToBeRemoved,
81+ this, [this](const QModelIndex &/*parent*/, int first, int last) {
82+ for (int i = first; i <= last; ++i) {
83+ auto application = m_applicationManager->get(i);
84+ removeApplication(application);
85+ }
86+ });
7787 }
7888
7989 Q_EMIT applicationManagerChanged(m_applicationManager);
90+ refreshWindows();
8091
8192 endResetModel();
8293 m_modelState = IdleState;
@@ -111,12 +122,9 @@ void TopLevelWindowModel::setSurfaceManager(unityapi::SurfaceManagerInterface *s
111122 this, &TopLevelWindowModel::onSurfacesAddedToWorkspace);
112123 connect(m_surfaceManager, &unityapi::SurfaceManagerInterface::surfacesAboutToBeRemovedFromWorkspace,
113124 this, &TopLevelWindowModel::onSurfacesAboutToBeRemovedFromWorkspace);
114−
115− if (m_workspace && m_applicationManager) {
116− refreshWindows();
117− }
118125 }
119126
127+ refreshWindows();
120128 Q_EMIT surfaceManagerChanged(m_surfaceManager);
121129
122130 endResetModel();
@@ -137,36 +145,12 @@ void TopLevelWindowModel::setWorkspace(Workspace *workspace)
137145 beginResetModel();
138146
139147 if (m_workspace) {
140− m_windowModel.clear();
141− m_allSurfaces.clear();
142− if (m_applicationManager) {
143− disconnect(m_applicationManager, 0, this, 0);
144− }
148+ disconnect(m_workspace, 0, this, 0);
145149 }
146150
147− disconnect(m_applicationManager, 0 ,this, 0);
148−
149151 m_workspace = workspace;
150152
151− if (m_workspace) {
152− connect(m_workspace, &Workspace::activeChanged, this, [this](bool active) {
153− if (m_applicationManager) {
154− if (!active) disconnect(m_applicationManager, 0, this, 0);
155− else {
156− connectApplicationManager();
157− }
158− }
159− });
160−
161− if (m_applicationManager && m_workspace->isActive()) {
162− connectApplicationManager();
163− }
164−
165− if (m_surfaceManager && m_applicationManager) {
166− refreshWindows();
167− }
168− }
169−
153+ refreshWindows();
170154 Q_EMIT workspaceChanged(workspace);
171155
172156 endResetModel();
@@ -572,26 +556,6 @@ QVariant TopLevelWindowModel::data(const QModelIndex& index, int role) const
572556 }
573557}
574558
575−void TopLevelWindowModel::connectApplicationManager()
576−{
577− connect(m_applicationManager, &QAbstractItemModel::rowsInserted,
578− this, [this](const QModelIndex &/*parent*/, int first, int last) {
579− for (int i = first; i <= last; ++i) {
580− auto application = m_applicationManager->get(i);
581− addApplication(application);
582− }
583− });
584−
585− connect(m_applicationManager, &QAbstractItemModel::rowsAboutToBeRemoved,
586− this, [this](const QModelIndex &/*parent*/, int first, int last) {
587− for (int i = first; i <= last; ++i) {
588− auto application = m_applicationManager->get(i);
589− removeApplication(application);
590− }
591− });
592−}
593−
594−
595559int TopLevelWindowModel::findIndexOf(const unityapi::MirSurfaceInterface *surface) const
596560{
597561 for (int i=0; i<m_windowModel.count(); i++) {