on xenial help sign in
Add a new setting to enable/disable the launcher
bb50476Brian Douglass
data/com.canonical.Unity8.gschema.xml+5
@@ -43,6 +43,11 @@
43 <summary>Width of the launcher in grid units.</summary>
43 <summary>Width of the launcher in grid units.</summary>
44 <description>Changes the width of the launcher in all usage modes.</description>
44 <description>Changes the width of the launcher in all usage modes.</description>
45 </key>
45 </key>
46+ <key type="b" name="enable-launcher">
47+ <default>true</default>
48+ <summary>Enable or disable the launcher</summary>
49+ <description>Toggle the availability of the launcher</description>
50+ </key>
46 </schema>
51 </schema>
47
52
48 <schema path="/com/canonical/unity8/greeter/" id="com.canonical.Unity8.Greeter" gettext-domain="unity8">
53 <schema path="/com/canonical/unity8/greeter/" id="com.canonical.Unity8.Greeter" gettext-domain="unity8">
qml/Shell.qml+1
@@ -516,6 +516,7 @@ StyledItem {
516 && (!greeter.locked || AccountsService.enableLauncherWhileLocked)
516 && (!greeter.locked || AccountsService.enableLauncherWhileLocked)
517 && !greeter.hasLockedApp
517 && !greeter.hasLockedApp
518 && !shell.waitingOnGreeter
518 && !shell.waitingOnGreeter
519+ && settings.enableLauncher
519 inverted: shell.usageScenario !== "desktop"
520 inverted: shell.usageScenario !== "desktop"
520 superPressed: physicalKeysMapper.superPressed
521 superPressed: physicalKeysMapper.superPressed
521 superTabPressed: physicalKeysMapper.superTabPressed
522 superTabPressed: physicalKeysMapper.superTabPressed
tests/mocks/GSettings.1.0/fake_gsettings.cpp+33
@@ -27,6 +27,7 @@ GSettingsControllerQml::GSettingsControllerQml()
27 , m_autohideLauncher(false)
27 , m_autohideLauncher(false)
28 , m_launcherWidth(8)
28 , m_launcherWidth(8)
29 , m_edgeDragWidth(2)
29 , m_edgeDragWidth(2)
30+ , m_enableLauncher(true)
30{
31{
31}
32}
32
33
@@ -145,6 +146,19 @@ void GSettingsControllerQml::setEdgeDragWidth(uint edgeDragWidth)
145 }
146 }
146}
147}
147
148
149+void GSettingsControllerQml::setEnableLauncher(bool enableLauncher)
150+{
151+ if (m_enableLauncher != enableLauncher) {
152+ m_enableLauncher = enableLauncher;
153+ Q_EMIT enableLauncherChanged(enableLauncher);
154+ }
155+}
156+
157+bool GSettingsControllerQml::enableLauncher() const
158+{
159+ return m_enableLauncher;
160+}
161+
148GSettingsSchemaQml::GSettingsSchemaQml(QObject *parent): QObject(parent) {
162GSettingsSchemaQml::GSettingsSchemaQml(QObject *parent): QObject(parent) {
149}
163}
150
164
@@ -209,6 +223,8 @@ void GSettingsQml::componentComplete()
209 this, &GSettingsQml::launcherWidthChanged);
223 this, &GSettingsQml::launcherWidthChanged);
210 connect(GSettingsControllerQml::instance(), &GSettingsControllerQml::edgeDragWidthChanged,
224 connect(GSettingsControllerQml::instance(), &GSettingsControllerQml::edgeDragWidthChanged,
211 this, &GSettingsQml::edgeDragWidthChanged);
225 this, &GSettingsQml::edgeDragWidthChanged);
226+ connect(GSettingsControllerQml::instance(), &GSettingsControllerQml::enableLauncherChanged,
227+ this, &GSettingsQml::enableLauncherChanged);
212
228
213 Q_EMIT disableHeightChanged();
229 Q_EMIT disableHeightChanged();
214 Q_EMIT pictureUriChanged();
230 Q_EMIT pictureUriChanged();
@@ -218,6 +234,7 @@ void GSettingsQml::componentComplete()
218 Q_EMIT autohideLauncherChanged();
234 Q_EMIT autohideLauncherChanged();
219 Q_EMIT launcherWidthChanged();
235 Q_EMIT launcherWidthChanged();
220 Q_EMIT edgeDragWidthChanged();
236 Q_EMIT edgeDragWidthChanged();
237+ Q_EMIT enableLauncherChanged();
221}
238}
222
239
223GSettingsSchemaQml * GSettingsQml::schema() const {
240GSettingsSchemaQml * GSettingsQml::schema() const {
@@ -324,6 +341,15 @@ QVariant GSettingsQml::edgeDragWidth() const
324 }
341 }
325}
342}
326
343
344+QVariant GSettingsQml::enableLauncher() const
345+{
346+ if (m_valid && m_schema->id() == "com.canonical.Unity8") {
347+ return GSettingsControllerQml::instance()->enableLauncher();
348+ } else {
349+ return QVariant();
350+ }
351+}
352+
327void GSettingsQml::setLifecycleExemptAppids(const QVariant &appIds)
353void GSettingsQml::setLifecycleExemptAppids(const QVariant &appIds)
328{
354{
329 if (m_valid && m_schema->id() == "com.canonical.qtmir") {
355 if (m_valid && m_schema->id() == "com.canonical.qtmir") {
@@ -351,3 +377,10 @@ void GSettingsQml::setEdgeDragWidth(const QVariant &edgeDragWidth)
351 GSettingsControllerQml::instance()->setEdgeDragWidth(edgeDragWidth.toUInt());
377 GSettingsControllerQml::instance()->setEdgeDragWidth(edgeDragWidth.toUInt());
352 }
378 }
353}
379}
380+
381+void GSettingsQml::setEnableLauncher(const QVariant &enableLauncher)
382+{
383+ if (m_valid && m_schema->id() == "com.canonical.Unity8") {
384+ GSettingsControllerQml::instance()->setEnableLauncher(enableLauncher.toBool());
385+ }
386+}
tests/mocks/GSettings.1.0/fake_gsettings.h+9
@@ -57,6 +57,7 @@ class GSettingsQml: public QObject, public QQmlParserStatus
57 Q_PROPERTY(QVariant autohideLauncher READ autohideLauncher WRITE setAutohideLauncher NOTIFY autohideLauncherChanged)
57 Q_PROPERTY(QVariant autohideLauncher READ autohideLauncher WRITE setAutohideLauncher NOTIFY autohideLauncherChanged)
58 Q_PROPERTY(QVariant launcherWidth READ launcherWidth WRITE setLauncherWidth NOTIFY launcherWidthChanged)
58 Q_PROPERTY(QVariant launcherWidth READ launcherWidth WRITE setLauncherWidth NOTIFY launcherWidthChanged)
59 Q_PROPERTY(QVariant edgeDragWidth READ edgeDragWidth WRITE setEdgeDragWidth NOTIFY edgeDragWidthChanged)
59 Q_PROPERTY(QVariant edgeDragWidth READ edgeDragWidth WRITE setEdgeDragWidth NOTIFY edgeDragWidthChanged)
60+ Q_PROPERTY(QVariant enableLauncher READ enableLauncher WRITE setEnableLauncher NOTIFY enableLauncherChanged)
60
61
61public:
62public:
62 GSettingsQml(QObject *parent = nullptr);
63 GSettingsQml(QObject *parent = nullptr);
@@ -73,6 +74,7 @@ public:
73 QVariant autohideLauncher() const;
74 QVariant autohideLauncher() const;
74 QVariant launcherWidth() const;
75 QVariant launcherWidth() const;
75 QVariant edgeDragWidth() const;
76 QVariant edgeDragWidth() const;
77+ QVariant enableLauncher() const;
76
78
77 void setDisableHeight(const QVariant &val);
79 void setDisableHeight(const QVariant &val);
78 void setPictureUri(const QVariant &str);
80 void setPictureUri(const QVariant &str);
@@ -82,6 +84,7 @@ public:
82 void setAutohideLauncher(const QVariant &autohideLauncher);
84 void setAutohideLauncher(const QVariant &autohideLauncher);
83 void setLauncherWidth(const QVariant &launcherWidth);
85 void setLauncherWidth(const QVariant &launcherWidth);
84 void setEdgeDragWidth(const QVariant &edgeDragWidth);
86 void setEdgeDragWidth(const QVariant &edgeDragWidth);
87+ void setEnableLauncher(const QVariant &enableLauncher);
85
88
86Q_SIGNALS:
89Q_SIGNALS:
87 void disableHeightChanged();
90 void disableHeightChanged();
@@ -93,6 +96,7 @@ Q_SIGNALS:
93 void autohideLauncherChanged();
96 void autohideLauncherChanged();
94 void launcherWidthChanged();
97 void launcherWidthChanged();
95 void edgeDragWidthChanged();
98 void edgeDragWidthChanged();
99+ void enableLauncherChanged();
96
100
97private:
101private:
98 GSettingsSchemaQml* m_schema;
102 GSettingsSchemaQml* m_schema;
@@ -133,6 +137,9 @@ public:
133 uint edgeDragWidth() const;
137 uint edgeDragWidth() const;
134 Q_INVOKABLE void setEdgeDragWidth(uint edgeDragWidth);
138 Q_INVOKABLE void setEdgeDragWidth(uint edgeDragWidth);
135
139
140+ bool enableLauncher() const;
141+ Q_INVOKABLE void setEnableLauncher(bool enableLauncher);
142+
136Q_SIGNALS:
143Q_SIGNALS:
137 void disableHeightChanged();
144 void disableHeightChanged();
138 void pictureUriChanged(const QString&);
145 void pictureUriChanged(const QString&);
@@ -142,6 +149,7 @@ Q_SIGNALS:
142 void autohideLauncherChanged(bool autohideLauncher);
149 void autohideLauncherChanged(bool autohideLauncher);
143 void launcherWidthChanged(int launcherWidth);
150 void launcherWidthChanged(int launcherWidth);
144 void edgeDragWidthChanged(uint edgeDragWidth);
151 void edgeDragWidthChanged(uint edgeDragWidth);
152+ void enableLauncherChanged(bool enableLauncher);
145
153
146private:
154private:
147 GSettingsControllerQml();
155 GSettingsControllerQml();
@@ -154,6 +162,7 @@ private:
154 bool m_autohideLauncher;
162 bool m_autohideLauncher;
155 int m_launcherWidth;
163 int m_launcherWidth;
156 uint m_edgeDragWidth;
164 uint m_edgeDragWidth;
165+ bool m_enableLauncher;
157
166
158 static GSettingsControllerQml* s_controllerInstance;
167 static GSettingsControllerQml* s_controllerInstance;
159 QList<GSettingsQml *> m_registeredGSettings;
168 QList<GSettingsQml *> m_registeredGSettings;
tests/qmltests/Launcher/tst_Launcher.qml+26−1
@@ -287,12 +287,16 @@ Rectangle {
287 removeTimeConstraintsFromSwipeAreas(root);
287 removeTimeConstraintsFromSwipeAreas(root);
288 }
288 }
289
289
290− function dragLauncherIntoView() {
290+ function dragLauncher() {
291 var startX = launcher.dragAreaWidth/2;
291 var startX = launcher.dragAreaWidth/2;
292 var startY = launcher.height/2;
292 var startY = launcher.height/2;
293 touchFlick(launcher,
293 touchFlick(launcher,
294 startX, startY,
294 startX, startY,
295 startX+units.gu(8), startY);
295 startX+units.gu(8), startY);
296+ }
297+
298+ function dragLauncherIntoView() {
299+ dragLauncher();
296
300
297 var panel = findChild(launcher, "launcherPanel");
301 var panel = findChild(launcher, "launcherPanel");
298 verify(!!panel);
302 verify(!!panel);
@@ -1353,5 +1357,26 @@ Rectangle {
1353 mouseWheel(launcherPanel, launcherPanel.width/2, launcherPanel.height/2, Qt.RightButton);
1357 mouseWheel(launcherPanel, launcherPanel.width/2, launcherPanel.height/2, Qt.RightButton);
1354 tryCompare(clickThroughSpy, "count", 0);
1358 tryCompare(clickThroughSpy, "count", 0);
1355 }
1359 }
1360+
1361+ function test_launcherEnabledSetting() {
1362+ launcher.available = true;
1363+
1364+ dragLauncherIntoView();
1365+ var launcherPanel = findChild(launcher, "launcherPanel");
1366+ compare(launcherPanel.x, 0);
1367+
1368+ launcher.available = true;
1369+ }
1370+
1371+ function test_launcherDisabledSetting() {
1372+ launcher.available = false;
1373+
1374+ //We don't actually care that it's visible, so juct use dragLauncher() rather than dragLauncherIntoView()
1375+ dragLauncher();
1376+ var launcherPanel = findChild(launcher, "launcherPanel");
1377+ compare(launcherPanel.x, -launcherPanel.width);
1378+
1379+ launcher.available = true;
1380+ }
1356 }
1381 }
1357}
1382}
tests/qmltests/tst_Shell.qml+18
@@ -2761,5 +2761,23 @@ Rectangle {
2761 wait(3000);
2761 wait(3000);
2762 tryCompare(cursor, "opacity", 0);
2762 tryCompare(cursor, "opacity", 0);
2763 }
2763 }
2764+
2765+ function test_launcherEnabledSetting_data() {
2766+ return [
2767+ {tag: "launcher enabled", enabled: true},
2768+ {tag: "launcher disabled", enabled: false}
2769+ ]
2770+ }
2771+
2772+ function test_launcherEnabledSetting(data) {
2773+ loadShell("phone");
2774+
2775+ GSettingsController.setEnableLauncher(data.enabled);
2776+
2777+ var launcher = findChild(shell, "launcher");
2778+ compare(launcher.available, data.enabled);
2779+
2780+ GSettingsController.setEnableLauncher(true);
2781+ }
2764 }
2782 }
2765}
2783}