on xenial help sign in
low crome
commit982fabee50e03109c46106a5f8dfb03e028a4181 authorNick Dedekind <nick.dedekind@canonical.com> dateTue 16 Feb 2016, 18:23 (11 years ago) parent96a9bce
18 files changed+223−21
qml/Shell.qml+1−2 qml/Stages/AbstractStage.qml+1 qml/Stages/ApplicationWindow.qml−1 qml/Stages/DecoratedWindow.qml+4−5 qml/Stages/DesktopStage.qml+23 qml/Stages/PhoneStage.qml+21 qml/Stages/SpreadDelegate.qml+2−1 qml/Stages/TabletStage.qml+21 tests/mocks/Unity/Application/ApplicationInfo.cpp+21−3 tests/mocks/Unity/Application/ApplicationInfo.h+5−1 tests/mocks/Unity/Application/ApplicationManager.cpp+3−4 tests/mocks/Unity/Application/MirSurface.cpp+17 tests/mocks/Unity/Application/MirSurface.h+5−3 tests/mocks/Unity/Application/MirSurfaceItem.cpp+9 tests/mocks/Unity/Application/MirSurfaceItem.h+1 tests/mocks/Unity/Application/Session.cpp+28−1 tests/mocks/Unity/Application/Session.h+7 tests/qmltests/tst_Shell.qml+54
qml/Shell.qml+1−2
@@ -533,8 +533,7 @@ Item {
533533 }
534534
535535 readonly property bool topmostApplicationIsFullscreen:
536− ApplicationManager.focusedApplicationId &&
537− ApplicationManager.findApplication(ApplicationManager.focusedApplicationId).fullscreen
536+ applicationsDisplayLoader.item ? applicationsDisplayLoader.item.mainAppWindowIsFullscreen : false
538537
539538 fullscreenMode: (topmostApplicationIsFullscreen && !lightDM.greeter.active && launcher.progress == 0)
540539 || greeter.hasLockedApp
qml/Stages/AbstractStage.qml+1
@@ -43,6 +43,7 @@ Rectangle {
4343 // To be read from outside
4444 property var mainApp: null
4545 property int mainAppWindowOrientationAngle
46+ property bool mainAppWindowIsFullscreen: false
4647 property bool orientationChangesEnabled
4748 property int supportedOrientations: Qt.PortraitOrientation
4849 | Qt.LandscapeOrientation
qml/Stages/ApplicationWindow.qml−1
@@ -24,7 +24,6 @@ FocusScope {
2424 implicitHeight: sessionContainer.implicitHeight
2525
2626 // to be read from outside
27− readonly property bool fullscreen: application ? application.fullscreen : false
2827 property alias interactive: sessionContainer.interactive
2928 property bool orientationChangesEnabled: d.supportsSurfaceResize ? d.surfaceOldEnoughToBeResized : true
3029 readonly property string title: sessionContainer.surface && sessionContainer.surface.name !== "" ?
qml/Stages/DecoratedWindow.qml+4−5
@@ -24,15 +24,14 @@ FocusScope {
2424 id: root
2525
2626 width: applicationWindow.width
27− height: (decorationShown ? decoration.height : 0) + applicationWindow.height
27+ height: (fullscreen ? 0 : decoration.height) + applicationWindow.height
2828
2929 property alias window: applicationWindow
3030 property alias application: applicationWindow.application
3131 property alias active: decoration.active
3232 property alias title: decoration.title
33− property alias fullscreen: applicationWindow.fullscreen
33+ property bool fullscreen: false
3434
35− readonly property bool decorationShown: !fullscreen
3635 property bool highlightShown: false
3736 property real shadowOpacity: 1
3837
@@ -84,7 +83,7 @@ FocusScope {
8483 height: units.gu(3)
8584 width: root.width
8685 title: window.title
87− visible: root.decorationShown
86+ visible: !fullscreen
8887
8988 onClose: root.close();
9089 onMaximize: { root.decorationPressed(); root.maximize(); }
@@ -98,7 +97,7 @@ FocusScope {
9897 anchors.top: parent.top
9998 anchors.topMargin: decoration.height
10099 anchors.left: parent.left
101− requestedHeight: root.requestedHeight - (root.decorationShown ? decoration.height : 0)
100+ requestedHeight: root.requestedHeight - (fullscreen ? 0 : decoration.height)
102101 interactive: true
103102 focus: true
104103 }
qml/Stages/DesktopStage.qml+23
@@ -440,6 +440,12 @@ AbstractStage {
440440 value: ApplicationManager.count + 1
441441 when: index == spread.highlightedIndex && blurLayer.ready
442442 }
443+ Binding {
444+ target: root
445+ when: index == 0
446+ property: "mainAppWindowIsFullscreen"
447+ value: decoratedWindow.fullscreen
448+ }
443449
444450 WindowResizeArea {
445451 objectName: "windowResizeArea"
@@ -462,6 +468,7 @@ AbstractStage {
462468 application: ApplicationManager.get(index)
463469 active: ApplicationManager.focusedApplicationId === model.appId
464470 focus: true
471+ fullscreen: application.fullscreen
465472
466473 onClose: ApplicationManager.stopApplication(model.appId)
467474 onMaximize: appDelegate.maximized || appDelegate.maximizedLeft || appDelegate.maximizedRight
@@ -469,6 +476,22 @@ AbstractStage {
469476 onMinimize: appDelegate.minimize()
470477 onDecorationPressed: { ApplicationManager.focusApplication(model.appId) }
471478 }
479+
480+ property bool firstTimeSurface: true
481+ property var lastSurface: decoratedWindow.application && decoratedWindow.application.session ?
482+ decoratedWindow.application.session.lastSurface : null
483+ onLastSurfaceChanged: {
484+ if (!lastSurface) return;
485+ if (!firstTimeSurface) return;
486+ firstTimeSurface = false;
487+
488+ console.log("FULLSCREEN CHECK", lastSurface.state, lastSurface.shellChrome)
489+
490+ if (lastSurface.state === Mir.FullscreenState &&
491+ lastSurface.shellChrome === Mir.LowChrome) {
492+ lastSurface.state = Mir.RestoredState;
493+ }
494+ }
472495 }
473496 }
474497 }
qml/Stages/PhoneStage.qml+21
@@ -574,12 +574,33 @@ AbstractStage {
574574 property: "mainAppWindowOrientationAngle"
575575 value: appWindowOrientationAngle
576576 }
577+ Binding {
578+ target: root
579+ when: index == 0
580+ property: "mainAppWindowIsFullscreen"
581+ value: appDelegate.fullscreen
582+ }
577583 Binding {
578584 target: priv
579585 when: index == 0
580586 property: "focusedAppOrientationChangesEnabled"
581587 value: orientationChangesEnabled
582588 }
589+
590+ property bool firstTimeSurface: true
591+ property var lastSurface: application && application.session ?
592+ application.session.lastSurface : null
593+ onLastSurfaceChanged: {
594+ if (!lastSurface) return;
595+ if (!firstTimeSurface) return;
596+ firstTimeSurface = false;
597+
598+ if (lastSurface.state !== Mir.FullscreenState &&
599+ lastSurface.shellChrome === Mir.LowChrome) {
600+ lastSurface.state = Mir.FullscreenState;
601+ }
602+ }
603+ fullscreen: lastSurface ? lastSurface.shellChrome === Mir.LowChrome : false
583604 }
584605 }
585606 }
qml/Stages/SpreadDelegate.qml+2−1
@@ -43,6 +43,7 @@ FocusScope {
4343 property int shellOrientationAngle
4444 property int shellOrientation
4545 property QtObject orientations
46+ property bool fullscreen: false
4647
4748 function matchShellOrientation() {
4849 if (!root.application)
@@ -267,7 +268,7 @@ FocusScope {
267268 focus: true
268269 anchors {
269270 fill: parent
270− topMargin: appWindow.fullscreen || (application && application.rotatesWindowContents)
271+ topMargin: fullscreen || (application && application.rotatesWindowContents)
271272 ? 0 : maximizedAppTopMargin
272273 }
273274
qml/Stages/TabletStage.qml+21
@@ -730,6 +730,12 @@ AbstractStage {
730730 property: "mainAppWindowOrientationAngle"
731731 value: appWindowOrientationAngle
732732 }
733+ Binding {
734+ target: root
735+ when: index == 0
736+ property: "mainAppWindowIsFullscreen"
737+ value: decoratedWindow.fullscreen
738+ }
733739 Binding {
734740 target: priv
735741 when: model.appId == priv.mainStageAppId
@@ -743,6 +749,21 @@ AbstractStage {
743749 period: (spreadView.positionMarker2 - spreadView.positionMarker1) / 3
744750 progress: spreadTile.progress - spreadView.positionMarker1
745751 }
752+
753+ property bool firstTimeSurface: true
754+ property var lastSurface: application && application.session ?
755+ application.session.lastSurface : null
756+ onLastSurfaceChanged: {
757+ if (!lastSurface) return;
758+ if (!firstTimeSurface) return;
759+ firstTimeSurface = false;
760+
761+ if (lastSurface.state !== Mir.FullscreenState &&
762+ lastSurface.shellChrome === Mir.LowChrome) {
763+ lastSurface.state = Mir.FullscreenState;
764+ }
765+ }
766+ fullscreen: lastSurface ? lastSurface.shellChrome === Mir.LowChrome : false
746767 }
747768 }
748769 }
tests/mocks/Unity/Application/ApplicationInfo.cpp+21−3
@@ -44,6 +44,7 @@ ApplicationInfo::ApplicationInfo(const QString &appId, QObject *parent)
4444 , m_isTouchApp(true)
4545 , m_exemptFromLifecycle(false)
4646 , m_manualSurfaceCreation(false)
47+ , m_shellChrome(Mir::NormalChrome)
4748{
4849}
4950
@@ -63,6 +64,7 @@ ApplicationInfo::ApplicationInfo(QObject *parent)
6364 , m_isTouchApp(true)
6465 , m_exemptFromLifecycle(false)
6566 , m_manualSurfaceCreation(false)
67+ , m_shellChrome(Mir::NormalChrome)
6668{
6769}
6870
@@ -102,9 +104,11 @@ void ApplicationInfo::setSession(Session* session)
102104 if (m_session) {
103105 m_session->setApplication(this);
104106 m_session->setParent(this);
107+ m_session->setFullscreen(m_fullscreen);
105108 SessionManager::singleton()->registerSession(m_session);
106109 connect(m_session, &Session::surfaceAdded,
107110 this, &ApplicationInfo::onSessionSurfaceAdded);
111+ connect(m_session, &Session::fullscreenChanged, this, &ApplicationInfo::fullscreenChanged);
108112
109113 if (!m_manualSurfaceCreation) {
110114 QTimer::singleShot(500, m_session, &Session::createSurface);
@@ -191,12 +195,17 @@ void ApplicationInfo::setFocused(bool value)
191195
192196void ApplicationInfo::setFullscreen(bool value)
193197{
194− if (value != m_fullscreen) {
195− m_fullscreen = value;
196− Q_EMIT fullscreenChanged(value);
198+ m_fullscreen = value;
199+ if (m_session) {
200+ m_session->setFullscreen(value);
197201 }
198202}
199203
204+bool ApplicationInfo::fullscreen() const
205+{
206+ return m_session ? m_session->fullscreen() : false;
207+}
208+
200209void ApplicationInfo::setManualSurfaceCreation(bool value)
201210{
202211 if (value != m_manualSurfaceCreation) {
@@ -262,6 +271,7 @@ void ApplicationInfo::onSessionSurfaceAdded(MirSurface* surface)
262271 } else {
263272 setState(Suspended);
264273 }
274+ surface->setShellChrome(m_shellChrome);
265275 }
266276}
267277
@@ -291,3 +301,11 @@ void ApplicationInfo::setInitialSurfaceSize(const QSize &size)
291301 Q_EMIT initialSurfaceSizeChanged(m_initialSurfaceSize);
292302 }
293303}
304+
305+void ApplicationInfo::setShellChrome(Mir::ShellChrome shellChrome)
306+{
307+ m_shellChrome = shellChrome;
308+ if (m_session && m_session->lastSurface()) {
309+ m_session->lastSurface()->setShellChrome(shellChrome);
310+ }
311+}
tests/mocks/Unity/Application/ApplicationInfo.h+5−1
@@ -24,6 +24,7 @@ class Session;
2424
2525// unity-api
2626#include <unity/shell/application/ApplicationInfoInterface.h>
27+#include <unity/shell/application/Mir.h>
2728
2829using namespace unity::shell::application;
2930
@@ -78,7 +79,7 @@ public:
7879 QString screenshot() const { return m_screenshotFileName; }
7980
8081 void setFullscreen(bool value);
81− bool fullscreen() const { return m_fullscreen; }
82+ bool fullscreen() const;
8283
8384 Qt::ScreenOrientations supportedOrientations() const override;
8485 void setSupportedOrientations(Qt::ScreenOrientations orientations);
@@ -97,6 +98,8 @@ public:
9798
9899 QSize initialSurfaceSize() const override;
99100 void setInitialSurfaceSize(const QSize &size) override;
101+
102+ Q_INVOKABLE void setShellChrome(Mir::ShellChrome shellChrome);
100103public:
101104 void setSession(Session* session);
102105 Session* session() const { return m_session; }
@@ -134,6 +137,7 @@ private:
134137 QSize m_initialSurfaceSize;
135138
136139 bool m_manualSurfaceCreation;
140+ Mir::ShellChrome m_shellChrome;
137141};
138142
139143Q_DECLARE_METATYPE(ApplicationInfo*)
tests/mocks/Unity/Application/ApplicationManager.cpp+3−4
@@ -336,6 +336,7 @@ void ApplicationManager::buildListOfAvailableApplications()
336336 application->setName("Camera");
337337 application->setScreenshotId("camera");
338338 application->setIconId("camera");
339+ application->setShellChrome(Mir::LowChrome);
339340 application->setFullscreen(true);
340341 application->setSupportedOrientations(Qt::PortraitOrientation
341342 | Qt::LandscapeOrientation
@@ -349,7 +350,7 @@ void ApplicationManager::buildListOfAvailableApplications()
349350 application->setName("Gallery");
350351 application->setScreenshotId("gallery");
351352 application->setIconId("gallery");
352− application->setFullscreen(true);
353+ application->setShellChrome(Mir::LowChrome);
353354 application->setStage(ApplicationInfo::MainStage);
354355 m_availableApplications.append(application);
355356
@@ -363,7 +364,7 @@ void ApplicationManager::buildListOfAvailableApplications()
363364
364365 application = new ApplicationInfo(this);
365366 application->setAppId("webbrowser-app");
366− application->setFullscreen(true);
367+ application->setShellChrome(Mir::LowChrome);
367368 application->setName("Browser");
368369 application->setScreenshotId("browser");
369370 application->setIconId("browser");
@@ -389,7 +390,6 @@ void ApplicationManager::buildListOfAvailableApplications()
389390 application->setName("GMail");
390391 application->setIconId("gmail");
391392 application->setScreenshotId("gmail-webapp.svg");
392− application->setFullscreen(false);
393393 application->setStage(ApplicationInfo::MainStage);
394394 application->setSupportedOrientations(Qt::PortraitOrientation
395395 | Qt::LandscapeOrientation
@@ -402,7 +402,6 @@ void ApplicationManager::buildListOfAvailableApplications()
402402 application->setName("Music");
403403 application->setIconId("soundcloud");
404404 application->setScreenshotId("music");
405− application->setFullscreen(false);
406405 application->setStage(ApplicationInfo::MainStage);
407406 application->setSupportedOrientations(Qt::PortraitOrientation
408407 | Qt::LandscapeOrientation
tests/mocks/Unity/Application/MirSurface.cpp+17
@@ -36,6 +36,7 @@ MirSurface::MirSurface(const QString& name,
3636 , m_width(-1)
3737 , m_height(-1)
3838 , m_slowToResize(false)
39+ , m_shellChrome(Mir::NormalChrome)
3940{
4041// qDebug() << "MirSurface::MirSurface() " << name;
4142 m_delayedResizeTimer.setInterval(600);
@@ -70,6 +71,7 @@ void MirSurface::setState(Mir::State state)
7071
7172 m_state = state;
7273 Q_EMIT stateChanged(state);
74+ qDebug() << "SETSTATE!" << state;
7375}
7476
7577bool MirSurface::live() const
@@ -130,6 +132,21 @@ void MirSurface::setOrientationAngle(Mir::OrientationAngle angle)
130132}
131133
132134
135+Mir::ShellChrome MirSurface::shellChrome() const
136+{
137+ return m_shellChrome;
138+}
139+
140+void MirSurface::setShellChrome(Mir::ShellChrome shellChrome)
141+{
142+ if (shellChrome == m_shellChrome)
143+ return;
144+
145+ m_shellChrome = shellChrome;
146+ Q_EMIT shellChromeChanged(shellChrome);
147+}
148+
149+
133150
134151void MirSurface::registerView(qintptr viewId)
135152{
tests/mocks/Unity/Application/MirSurface.h+5−3
@@ -73,10 +73,13 @@ public:
7373 int widthIncrement() const override { return m_widthIncrement; }
7474 int heightIncrement() const override { return m_heightIncrement; }
7575
76+ Mir::ShellChrome shellChrome() const override;
77+
7678 ////
7779 // API for tests
7880
7981 Q_INVOKABLE void setLive(bool live);
82+ Q_INVOKABLE void setShellChrome(Mir::ShellChrome shellChrome);
8083
8184 void registerView(qintptr viewId);
8285 void unregisterView(qintptr viewId);
@@ -108,9 +111,6 @@ public:
108111 void setActiveFocus(bool);
109112
110113Q_SIGNALS:
111− void stateChanged(Mir::State);
112− void liveChanged(bool live);
113− void orientationAngleChanged(Mir::OrientationAngle angle);
114114 void widthChanged();
115115 void heightChanged();
116116 void slowToResizeChanged();
@@ -151,6 +151,8 @@ private:
151151 QSize m_delayedResize;
152152 QSize m_pendingResize;
153153
154+ Mir::ShellChrome m_shellChrome;
155+
154156 struct View {
155157 bool visible;
156158 };
tests/mocks/Unity/Application/MirSurfaceItem.cpp+9
@@ -100,6 +100,15 @@ bool MirSurfaceItem::live() const
100100 }
101101}
102102
103+Mir::ShellChrome MirSurfaceItem::shellChrome() const
104+{
105+ if (m_qmlSurface) {
106+ return m_qmlSurface->shellChrome();
107+ } else {
108+ return Mir::NormalChrome;
109+ }
110+}
111+
103112Mir::OrientationAngle MirSurfaceItem::orientationAngle() const
104113{
105114 if (m_qmlSurface) {
tests/mocks/Unity/Application/MirSurfaceItem.h+1
@@ -47,6 +47,7 @@ public:
4747 Mir::Type type() const override;
4848 QString name() const override;
4949 bool live() const override;
50+ Mir::ShellChrome shellChrome() const override;
5051
5152 Mir::State surfaceState() const override;
5253 void setSurfaceState(Mir::State) override {}
tests/mocks/Unity/Application/Session.cpp+28−1
@@ -34,6 +34,7 @@ Session::Session(const QString &name,
3434 , m_surface(nullptr)
3535 , m_parentSession(nullptr)
3636 , m_children(new SessionModel(this))
37+ , m_fullscreen(false)
3738{
3839// qDebug() << "Session::Session() " << this->name();
3940
@@ -71,6 +72,27 @@ void Session::release()
7172 deleteLater();
7273}
7374
75+void Session::updateFullscreenProperty()
76+{
77+ qDebug() << "updateFullscreenProperty!";
78+
79+ if (m_surfaces.rowCount() > 0) {
80+ // TODO: Figure out something better
81+ setFullscreen(lastSurface()->state() == Mir::FullscreenState);
82+ } else {
83+ // Keep the current value of the fullscreen property until we get a new
84+ // surface
85+ }
86+}
87+
88+void Session::setFullscreen(bool fullscreen)
89+{
90+ if (m_fullscreen != fullscreen) {
91+ m_fullscreen = fullscreen;
92+ Q_EMIT fullscreenChanged(m_fullscreen);
93+ }
94+}
95+
7496void Session::setApplication(ApplicationInfo* application)
7597{
7698 if (m_application == application)
@@ -82,15 +104,18 @@ void Session::setApplication(ApplicationInfo* application)
82104
83105void Session::appendSurface(MirSurface* surface)
84106{
85− // qDebug() << "Session::appendSurface - session=" << name() << "surface=" << surface;
107+ qDebug() << "Session::appendSurface - session=" << name() << "surface=" << surface;
86108
87109 m_surfaces.insert(m_surfaces.rowCount(), surface);
88110
111+ connect(surface, &MirSurfaceInterface::stateChanged, this, &Session::updateFullscreenProperty);
89112 connect(surface, &QObject::destroyed,
90113 this, [this, surface]() { this->removeSurface(surface); });
91114
92115 Q_EMIT lastSurfaceChanged(surface);
93116 Q_EMIT surfaceAdded(surface);
117+
118+ updateFullscreenProperty();
94119}
95120
96121void Session::removeSurface(MirSurface* surface)
@@ -99,6 +124,8 @@ void Session::removeSurface(MirSurface* surface)
99124 if (m_surfaces.contains(surface)) {
100125 m_surfaces.remove(surface);
101126 }
127+
128+ updateFullscreenProperty();
102129}
103130
104131void Session::setScreenshot(const QUrl& screenshot)
tests/mocks/Unity/Application/Session.h+7
@@ -47,6 +47,7 @@ public:
4747 //getters
4848 QString name() const { return m_name; }
4949 bool live() const { return m_live; }
50+ bool fullscreen() const { return m_fullscreen; }
5051 ApplicationInfo* application() const { return m_application; }
5152 MirSurface *lastSurface() const;
5253 ObjectListModel<MirSurface>* surfaces() const;
@@ -57,6 +58,7 @@ public:
5758 void removeSurface(MirSurface* surface);
5859 void setScreenshot(const QUrl& m_screenshot);
5960 void setLive(bool live);
61+ void setFullscreen(bool fullscreen);
6062
6163 Q_INVOKABLE void addChildSession(Session* session);
6264 void insertChildSession(uint index, Session* session);
@@ -68,6 +70,7 @@ Q_SIGNALS:
6870 void liveChanged(bool live);
6971 void surfaceAdded(MirSurface *surface);
7072 void lastSurfaceChanged(MirSurface *surface);
73+ void fullscreenChanged(bool fullscreen);
7174
7275 // internal mock use
7376 void deregister();
@@ -75,6 +78,9 @@ Q_SIGNALS:
7578public Q_SLOTS:
7679 Q_INVOKABLE void createSurface();
7780
81+private Q_SLOTS:
82+ void updateFullscreenProperty();
83+
7884private:
7985 SessionModel* childSessions() const;
8086 void setParentSession(Session* session);
@@ -87,6 +93,7 @@ private:
8793 Session* m_parentSession;
8894 SessionModel* m_children;
8995 ObjectListModel<MirSurface> m_surfaces;
96+ bool m_fullscreen;
9097
9198 friend class ApplicationTestInterface;
9299};
tests/qmltests/tst_Shell.qml+54
@@ -139,6 +139,9 @@ Rectangle {
139139 anchors.right: root.right
140140 width: units.gu(30)
141141
142+ property var focusedApp: ApplicationManager.findApplication(ApplicationManager.focusedApplicationId)
143+ property var focusedSurface: focusedApp && focusedApp.session ? focusedApp.session.lastSurface : null
144+
142145 Rectangle {
143146 id: controlRect
144147 anchors { left: parent.left; right: parent.right }
@@ -234,6 +237,57 @@ Rectangle {
234237 appId: modelData
235238 }
236239 }
240+
241+ Label { text: "Focused Application"; font.bold: true }
242+
243+ Row {
244+ CheckBox {
245+ id: fullscreeAppCheck
246+
247+ onTriggered: {
248+ if (controls.focusedSurface.state == Mir.FullscreenState) {
249+ controls.focusedSurface.state = Mir.RestoredState;
250+ } else {
251+ controls.focusedSurface.state = Mir.FullscreenState;
252+ }
253+ }
254+
255+ Binding {
256+ target: fullscreeAppCheck
257+ when: controls.focusedSurface !== null
258+ property: "checked"
259+ value: controls.focusedSurface.state === Mir.FullscreenState
260+ }
261+ }
262+ Label {
263+ text: "Fullscreen"
264+ }
265+ }
266+
267+ Row {
268+ CheckBox {
269+ id: chromeAppCheck
270+
271+ onTriggered: {
272+ if (controls.focusedSurface.shellChrome == Mir.LowChrome) {
273+ controls.focusedSurface.setShellChrome(Mir.NormalChrome);
274+ } else {
275+ controls.focusedSurface.setShellChrome(Mir.LowChrome);
276+ }
277+ }
278+
279+ Binding {
280+ target: chromeAppCheck
281+ when: controls.focusedSurface !== null
282+ property: "checked"
283+ value: controls.focusedSurface.shellChrome === Mir.LowChrome
284+ }
285+ }
286+ Label {
287+ text: "Low Chrome"
288+ }
289+ }
290+
237291 }
238292 }
239293 }