on xenial help sign in
make big tablets switch to windowed mode even with only a kbd attached
commit462d98396a9b468251b7a91cf36838f016fd404a authorMichael Zanetti <michael.zanetti@canonical.com> dateWed 20 Jan 2016, 16:09 (11 years ago) parente2e7e7d
2 files changed+50−23
qml/OrientedShell.qml+13−4 tests/qmltests/tst_OrientedShell.qml+37−19
qml/OrientedShell.qml+13−4
@@ -202,11 +202,20 @@ Rectangle {
202202 return "tablet";
203203 }
204204 } else { // automatic
205− if (miceModel.count + touchPadModel.count > 0) {
206− return "desktop";
207− } else {
208− return deviceConfiguration.category;
205+ var longEdgeWidth = Math.max(root.width, root.height)
206+ print("Automatic mode:", longEdgeWidth, "gu size", units.gu(1), "kbds", keyboardsModel.count, "mice", miceModel.count + touchPadModel.count, root)
207+ if (longEdgeWidth > units.gu(120)) {
208+ print("longedge is big!")
209+ if (keyboardsModel.count + miceModel.count + touchPadModel.count > 0) {
210+ return "desktop";
211+ }
212+ } else if (longEdgeWidth > units.gu(90)){
213+ if (miceModel.count + touchPadModel.count > 0) {
214+ return "desktop";
215+ }
209216 }
217+
218+ return deviceConfiguration.category;
210219 }
211220 }
212221
tests/qmltests/tst_OrientedShell.qml+37−19
@@ -996,37 +996,55 @@ Rectangle {
996996 tryCompare(shell, "transformRotationAngle", 0);
997997 }
998998
999− function test_attachRemoveInputDevices() {
999+ function test_attachRemoveInputDevices_data() {
1000+ return [
1001+ { tag: "small screen, no devices", screenWidth: units.gu(50), mouse: false, kbd: false, expectedMode: "phone", oskExpected: true },
1002+ { tag: "medium screen, no devices", screenWidth: units.gu(100), mouse: false, kbd: false, expectedMode: "phone", oskExpected: true },
1003+ { tag: "big screen, no devices", screenWidth: units.gu(200), mouse: false, kbd: false, expectedMode: "phone", oskExpected: true },
1004+ { tag: "small screen, mouse", screenWidth: units.gu(50), mouse: true, kbd: false, expectedMode: "phone", oskExpected: true },
1005+ { tag: "medium screen, mouse", screenWidth: units.gu(100), mouse: true, kbd: false, expectedMode: "desktop", oskExpected: true },
1006+ { tag: "big screen, mouse", screenWidth: units.gu(200), mouse: true, kbd: false, expectedMode: "desktop", oskExpected: true },
1007+ { tag: "small screen, kbd", screenWidth: units.gu(50), mouse: false, kbd: true, expectedMode: "phone", oskExpected: false },
1008+ { tag: "medium screen, kbd", screenWidth: units.gu(100), mouse: false, kbd: true, expectedMode: "phone", oskExpected: false },
1009+ { tag: "big screen, kbd", screenWidth: units.gu(200), mouse: false, kbd: true, expectedMode: "desktop", oskExpected: false },
1010+ { tag: "small screen, mouse & kbd", screenWidth: units.gu(50), mouse: true, kbd: true, expectedMode: "phone", oskExpected: false },
1011+ { tag: "medium screen, mouse & kbd", screenWidth: units.gu(100), mouse: true, kbd: true, expectedMode: "desktop", oskExpected: false },
1012+ { tag: "big screen, mouse & kbd", screenWidth: units.gu(200), mouse: true, kbd: true, expectedMode: "desktop", oskExpected: false },
1013+ ]
1014+ }
1015+
1016+ function test_attachRemoveInputDevices(data) {
10001017 usageModeSelector.selectedIndex = 2;
10011018 tryCompare(mockUnity8Settings, "usageMode", "Automatic")
10021019
10031020 loadShell("mako")
10041021 var shell = findChild(orientedShell, "shell");
10051022
1006− tryCompare(shell, "usageScenario", "phone");
1007− tryCompare(mockOskSettings, "stayHidden", false);
1023+ var oldWidth = orientedShellLoader.width;
1024+ orientedShellLoader.width = data.screenWidth;
10081025
1009− MockInputDeviceBackend.addMockDevice("/kbd0", InputInfo.Keyboard);
10101026 tryCompare(shell, "usageScenario", "phone");
1011− tryCompare(mockOskSettings, "stayHidden", true);
1012−
1013− MockInputDeviceBackend.addMockDevice("/mouse0", InputInfo.Mouse);
1014− tryCompare(shell, "usageScenario", "desktop");
1015− tryCompare(mockOskSettings, "stayHidden", true);
1016−
1017− MockInputDeviceBackend.removeDevice("/kbd0");
1018− tryCompare(shell, "usageScenario", "desktop");
10191027 tryCompare(mockOskSettings, "stayHidden", false);
10201028
1021− MockInputDeviceBackend.removeDevice("/mouse0");
1022− tryCompare(shell, "usageScenario", "phone");
1023− tryCompare(mockOskSettings, "stayHidden", false);
1029+ if (data.kbd) {
1030+ MockInputDeviceBackend.addMockDevice("/kbd0", InputInfo.Keyboard);
1031+ }
1032+ if (data.mouse) {
1033+ MockInputDeviceBackend.addMockDevice("/mouse0", InputInfo.Mouse);
1034+ }
10241035
1025− MockInputDeviceBackend.addMockDevice("/touchpad0", InputInfo.TouchPad);
1026− tryCompare(shell, "usageScenario", "desktop");
1036+ tryCompare(shell, "usageScenario", data.expectedMode);
1037+ tryCompare(mockOskSettings, "stayHidden", !data.oskExpected);
10271038
1028− MockInputDeviceBackend.removeDevice("/touchpad0");
1029− tryCompare(shell, "usageScenario", "phone");
1039+ if (data.kbd) {
1040+ MockInputDeviceBackend.removeDevice("/kbd0");
1041+ }
1042+ if (data.mouse) {
1043+ MockInputDeviceBackend.removeDevice("/mouse0");
1044+ }
1045+
1046+ // Restore width
1047+ orientedShellLoader.width = oldWidth;
10301048 }
10311049
10321050 /*