on xenial help sign in
TLWM as workspace property
commite174ec3f3be2345abdf8d46fa57e09542f9b5496 authorNick Dedekind <nick.dedekind@canonical.com> dateFri 17 Mar 2017, 09:22 (10 years ago) parent42e4c1a
17 files changed+191−102
plugins/WindowManager/CMakeLists.txt+2 plugins/WindowManager/Screen.cpp+7−1 plugins/WindowManager/Screen.h+1−1 plugins/WindowManager/ScreenAttached.cpp+1−1 plugins/WindowManager/TopLevelWindowModel.cpp+10−29 plugins/WindowManager/TopLevelWindowModel.h+5−30 plugins/WindowManager/WindowManagerObjects.cpp+47 plugins/WindowManager/WindowManagerObjects.h+64 plugins/WindowManager/WindowManagerPlugin.cpp+8−1 plugins/WindowManager/Workspace.cpp+2 plugins/WindowManager/Workspace.h+5−3 plugins/WindowManager/WorkspaceManager.cpp+7−13 plugins/WindowManager/WorkspaceManager.h−9 qml/Shell.qml+10−13 qml/ShellApplication.qml+12 tests/mocks/WindowManager/CMakeLists.txt+2 tests/mocks/WindowManager/WindowManagerPlugin.cpp+8−1
plugins/WindowManager/CMakeLists.txt+2
@@ -16,10 +16,12 @@ set(WINDOWMANAGER_SRC
1616 ScreenAttached.cpp
1717 Screens.cpp
1818 ScreenWindow.cpp
19+ WindowManagerObjects.cpp
1920 Workspace.cpp
2021 WorkspaceManager.cpp
2122 WorkspaceModel.cpp
2223 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/ApplicationInfoInterface.h
24+ ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/ApplicationManagerInterface.h
2325 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/Mir.h
2426 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/MirSurfaceInterface.h
2527 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/MirSurfaceListInterface.h
plugins/WindowManager/Screen.cpp+7−1
@@ -39,6 +39,12 @@ void ScreenInterface::connectToScreen(qtmir::Screen *screen)
3939 connect(screen, &qtmir::Screen::availableModesChanged, this, &ScreenInterface::availableModesChanged);
4040}
4141
42+void ScreenInterface::connectToScreen(ScreenInterface *screen)
43+{
44+ connectToScreen(screen->wrapped());
45+ connect(screen, &ScreenInterface::currentWorkspaceChanged, this, &ScreenInterface::currentWorkspaceChanged);
46+}
47+
4248qtmir::OutputId ScreenInterface::outputId() const
4349{
4450 if (!m_wrapped) return qtmir::OutputId(-1);
@@ -221,7 +227,7 @@ ScreenProxy::ScreenProxy(ScreenInterface *const screen)
221227 : m_workspaces(new WorkspaceModelProxy(screen->workspaces()))
222228 , m_original(screen)
223229{
224− connectToScreen(screen->wrapped());
230+ connectToScreen(screen);
225231
226232 auto updateCurrentWorkspaceFn = [this](Workspace* realWorkspace) {
227233 Q_FOREACH(Workspace* workspace, m_workspaces->list()) {
plugins/WindowManager/Screen.h+1−1
@@ -27,7 +27,6 @@ class ScreenInterface: public QObject
2727 Q_PROPERTY(uint currentModeIndex READ currentModeIndex NOTIFY currentModeIndexChanged)
2828 Q_PROPERTY(QQmlListProperty<qtmir::ScreenMode> availableModes READ availableModes NOTIFY availableModesChanged)
2929 Q_PROPERTY(QSizeF physicalSize READ physicalSize NOTIFY physicalSizeChanged)
30−
3130 Q_PROPERTY(WorkspaceModel* workspaces READ workspaces CONSTANT)
3231 Q_PROPERTY(Workspace* currentWorkspace READ currentWorkspace WRITE setCurrentWorkspace NOTIFY currentWorkspaceChanged)
3332public:
@@ -80,6 +79,7 @@ protected:
8079 ScreenInterface(QObject* parent = 0);
8180
8281 void connectToScreen(qtmir::Screen* screen);
82+ void connectToScreen(ScreenInterface* screen);
8383
8484protected:
8585 QPointer<qtmir::Screen> m_wrapped;
plugins/WindowManager/ScreenAttached.cpp+1−1
@@ -140,7 +140,7 @@ void ScreenAttached::screenChanged2(ScreenInterface* screen)
140140 Q_EMIT availableModesChanged();
141141 }
142142
143− connectToScreen(screen->wrapped());
143+ connectToScreen(screen);
144144}
145145
146146ScreenAttached *WMScreen::qmlAttachedProperties(QObject *owner)
plugins/WindowManager/TopLevelWindowModel.cpp+10−29
@@ -15,6 +15,7 @@
1515 */
1616
1717#include "TopLevelWindowModel.h"
18+#include "WindowManagerObjects.h"
1819
1920// unity-api
2021#include <unity/shell/application/ApplicationInfoInterface.h>
@@ -42,8 +43,16 @@ Q_LOGGING_CATEGORY(TOPLEVELWINDOWMODEL, "toplevelwindowmodel", QtInfoMsg)
4243
4344namespace unityapi = unity::shell::application;
4445
45−TopLevelWindowModel::TopLevelWindowModel()
46+TopLevelWindowModel::TopLevelWindowModel(Workspace* workspace)
47+ : m_workspace(workspace)
4648{
49+ connect(WindowManagerObjects::instance(), &WindowManagerObjects::applicationManagerChanged,
50+ this, &TopLevelWindowModel::setApplicationManager);
51+ connect(WindowManagerObjects::instance(), &WindowManagerObjects::surfaceManagerChanged,
52+ this, &TopLevelWindowModel::setSurfaceManager);
53+
54+ setApplicationManager(WindowManagerObjects::instance()->applicationManager());
55+ setSurfaceManager(WindowManagerObjects::instance()->surfaceManager());
4756}
4857
4958void TopLevelWindowModel::setApplicationManager(unityapi::ApplicationManagerInterface* value)
@@ -86,7 +95,6 @@ void TopLevelWindowModel::setApplicationManager(unityapi::ApplicationManagerInte
8695 });
8796 }
8897
89− Q_EMIT applicationManagerChanged(m_applicationManager);
9098 refreshWindows();
9199
92100 endResetModel();
@@ -125,33 +133,6 @@ void TopLevelWindowModel::setSurfaceManager(unityapi::SurfaceManagerInterface *s
125133 }
126134
127135 refreshWindows();
128− Q_EMIT surfaceManagerChanged(m_surfaceManager);
129−
130− endResetModel();
131− m_modelState = IdleState;
132−}
133−
134−void TopLevelWindowModel::setWorkspace(Workspace *workspace)
135−{
136− if (workspace == m_workspace) {
137− return;
138− }
139−
140− DEBUG_MSG << "(" << workspace << ")";
141−
142− Q_ASSERT(m_modelState == IdleState);
143− m_modelState = ResettingState;
144−
145− beginResetModel();
146−
147− if (m_workspace) {
148− disconnect(m_workspace, 0, this, 0);
149− }
150−
151− m_workspace = workspace;
152−
153− refreshWindows();
154− Q_EMIT workspaceChanged(workspace);
155136
156137 endResetModel();
157138 m_modelState = IdleState;
plugins/WindowManager/TopLevelWindowModel.h+5−30
@@ -75,21 +75,6 @@ class TopLevelWindowModel : public QAbstractListModel
7575 */
7676 Q_PROPERTY(Window* focusedWindow READ focusedWindow NOTIFY focusedWindowChanged)
7777
78− Q_PROPERTY(Workspace* workspace
79− READ workspace
80− WRITE setWorkspace
81− NOTIFY workspaceChanged)
82−
83− Q_PROPERTY(unity::shell::application::SurfaceManagerInterface* surfaceManager
84− READ surfaceManager
85− WRITE setSurfaceManager
86− NOTIFY surfaceManagerChanged)
87−
88− Q_PROPERTY(unity::shell::application::ApplicationManagerInterface* applicationManager
89− READ applicationManager
90− WRITE setApplicationManager
91− NOTIFY applicationManagerChanged)
92−
9378 /**
9479 The id to be used on the next entry created
9580 Useful for tests
@@ -108,7 +93,7 @@ public:
10893 ApplicationRole = Qt::UserRole + 1,
10994 };
11095
111− TopLevelWindowModel();
96+ TopLevelWindowModel(Workspace* workspace);
11297
11398 // From QAbstractItemModel
11499 int rowCount(const QModelIndex &parent = QModelIndex()) const override;
@@ -119,20 +104,11 @@ public:
119104 return roleNames;
120105 }
121106
122− // Own API
123−
124− Workspace* workspace() const { return m_workspace; }
125− void setWorkspace(Workspace* workspace);
107+ // Own API;
126108
127109 unity::shell::application::MirSurfaceInterface* inputMethodSurface() const;
128110 Window* focusedWindow() const;
129111
130− unity::shell::application::ApplicationManagerInterface *applicationManager() const { return m_applicationManager; }
131− void setApplicationManager(unity::shell::application::ApplicationManagerInterface*);
132−
133− unity::shell::application::SurfaceManagerInterface *surfaceManager() const { return m_surfaceManager; }
134− void setSurfaceManager(unity::shell::application::SurfaceManagerInterface*);
135−
136112 int nextId() const { return m_nextId; }
137113
138114public:
@@ -179,8 +155,6 @@ Q_SIGNALS:
179155 void countChanged();
180156 void inputMethodSurfaceChanged(unity::shell::application::MirSurfaceInterface* inputMethodSurface);
181157 void focusedWindowChanged(Window *focusedWindow);
182− void applicationManagerChanged(unity::shell::application::ApplicationManagerInterface*);
183− void surfaceManagerChanged(unity::shell::application::SurfaceManagerInterface*);
184158
185159 /**
186160 * @brief Emitted when the list changes
@@ -191,9 +165,10 @@ Q_SIGNALS:
191165
192166 void nextIdChanged();
193167
194− void workspaceChanged(Workspace*);
195−
196168private Q_SLOTS:
169+ void setApplicationManager(unity::shell::application::ApplicationManagerInterface*);
170+ void setSurfaceManager(unity::shell::application::SurfaceManagerInterface*);
171+
197172 void onSurfaceCreated(unity::shell::application::MirSurfaceInterface *surface);
198173 void onSurfacesAddedToWorkspace(const std::shared_ptr<miral::Workspace>& workspace,
199174 const QVector<unity::shell::application::MirSurfaceInterface*> surfaces);
plugins/WindowManager/WindowManagerObjects.cppnew file+47
@@ -0,0 +1,47 @@
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 "WindowManagerObjects.h"
18+
19+WindowManagerObjects::WindowManagerObjects(QObject *parent)
20+ : QObject(parent)
21+ , m_surfaceManager(nullptr)
22+ , m_applicationManager(nullptr)
23+{
24+}
25+
26+WindowManagerObjects *WindowManagerObjects::instance()
27+{
28+ static WindowManagerObjects* objects(new WindowManagerObjects());
29+ return objects;
30+}
31+
32+
33+void WindowManagerObjects::setSurfaceManager(unity::shell::application::SurfaceManagerInterface *surfaceManager)
34+{
35+ if (m_surfaceManager == surfaceManager) return;
36+
37+ m_surfaceManager = surfaceManager;
38+ Q_EMIT surfaceManagerChanged(surfaceManager);
39+}
40+
41+void WindowManagerObjects::setApplicationManager(unity::shell::application::ApplicationManagerInterface *applicationManager)
42+{
43+ if (m_applicationManager == applicationManager) return;
44+
45+ m_applicationManager = applicationManager;
46+ Q_EMIT applicationManagerChanged(applicationManager);
47+}
plugins/WindowManager/WindowManagerObjects.hnew file+64
@@ -0,0 +1,64 @@
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 WINDOWMANAGEROBJECTS_H
18+#define WINDOWMANAGEROBJECTS_H
19+
20+#include <QObject>
21+
22+namespace unity {
23+ namespace shell {
24+ namespace application {
25+ class SurfaceManagerInterface;
26+ class ApplicationManagerInterface;
27+ }
28+ }
29+}
30+
31+class WindowManagerObjects : public QObject
32+{
33+ Q_OBJECT
34+
35+ Q_PROPERTY(unity::shell::application::SurfaceManagerInterface* surfaceManager
36+ READ surfaceManager
37+ WRITE setSurfaceManager
38+ NOTIFY surfaceManagerChanged)
39+
40+ Q_PROPERTY(unity::shell::application::ApplicationManagerInterface* applicationManager
41+ READ applicationManager
42+ WRITE setApplicationManager
43+ NOTIFY applicationManagerChanged)
44+public:
45+ explicit WindowManagerObjects(QObject *parent = 0);
46+
47+ static WindowManagerObjects *instance();
48+
49+ unity::shell::application::SurfaceManagerInterface *surfaceManager() const { return m_surfaceManager; }
50+ void setSurfaceManager(unity::shell::application::SurfaceManagerInterface*);
51+
52+ unity::shell::application::ApplicationManagerInterface *applicationManager() const { return m_applicationManager; }
53+ void setApplicationManager(unity::shell::application::ApplicationManagerInterface*);
54+
55+Q_SIGNALS:
56+ void surfaceManagerChanged(unity::shell::application::SurfaceManagerInterface*);
57+ void applicationManagerChanged(unity::shell::application::ApplicationManagerInterface*);
58+
59+private:
60+ unity::shell::application::SurfaceManagerInterface* m_surfaceManager;
61+ unity::shell::application::ApplicationManagerInterface* m_applicationManager;
62+};
63+
64+#endif // WINDOWMANAGEROBJECTS_H
plugins/WindowManager/WindowManagerPlugin.cpp+8−1
@@ -22,6 +22,7 @@
2222#include "ScreenWindow.h"
2323#include "TopLevelWindowModel.h"
2424#include "Window.h"
25+#include "WindowManagerObjects.h"
2526#include "WorkspaceManager.h"
2627#include "Workspace.h"
2728#include "WorkspaceModel.h"
@@ -42,19 +43,25 @@ QObject* screensSingleton(QQmlEngine* engine, QJSEngine* scriptEngine) {
4243 Q_UNUSED(scriptEngine);
4344 return new Screens(qtmir::get_screen_model());
4445}
46+QObject* objectsSingleton(QQmlEngine* engine, QJSEngine* scriptEngine) {
47+ Q_UNUSED(engine);
48+ Q_UNUSED(scriptEngine);
49+ return WindowManagerObjects::instance();
50+}
4551
4652void WindowManagerPlugin::registerTypes(const char *uri)
4753{
48− qmlRegisterType<TopLevelWindowModel>(uri, 1, 0, "TopLevelWindowModel");
4954 qmlRegisterSingletonType<WorkspaceManager>(uri, 1, 0, "WorkspaceManager", workspace_manager);
5055 qmlRegisterUncreatableType<WorkspaceModel>(uri, 1, 0, "WorkspaceModel", notInstantiatable);
5156 qmlRegisterSingletonType<Screens>(uri, 1, 0, "Screens", screensSingleton);
5257 qmlRegisterUncreatableType<qtmir::ScreenMode>(uri, 1, 0, "ScreenMode", notInstantiatable);
5358 qmlRegisterUncreatableType<Workspace>(uri, 1, 0, "Workspace", notInstantiatable);
59+ qmlRegisterSingletonType<WindowManagerObjects>(uri, 1, 0, "WindowManagerObjects", objectsSingleton);
5460
5561 qRegisterMetaType<Screen*>("Screen*");
5662 qRegisterMetaType<ScreensProxy*>("ScreensProxy*");
5763 qRegisterMetaType<Workspace*>("Workspace*");
64+ qRegisterMetaType<TopLevelWindowModel*>("TopLevelWindowModel*");
5865
5966 qRegisterMetaType<Window*>("Window*");
6067 qRegisterMetaType<QAbstractListModel*>("QAbstractListModel*");
plugins/WindowManager/Workspace.cpp+2
@@ -27,6 +27,7 @@ Workspace::Workspace(QObject *parent)
2727 : QObject(parent)
2828 , m_workspace(WMPolicyInterface::instance()->createWorkspace())
2929 , m_model(nullptr)
30+ , m_windowModel(new TopLevelWindowModel(this))
3031 , m_active(false)
3132{
3233 setObjectName((QString("Wks%1").arg(nextWorkspace++)));
@@ -48,6 +49,7 @@ Workspace::Workspace(const Workspace &other)
4849 : QObject(nullptr)
4950 , m_workspace(other.m_workspace)
5051 , m_model(nullptr)
52+ , m_windowModel(other.m_windowModel)
5153 , m_active(other.m_active)
5254{
5355 setObjectName(other.objectName());
plugins/WindowManager/Workspace.h+5−3
@@ -41,6 +41,7 @@ class Workspace : public QObject
4141{
4242 Q_OBJECT
4343 Q_PROPERTY(bool active READ isActive NOTIFY activeChanged)
44+ Q_PROPERTY(TopLevelWindowModel* windowModel READ windowModel NOTIFY windowModelChanged)
4445public:
4546 ~Workspace();
4647
@@ -49,10 +50,10 @@ public:
4950 void release();
5051
5152 virtual bool isActive() const { return m_active; }
52− bool isAssigned() const;
5353
54+ TopLevelWindowModel *windowModel() const { return m_windowModel; }
5455 std::shared_ptr<miral::Workspace> workspace() const { return m_workspace; }
55−
56+ bool isAssigned() const;
5657
5758public Q_SLOTS:
5859 virtual void activate();
@@ -62,6 +63,7 @@ Q_SIGNALS:
6263 void unassigned();
6364
6465 void activeChanged(bool);
66+ void windowModelChanged();
6567
6668protected:
6769 Workspace(QObject *parent = 0);
@@ -69,6 +71,7 @@ protected:
6971
7072 std::shared_ptr<miral::Workspace> m_workspace;
7173 WorkspaceModel* m_model;
74+ TopLevelWindowModel* m_windowModel;
7275 bool m_active;
7376
7477 friend class WorkspaceManager;
@@ -83,7 +86,6 @@ public:
8386 Q_INVOKABLE void assign(WorkspaceModel* model, const QVariant& index = QVariant()) override;
8487
8588 bool isActive() const override;
86−
8789 void activate() override;
8890
8991 Workspace* proxyObject() const { return m_original.data(); }
plugins/WindowManager/WorkspaceManager.cpp+7−13
@@ -17,6 +17,7 @@
1717#include "WorkspaceManager.h"
1818#include "Workspace.h"
1919#include "TopLevelWindowModel.h"
20+#include "WindowManagerObjects.h"
2021#include <unity/shell/application/SurfaceManagerInterface.h>
2122
2223// Qt
@@ -32,7 +33,6 @@ WorkspaceManager *WorkspaceManager::instance()
3233
3334WorkspaceManager::WorkspaceManager()
3435 : m_activeWorkspace(nullptr)
35− , m_surfaceManager(nullptr)
3636{
3737}
3838
@@ -99,25 +99,19 @@ void WorkspaceManager::destroyFloatingWorkspaces()
9999 }
100100}
101101
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−
110102void WorkspaceManager::moveSurfaceToWorkspace(unity::shell::application::MirSurfaceInterface *surface, Workspace *workspace)
111103{
112− if (m_surfaceManager) {
113− m_surfaceManager->moveSurfaceToWorkspace(surface, workspace->workspace());
104+ auto surfaceManager = WindowManagerObjects::instance()->surfaceManager();
105+ if (surfaceManager) {
106+ surfaceManager->moveSurfaceToWorkspace(surface, workspace->workspace());
114107 }
115108}
116109
117110void WorkspaceManager::moveWorkspaceContentToWorkspace(Workspace *from, Workspace *to)
118111{
119− if (m_surfaceManager) {
120− m_surfaceManager->moveWorkspaceContentToWorkspace(from->workspace(), to->workspace());
112+ auto surfaceManager = WindowManagerObjects::instance()->surfaceManager();
113+ if (surfaceManager) {
114+ surfaceManager->moveWorkspaceContentToWorkspace(from->workspace(), to->workspace());
121115 }
122116}
123117
plugins/WindowManager/WorkspaceManager.h−9
@@ -37,11 +37,6 @@ class WorkspaceManager : public QObject
3737 Q_OBJECT
3838 Q_PROPERTY(Workspace* activeWorkspace READ activeWorkspace WRITE setActiveWorkspace2 NOTIFY activeWorkspaceChanged)
3939
40− Q_PROPERTY(unity::shell::application::SurfaceManagerInterface* surfaceManager
41− READ surfaceManager
42− WRITE setSurfaceManager
43− NOTIFY surfaceManagerChanged)
44−
4540public:
4641 static WorkspaceManager* instance();
4742
@@ -54,9 +49,6 @@ public:
5449 QQmlListProperty<Workspace> floatingWorkspaces();
5550 void destroyFloatingWorkspaces();
5651
57− unity::shell::application::SurfaceManagerInterface *surfaceManager() const { return m_surfaceManager; }
58− void setSurfaceManager(unity::shell::application::SurfaceManagerInterface*);
59−
6052 Q_INVOKABLE void moveSurfaceToWorkspace(unity::shell::application::MirSurfaceInterface* surface,
6153 Workspace* workspace);
6254
@@ -65,7 +57,6 @@ public:
6557Q_SIGNALS:
6658 void activeWorkspaceChanged();
6759 void floatingWorkspacesChanged();
68− void surfaceManagerChanged();
6960
7061private:
7162 WorkspaceManager();
qml/Shell.qml+10−13
@@ -98,6 +98,11 @@ StyledItem {
9898
9999 readonly property var mainApp: stage.mainApp
100100
101+ readonly property var topLevelSurfaceList: {
102+ if (!WMScreen.currentWorkspace) return null;
103+ return WMScreen.currentWorkspace.windowModel
104+ }
105+
101106 onMainAppChanged: {
102107 if (mainApp) {
103108 _onMainAppChanged(mainApp.appId);
@@ -273,14 +278,6 @@ StyledItem {
273278 width: parent.width
274279 height: parent.height
275280
276− TopLevelWindowModel {
277− id: topLevelSurfaceList
278− objectName: "topLevelSurfaceList"
279− applicationManager: ApplicationManager // it's a singleton
280− surfaceManager: SurfaceManager
281− workspace: screenWindow.screen.currentWorkspace
282− }
283−
284281 Stage {
285282 id: stage
286283 objectName: "stage"
@@ -291,7 +288,7 @@ StyledItem {
291288 background: wallpaperResolver.background
292289
293290 applicationManager: ApplicationManager
294− topLevelSurfaceList: topLevelSurfaceList
291+ topLevelSurfaceList: shell.topLevelSurfaceList
295292 inputMethodRect: inputMethod.visibleRect
296293 rightEdgePushProgress: rightEdgeBarrier.progress
297294
@@ -361,7 +358,7 @@ StyledItem {
361358 InputMethod {
362359 id: inputMethod
363360 objectName: "inputMethod"
364− surface: topLevelSurfaceList.inputMethodSurface
361+ surface: shell.topLevelSurfaceList.inputMethodSurface
365362 anchors {
366363 fill: parent
367364 topMargin: panel.panelHeight
@@ -545,8 +542,8 @@ StyledItem {
545542 && !stage.spreadShown
546543 }
547544
548− readonly property bool focusedSurfaceIsFullscreen: topLevelSurfaceList.focusedWindow
549− ? topLevelSurfaceList.focusedWindow.state === Mir.FullscreenState
545+ readonly property bool focusedSurfaceIsFullscreen: shell.topLevelSurfaceList.focusedWindow
546+ ? shell.topLevelSurfaceList.focusedWindow.state === Mir.FullscreenState
550547 : false
551548 fullscreenMode: (focusedSurfaceIsFullscreen && !LightDMService.greeter.active && launcher.progress == 0 && !stage.spreadShown)
552549 || greeter.hasLockedApp
@@ -875,7 +872,7 @@ StyledItem {
875872
876873 // non-visual objects
877874 KeymapSwitcher {
878− focusedSurface: topLevelSurfaceList.focusedWindow ? topLevelSurfaceList.focusedWindow.surface : null
875+ focusedSurface: shell.topLevelSurfaceList.focusedWindow ? shell.topLevelSurfaceList.focusedWindow.surface : null
879876 }
880877 BrightnessControl {}
881878
qml/ShellApplication.qml+12
@@ -17,6 +17,7 @@
1717import QtQuick 2.4
1818import QtQuick.Window 2.2
1919import WindowManager 1.0
20+import Unity.Application 0.1
2021
2122Instantiator {
2223 id: root
@@ -45,4 +46,15 @@ Instantiator {
4546 Component.onCompleted: screen.active = primary
4647 primary: index == 0
4748 }
49+
50+ property var windowManagerSurfaceManagerBinding: Binding {
51+ target: WindowManagerObjects
52+ property: "surfaceManager"
53+ value: SurfaceManager
54+ }
55+ property var windowManagerApplicationManagerBinding: Binding {
56+ target: WindowManagerObjects
57+ property: "applicationManager"
58+ value: ApplicationManager
59+ }
4860}
tests/mocks/WindowManager/CMakeLists.txt+2
@@ -26,6 +26,7 @@ set(WINDOWMANAGER_SRC
2626 ${CMAKE_SOURCE_DIR}/plugins/WindowManager/ScreenWindow.cpp
2727 ${CMAKE_SOURCE_DIR}/plugins/WindowManager/TopLevelWindowModel.cpp
2828 ${CMAKE_SOURCE_DIR}/plugins/WindowManager/Window.cpp
29+ ${CMAKE_SOURCE_DIR}/plugins/WindowManager/WindowManagerObjects.cpp
2930 ${CMAKE_SOURCE_DIR}/plugins/WindowManager/WorkspaceManager.cpp
3031 ${CMAKE_SOURCE_DIR}/plugins/WindowManager/WorkspaceModel.cpp
3132 ${CMAKE_SOURCE_DIR}/plugins/WindowManager/Workspace.cpp
@@ -33,6 +34,7 @@ set(WINDOWMANAGER_SRC
3334 MockScreenWindow.cpp
3435 WindowManagerPlugin.cpp
3536 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/ApplicationInfoInterface.h
37+ ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/ApplicationManagerInterface.h
3638 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/Mir.h
3739 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/MirSurfaceInterface.h
3840 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/MirSurfaceListInterface.h
tests/mocks/WindowManager/WindowManagerPlugin.cpp+8−1
@@ -27,6 +27,7 @@
2727#include "Workspace.h"
2828#include "WorkspaceModel.h"
2929#include "WindowManagementPolicy.h"
30+#include "WindowManagerObjects.h"
3031
3132#include <QtQml>
3233
@@ -43,19 +44,25 @@ QObject* screensSingleton(QQmlEngine* engine, QJSEngine* scriptEngine) {
4344 Q_UNUSED(scriptEngine);
4445 return new Screens(MockScreens::instance());
4546}
47+QObject* objectsSingleton(QQmlEngine* engine, QJSEngine* scriptEngine) {
48+ Q_UNUSED(engine);
49+ Q_UNUSED(scriptEngine);
50+ return WindowManagerObjects::instance();
51+}
4652
4753void WindowManagerPlugin::registerTypes(const char *uri)
4854{
49− qmlRegisterType<TopLevelWindowModel>(uri, 1, 0, "TopLevelWindowModel");
5055 qmlRegisterSingletonType<WorkspaceManager>(uri, 1, 0, "WorkspaceManager", workspace_manager);
5156 qmlRegisterUncreatableType<WorkspaceModel>(uri, 1, 0, "WorkspaceModel", notInstantiatable);
5257 qmlRegisterSingletonType<Screens>(uri, 1, 0, "Screens", screensSingleton);
5358 qmlRegisterUncreatableType<qtmir::ScreenMode>(uri, 1, 0, "ScreenMode", notInstantiatable);
5459 qmlRegisterUncreatableType<Workspace>(uri, 1, 0, "Workspace", notInstantiatable);
60+ qmlRegisterSingletonType<WindowManagerObjects>(uri, 1, 0, "WindowManagerObjects", objectsSingleton);
5561
5662 qRegisterMetaType<Screen*>("Screen*");
5763 qRegisterMetaType<ScreensProxy*>("ScreensProxy*");
5864 qRegisterMetaType<Workspace*>("Workspace*");
65+ qRegisterMetaType<TopLevelWindowModel*>("TopLevelWindowModel*");
5966
6067 qRegisterMetaType<Window*>("Window*");
6168 qRegisterMetaType<QAbstractListModel*>("QAbstractListModel*");