on xenial help sign in
merge prereq
364028bMichael Zanetti
debian/control+1
@@ -46,6 +46,7 @@ Build-Depends: cmake,
46 libxcb1-dev[!arm64 !armhf],
46 libxcb1-dev[!arm64 !armhf],
47 libxi-dev[!arm64 !armhf],
47 libxi-dev[!arm64 !armhf],
48# End of X11 libs
48# End of X11 libs
49+ mirtest-dev,
49 pkg-config,
50 pkg-config,
50 python3-all:any,
51 python3-all:any,
51 python3-setuptools,
52 python3-setuptools,
plugins/WindowManager/Screen.cpp+6
@@ -18,10 +18,14 @@
18#include "WorkspaceManager.h"
18#include "WorkspaceManager.h"
19#include "Workspace.h"
19#include "Workspace.h"
20
20
21+#include <QQmlEngine>
22+
21Screen::Screen(qtmir::Screen* screen)
23Screen::Screen(qtmir::Screen* screen)
22 : m_wrapped(screen)
24 : m_wrapped(screen)
23 , m_workspaces(new WorkspaceModel)
25 , m_workspaces(new WorkspaceModel)
24{
26{
27+ QQmlEngine::setObjectOwnership(m_workspaces.data(), QQmlEngine::CppOwnership);
28+
25 connect(m_wrapped, &qtmir::Screen::usedChanged, this, &Screen::usedChanged);
29 connect(m_wrapped, &qtmir::Screen::usedChanged, this, &Screen::usedChanged);
26 connect(m_wrapped, &qtmir::Screen::nameChanged, this, &Screen::nameChanged);
30 connect(m_wrapped, &qtmir::Screen::nameChanged, this, &Screen::nameChanged);
27 connect(m_wrapped, &qtmir::Screen::outputTypeChanged, this, &Screen::outputTypeChanged);
31 connect(m_wrapped, &qtmir::Screen::outputTypeChanged, this, &Screen::outputTypeChanged);
@@ -53,6 +57,8 @@ Screen::Screen(const Screen &other)
53 , m_wrapped(other.m_wrapped)
57 , m_wrapped(other.m_wrapped)
54 , m_workspaces(new WorkspaceModelProxy(other.m_workspaces.data()))
58 , m_workspaces(new WorkspaceModelProxy(other.m_workspaces.data()))
55{
59{
60+ QQmlEngine::setObjectOwnership(m_workspaces.data(), QQmlEngine::CppOwnership);
61+
56 connect(m_wrapped, &qtmir::Screen::usedChanged, this, &Screen::usedChanged);
62 connect(m_wrapped, &qtmir::Screen::usedChanged, this, &Screen::usedChanged);
57 connect(m_wrapped, &qtmir::Screen::nameChanged, this, &Screen::nameChanged);
63 connect(m_wrapped, &qtmir::Screen::nameChanged, this, &Screen::nameChanged);
58 connect(m_wrapped, &qtmir::Screen::outputTypeChanged, this, &Screen::outputTypeChanged);
64 connect(m_wrapped, &qtmir::Screen::outputTypeChanged, this, &Screen::outputTypeChanged);
plugins/WindowManager/Screens.cpp+9−2
@@ -21,6 +21,7 @@
21// qtmirserver
21// qtmirserver
22#include <qtmir/screens.h>
22#include <qtmir/screens.h>
23#include <QGuiApplication>
23#include <QGuiApplication>
24+#include <QQmlEngine>
24
25
25// Qt
26// Qt
26#include <QScreen>
27#include <QScreen>
@@ -34,7 +35,9 @@ Screens::Screens(const QSharedPointer<qtmir::Screens>& model)
34 connect(m_wrapped.data(), &qtmir::Screens::activeScreenChanged, this, &Screens::activeScreenChanged);
35 connect(m_wrapped.data(), &qtmir::Screens::activeScreenChanged, this, &Screens::activeScreenChanged);
35
36
36 Q_FOREACH(qtmir::Screen* screen, m_wrapped->screens()) {
37 Q_FOREACH(qtmir::Screen* screen, m_wrapped->screens()) {
37− m_screens.push_back(new Screen(screen));
38+ auto screenWrapper(new Screen(screen));
39+ QQmlEngine::setObjectOwnership(screenWrapper, QQmlEngine::CppOwnership);
40+ m_screens.push_back(screenWrapper);
38 }
41 }
39}
42}
40
43
@@ -125,6 +128,7 @@ void Screens::onScreenAdded(qtmir::Screen *added)
125
128
126 beginInsertRows(QModelIndex(), count(), count());
129 beginInsertRows(QModelIndex(), count(), count());
127 auto screenWrapper(new Screen(added));
130 auto screenWrapper(new Screen(added));
131+ QQmlEngine::setObjectOwnership(screenWrapper, QQmlEngine::CppOwnership);
128 m_screens.push_back(screenWrapper);
132 m_screens.push_back(screenWrapper);
129 endInsertRows();
133 endInsertRows();
130 Q_EMIT screenAdded(screenWrapper);
134 Q_EMIT screenAdded(screenWrapper);
@@ -165,13 +169,14 @@ ScreensProxy::ScreensProxy(Screens * const screens)
165
169
166 beginInsertRows(QModelIndex(), count(), count());
170 beginInsertRows(QModelIndex(), count(), count());
167 auto screenWrapper(new ScreenProxy(added));
171 auto screenWrapper(new ScreenProxy(added));
172+ QQmlEngine::setObjectOwnership(screenWrapper, QQmlEngine::CppOwnership);
168 m_screens.push_back(screenWrapper);
173 m_screens.push_back(screenWrapper);
169 endInsertRows();
174 endInsertRows();
170 Q_EMIT screenAdded(screenWrapper);
175 Q_EMIT screenAdded(screenWrapper);
171 Q_EMIT countChanged();
176 Q_EMIT countChanged();
172 });
177 });
173
178
174− connect(screens, &Screens::screenAdded, this, [this](Screen *removed) {
179+ connect(screens, &Screens::screenRemoved, this, [this](Screen *removed) {
175 int index = 0;
180 int index = 0;
176 QMutableVectorIterator<Screen*> iter(m_screens);
181 QMutableVectorIterator<Screen*> iter(m_screens);
177 while(iter.hasNext()) {
182 while(iter.hasNext()) {
@@ -193,6 +198,8 @@ ScreensProxy::ScreensProxy(Screens * const screens)
193 });
198 });
194
199
195 Q_FOREACH(Screen* screen, screens->list()) {
200 Q_FOREACH(Screen* screen, screens->list()) {
201+ auto screenWrapper(new ScreenProxy(screen));
202+ QQmlEngine::setObjectOwnership(screenWrapper, QQmlEngine::CppOwnership);
196 m_screens.push_back(new ScreenProxy(screen));
203 m_screens.push_back(new ScreenProxy(screen));
197 }
204 }
198}
205}
plugins/WindowManager/WorkspaceManager.cpp+6
@@ -109,3 +109,9 @@ void WorkspaceManager::setActiveWorkspace(Workspace *workspace)
109 Q_EMIT activeWorkspaceChanged();
109 Q_EMIT activeWorkspaceChanged();
110 }
110 }
111}
111}
112+
113+void WorkspaceManager::setActiveWorkspace2(Workspace *workspace)
114+{
115+ if (!workspace) return;
116+ workspace->activate();
117+}
plugins/WindowManager/WorkspaceManager.h+3−1
@@ -26,7 +26,7 @@ class ScreensProxy;
26class WorkspaceManager : public QObject
26class WorkspaceManager : public QObject
27{
27{
28 Q_OBJECT
28 Q_OBJECT
29− Q_PROPERTY(Workspace* activeWorkspace READ activeWorkspace WRITE setActiveWorkspace NOTIFY activeWorkspaceChanged)
29+ Q_PROPERTY(Workspace* activeWorkspace READ activeWorkspace WRITE setActiveWorkspace2 NOTIFY activeWorkspaceChanged)
30 Q_PROPERTY(QQmlListProperty<Workspace> floatingWorkspaces READ floatingWorkspaces NOTIFY floatingWorkspacesChanged)
30 Q_PROPERTY(QQmlListProperty<Workspace> floatingWorkspaces READ floatingWorkspaces NOTIFY floatingWorkspacesChanged)
31
31
32public:
32public:
@@ -48,6 +48,8 @@ Q_SIGNALS:
48private:
48private:
49 WorkspaceManager();
49 WorkspaceManager();
50
50
51+ void setActiveWorkspace2(Workspace* workspace);
52+
51 QSet<Workspace*> m_allWorkspaces;
53 QSet<Workspace*> m_allWorkspaces;
52 QList<Workspace*> m_floatingWorkspaces;
54 QList<Workspace*> m_floatingWorkspaces;
53 Workspace* m_activeWorkspace;
55 Workspace* m_activeWorkspace;
plugins/WindowManager/WorkspaceModel.cpp+5−1
@@ -18,6 +18,8 @@
18#include "WorkspaceManager.h"
18#include "WorkspaceManager.h"
19#include "Workspace.h"
19#include "Workspace.h"
20
20
21+#include <QQmlEngine>
22+
21Q_LOGGING_CATEGORY(WORKSPACES, "Workspaces", QtInfoMsg)
23Q_LOGGING_CATEGORY(WORKSPACES, "Workspaces", QtInfoMsg)
22
24
23#define DEBUG_MSG qCDebug(WORKSPACES).nospace().noquote() << __func__
25#define DEBUG_MSG qCDebug(WORKSPACES).nospace().noquote() << __func__
@@ -171,7 +173,9 @@ WorkspaceModelProxy::WorkspaceModelProxy(WorkspaceModel * const model)
171 : m_original(model)
173 : m_original(model)
172{
174{
173 Q_FOREACH(auto workspace, model->list()) {
175 Q_FOREACH(auto workspace, model->list()) {
174− (new WorkspaceProxy(workspace))->assign(this);
176+ auto proxy = new WorkspaceProxy(workspace);
177+ QQmlEngine::setObjectOwnership(proxy, QQmlEngine::CppOwnership);
178+ proxy->assign(this);
175 }
179 }
176}
180}
177
181