Unity 8
WindowManagerPlugin.cpp
1 /*
2  * Copyright (C) 2016-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 "WindowManagerPlugin.h"
18 
19 #include "AvailableDesktopArea.h"
20 #include "Screen.h"
21 #include "ScreenAttached.h"
22 #include "Screens.h"
23 #include "ScreensConfiguration.h"
24 #include "ScreenWindow.h"
25 #include "TopLevelWindowModel.h"
26 #include "Window.h"
27 #include "WindowManagerObjects.h"
28 #include "WindowMargins.h"
29 #include "WorkspaceManager.h"
30 #include "Workspace.h"
31 #include "WorkspaceModel.h"
32 #include "InputMethodManager.h"
33 
34 #include <QtQml>
35 #include <qtmir/qtmir.h>
36 
37 namespace {
38 
39 static const QString notInstantiatable = QStringLiteral("Not instantiatable");
40 
41 static QObject *workspace_manager(QQmlEngine *engine, QJSEngine *scriptEngine)
42 {
43  Q_UNUSED(engine)
44  Q_UNUSED(scriptEngine)
45  return WorkspaceManager::instance();
46 }
47 QObject* screensSingleton(QQmlEngine* engine, QJSEngine* scriptEngine) {
48  Q_UNUSED(engine);
49  Q_UNUSED(scriptEngine);
50  return ConcreteScreens::self();
51 }
52 QObject* objectsSingleton(QQmlEngine* engine, QJSEngine* scriptEngine) {
53  Q_UNUSED(engine);
54  Q_UNUSED(scriptEngine);
55  return WindowManagerObjects::instance();
56 }
57 
58 } // namspace
59 
60 QObject *inputMethodManager(QQmlEngine *engine, QJSEngine *scriptEngine)
61 {
62  Q_UNUSED(engine)
63  Q_UNUSED(scriptEngine)
64  return InputMethodManager::instance();
65 }
66 
67 void WindowManagerPlugin::registerTypes(const char *uri)
68 {
69  qmlRegisterType<AvailableDesktopArea>(uri, 1, 0, "AvailableDesktopArea");
70  qmlRegisterType<WindowMargins>(uri, 1, 0, "WindowMargins");
71  qmlRegisterSingletonType<WorkspaceManager>(uri, 1, 0, "WorkspaceManager", workspace_manager);
72  qmlRegisterSingletonType<ConcreteScreens>(uri, 1, 0, "Screens", screensSingleton);
73  qmlRegisterUncreatableType<qtmir::ScreenMode>(uri, 1, 0, "ScreenMode", notInstantiatable);
74  qmlRegisterSingletonType<WindowManagerObjects>(uri, 1, 0, "WindowManagerObjects", objectsSingleton);
75  qmlRegisterSingletonType<InputMethodManager>(uri, 1, 0, "InputMethodManager", inputMethodManager);
76 
77  qRegisterMetaType<ConcreteScreen*>("ConcreteScreen*");
78  qRegisterMetaType<ProxyScreens*>("ProxyScreens*");
79  qRegisterMetaType<Workspace*>("Workspace*");
80  qRegisterMetaType<TopLevelWindowModel*>("TopLevelWindowModel*");
81  qRegisterMetaType<ScreenConfig*>("ScreenConfig*");
82  qRegisterMetaType<WorkspaceModel*>("WorkspaceModel*");
83 
84  qRegisterMetaType<Window*>("Window*");
85  qRegisterMetaType<QAbstractListModel*>("QAbstractListModel*");
86 
87  qmlRegisterType<ScreenWindow>(uri, 1, 0, "ScreenWindow");
88  qmlRegisterRevision<QWindow,1>(uri, 1, 0);
89 
90  qmlRegisterUncreatableType<WMScreen>(uri, 1, 0, "WMScreen", notInstantiatable);
91 }
92 
93 void WindowManagerPlugin::initializeEngine(QQmlEngine *engine, const char *uri)
94 {
95  QQmlExtensionPlugin::initializeEngine(engine, uri);
96 
97  // Create Screens
98  new ConcreteScreens(qtmir::get_screen_model(), new ScreensConfiguration());
99 }