@@ -138,92 +138,105 @@ Rectangle {
141− Rectangle {
141+ Flickable {
142 id: controls
142 id: controls
143− color: "darkgrey"
143+ contentHeight: controlRect.height
144− width: units.gu(30)
144+
145 anchors.top: root.top
145 anchors.top: root.top
146 anchors.bottom: root.bottom
146 anchors.bottom: root.bottom
147 anchors.right: root.right
147 anchors.right: root.right
149− Column {
150+ Rectangle {
150− anchors { left: parent.left; right: parent.right; top: parent.top; margins: units.gu(1) }
152+ anchors { left: parent.left; right: parent.right }
151− spacing: units.gu(1)
153+ color: "darkgrey"
152− Row {
154+ height: childrenRect.height + units.gu(2)
154− text: "Show Greeter"
155− activeFocusOnPress: false
157− if (shellLoader.status !== Loader.Ready)
157+ anchors { left: parent.left; right: parent.right; top: parent.top; margins: units.gu(1) }
158+ spacing: units.gu(1)
161+ spacing: units.gu(1)
163+ text: "Show Greeter"
164+ activeFocusOnPress: false
166+ if (shellLoader.status !== Loader.Ready)
160− var greeter = testCase.findChild(shellLoader.item, "greeter");
169+ var greeter = testCase.findChild(shellLoader.item, "greeter");
161− if (!greeter.shown) {
170+ if (!greeter.shown) {
162− LightDM.Greeter.showGreeter();
171+ LightDM.Greeter.showGreeter();
176+ text: "Hide Greeter"
177+ activeFocusOnPress: false
179+ if (shellLoader.status !== Loader.Ready)
182+ var greeter = testCase.findChild(shellLoader.item, "greeter");
183+ if (greeter.shown) {
166− Button {
189+ ListItem.ItemSelector {
167− text: "Hide Greeter"
190+ anchors { left: parent.left; right: parent.right }
168 activeFocusOnPress: false
191 activeFocusOnPress: false
169− onClicked: {
192+ text: "LightDM mock mode"
193+ model: ["single", "single-passphrase", "single-pin", "full"]
194+ onSelectedIndexChanged: {
170− if (shellLoader.status !== Loader.Ready)
195+ shellLoader.active = false;
171− return;
196+ LightDM.Greeter.mockMode = model[selectedIndex];
172−
197+ LightDM.Users.mockMode = model[selectedIndex];
173− var greeter = testCase.findChild(shellLoader.item, "greeter");
198+ shellLoader.active = true;
174− if (greeter.shown) {
180− ListItem.ItemSelector {
201+ ListItem.ItemSelector {
181− anchors { left: parent.left; right: parent.right }
202+ anchors { left: parent.left; right: parent.right }
182− activeFocusOnPress: false
203+ activeFocusOnPress: false
183− text: "LightDM mock mode"
204+ text: "Size"
184− model: ["single", "single-passphrase", "single-pin", "full"]
205+ model: ["phone", "tablet", "desktop"]
185− onSelectedIndexChanged: {
206+ onSelectedIndexChanged: {
186− shellLoader.active = false;
207+ shellLoader.active = false;
187− LightDM.Greeter.mockMode = model[selectedIndex];
188− LightDM.Users.mockMode = model[selectedIndex];
208+ shellLoader.state = model[selectedIndex];
189− shellLoader.active = true;
209+ shellLoader.active = true;
192− ListItem.ItemSelector {
212+ ListItem.ItemSelector {
213+ id: usageModeSelector
193− anchors { left: parent.left; right: parent.right }
214+ anchors { left: parent.left; right: parent.right }
194− activeFocusOnPress: false
215+ activeFocusOnPress: false
195− text: "Size"
216+ text: "Usage mode"
196− model: ["phone", "tablet", "desktop"]
217+ model: ["Staged", "Windowed"]
197− onSelectedIndexChanged: {
218+ onSelectedIndexChanged: {
198− shellLoader.active = false;
199− shellLoader.state = model[selectedIndex];
219+ GSettingsController.setUsageMode(model[selectedIndex]);
200− shellLoader.active = true;
220+ }
203− MouseTouchEmulationCheckbox {
222+ MouseTouchEmulationCheckbox {
204− id: mouseEmulation
223+ id: mouseEmulation
205− checked: true
224+ checked: true
206− color: "white"
225+ color: "white"
228+ Label { text: "Applications"; font.bold: true }
209− Button {
230+ Button {
210− anchors { left: parent.left; right: parent.right }
211− text: "Start all apps"
231+ text: "Start all apps"
212− onClicked: {
233+ onClicked: {
213− for (var i = 0; i < appRepeater.count; i++) {
234+ for (var i = 0; i < ApplicationManager.availableApplications.length; i++) {
214− var appId = ApplicationManager.availableApplications[i]
235+ var appId = ApplicationManager.availableApplications[i];
215− if (!ApplicationManager.findApplication(appId)) {
216 ApplicationManager.startApplication(appId)
236 ApplicationManager.startApplication(appId)
223− anchors { left: parent.left; right: parent.right }
224− spacing: units.gu(1)
226− Label { text: "Applications"; font.bold: true }
228 Repeater {
241 Repeater {
229 id: appRepeater
242 id: appRepeater
@@ -313,6 +326,7 @@ Rectangle {
313 mouseEmulation.checked = true;
326 mouseEmulation.checked = true;
314 tryCompare(shell, "enabled", true); // make sure greeter didn't leave us in disabled state
327 tryCompare(shell, "enabled", true); // make sure greeter didn't leave us in disabled state
315 tearDown();
328 tearDown();
329+ GSettingsController.setUsageMode("Staged");
318 function loadShell(formFactor) {
332 function loadShell(formFactor) {
@@ -759,23 +773,57 @@ Rectangle {
760 function test_launchedAppHasActiveFocus_data() {
774 function test_launchedAppHasActiveFocus_data() {
762− {tag: "phone", formFactor: "phone"},
776+ {tag: "phone", formFactor: "phone", usageMode: "Staged"},
763− {tag: "tablet", formFactor: "tablet"},
777+ {tag: "tablet", formFactor: "tablet", usageMode: "Staged"},
764− {tag: "desktop", formFactor: "desktop"}
778+ {tag: "desktop", formFactor: "tablet", usageMode: "Windowed"}
768 function test_launchedAppHasActiveFocus(data) {
782 function test_launchedAppHasActiveFocus(data) {
783+ GSettingsController.setUsageMode(data.usageMode);
769 loadShell(data.formFactor);
784 loadShell(data.formFactor);
770 swipeAwayGreeter();
785 swipeAwayGreeter();
772− var dialerApp = ApplicationManager.startApplication("webbrowser-app");
787+ var webApp = ApplicationManager.startApplication("webbrowser-app");
773− verify(dialerApp);
788+ verify(webApp);
789+ waitUntilAppSurfaceShowsUp("webbrowser-app")
791+ verify(webApp.session.surface);
793+ tryCompare(webApp.session.surface, "activeFocus", true);
796+ function test_launchedAppKeepsActiveFocusOnUsageModeChange() {
797+ loadShell("tablet");
800+ var webApp = ApplicationManager.startApplication("webbrowser-app");
774 waitUntilAppSurfaceShowsUp("webbrowser-app")
802 waitUntilAppSurfaceShowsUp("webbrowser-app")
776− verify(dialerApp.session.surface);
804+ verify(webApp.session.surface);
806+ tryCompare(webApp.session.surface, "activeFocus", true);
808+ GSettingsController.setUsageMode("Windowed");
810+ // check that the desktop stage and window have been loaded
812+ var desktopWindow = findChild(shell, "decoratedWindow_webbrowser-app");
813+ verify(desktopWindow);
816+ tryCompare(webApp.session.surface, "activeFocus", true);
818+ GSettingsController.setUsageMode("Staged");
820+ // check that the tablet stage and app surface delegate have been loaded
822+ var desktopWindow = findChild(shell, "tabletSpreadDelegate_webbrowser-app");
823+ verify(desktopWindow);
778− tryCompare(dialerApp.session.surface, "activeFocus", true);
826+ tryCompare(webApp.session.surface, "activeFocus", true);
781 function waitUntilAppSurfaceShowsUp(appId) {
829 function waitUntilAppSurfaceShowsUp(appId) {
@@ -1261,31 +1309,33 @@ Rectangle {
1262 function test_stageLoader_data() {
1310 function test_stageLoader_data() {
1263 return [
1311 return [
1264− {tag: "phone", source: "Stages/PhoneStage.qml"},
1312+ {tag: "phone", source: "Stages/PhoneStage.qml", formFactor: "phone", usageMode: "Staged"},
1265− {tag: "tablet", source: "Stages/TabletStage.qml"},
1313+ {tag: "tablet", source: "Stages/TabletStage.qml", formFactor: "tablet", usageMode: "Staged"},
1266− {tag: "desktop", source: "Stages/DesktopStage.qml"}
1314+ {tag: "desktop", source: "Stages/DesktopStage.qml", formFactor: "tablet", usageMode: "Windowed"}
1270 function test_stageLoader(data) {
1318 function test_stageLoader(data) {
1319+ GSettingsController.setUsageMode(data.usageMode);
1271− loadShell(data.tag);
1320+ loadShell(data.formFactor);
1272 var stageLoader = findChild(shell, "applicationsDisplayLoader");
1321 var stageLoader = findChild(shell, "applicationsDisplayLoader");
1273 verify(String(stageLoader.source).indexOf(data.source) >= 0);
1322 verify(String(stageLoader.source).indexOf(data.source) >= 0);
1276 function test_launcherInverted_data() {
1325 function test_launcherInverted_data() {
1277 return [
1326 return [
1278− {tag: "phone", formFactor: "phone"},
1327+ {tag: "phone", formFactor: "phone", usageMode: "Staged", launcherInverted: true},
1279− {tag: "tablet", formFactor: "tablet"},
1328+ {tag: "tablet", formFactor: "tablet", usageMode: "Staged", launcherInverted: true},
1280− {tag: "desktop", formFactor: "desktop"}
1329+ {tag: "desktop", formFactor: "tablet", usageMode: "Windowed", launcherInverted: false}
1284 function test_launcherInverted(data) {
1333 function test_launcherInverted(data) {
1334+ GSettingsController.setUsageMode(data.usageMode);
1285 loadShell(data.formFactor);
1335 loadShell(data.formFactor);
1287 var launcher = findChild(shell, "launcher");
1337 var launcher = findChild(shell, "launcher");
1288− compare(launcher.inverted, data.formFactor !== "desktop");
1338+ compare(launcher.inverted, data.launcherInverted);