on xenial help sign in
Fixed mocking WMPolicy
commit27b74cddb9e1afbd9afc9533e118234a5171ee2c authorNick Dedekind <nick.dedekind@canonical.com> dateFri 3 Mar 2017, 14:09 (10 years ago) parentb3c03fa
17 files changed+134−57
plugins/WindowManager/Screens.cpp−4 plugins/WindowManager/TopLevelWindowModel.cpp+2−2 plugins/WindowManager/Workspace.cpp+5−5 src/CMakeLists.txt+1 src/UnityApplication.cpp+1−1 src/libunity8-private/windowmanagementpolicy.cpp → src/WindowManagementPolicy.cpp+2−11 src/libunity8-private/windowmanagementpolicy.h → src/WindowManagementPolicy.h+10−9 src/libunity8-private/CMakeLists.txt+1−10 src/libunity8-private/wmpolicyinterface.cpp+24 src/libunity8-private/wmpolicyinterface.h+51 tests/mocks/Unity/Application/CMakeLists.txt+1 tests/mocks/Unity/Application/SurfaceManager.cpp+1−1 tests/mocks/WindowManager/CMakeLists.txt+3−1 tests/mocks/WindowManager/windowmanagementpolicy.cpp → tests/mocks/WindowManager/WindowManagementPolicy.cpp+9−6 tests/mocks/WindowManager/windowmanagementpolicy.h → tests/mocks/WindowManager/WindowManagementPolicy.h+13−7 tests/mocks/WindowManager/WindowManagerPlugin.cpp+9 tests/mocks/WindowManager/WindowManagerPlugin.h+1
plugins/WindowManager/Screens.cpp−4
@@ -29,10 +29,6 @@
2929Screens::Screens(const QSharedPointer<qtmir::Screens>& model)
3030 : m_wrapped(model)
3131{
32− if (qGuiApp->platformName() != QLatin1String("mirserver")) {
33− qCritical("Not using 'mirserver' QPA plugin. Using qGuiApp may produce unknown results.");
34− }
35−
3632 connect(m_wrapped.data(), &qtmir::Screens::screenAdded, this, &Screens::onScreenAdded);
3733 connect(m_wrapped.data(), &qtmir::Screens::screenRemoved, this, &Screens::onScreenRemoved);
3834 connect(m_wrapped.data(), &qtmir::Screens::activeScreenChanged, this, &Screens::activeScreenChanged);
plugins/WindowManager/TopLevelWindowModel.cpp+2−2
@@ -29,7 +29,7 @@
2929// local
3030#include "Window.h"
3131#include "Workspace.h"
32−#include "windowmanagementpolicy.h"
32+#include "wmpolicyinterface.h"
3333
3434// qtmir
3535#include <qtmir/mirserverapplication.h>
@@ -831,7 +831,7 @@ void TopLevelWindowModel::refreshWindows()
831831 m_allSurfaces.clear();
832832
833833 if (!m_workspace || !m_applicationManager) return;
834− WindowManagementPolicy::instance()->forEachWindowInWorkspace(m_workspace->workspace(), [this](const miral::Window &window) {
834+ WMPolicyInterface::instance()->forEachWindowInWorkspace(m_workspace->workspace(), [this](const miral::Window &window) {
835835 auto surface = m_surfaceManager->surfaceFor(window);
836836 if (surface) {
837837 if (surface->parentSurface()) {
plugins/WindowManager/Workspace.cpp+5−5
@@ -19,13 +19,13 @@
1919#include "WorkspaceManager.h"
2020#include "TopLevelWindowModel.h"
2121
22−#include "windowmanagementpolicy.h"
22+#include "wmpolicyinterface.h"
2323
2424int nextWorkspace = 0;
2525
2626Workspace::Workspace(QObject *parent)
2727 : QObject(parent)
28− , m_workspace(WindowManagementPolicy::instance()->createWorkspace())
28+ , m_workspace(WMPolicyInterface::instance()->createWorkspace())
2929 , m_model(nullptr)
3030 , m_active(false)
3131{
@@ -38,7 +38,7 @@ Workspace::Workspace(QObject *parent)
3838 Q_EMIT activeChanged(m_active);
3939
4040 if (m_active) {
41− WindowManagementPolicy::instance()->setActiveWorkspace(m_workspace);
41+ WMPolicyInterface::instance()->setActiveWorkspace(m_workspace);
4242 }
4343 }
4444 });
@@ -67,7 +67,7 @@ Workspace::~Workspace()
6767
6868void Workspace::moveWindowsTo(Workspace *workspace)
6969{
70− WindowManagementPolicy::instance()->moveWorkspaceContentToWorkspace(workspace->m_workspace, m_workspace);
70+ WMPolicyInterface::instance()->moveWorkspaceContentToWorkspace(workspace->m_workspace, m_workspace);
7171}
7272
7373void Workspace::activate()
@@ -110,7 +110,7 @@ void Workspace::unassign()
110110
111111void Workspace::release()
112112{
113− WindowManagementPolicy::instance()->releaseWorkspace(m_workspace);
113+ WMPolicyInterface::instance()->releaseWorkspace(m_workspace);
114114 deleteLater();
115115}
116116
src/CMakeLists.txt+1
@@ -32,6 +32,7 @@ set(SOURCE_FILES
3232 UnityCommandLineParser.cpp
3333 UnixSignalHandler.cpp
3434 DebuggingController.cpp
35+ WindowManagementPolicy.cpp
3536 ${QML_FILES} # This is to make qml and image files appear in the IDE's project tree
3637)
3738
src/UnityApplication.cpp+1−1
@@ -32,7 +32,7 @@
3232#include "CachingNetworkManagerFactory.h"
3333#include "UnityCommandLineParser.h"
3434#include "DebuggingController.h"
35−#include "windowmanagementpolicy.h"
35+#include "WindowManagementPolicy.h"
3636
3737#include <QDebug>
3838
src/libunity8-private/windowmanagementpolicy.cpp → src/WindowManagementPolicy.cpprenamed+2−11
@@ -14,27 +14,18 @@
1414 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1515 */
1616
17−#include "windowmanagementpolicy.h"
18−
19−#include <QDebug>
20−
21−WindowManagementPolicy* WindowManagementPolicy::m_self = nullptr;
17+#include "WindowManagementPolicy.h"
2218
2319WindowManagementPolicy::WindowManagementPolicy(const miral::WindowManagerTools &tools, qtmir::WindowManagementPolicyPrivate &dd)
2420 : qtmir::WindowManagementPolicy(tools, dd)
2521 , m_dummyWorkspace(this->tools.create_workspace())
2622{
27− m_self = this;
23+ wmPolicyInterface = this;
2824
2925 // we must always have a active workspace.
3026 m_activeWorkspace = m_dummyWorkspace;
3127}
3228
33−WindowManagementPolicy *WindowManagementPolicy::instance()
34−{
35− return m_self;
36−}
37−
3829void WindowManagementPolicy::advise_new_window(miral::WindowInfo const& window_info)
3930{
4031 qtmir::WindowManagementPolicy::advise_new_window(window_info);
src/libunity8-private/windowmanagementpolicy.h → src/WindowManagementPolicy.hrenamed+10−9
@@ -18,32 +18,33 @@
1818#define UNITY_WINDOWMANAGEMENTPOLICY_H
1919
2020#include <qtmir/windowmanagementpolicy.h>
21+#include "wmpolicyinterface.h"
2122
2223#include <unordered_set>
2324
24−class Q_DECL_EXPORT WindowManagementPolicy : public qtmir::WindowManagementPolicy
25+class Q_DECL_EXPORT WindowManagementPolicy : public qtmir::WindowManagementPolicy,
26+ public WMPolicyInterface
2527{
2628public:
2729 WindowManagementPolicy(const miral::WindowManagerTools &tools, qtmir::WindowManagementPolicyPrivate& dd);
2830
29− static WindowManagementPolicy *instance();
30−
3131 void advise_new_window(miral::WindowInfo const& window_info) override;
3232
33− std::shared_ptr<miral::Workspace> createWorkspace();
34− void releaseWorkspace(const std::shared_ptr<miral::Workspace> &workspace);
33+ // From WMPolicyInterface
34+ std::shared_ptr<miral::Workspace> createWorkspace() override;
35+
36+ void releaseWorkspace(const std::shared_ptr<miral::Workspace> &workspace) override;
3537
3638 void forEachWindowInWorkspace(
3739 std::shared_ptr<miral::Workspace> const& workspace,
38− std::function<void(miral::Window const& window)> const& callback);
40+ std::function<void(miral::Window const& window)> const& callback) override;
3941
4042 void moveWorkspaceContentToWorkspace(const std::shared_ptr<miral::Workspace> &toWorkspace,
41− const std::shared_ptr<miral::Workspace> &fromWorkspace);
43+ const std::shared_ptr<miral::Workspace> &fromWorkspace) override;
4244
43− void setActiveWorkspace(const std::shared_ptr<miral::Workspace>& workspace);
45+ void setActiveWorkspace(const std::shared_ptr<miral::Workspace>& workspace) override;
4446
4547private:
46− static WindowManagementPolicy* m_self;
4748 std::weak_ptr<miral::Workspace> m_activeWorkspace;
4849
4950 std::unordered_set<std::shared_ptr<miral::Workspace>> m_workspaces;
src/libunity8-private/CMakeLists.txt+1−10
@@ -4,26 +4,17 @@ set(VERSION ${SOVERSION}.0.0)
44
55project(lib${LIB_NAME})
66
7−include_directories(
8− SYSTEM
9− ${QTMIRSERVER_INCLUDE_DIRS}
10−)
11−
127set(lib${LIB_NAME}_SRCS
138 abstractdbusservicemonitor.cpp
149 unitydbusobject.cpp
1510 unitydbusvirtualobject.cpp
16− windowmanagementpolicy.cpp
11+ wmpolicyinterface.cpp
1712 )
1813
1914add_library(${LIB_NAME} SHARED
2015 ${lib${LIB_NAME}_SRCS}
2116 )
2217
23−target_link_libraries(${LIB_NAME}
24− ${QTMIRSERVER_LDFLAGS}
25− )
26−
2718set_target_properties(${LIB_NAME} PROPERTIES
2819 VERSION ${VERSION}
2920 SOVERSION ${SOVERSION}
src/libunity8-private/wmpolicyinterface.cppnew file+24
@@ -0,0 +1,24 @@
1+/*
2+ * Copyright (C) 2017 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include "wmpolicyinterface.h"
18+
19+WMPolicyInterface* wmPolicyInterface = nullptr;
20+
21+WMPolicyInterface *WMPolicyInterface::instance()
22+{
23+ return wmPolicyInterface;
24+}
src/libunity8-private/wmpolicyinterface.hnew file+51
@@ -0,0 +1,51 @@
1+/*
2+ * Copyright (C) 2017 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#ifndef WMPOLICYINTERFACE_H
18+#define WMPOLICYINTERFACE_H
19+
20+#include <memory>
21+#include <functional>
22+
23+#include <qglobal.h>
24+
25+namespace miral {
26+class Workspace;
27+class Window;
28+}
29+
30+class Q_DECL_EXPORT WMPolicyInterface
31+{
32+public:
33+ static WMPolicyInterface *instance();
34+
35+ virtual std::shared_ptr<miral::Workspace> createWorkspace() = 0;
36+
37+ virtual void releaseWorkspace(const std::shared_ptr<miral::Workspace> &workspace) = 0;
38+
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+
46+ virtual void setActiveWorkspace(const std::shared_ptr<miral::Workspace>& workspace) = 0;
47+};
48+
49+extern Q_DECL_EXPORT WMPolicyInterface* wmPolicyInterface;
50+
51+#endif // WMPOLICYINTERFACE_H
tests/mocks/Unity/Application/CMakeLists.txt+1
@@ -4,6 +4,7 @@ include_directories(
44 SYSTEM
55 ${MIRTEST_INCLUDE_DIRS}
66 ${MIRAL_INCLUDE_DIRS}
7+ ${libunity8-private_SOURCE_DIR}
78)
89
910set(FakeUnityApplicationQml_SOURCES
tests/mocks/Unity/Application/SurfaceManager.cpp+1−1
@@ -18,7 +18,7 @@
1818
1919#include "ApplicationInfo.h"
2020#include "VirtualKeyboard.h"
21−#include "../../WindowManager/windowmanagementpolicy.h"
21+#include "../../WindowManager/WindowManagementPolicy.h"
2222
2323#include <paths.h>
2424#include <mirtest/mir/test/doubles/stub_surface.h>
tests/mocks/WindowManager/CMakeLists.txt+3−1
@@ -7,13 +7,15 @@ include_directories(
77 ${CMAKE_CURRENT_SOURCE_DIR}
88 ${CMAKE_CURRENT_BINARY_DIR}
99 ${CMAKE_SOURCE_DIR}/plugins/WindowManager
10+ ${libunity8-private_SOURCE_DIR}
1011)
1112
1213add_library(mockwindowmanagmentpolicy SHARED
13− windowmanagementpolicy.cpp
14+ WindowManagementPolicy.cpp
1415)
1516target_link_libraries(mockwindowmanagmentpolicy
1617 ${MIRAL_LDFLAGS}
18+ unity8-private
1719)
1820qt5_use_modules(mockwindowmanagmentpolicy Core)
1921
tests/mocks/WindowManager/windowmanagementpolicy.cpp → tests/mocks/WindowManager/WindowManagementPolicy.cpprenamed+9−6
@@ -14,20 +14,23 @@
1414 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1515 */
1616
17−#include "windowmanagementpolicy.h"
17+#include "WindowManagementPolicy.h"
1818
19−WindowManagementPolicy *WindowManagementPolicy::instance()
20−{
21− static WindowManagementPolicy* inst(new WindowManagementPolicy());
22− return inst;
23−}
19+#include <QDebug>
2420
2521WindowManagementPolicy::WindowManagementPolicy()
2622 : m_dummyWorkspace(std::shared_ptr<miral::Workspace>())
2723{
24+ wmPolicyInterface = this;
2825 m_activeWorkspace = m_dummyWorkspace;
2926}
3027
28+WindowManagementPolicy *WindowManagementPolicy::instance()
29+{
30+ static WindowManagementPolicy* wmPolicy(new WindowManagementPolicy);
31+ return wmPolicy;
32+}
33+
3134std::shared_ptr<miral::Workspace> WindowManagementPolicy::createWorkspace()
3235{
3336 auto workspace = std::make_shared<miral::Workspace>();
tests/mocks/WindowManager/windowmanagementpolicy.h → tests/mocks/WindowManager/WindowManagementPolicy.hrenamed+13−7
@@ -17,6 +17,8 @@
1717#ifndef MOCKWINDOMANAGEMENTPOLICY_H
1818#define MOCKWINDOMANAGEMENTPOLICY_H
1919
20+#include "wmpolicyinterface.h"
21+
2022#include <QObject>
2123#include <QMultiMap>
2224#include <QVector>
@@ -30,26 +32,30 @@ class Workspace {};
3032}
3133
3234// A Fake window management policy for the mock.
33−class Q_DECL_EXPORT WindowManagementPolicy : public QObject
35+class Q_DECL_EXPORT WindowManagementPolicy : public QObject,
36+ public WMPolicyInterface
3437{
3538 Q_OBJECT
3639public:
3740 WindowManagementPolicy();
3841
42+ // for use in mocks
3943 static WindowManagementPolicy *instance();
4044
41− std::shared_ptr<miral::Workspace> createWorkspace();
42− void releaseWorkspace(const std::shared_ptr<miral::Workspace>& workspace);
45+ // From WMPolicyInterface
46+ std::shared_ptr<miral::Workspace> createWorkspace() override;
47+
48+ void releaseWorkspace(const std::shared_ptr<miral::Workspace>& workspace) override;
4349
4450 void forEachWindowInWorkspace(std::shared_ptr<miral::Workspace> const& workspace,
45− std::function<void(miral::Window const&)> const& callback);
51+ std::function<void(miral::Window const&)> const& callback) override;
4652
4753 void moveWorkspaceContentToWorkspace(const std::shared_ptr<miral::Workspace>& to,
48− const std::shared_ptr<miral::Workspace>& from);
54+ const std::shared_ptr<miral::Workspace>& from) override;
4955
50− void addWindow(const miral::Window& window);
56+ void setActiveWorkspace(const std::shared_ptr<miral::Workspace>& workspace) override;
5157
52− void setActiveWorkspace(const std::shared_ptr<miral::Workspace>& workspace);
58+ void addWindow(const miral::Window& window);
5359
5460Q_SIGNALS:
5561 void windowAdded(const miral::Window& window);
tests/mocks/WindowManager/WindowManagerPlugin.cpp+9
@@ -25,6 +25,7 @@
2525#include "WorkspaceManager.h"
2626#include "Workspace.h"
2727#include "WorkspaceModel.h"
28+#include "WindowManagementPolicy.h"
2829
2930#include <QtQml>
3031
@@ -60,3 +61,11 @@ void WindowManagerPlugin::registerTypes(const char *uri)
6061 qmlRegisterType<ScreenWindow>(uri, 1, 0, "ScreenWindow");
6162 qmlRegisterRevision<QWindow,1>(uri, 1, 0);
6263}
64+
65+void WindowManagerPlugin::initializeEngine(QQmlEngine *engine, const char *uri)
66+{
67+ QQmlExtensionPlugin::initializeEngine(engine, uri);
68+
69+ // Make sure we've initialized the wm policy.
70+ WindowManagementPolicy::instance();
71+}
tests/mocks/WindowManager/WindowManagerPlugin.h+1
@@ -27,6 +27,7 @@ class WindowManagerPlugin : public QQmlExtensionPlugin
2727
2828public:
2929 void registerTypes(const char *uri) override;
30+ void initializeEngine(QQmlEngine *engine, const char *uri) override;
3031};
3132
3233#endif // WINDOWMANAGER_PLUGIN_H