on xenial help sign in
merge prereq
commit6008b1d07ff9d702a5b831425046c3134f40b226 authorMichael Zanetti <michael.zanetti@canonical.com> dateTue 14 Mar 2017, 12:04 (10 years ago) parent6c275e4548b0c6
12 files changed+183−112
plugins/WindowManager/TopLevelWindowModel.cpp+30−30 plugins/WindowManager/Workspace.cpp−5 plugins/WindowManager/Workspace.h−2 plugins/WindowManager/WorkspaceManager.cpp+25−1 plugins/WindowManager/WorkspaceManager.h+24−1 src/WindowManagementPolicy.cpp+4−13 src/WindowManagementPolicy.h−7 src/libunity8-private/wmpolicyinterface.h−7 tests/mocks/Unity/Application/SurfaceManager.cpp+42−9 tests/mocks/Unity/Application/SurfaceManager.h+10−3 tests/mocks/WindowManager/WindowManagementPolicy.cpp+39−26 tests/mocks/WindowManager/WindowManagementPolicy.h+9−8
plugins/WindowManager/TopLevelWindowModel.cpp+30−30
@@ -198,6 +198,7 @@ void TopLevelWindowModel::prependSurface(unityapi::MirSurfaceInterface *surface,
198198 ModelEntry &entry = m_windowModel[i];
199199 if (entry.application == application && entry.window->surface() == nullptr) {
200200 entry.window->setSurface(surface);
201+ m_allSurfaces.insert(surface);
201202 connectSurface(surface);
202203 INFO_MSG << " appId=" << application->appId() << " surface=" << surface
203204 << ", filling out placeholder. after: " << toString();
@@ -224,8 +225,8 @@ void TopLevelWindowModel::prependSurfaceHelper(unityapi::MirSurfaceInterface *su
224225 Window *window = createWindow(surface);
225226
226227 m_windowModel.prepend(ModelEntry(window, application));
227− m_allSurfaces.insert(surface);
228228 if (surface) {
229+ m_allSurfaces.insert(surface);
229230 connectSurface(surface);
230231 }
231232
@@ -436,7 +437,7 @@ void TopLevelWindowModel::onSurfacesAboutToBeRemovedFromWorkspace(const std::sha
436437 m_allSurfaces.remove(surface);
437438 continue;
438439 }
439− while(iter != surfaces.constEnd()) {
440+ while(iter != surfaces.constEnd()) {
440441 int index = indexOf(*iter);
441442 if (index != end+1) {
442443 break;
@@ -459,7 +460,7 @@ void TopLevelWindowModel::onSurfacesAboutToBeRemovedFromWorkspace(const std::sha
459460 window->setFocused(false);
460461
461462 m_windowModel.removeAt(start);
462− m_allSurfaces.remove(window->surface());
463+ m_allSurfaces.remove(surface);
463464 }
464465
465466 if (m_modelState == RemovingState) {
@@ -482,12 +483,13 @@ void TopLevelWindowModel::removeAt(int index)
482483 }
483484
484485 auto window = m_windowModel[index].window;
486+ auto surface = window->surface();
485487
486488 window->setSurface(nullptr);
487489 window->setFocused(false);
488490
489491 m_windowModel.removeAt(index);
490− m_allSurfaces.remove(window->surface());
492+ m_allSurfaces.remove(surface);
491493
492494 if (m_modelState == RemovingState) {
493495 endRemoveRows();
@@ -794,34 +796,32 @@ void TopLevelWindowModel::refreshWindows()
794796 m_windowModel.clear();
795797 m_allSurfaces.clear();
796798
797− if (!m_workspace || !m_applicationManager) return;
798− WMPolicyInterface::instance()->forEachWindowInWorkspace(m_workspace->workspace(), [this](const miral::Window &window) {
799− auto surface = m_surfaceManager->surfaceFor(window);
800− if (surface) {
801− if (surface->parentSurface()) {
802− // Wrap it in a Window so that we keep focusedWindow() up to date.
803− Window *window = createWindow(surface);
804− connect(surface, &QObject::destroyed, window, [=](){
805− window->setSurface(nullptr);
806− window->deleteLater();
807− });
799+ if (!m_workspace || !m_applicationManager || !m_surfaceManager) return;
800+
801+ m_surfaceManager->forEachSurfaceInWorkspace(m_workspace->workspace(), [this](unity::shell::application::MirSurfaceInterface* surface) {
802+ if (surface->parentSurface()) {
803+ // Wrap it in a Window so that we keep focusedWindow() up to date.
804+ Window *window = createWindow(surface);
805+ connect(surface, &QObject::destroyed, window, [=](){
806+ window->setSurface(nullptr);
807+ window->deleteLater();
808+ });
809+ } else {
810+ if (surface->type() == Mir::InputMethodType) {
811+ setInputMethodWindow(createWindow(surface));
808812 } else {
809− if (surface->type() == Mir::InputMethodType) {
810− setInputMethodWindow(createWindow(surface));
813+ auto *application = m_applicationManager->findApplicationWithSurface(surface);
814+ if (application) {
815+ prependSurface(surface, application);
811816 } else {
812− auto *application = m_applicationManager->findApplicationWithSurface(surface);
813− if (application) {
814− prependSurface(surface, application);
815− } else {
816− // Must be a prompt session. No need to do add it as a prompt surface is not top-level.
817− // It will show up in the ApplicationInfoInterface::promptSurfaceList of some application.
818− // Still wrap it in a Window though, so that we keep focusedWindow() up to date.
819− Window *promptWindow = createWindow(surface);
820− connect(surface, &QObject::destroyed, promptWindow, [=](){
821− promptWindow->setSurface(nullptr);
822− promptWindow->deleteLater();
823− });
824− }
817+ // Must be a prompt session. No need to do add it as a prompt surface is not top-level.
818+ // It will show up in the ApplicationInfoInterface::promptSurfaceList of some application.
819+ // Still wrap it in a Window though, so that we keep focusedWindow() up to date.
820+ Window *promptWindow = createWindow(surface);
821+ connect(surface, &QObject::destroyed, promptWindow, [=](){
822+ promptWindow->setSurface(nullptr);
823+ promptWindow->deleteLater();
824+ });
825825 }
826826 }
827827 }
plugins/WindowManager/Workspace.cpp−5
@@ -65,11 +65,6 @@ Workspace::~Workspace()
6565 }
6666}
6767
68−void Workspace::moveWindowsTo(Workspace *workspace)
69−{
70− WMPolicyInterface::instance()->moveWorkspaceContentToWorkspace(workspace->m_workspace, m_workspace);
71−}
72−
7368void Workspace::activate()
7469{
7570 WorkspaceManager::instance()->setActiveWorkspace(this);
plugins/WindowManager/Workspace.h−2
@@ -51,8 +51,6 @@ public:
5151 virtual bool isActive() const { return m_active; }
5252 bool isAssigned() const;
5353
54− void moveWindowsTo(Workspace* workspace);
55−
5654 std::shared_ptr<miral::Workspace> workspace() const { return m_workspace; }
5755
5856
plugins/WindowManager/WorkspaceManager.cpp+25−1
@@ -17,6 +17,7 @@
1717#include "WorkspaceManager.h"
1818#include "Workspace.h"
1919#include "TopLevelWindowModel.h"
20+#include <unity/shell/application/SurfaceManagerInterface.h>
2021
2122// Qt
2223#include <QGuiApplication>
@@ -31,6 +32,7 @@ WorkspaceManager *WorkspaceManager::instance()
3132
3233WorkspaceManager::WorkspaceManager()
3334 : m_activeWorkspace(nullptr)
35+ , m_surfaceManager(nullptr)
3436{
3537}
3638
@@ -77,7 +79,7 @@ void WorkspaceManager::destroyWorkspace(Workspace *workspace)
7779 setActiveWorkspace(m_allWorkspaces.count() ? *m_allWorkspaces.begin() : nullptr);
7880 }
7981 if (m_activeWorkspace) {
80− workspace->moveWindowsTo(m_activeWorkspace);
82+ moveWorkspaceContentToWorkspace(workspace, m_activeWorkspace);
8183 }
8284
8385 disconnect(workspace, 0, this, 0);
@@ -97,6 +99,28 @@ void WorkspaceManager::destroyFloatingWorkspaces()
9799 }
98100}
99101
102+void WorkspaceManager::setSurfaceManager(unity::shell::application::SurfaceManagerInterface *surfaceManager)
103+{
104+ if (m_surfaceManager == surfaceManager) return;
105+
106+ m_surfaceManager = surfaceManager;
107+ Q_EMIT surfaceManagerChanged();
108+}
109+
110+void WorkspaceManager::moveSurfaceToWorkspace(unity::shell::application::MirSurfaceInterface *surface, Workspace *workspace)
111+{
112+ if (m_surfaceManager) {
113+ m_surfaceManager->moveSurfaceToWorkspace(surface, workspace->workspace());
114+ }
115+}
116+
117+void WorkspaceManager::moveWorkspaceContentToWorkspace(Workspace *from, Workspace *to)
118+{
119+ if (m_surfaceManager) {
120+ m_surfaceManager->moveWorkspaceContentToWorkspace(from->workspace(), to->workspace());
121+ }
122+}
123+
100124Workspace *WorkspaceManager::activeWorkspace() const
101125{
102126 return m_activeWorkspace;
plugins/WindowManager/WorkspaceManager.h+24−1
@@ -23,11 +23,24 @@
2323class Workspace;
2424class ScreensProxy;
2525
26+namespace unity {
27+ namespace shell {
28+ namespace application {
29+ class MirSurfaceInterface;
30+ class SurfaceManagerInterface;
31+ }
32+ }
33+}
34+
2635class WorkspaceManager : public QObject
2736{
2837 Q_OBJECT
2938 Q_PROPERTY(Workspace* activeWorkspace READ activeWorkspace WRITE setActiveWorkspace2 NOTIFY activeWorkspaceChanged)
30− Q_PROPERTY(QQmlListProperty<Workspace> floatingWorkspaces READ floatingWorkspaces NOTIFY floatingWorkspacesChanged)
39+
40+ Q_PROPERTY(unity::shell::application::SurfaceManagerInterface* surfaceManager
41+ READ surfaceManager
42+ WRITE setSurfaceManager
43+ NOTIFY surfaceManagerChanged)
3144
3245public:
3346 static WorkspaceManager* instance();
@@ -41,9 +54,18 @@ public:
4154 QQmlListProperty<Workspace> floatingWorkspaces();
4255 void destroyFloatingWorkspaces();
4356
57+ unity::shell::application::SurfaceManagerInterface *surfaceManager() const { return m_surfaceManager; }
58+ void setSurfaceManager(unity::shell::application::SurfaceManagerInterface*);
59+
60+ Q_INVOKABLE void moveSurfaceToWorkspace(unity::shell::application::MirSurfaceInterface* surface,
61+ Workspace* workspace);
62+
63+ Q_INVOKABLE void moveWorkspaceContentToWorkspace(Workspace* from, Workspace* to);
64+
4465Q_SIGNALS:
4566 void activeWorkspaceChanged();
4667 void floatingWorkspacesChanged();
68+ void surfaceManagerChanged();
4769
4870private:
4971 WorkspaceManager();
@@ -53,6 +75,7 @@ private:
5375 QSet<Workspace*> m_allWorkspaces;
5476 QList<Workspace*> m_floatingWorkspaces;
5577 Workspace* m_activeWorkspace;
78+ unity::shell::application::SurfaceManagerInterface* m_surfaceManager;
5679};
5780
5881#endif // WORKSPACEMANAGER_H
src/WindowManagementPolicy.cpp+4−13
@@ -33,8 +33,9 @@ void WindowManagementPolicy::advise_new_window(miral::WindowInfo const& window_i
3333 auto const parent = window_info.parent();
3434
3535 auto activeWorkspace = m_activeWorkspace.lock();
36− if (!parent && activeWorkspace)
36+ if (!parent && activeWorkspace) {
3737 tools.add_tree_to_workspace(window_info.window(), activeWorkspace);
38+ }
3839}
3940
4041std::shared_ptr<miral::Workspace> WindowManagementPolicy::createWorkspace()
@@ -43,7 +44,7 @@ std::shared_ptr<miral::Workspace> WindowManagementPolicy::createWorkspace()
4344 m_workspaces.insert(workspace);
4445
4546 if (m_activeWorkspace.lock() == m_dummyWorkspace) {
46− moveWorkspaceContentToWorkspace(workspace, m_dummyWorkspace);
47+ tools.move_workspace_content_to_workspace(workspace, m_dummyWorkspace);
4748 m_activeWorkspace = workspace;
4849 }
4950 return workspace;
@@ -56,20 +57,10 @@ void WindowManagementPolicy::releaseWorkspace(const std::shared_ptr<miral::Works
5657
5758 if (m_workspaces.size() == 0) {
5859 m_activeWorkspace = m_dummyWorkspace;
59− moveWorkspaceContentToWorkspace(m_dummyWorkspace, workspace);
60+ tools.move_workspace_content_to_workspace(m_dummyWorkspace, workspace);
6061 }
6162}
6263
63−void WindowManagementPolicy::forEachWindowInWorkspace(const std::shared_ptr<miral::Workspace> &workspace, const std::function<void (const miral::Window &)> &callback)
64−{
65− tools.for_each_window_in_workspace(workspace, callback);
66−}
67−
68−void WindowManagementPolicy::moveWorkspaceContentToWorkspace(const std::shared_ptr<miral::Workspace> &toWorkspace, const std::shared_ptr<miral::Workspace> &fromWorkspace)
69−{
70− tools.move_workspace_content_to_workspace(toWorkspace, fromWorkspace);
71−}
72−
7364void WindowManagementPolicy::setActiveWorkspace(const std::shared_ptr<miral::Workspace> &workspace)
7465{
7566 if (m_activeWorkspace.lock() == workspace)
src/WindowManagementPolicy.h−7
@@ -35,13 +35,6 @@ public:
3535
3636 void releaseWorkspace(const std::shared_ptr<miral::Workspace> &workspace) override;
3737
38− void forEachWindowInWorkspace(
39− std::shared_ptr<miral::Workspace> const& workspace,
40− std::function<void(miral::Window const& window)> const& callback) override;
41−
42− void moveWorkspaceContentToWorkspace(const std::shared_ptr<miral::Workspace> &toWorkspace,
43− const std::shared_ptr<miral::Workspace> &fromWorkspace) override;
44−
4538 void setActiveWorkspace(const std::shared_ptr<miral::Workspace>& workspace) override;
4639
4740private:
src/libunity8-private/wmpolicyinterface.h−7
@@ -36,13 +36,6 @@ public:
3636
3737 virtual void releaseWorkspace(const std::shared_ptr<miral::Workspace> &workspace) = 0;
3838
39− virtual void forEachWindowInWorkspace(
40− std::shared_ptr<miral::Workspace> const& workspace,
41− std::function<void(miral::Window const& window)> const& callback) = 0;
42−
43− virtual void moveWorkspaceContentToWorkspace(const std::shared_ptr<miral::Workspace> &toWorkspace,
44− const std::shared_ptr<miral::Workspace> &fromWorkspace) = 0;
45−
4639 virtual void setActiveWorkspace(const std::shared_ptr<miral::Workspace>& workspace) = 0;
4740};
4841
tests/mocks/Unity/Application/SurfaceManager.cpp+42−9
@@ -60,12 +60,12 @@ SurfaceManager::SurfaceManager(QObject *)
6060
6161 connect(WindowManagementPolicy::instance(), &WindowManagementPolicy::windowsAddedToWorkspace,
6262 this, [this](const std::shared_ptr<miral::Workspace> &workspace, const std::vector<miral::Window> &windows) {
63− Q_EMIT surfacesAddedToWorkspace(workspace, find(windows));
63+ Q_EMIT surfacesAddedToWorkspace(workspace, surfacesFor(windows));
6464 });
6565
6666 connect(WindowManagementPolicy::instance(), &WindowManagementPolicy::windowsAboutToBeRemovedFromWorkspace,
6767 this, [this](const std::shared_ptr<miral::Workspace> &workspace, const std::vector<miral::Window> &windows) {
68− Q_EMIT surfacesAboutToBeRemovedFromWorkspace(workspace, find(windows));
68+ Q_EMIT surfacesAboutToBeRemovedFromWorkspace(workspace, surfacesFor(windows));
6969 });
7070}
7171
@@ -81,9 +81,16 @@ SurfaceManager::~SurfaceManager()
8181 m_instance = nullptr;
8282}
8383
84+MirSurfaceInterface *SurfaceManager::surfaceFor(const miral::Window& window) const
85+{
86+ auto iter = m_windowToSurface.find({window});
87+ if (iter != m_windowToSurface.end()) {
88+ return *iter;
89+ }
90+ return nullptr;
91+}
8492
85−
86−QVector<MirSurfaceInterface*> SurfaceManager::find(const std::vector<miral::Window> &windows) const
93+QVector<MirSurfaceInterface*> SurfaceManager::surfacesFor(const std::vector<miral::Window> &windows) const
8794{
8895 QVector<unityapi::MirSurfaceInterface*> surfaces;
8996 for (size_t i = 0; i < windows.size(); i++) {
@@ -95,13 +102,13 @@ QVector<MirSurfaceInterface*> SurfaceManager::find(const std::vector<miral::Wind
95102 return surfaces;
96103}
97104
98−MirSurfaceInterface *SurfaceManager::surfaceFor(const miral::Window& window) const
105+miral::Window SurfaceManager::windowFor(MirSurfaceInterface *surface) const
99106{
100− auto iter = m_windowToSurface.find({window});
101− if (iter != m_windowToSurface.end()) {
102− return *iter;
107+ auto iter = m_surfaceToWindow.find(surface);
108+ if (iter != m_surfaceToWindow.end()) {
109+ return iter->window;
103110 }
104− return nullptr;
111+ return miral::Window();
105112}
106113
107114MirSurface *SurfaceManager::createSurface(const QString& name,
@@ -267,6 +274,32 @@ void SurfaceManager::activate(unityapi::MirSurfaceInterface *apiSurface)
267274 DEBUG_MSG("("<<surface<<") ended");
268275}
269276
277+void SurfaceManager::forEachSurfaceInWorkspace(const std::shared_ptr<miral::Workspace> &workspace,
278+ const std::function<void(unity::shell::application::MirSurfaceInterface*)> &callback)
279+{
280+ WindowManagementPolicy::instance()->forEachWindowInWorkspace(workspace, [&](const miral::Window &window) {
281+ auto surface = surfaceFor(window);
282+ if (surface) {
283+ callback(surface);
284+ }
285+ });
286+}
287+
288+void SurfaceManager::moveSurfaceToWorkspace(unity::shell::application::MirSurfaceInterface* surface,
289+ const std::shared_ptr<miral::Workspace> &workspace)
290+{
291+ auto window = windowFor(surface);
292+ if (window) {
293+ WindowManagementPolicy::instance()->moveWindowToWorkspace(window, workspace);
294+ }
295+}
296+
297+void SurfaceManager::moveWorkspaceContentToWorkspace(const std::shared_ptr<miral::Workspace> &to,
298+ const std::shared_ptr<miral::Workspace> &from)
299+{
300+ WindowManagementPolicy::instance()->moveWorkspaceContentToWorkspace(to, from);
301+}
302+
270303void SurfaceManager::onStateRequested(MirSurface *surface, Mir::State state)
271304{
272305 DEBUG_MSG("("<<surface<<","<<state<<") started");
tests/mocks/Unity/Application/SurfaceManager.h+10−3
@@ -50,12 +50,17 @@ public:
5050
5151 static SurfaceManager *instance();
5252
53− unity::shell::application::MirSurfaceInterface *surfaceFor(const miral::Window& window) const override;
54−
5553 // SurfaceManagerInterface
5654 void raise(unity::shell::application::MirSurfaceInterface *surface) override;
5755 void activate(unity::shell::application::MirSurfaceInterface *surface) override;
5856
57+ void forEachSurfaceInWorkspace(const std::shared_ptr<miral::Workspace> &workspace,
58+ const std::function<void(unity::shell::application::MirSurfaceInterface*)> &callback) override;
59+ void moveSurfaceToWorkspace(unity::shell::application::MirSurfaceInterface* surface,
60+ const std::shared_ptr<miral::Workspace> &workspace) override;
61+ void moveWorkspaceContentToWorkspace(const std::shared_ptr<miral::Workspace> &to,
62+ const std::shared_ptr<miral::Workspace> &from) override;
63+
5964 Q_INVOKABLE MirSurface* createSurface(const QString& name,
6065 Mir::Type type,
6166 Mir::State state,
@@ -105,7 +110,9 @@ private:
105110 void doRaise(unity::shell::application::MirSurfaceInterface *surface);
106111 void focusFirstAvailableSurface();
107112 void registerSurface(MirSurface *surface);
108− QVector<unity::shell::application::MirSurfaceInterface*> find(const std::vector<miral::Window> &windows) const;
113+ unity::shell::application::MirSurfaceInterface* surfaceFor(const miral::Window &window) const;
114+ QVector<unity::shell::application::MirSurfaceInterface*> surfacesFor(const std::vector<miral::Window> &windows) const;
115+ miral::Window windowFor(unity::shell::application::MirSurfaceInterface* surface) const;
109116
110117 static SurfaceManager *m_instance;
111118
tests/mocks/WindowManager/WindowManagementPolicy.cpp+39−26
@@ -54,48 +54,61 @@ void WindowManagementPolicy::releaseWorkspace(const std::shared_ptr<miral::Works
5454 }
5555}
5656
57−void WindowManagementPolicy::forEachWindowInWorkspace(const std::shared_ptr<miral::Workspace> &workspace, const std::function<void (const miral::Window &)> &callback)
57+void WindowManagementPolicy::setActiveWorkspace(const std::shared_ptr<miral::Workspace> &workspace)
5858{
59− QMultiMap<miral::Workspace*, miral::Window>::iterator i = m_windows.find(workspace.get());
60− while (i != m_windows.end() && i.key() == workspace.get()) {
59+ if (m_activeWorkspace.lock() == workspace)
60+ return;
61+ m_activeWorkspace = workspace ? workspace : m_dummyWorkspace;
62+}
63+
64+void WindowManagementPolicy::addWindow(const miral::Window &window)
65+{
66+ Q_EMIT windowAdded(window);
67+
68+ auto activeWorkspace = m_activeWorkspace.lock();
69+ if (activeWorkspace) {
70+ m_windows.insert(activeWorkspace, window);
71+
72+ Q_EMIT windowsAddedToWorkspace(activeWorkspace, {window});
73+ }
74+}
75+
76+void WindowManagementPolicy::forEachWindowInWorkspace(const std::shared_ptr<miral::Workspace> &workspace, const std::function<void(const miral::Window &)> &callback)
77+{
78+ WorkspaceWindows::iterator i = m_windows.find(workspace);
79+ while (i != m_windows.end() && i.key() == workspace) {
6180 callback(i.value());
6281 ++i;
6382 }
6483}
6584
85+void WindowManagementPolicy::moveWindowToWorkspace(const miral::Window &window, const std::shared_ptr<miral::Workspace> &workspace)
86+{
87+ auto from = m_windows.key(window);
88+ if (from) {
89+ auto iter = m_windows.find(from, window);
90+ Q_EMIT windowsAboutToBeRemovedFromWorkspace(from, { window });
91+ m_windows.erase(iter);
92+ }
93+
94+ m_windows.insert(workspace, window);
95+ Q_EMIT windowsAddedToWorkspace(workspace, { window });
96+}
97+
6698void WindowManagementPolicy::moveWorkspaceContentToWorkspace(const std::shared_ptr<miral::Workspace> &to, const std::shared_ptr<miral::Workspace> &from)
6799{
68100 std::vector<miral::Window> windows;
69101
70− QMultiMap<miral::Workspace*, miral::Window>::iterator i = m_windows.find(from.get());
71− while (i != m_windows.end() && i.key() == from.get()) {
102+ WorkspaceWindows::iterator i = m_windows.find(from);
103+ while (i != m_windows.end() && i.key() == from) {
72104 windows.push_back(i.value());
73105 ++i;
74106 }
75107 Q_EMIT windowsAboutToBeRemovedFromWorkspace(from, windows);
76− m_windows.remove(from.get());
108+ m_windows.remove(from);
77109
78110 Q_FOREACH(miral::Window window, windows) {
79− m_windows.insert(to.get(), window);
111+ m_windows.insert(to, window);
80112 }
81113 Q_EMIT windowsAddedToWorkspace(to, windows);
82114}
83−
84−void WindowManagementPolicy::addWindow(const miral::Window &window)
85−{
86− Q_EMIT windowAdded(window);
87−
88− auto activeWorkspace = m_activeWorkspace.lock();
89− if (activeWorkspace) {
90− m_windows.insert(activeWorkspace.get(), window);
91−
92− Q_EMIT windowsAddedToWorkspace(activeWorkspace, {window});
93− }
94−}
95−
96−void WindowManagementPolicy::setActiveWorkspace(const std::shared_ptr<miral::Workspace> &workspace)
97−{
98− if (m_activeWorkspace.lock() == workspace)
99− return;
100− m_activeWorkspace = workspace ? workspace : m_dummyWorkspace;
101−}
tests/mocks/WindowManager/WindowManagementPolicy.h+9−8
@@ -44,18 +44,18 @@ public:
4444
4545 // From WMPolicyInterface
4646 std::shared_ptr<miral::Workspace> createWorkspace() override;
47−
4847 void releaseWorkspace(const std::shared_ptr<miral::Workspace>& workspace) override;
48+ void setActiveWorkspace(const std::shared_ptr<miral::Workspace>& workspace) override;
4949
50− void forEachWindowInWorkspace(std::shared_ptr<miral::Workspace> const& workspace,
51− std::function<void(miral::Window const&)> const& callback) override;
50+ void addWindow(const miral::Window& window);
5251
53− void moveWorkspaceContentToWorkspace(const std::shared_ptr<miral::Workspace>& to,
54− const std::shared_ptr<miral::Workspace>& from) override;
52+ void forEachWindowInWorkspace(std::shared_ptr<miral::Workspace> const& workspace,
53+ std::function<void(miral::Window const&)> const& callback);
5554
56− void setActiveWorkspace(const std::shared_ptr<miral::Workspace>& workspace) override;
55+ void moveWindowToWorkspace(const miral::Window &window, const std::shared_ptr<miral::Workspace> &workspace);
5756
58− void addWindow(const miral::Window& window);
57+ void moveWorkspaceContentToWorkspace(const std::shared_ptr<miral::Workspace>& to,
58+ const std::shared_ptr<miral::Workspace>& from);
5959
6060Q_SIGNALS:
6161 void windowAdded(const miral::Window& window);
@@ -67,6 +67,7 @@ private:
6767 std::shared_ptr<miral::Workspace> m_dummyWorkspace;
6868 std::unordered_set<std::shared_ptr<miral::Workspace>> m_workspaces;
6969
70− QMultiMap<miral::Workspace*, miral::Window> m_windows;
70+ typedef QMultiMap<std::shared_ptr<miral::Workspace>, miral::Window> WorkspaceWindows;
71+ WorkspaceWindows m_windows;
7172};
7273#endif // UNITY_WINDOWMANAGEMENTPOLICY_H