on xenial help sign in
merged pre-req
commitb6ab28fcd796d6eca4e2b43c28def59274195119 authorNick Dedekind <nick.dedekind@canonical.com> dateWed 5 Apr 2017, 12:48 (10 years ago) parente9f4c4306f42e7
6 files changed+28−5
plugins/WindowManager/Screen.cpp+7 plugins/WindowManager/Screen.h+2 plugins/WindowManager/ScreenAttached.cpp+14−1 plugins/WindowManager/WindowManagerPlugin.cpp+2−2 plugins/WindowManager/Workspace.cpp+1 tests/mocks/WindowManager/WindowManagerPlugin.cpp+2−2
plugins/WindowManager/Screen.cpp+7
@@ -185,6 +185,13 @@ QString Screen::outputTypeName() const
185185 return QString();
186186}
187187
188+bool Screen::isSameAs(Screen *screen) const
189+{
190+ if (!screen) return false;
191+ if (screen == this) return true;
192+ return wrapped() == screen->wrapped();
193+}
194+
188195void Screen::sync(Screen *proxy)
189196{
190197 if (!proxy) return;
plugins/WindowManager/Screen.h+2
@@ -47,6 +47,8 @@ public:
4747 QScreen* qscreen() const;
4848 QString outputTypeName() const;
4949
50+ Q_INVOKABLE bool isSameAs(Screen*) const;
51+
5052 Q_INVOKABLE ScreenConfig *beginConfiguration() const;
5153 Q_INVOKABLE bool applyConfiguration(ScreenConfig *configuration);
5254
plugins/WindowManager/ScreenAttached.cpp+14−1
@@ -21,11 +21,24 @@
2121#include <QQuickItem>
2222#include <QScreen>
2323
24+namespace
25+{
26+QQuickItem* itemForOwner(QObject* obj) {
27+ QObject* parent = obj;
28+ while(parent) {
29+ auto item = qobject_cast<QQuickItem*>(parent);
30+ if (item) return item;
31+ parent = parent->parent();
32+ }
33+ return nullptr;
34+}
35+} // namesapce
36+
2437ScreenAttached::ScreenAttached(QObject *owner)
2538 : Screen(owner)
2639 , m_window(nullptr)
2740{
28− if (auto item = qobject_cast<QQuickItem*>(owner)) {
41+ if (auto item = itemForOwner(owner)) {
2942 connect(item, &QQuickItem::windowChanged, this, &ScreenAttached::windowChanged);
3043 windowChanged(item->window());
3144 } else if (auto window = qobject_cast<QQuickWindow*>(owner)) {
plugins/WindowManager/WindowManagerPlugin.cpp+2−2
@@ -61,16 +61,16 @@ void WindowManagerPlugin::registerTypes(const char *uri)
6161 qmlRegisterType<AvailableDesktopArea>(uri, 1, 0, "AvailableDesktopArea");
6262 qmlRegisterType<WindowMargins>(uri, 1, 0, "WindowMargins");
6363 qmlRegisterSingletonType<WorkspaceManager>(uri, 1, 0, "WorkspaceManager", workspace_manager);
64− qmlRegisterUncreatableType<WorkspaceModel>(uri, 1, 0, "WorkspaceModel", notInstantiatable);
6564 qmlRegisterSingletonType<ConcreteScreens>(uri, 1, 0, "Screens", screensSingleton);
6665 qmlRegisterUncreatableType<qtmir::ScreenMode>(uri, 1, 0, "ScreenMode", notInstantiatable);
67− qmlRegisterUncreatableType<ScreenConfig>(uri, 1, 0, "ScreenConfig", notInstantiatable);
6866 qmlRegisterSingletonType<WindowManagerObjects>(uri, 1, 0, "WindowManagerObjects", objectsSingleton);
6967
7068 qRegisterMetaType<ConcreteScreen*>("ConcreteScreen*");
7169 qRegisterMetaType<ProxyScreens*>("ProxyScreens*");
7270 qRegisterMetaType<Workspace*>("Workspace*");
7371 qRegisterMetaType<TopLevelWindowModel*>("TopLevelWindowModel*");
72+ qRegisterMetaType<ScreenConfig*>("ScreenConfig*");
73+ qRegisterMetaType<WorkspaceModel*>("WorkspaceModel*");
7474
7575 qRegisterMetaType<Window*>("Window*");
7676 qRegisterMetaType<QAbstractListModel*>("QAbstractListModel*");
plugins/WindowManager/Workspace.cpp+1
@@ -89,6 +89,7 @@ bool Workspace::isAssigned() const
8989
9090bool Workspace::isSameAs(Workspace *wks) const
9191{
92+ if (!wks) return false;
9293 if (wks == this) return true;
9394 return wks->workspace() == workspace();
9495}
tests/mocks/WindowManager/WindowManagerPlugin.cpp+2−2
@@ -58,16 +58,16 @@ void WindowManagerPlugin::registerTypes(const char *uri)
5858 qmlRegisterType<AvailableDesktopArea>(uri, 1, 0, "AvailableDesktopArea");
5959 qmlRegisterType<WindowMargins>(uri, 1, 0, "WindowMargins");
6060 qmlRegisterSingletonType<WorkspaceManager>(uri, 1, 0, "WorkspaceManager", workspace_manager);
61− qmlRegisterUncreatableType<WorkspaceModel>(uri, 1, 0, "WorkspaceModel", notInstantiatable);
6261 qmlRegisterSingletonType<ConcreteScreens>(uri, 1, 0, "Screens", screensSingleton);
6362 qmlRegisterUncreatableType<qtmir::ScreenMode>(uri, 1, 0, "ScreenMode", notInstantiatable);
64− qmlRegisterUncreatableType<ScreenConfig>(uri, 1, 0, "ScreenConfig", notInstantiatable);
6563 qmlRegisterSingletonType<WindowManagerObjects>(uri, 1, 0, "WindowManagerObjects", objectsSingleton);
6664
6765 qRegisterMetaType<ConcreteScreen*>("ConcreteScreen*");
6866 qRegisterMetaType<ProxyScreens*>("ProxyScreens*");
6967 qRegisterMetaType<Workspace*>("Workspace*");
7068 qRegisterMetaType<TopLevelWindowModel*>("TopLevelWindowModel*");
69+ qRegisterMetaType<ScreenConfig*>("ScreenConfig*");
70+ qRegisterMetaType<WorkspaceModel*>("WorkspaceModel*");
7171
7272 qRegisterMetaType<Window*>("Window*");
7373 qRegisterMetaType<QAbstractListModel*>("QAbstractListModel*");