@@ -65,18 +65,29 @@ void TopLevelWindowModel::setApplicationManager(unityapi::ApplicationManagerInte
66 m_applicationManager = value;
66 m_applicationManager = value;
68− if (m_applicationManager && m_workspace) {
68+ if (m_applicationManager) {
69−
69+ connect(m_applicationManager, &QAbstractItemModel::rowsInserted,
70+ this, [this](const QModelIndex &/*parent*/, int first, int last) {
70− if (m_workspace->isActive()) {
71+ if (!m_workspace || !m_workspace->isActive())
71− connectApplicationManager();
72+ return;
74+ for (int i = first; i <= last; ++i) {
75+ auto application = m_applicationManager->get(i);
76+ addApplication(application);
74− if (m_surfaceManager) {
80+ connect(m_applicationManager, &QAbstractItemModel::rowsAboutToBeRemoved,
75− refreshWindows();
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);
79 Q_EMIT applicationManagerChanged(m_applicationManager);
89 Q_EMIT applicationManagerChanged(m_applicationManager);
81 endResetModel();
92 endResetModel();
82 m_modelState = IdleState;
93 m_modelState = IdleState;
@@ -111,12 +122,9 @@ void TopLevelWindowModel::setSurfaceManager(unityapi::SurfaceManagerInterface *s
111 this, &TopLevelWindowModel::onSurfacesAddedToWorkspace);
122 this, &TopLevelWindowModel::onSurfacesAddedToWorkspace);
112 connect(m_surfaceManager, &unityapi::SurfaceManagerInterface::surfacesAboutToBeRemovedFromWorkspace,
123 connect(m_surfaceManager, &unityapi::SurfaceManagerInterface::surfacesAboutToBeRemovedFromWorkspace,
113 this, &TopLevelWindowModel::onSurfacesAboutToBeRemovedFromWorkspace);
124 this, &TopLevelWindowModel::onSurfacesAboutToBeRemovedFromWorkspace);
115− if (m_workspace && m_applicationManager) {
120 Q_EMIT surfaceManagerChanged(m_surfaceManager);
128 Q_EMIT surfaceManagerChanged(m_surfaceManager);
122 endResetModel();
130 endResetModel();
@@ -137,36 +145,12 @@ void TopLevelWindowModel::setWorkspace(Workspace *workspace)
137 beginResetModel();
145 beginResetModel();
139 if (m_workspace) {
147 if (m_workspace) {
140− m_windowModel.clear();
141− m_allSurfaces.clear();
142− if (m_applicationManager) {
143− disconnect(m_applicationManager, 0, this, 0);
148+ disconnect(m_workspace, 0, this, 0);
147− disconnect(m_applicationManager, 0 ,this, 0);
149 m_workspace = workspace;
151 m_workspace = workspace;
152− connect(m_workspace, &Workspace::activeChanged, this, [this](bool active) {
153− if (m_applicationManager) {
154− if (!active) disconnect(m_applicationManager, 0, this, 0);
156− connectApplicationManager();
161− if (m_applicationManager && m_workspace->isActive()) {
162− connectApplicationManager();
165− if (m_surfaceManager && m_applicationManager) {
166− refreshWindows();
153+ refreshWindows();
170 Q_EMIT workspaceChanged(workspace);
154 Q_EMIT workspaceChanged(workspace);
172 endResetModel();
156 endResetModel();
@@ -572,26 +556,6 @@ QVariant TopLevelWindowModel::data(const QModelIndex& index, int role) const
575−void TopLevelWindowModel::connectApplicationManager()
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);
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);
595int TopLevelWindowModel::findIndexOf(const unityapi::MirSurfaceInterface *surface) const
559int TopLevelWindowModel::findIndexOf(const unityapi::MirSurfaceInterface *surface) const
597 for (int i=0; i<m_windowModel.count(); i++) {
561 for (int i=0; i<m_windowModel.count(); i++) {