on xenial help sign in
Fixed duplicate apps
4e8f28fNick Dedekind
plugins/WindowManager/TopLevelWindowModel.cpp+22−58
@@ -65,18 +65,29 @@ void TopLevelWindowModel::setApplicationManager(unityapi::ApplicationManagerInte
65
65
66 m_applicationManager = value;
66 m_applicationManager = value;
67
67
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;
73+
74+ for (int i = first; i <= last; ++i) {
75+ auto application = m_applicationManager->get(i);
76+ addApplication(application);
77+ }
72− }
78+ });
73
79
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);
85+ }
76− }
86+ });
77 }
87 }
78
88
79 Q_EMIT applicationManagerChanged(m_applicationManager);
89 Q_EMIT applicationManagerChanged(m_applicationManager);
90+ refreshWindows();
80
91
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);
114−
115− if (m_workspace && m_applicationManager) {
116− refreshWindows();
117− }
118 }
125 }
119
126
127+ refreshWindows();
120 Q_EMIT surfaceManagerChanged(m_surfaceManager);
128 Q_EMIT surfaceManagerChanged(m_surfaceManager);
121
129
122 endResetModel();
130 endResetModel();
@@ -137,36 +145,12 @@ void TopLevelWindowModel::setWorkspace(Workspace *workspace)
137 beginResetModel();
145 beginResetModel();
138
146
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);
144− }
145 }
149 }
146
150
147− disconnect(m_applicationManager, 0 ,this, 0);
148−
149 m_workspace = workspace;
151 m_workspace = workspace;
150
152
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();
153+ refreshWindows();
167− }
168− }
169−
170 Q_EMIT workspaceChanged(workspace);
154 Q_EMIT workspaceChanged(workspace);
171
155
172 endResetModel();
156 endResetModel();
@@ -572,26 +556,6 @@ QVariant TopLevelWindowModel::data(const QModelIndex& index, int role) const
572 }
556 }
573}
557}
574
558
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−
595int TopLevelWindowModel::findIndexOf(const unityapi::MirSurfaceInterface *surface) const
559int TopLevelWindowModel::findIndexOf(const unityapi::MirSurfaceInterface *surface) const
596{
560{
597 for (int i=0; i<m_windowModel.count(); i++) {
561 for (int i=0; i<m_windowModel.count(); i++) {
plugins/WindowManager/TopLevelWindowModel.h−1
@@ -227,7 +227,6 @@ private:
227 void prependSurfaceHelper(unity::shell::application::MirSurfaceInterface *surface,
227 void prependSurfaceHelper(unity::shell::application::MirSurfaceInterface *surface,
228 unity::shell::application::ApplicationInfoInterface *application);
228 unity::shell::application::ApplicationInfoInterface *application);
229
229
230− void connectApplicationManager();
231 void connectWindow(Window *window);
230 void connectWindow(Window *window);
232 void connectSurface(unity::shell::application::MirSurfaceInterface *surface);
231 void connectSurface(unity::shell::application::MirSurfaceInterface *surface);
233
232