@@ -30,7 +30,9 @@ Item {
3030 property bool keyboardVisible
3131 property var lastInputTimestamp
3232
33− readonly property bool launcherEnabled: !running || tutorialLeftLoader.shown
33+ readonly property bool launcherEnabled: !running
34+ || tutorialLeftLoader.shown
35+ || tutorialLeftLongLoader.shown
3436 readonly property bool spreadEnabled: !running || tutorialRightLoader.shown
3537 readonly property bool panelEnabled: !running || tutorialTopLoader.shown
3638 readonly property bool running: tutorialLeftLoader.shown
@@ -101,6 +103,48 @@ Item {
101103 }
102104 }
103105
106+ Loader {
107+ id: tutorialLeftLongLoader
108+ objectName: "tutorialLeftLongLoader"
109+ anchors.fill: parent
110+
111+ readonly property bool skipped: !d.mobileScenario || d.haveShown("left-long")
112+ readonly property bool shown: item && item.shown
113+ active: !skipped || (item && item.visible)
114+ onSkippedChanged: if (skipped && shown) item.hide()
115+
116+ sourceComponent: TutorialLeftLong {
117+ id: tutorialLeftLong
118+ objectName: "tutorialLeftLong"
119+ anchors.fill: parent
120+ launcher: root.launcher
121+ hides: [launcher, panel.indicators]
122+ paused: root.paused
123+
124+ skipped: tutorialLeftLongLoader.skipped
125+ isReady: tutorialLeftLoader.skipped && !skipped && !paused && !keyboardVisible &&
126+ !tutorialBottomLoader.shown && !tutorialBottomLoader.mightShow
127+
128+ Timer {
129+ id: tutorialLeftLongTimer
130+ objectName: "tutorialLeftLongTimer"
131+ interval: 5000
132+ onTriggered: {
133+ if (parent.isReady) {
134+ if (!parent.shown) {
135+ parent.show();
136+ }
137+ } else if (!parent.skipped) {
138+ restart();
139+ }
140+ }
141+ }
142+
143+ onIsReadyChanged: if (isReady && !shown) tutorialLeftLongTimer.start()
144+ onFinished: AccountsService.markDemoEdgeCompleted("left-long")
145+ }
146+ }
147+
104148 Loader {
105149 id: tutorialTopLoader
106150 objectName: "tutorialTopLoader"
@@ -119,8 +163,8 @@ Item {
119163 hides: [launcher, panel.indicators]
120164 paused: root.paused
121165
122− isReady: tutorialLeftLoader.skipped && !tutorialTopLoader.skipped &&
123− !paused && !keyboardVisible &&
166+ skipped: tutorialTopLoader.skipped
167+ isReady: tutorialLeftLongLoader.skipped && !skipped && !paused && !keyboardVisible &&
124168 !tutorialBottomLoader.shown && !tutorialBottomLoader.mightShow
125169
126170 // We fire 30s after left edge tutorial, with at least 3s of inactivity
@@ -162,8 +206,8 @@ Item {
162206 hides: [launcher, panel.indicators]
163207 paused: root.paused
164208
165− isReady: tutorialTopLoader.skipped && !tutorialRightLoader.skipped &&
166− !paused && !keyboardVisible &&
209+ skipped: tutorialRightLoader.skipped
210+ isReady: tutorialTopLoader.skipped && !skipped && !paused && !keyboardVisible &&
167211 !tutorialBottomLoader.shown && !tutorialBottomLoader.mightShow &&
168212 ApplicationManager.count >= 3
169213
@@ -231,6 +275,7 @@ Item {
231275 stage: root.stage
232276 application: d.focusedApp
233277
278+ skipped: tutorialBottomLoader.skipped
234279 isReady: !tutorialBottomLoader.skipped && !paused && !keyboardVisible &&
235280 !tutorialTopLoader.shown && !tutorialRightLoader.shown &&
236281 tutorialBottomLoader.mightShow &&