Merge lp:~nick-dedekind/qtmir/shell_chrome into lp:qtmir

Proposed by Nick Dedekind
Status: Superseded
Proposed branch: lp:~nick-dedekind/qtmir/shell_chrome
Merge into: lp:qtmir
Diff against target: 423 lines (+149/-6)
16 files modified
CMakeLists.txt (+1/-1)
debian/control (+2/-2)
src/modules/Unity/Application/mirsurface.cpp (+15/-0)
src/modules/Unity/Application/mirsurface.h (+4/-1)
src/modules/Unity/Application/mirsurfaceinterface.h (+2/-0)
src/modules/Unity/Application/mirsurfaceitem.cpp (+6/-0)
src/modules/Unity/Application/mirsurfaceitem.h (+2/-0)
src/modules/Unity/Application/mirsurfacemanager.cpp (+36/-0)
src/modules/Unity/Application/mirsurfacemanager.h (+5/-0)
src/modules/Unity/Application/session.cpp (+3/-1)
src/platforms/mirserver/mirwindowmanager.cpp (+25/-1)
src/platforms/mirserver/mirwindowmanager.h (+9/-0)
src/platforms/mirserver/nativeinterface.cpp (+2/-0)
src/platforms/mirserver/windowmanagerlistener.cpp (+8/-0)
src/platforms/mirserver/windowmanagerlistener.h (+26/-0)
tests/framework/fake_mirsurface.h (+3/-0)
To merge this branch: bzr merge lp:~nick-dedekind/qtmir/shell_chrome
Reviewer Review Type Date Requested Status
PS Jenkins bot (community) continuous-integration Needs Fixing
Unity8 CI Bot (community) continuous-integration Needs Fixing
Mir development team Pending
Review via email: mp+286307@code.launchpad.net

This proposal has been superseded by a proposal from 2016-02-17.

Commit message

Add support for low shell chrome.

Description of the change

* Are there any related MPs required for this MP to build/function as expected? Please list.
https://code.launchpad.net/~nick-dedekind/unity-api/shell_chrome/+merge/286309
https://code.launchpad.net/~nick-dedekind/unity8/shell_chrome/+merge/286306
https://code.launchpad.net/~nick-dedekind/qtubuntu/shell_chrome/+merge/286308

 * Did you perform an exploratory manual test run of your code change and any related functionality?
Yes

 * If you changed the packaging (debian), did you subscribe the ubuntu-unity team to this MP?
N/A

To post a comment you must log in.
Revision history for this message
Unity8 CI Bot (unity8-ci-bot) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)

Unmerged revisions

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'CMakeLists.txt'
2--- CMakeLists.txt 2016-02-12 00:07:20 +0000
3+++ CMakeLists.txt 2016-02-17 13:40:49 +0000
4@@ -75,7 +75,7 @@
5 pkg_check_modules(GSETTINGS_QT REQUIRED gsettings-qt)
6 pkg_check_modules(QTDBUSTEST libqtdbustest-1 REQUIRED)
7 pkg_check_modules(QTDBUSMOCK libqtdbusmock-1 REQUIRED)
8-pkg_check_modules(APPLICATION_API REQUIRED unity-shell-application=13)
9+pkg_check_modules(APPLICATION_API REQUIRED unity-shell-application=14)
10
11 include_directories(${APPLICATION_API_INCLUDE_DIRS})
12
13
14=== modified file 'debian/control'
15--- debian/control 2016-02-03 16:40:09 +0000
16+++ debian/control 2016-02-17 13:40:49 +0000
17@@ -22,7 +22,7 @@
18 libubuntu-app-launch2-dev,
19 libubuntu-application-api-dev (>= 2.1.0),
20 libudev-dev,
21- libunity-api-dev (>= 7.106),
22+ libunity-api-dev (>= 7.107),
23 liburl-dispatcher1-dev,
24 libxkbcommon-dev,
25 libxrender-dev,
26@@ -93,7 +93,7 @@
27 Conflicts: libqtmir,
28 libunity-mir1,
29 Provides: unity-application-impl,
30- unity-application-impl-13,
31+ unity-application-impl-14,
32 Description: Qt plugin for Unity specific Mir APIs
33 QtMir provides Qt/QML bindings for Mir features that are exposed through the
34 qtmir-desktop or qtmir-android QPA plugin such as Application management
35
36=== modified file 'src/modules/Unity/Application/mirsurface.cpp'
37--- src/modules/Unity/Application/mirsurface.cpp 2016-02-11 11:58:16 +0000
38+++ src/modules/Unity/Application/mirsurface.cpp 2016-02-17 13:40:49 +0000
39@@ -182,6 +182,7 @@
40 , m_textureUpdated(false)
41 , m_currentFrameNumber(0)
42 , m_live(true)
43+ , m_shellChrome(Mir::NormalChrome)
44 {
45 m_minimumWidth = sizeHints.minWidth;
46 m_minimumHeight = sizeHints.minHeight;
47@@ -761,6 +762,20 @@
48 return m_cursor;
49 }
50
51+Mir::ShellChrome MirSurface::shellChrome() const
52+{
53+ return m_shellChrome;
54+}
55+
56+void MirSurface::setShellChrome(Mir::ShellChrome shellChrome)
57+{
58+ if (m_shellChrome != shellChrome) {
59+ m_shellChrome = shellChrome;
60+
61+ Q_EMIT shellChromeChanged(shellChrome);
62+ }
63+}
64+
65 void MirSurface::setCursor(const QCursor &cursor)
66 {
67 DEBUG_MSG << "(" << qtCursorShapeToStr(cursor.shape()) << ")";
68
69=== modified file 'src/modules/Unity/Application/mirsurface.h'
70--- src/modules/Unity/Application/mirsurface.h 2016-02-11 11:58:16 +0000
71+++ src/modules/Unity/Application/mirsurface.h 2016-02-17 13:40:49 +0000
72@@ -36,7 +36,6 @@
73
74 // mir
75 #include <mir/scene/surface.h>
76-#include <mir_toolkit/common.h>
77
78 namespace mir { namespace shell { class Shell; }}
79
80@@ -132,6 +131,9 @@
81
82 QCursor cursor() const override;
83
84+ Mir::ShellChrome shellChrome() const override;
85+ void setShellChrome(Mir::ShellChrome shellChrome) override;
86+
87 public Q_SLOTS:
88 void onCompositorSwappedBuffers() override;
89
90@@ -183,6 +185,7 @@
91 QSize m_size;
92
93 QCursor m_cursor;
94+ Mir::ShellChrome m_shellChrome;
95
96 int m_minimumWidth{0};
97 int m_minimumHeight{0};
98
99=== modified file 'src/modules/Unity/Application/mirsurfaceinterface.h'
100--- src/modules/Unity/Application/mirsurfaceinterface.h 2016-02-11 11:58:16 +0000
101+++ src/modules/Unity/Application/mirsurfaceinterface.h 2016-02-17 13:40:49 +0000
102@@ -37,11 +37,13 @@
103 class MirSurfaceInterface : public unity::shell::application::MirSurfaceInterface
104 {
105 Q_OBJECT
106+
107 public:
108 MirSurfaceInterface(QObject *parent = nullptr) : unity::shell::application::MirSurfaceInterface(parent) {}
109 virtual ~MirSurfaceInterface() {}
110
111 virtual void setLive(bool value) = 0;
112+ virtual void setShellChrome(Mir::ShellChrome shellChrome) = 0;
113
114 virtual bool isFirstFrameDrawn() const = 0;
115
116
117=== modified file 'src/modules/Unity/Application/mirsurfaceitem.cpp'
118--- src/modules/Unity/Application/mirsurfaceitem.cpp 2015-12-10 13:08:43 +0000
119+++ src/modules/Unity/Application/mirsurfaceitem.cpp 2016-02-17 13:40:49 +0000
120@@ -179,6 +179,11 @@
121 return m_surface && m_surface->live();
122 }
123
124+Mir::ShellChrome MirSurfaceItem::shellChrome() const
125+{
126+ return m_surface ? m_surface->shellChrome() : Mir::NormalChrome;
127+}
128+
129 // Called from the rendering (scene graph) thread
130 QSGTextureProvider *MirSurfaceItem::textureProvider() const
131 {
132@@ -648,6 +653,7 @@
133 connect(m_surface, &MirSurfaceInterface::liveChanged, this, &MirSurfaceItem::liveChanged);
134 connect(m_surface, &MirSurfaceInterface::sizeChanged, this, &MirSurfaceItem::onActualSurfaceSizeChanged);
135 connect(m_surface, &MirSurfaceInterface::cursorChanged, this, &MirSurfaceItem::setCursor);
136+ connect(m_surface, &MirSurfaceInterface::shellChromeChanged, this, &MirSurfaceItem::shellChromeChanged);
137
138 Q_EMIT typeChanged(m_surface->type());
139 Q_EMIT liveChanged(true);
140
141=== modified file 'src/modules/Unity/Application/mirsurfaceitem.h'
142--- src/modules/Unity/Application/mirsurfaceitem.h 2015-12-10 13:08:43 +0000
143+++ src/modules/Unity/Application/mirsurfaceitem.h 2016-02-17 13:40:49 +0000
144@@ -49,6 +49,7 @@
145 Mir::Type type() const override;
146 QString name() const override;
147 bool live() const override;
148+ Mir::ShellChrome shellChrome() const override;
149
150 Mir::State surfaceState() const override;
151 void setSurfaceState(Mir::State) override;
152@@ -71,6 +72,7 @@
153 FillMode fillMode() const override;
154 void setFillMode(FillMode value) override;
155
156+
157 ////////
158 // QQuickItem
159
160
161=== modified file 'src/modules/Unity/Application/mirsurfacemanager.cpp'
162--- src/modules/Unity/Application/mirsurfacemanager.cpp 2016-02-11 11:58:16 +0000
163+++ src/modules/Unity/Application/mirsurfacemanager.cpp 2016-02-17 13:40:49 +0000
164@@ -53,6 +53,12 @@
165 manager, &MirSurfaceManager::onSessionDestroyingSurface);
166 }
167
168+void connectToWindowManager(MirSurfaceManager *manager, MirWindowManager *windowManager)
169+{
170+ QObject::connect(windowManager, &MirWindowManager::surfaceMofidied,
171+ manager, &MirSurfaceManager::onSurfaceModified);
172+}
173+
174 MirSurfaceManager* MirSurfaceManager::singleton()
175 {
176 if (!instance) {
177@@ -66,11 +72,13 @@
178 }
179
180 SessionListener *sessionListener = static_cast<SessionListener*>(nativeInterface->nativeResourceForIntegration("SessionListener"));
181+ MirWindowManager *windowManager = static_cast<MirWindowManager*>(nativeInterface->nativeResourceForIntegration("WindowManager"));
182 MirShell *shell = static_cast<MirShell*>(nativeInterface->nativeResourceForIntegration("Shell"));
183
184 instance = new MirSurfaceManager(nativeInterface->m_mirServer, shell, SessionManager::singleton());
185
186 connectToSessionListener(instance, sessionListener);
187+ connectToWindowManager(instance, windowManager);
188 }
189 return instance;
190 }
191@@ -159,4 +167,32 @@
192 Q_EMIT surfaceDestroyed(qmlSurface);
193 }
194
195+void MirSurfaceManager::onSurfaceModified(const std::shared_ptr<mir::scene::Surface> & surface,
196+ MirWindowManager::SurfaceProperty property,
197+ const QVariant &value)
198+{
199+ qCDebug(QTMIR_SURFACES) << "MirSurfaceManager::onSurfaceModified - surface=" << surface.get()
200+ << "surface.name=" << surface->name().c_str()
201+ << "property=" << property
202+ << "value=" << value;
203+
204+ MirSurfaceInterface* qmlSurface = nullptr;
205+ {
206+ QMutexLocker lock(&m_mutex);
207+ auto it = m_mirSurfaceToQmlSurfaceHash.find(surface.get());
208+ if (it != m_mirSurfaceToQmlSurfaceHash.end()) {
209+
210+ qmlSurface = it.value();
211+ } else {
212+ qCritical() << "MirSurfaceManager::onSurfaceModified: unable to find MirSurface corresponding"
213+ << "to surface=" << surface.get() << "surface.name=" << surface->name().c_str();
214+ return;
215+ }
216+ }
217+
218+ if (property == MirWindowManager::ShellChrome) {
219+ qmlSurface->setShellChrome(value.value<Mir::ShellChrome>());
220+ }
221+}
222+
223 } // namespace qtmir
224
225=== modified file 'src/modules/Unity/Application/mirsurfacemanager.h'
226--- src/modules/Unity/Application/mirsurfacemanager.h 2016-02-11 11:58:16 +0000
227+++ src/modules/Unity/Application/mirsurfacemanager.h 2016-02-17 13:40:49 +0000
228@@ -31,6 +31,7 @@
229
230 // mirserver qpa
231 #include <sizehints.h>
232+#include <mirwindowmanager.h>
233
234 namespace mir {
235 namespace scene {
236@@ -77,6 +78,10 @@
237 qtmir::SizeHints);
238 void onSessionDestroyingSurface(const mir::scene::Session *, const std::shared_ptr<mir::scene::Surface> &);
239
240+ void onSurfaceModified(const std::shared_ptr<mir::scene::Surface> &,
241+ MirWindowManager::SurfaceProperty property,
242+ const QVariant& value);
243+
244 protected:
245 QHash<const mir::scene::Surface *, MirSurfaceInterface *> m_mirSurfaceToQmlSurfaceHash;
246 QMutex m_mutex;
247
248=== modified file 'src/modules/Unity/Application/session.cpp'
249--- src/modules/Unity/Application/session.cpp 2016-01-22 16:32:39 +0000
250+++ src/modules/Unity/Application/session.cpp 2016-02-17 13:40:49 +0000
251@@ -253,13 +253,15 @@
252 Q_EMIT lastSurfaceChanged(lastSurface());
253 }
254 }
255+
256+ updateFullscreenProperty();
257 }
258
259 void Session::updateFullscreenProperty()
260 {
261 if (m_surfaces.rowCount() > 0) {
262 // TODO: Figure out something better
263- setFullscreen(m_surfaces.list().at(0)->state() == Mir::FullscreenState);
264+ setFullscreen(lastSurface()->state() == Mir::FullscreenState);
265 } else {
266 // Keep the current value of the fullscreen property until we get a new
267 // surface
268
269=== modified file 'src/platforms/mirserver/mirwindowmanager.cpp'
270--- src/platforms/mirserver/mirwindowmanager.cpp 2016-02-11 11:58:16 +0000
271+++ src/platforms/mirserver/mirwindowmanager.cpp 2016-02-17 13:40:49 +0000
272@@ -19,6 +19,9 @@
273 #include "surfaceobserver.h"
274 #include "tracepoints.h" // generated from tracepoints.tp
275
276+// Unity API
277+#include <unity/shell/application/Mir.h>
278+
279 #include <mir/geometry/rectangle.h>
280 #include <mir/scene/session.h>
281 #include <mir/scene/surface_creation_parameters.h>
282@@ -90,6 +93,8 @@
283 m_sessionListener(sessionListener)
284 {
285 qCDebug(QTMIR_MIR_MESSAGES) << "MirWindowManagerImpl::MirWindowManagerImpl";
286+
287+ qRegisterMetaType<MirWindowManager::SurfaceProperty>("MirWindowManager::SurfaceProperty");
288 }
289
290 void MirWindowManagerImpl::add_session(std::shared_ptr<ms::Session> const& /*session*/)
291@@ -136,7 +141,16 @@
292
293 tracepoint(qtmirserver, surfacePlacementEnd);
294
295- return build(session, placedParameters);
296+ auto const result = build(session, placedParameters);
297+ auto const surface = session->surface(result);
298+
299+ if (placedParameters.shell_chrome.is_set()) {
300+ Q_EMIT surfaceMofidied(surface,
301+ MirWindowManager::ShellChrome,
302+ QVariant::fromValue<Mir::ShellChrome>(static_cast<Mir::ShellChrome>(placedParameters.shell_chrome.value())));
303+ }
304+
305+ return result;
306 }
307
308 void MirWindowManagerImpl::remove_surface(
309@@ -190,6 +204,16 @@
310 {
311 if (modifications.name.is_set()) {
312 surface->rename(modifications.name.value());
313+
314+ Q_EMIT surfaceMofidied(surface,
315+ MirWindowManager::Name,
316+ modifications.shell_chrome.value());
317+ }
318+
319+ if (modifications.shell_chrome.is_set()) {
320+ Q_EMIT surfaceMofidied(surface,
321+ MirWindowManager::ShellChrome,
322+ QVariant::fromValue<Mir::ShellChrome>(static_cast<Mir::ShellChrome>(modifications.shell_chrome.value())));
323 }
324
325 QMutexLocker(&SurfaceObserver::mutex);
326
327=== modified file 'src/platforms/mirserver/mirwindowmanager.h'
328--- src/platforms/mirserver/mirwindowmanager.h 2016-02-11 11:58:16 +0000
329+++ src/platforms/mirserver/mirwindowmanager.h 2016-02-17 13:40:49 +0000
330@@ -36,6 +36,11 @@
331 Q_OBJECT
332
333 public:
334+ enum SurfaceProperty {
335+ Name,
336+ ShellChrome
337+ };
338+
339 static std::shared_ptr<MirWindowManager> create(
340 const std::shared_ptr<mir::shell::DisplayLayout> &displayLayout,
341 std::shared_ptr<::SessionListener> sessionListener);
342@@ -44,6 +49,10 @@
343 // requires Qt::BlockingQueuedConnection!!
344 void sessionAboutToCreateSurface(const std::shared_ptr<mir::scene::Session> &session,
345 int type, QSize &size);
346+
347+ void surfaceMofidied(const std::shared_ptr<mir::scene::Surface>& surface,
348+ MirWindowManager::SurfaceProperty property,
349+ const QVariant& value);
350 };
351
352 #endif /* QPAMIRSERVER_WINDOW_MANAGER_H */
353
354=== modified file 'src/platforms/mirserver/nativeinterface.cpp'
355--- src/platforms/mirserver/nativeinterface.cpp 2015-08-11 12:08:32 +0000
356+++ src/platforms/mirserver/nativeinterface.cpp 2016-02-17 13:40:49 +0000
357@@ -36,6 +36,8 @@
358 result = server->sessionListener();
359 else if (resource == "PromptSessionListener")
360 result = server->promptSessionListener();
361+ else if (resource == "WindowManager")
362+ result = server->windowManager();
363 }
364 return result;
365 }
366
367=== added file 'src/platforms/mirserver/windowmanagerlistener.cpp'
368--- src/platforms/mirserver/windowmanagerlistener.cpp 1970-01-01 00:00:00 +0000
369+++ src/platforms/mirserver/windowmanagerlistener.cpp 2016-02-17 13:40:49 +0000
370@@ -0,0 +1,8 @@
371+#include "windowmanagerlistener.h"
372+
373+WindowManagerListener::WindowManagerListener(QObject *parent)
374+ : QObject(parent)
375+{
376+ qRegisterMetaType<WindowManagerListener::SurfaceProperty>("WindowManagerListener::SurfaceProperty");
377+}
378+
379
380=== added file 'src/platforms/mirserver/windowmanagerlistener.h'
381--- src/platforms/mirserver/windowmanagerlistener.h 1970-01-01 00:00:00 +0000
382+++ src/platforms/mirserver/windowmanagerlistener.h 2016-02-17 13:40:49 +0000
383@@ -0,0 +1,26 @@
384+#ifndef WINDOWMANAGERLISTENER_H
385+#define WINDOWMANAGERLISTENER_H
386+
387+#include <QObject>
388+
389+#include <mir/scene/surface.h>
390+#include <memory>
391+
392+class WindowManagerListener : public QObject
393+{
394+ Q_OBJECT
395+public:
396+ explicit WindowManagerListener(QObject *parent = 0);
397+
398+ enum SurfaceProperty {
399+ Name,
400+ ShellChrome
401+ };
402+
403+Q_SIGNALS:
404+ void surfaceMofidied(const std::shared_ptr<mir::scene::Surface>& surface,
405+ WindowManagerListener::SurfaceProperty property,
406+ const QVariant& value);
407+};
408+
409+#endif // WINDOWMANAGERLISTENER_H
410
411=== modified file 'tests/framework/fake_mirsurface.h'
412--- tests/framework/fake_mirsurface.h 2016-02-11 11:58:16 +0000
413+++ tests/framework/fake_mirsurface.h 2016-02-17 13:40:49 +0000
414@@ -110,6 +110,9 @@
415
416 QCursor cursor() const override { return QCursor(); }
417
418+ Mir::ShellChrome shellChrome() const override { return Mir::NormalChrome; }
419+ void setShellChrome(Mir::ShellChrome) override {}
420+
421 void close() override {
422 Q_EMIT closeRequested();
423 }

Subscribers

People subscribed via source and target branches