@@ -47,11 +47,6 @@ AbstractStage {
4747
4848 ApplicationManager.requestFocusApplication(appId)
4949 }
50− onApplicationRemoved: {
51− if (priv.foregroundMaximizedAppId === appId) {
52− priv.foregroundMaximizedAppIdIndex = -1;
53− }
54− }
5550
5651 onFocusRequested: {
5752 var appIndex = priv.indexOf(appId);
@@ -73,17 +68,26 @@ AbstractStage {
7368 var index = indexOf(focusedAppId);
7469 return index >= 0 && index < appRepeater.count ? appRepeater.itemAt(index) : null
7570 }
76− readonly property string foregroundMaximizedAppId: {
77− if (foregroundMaximizedAppIdIndex == -1) {
78− return "";
79− }
80− var app = ApplicationManager.get(foregroundMaximizedAppIdIndex);
81− if (app) {
82− return app.appId;
71+ property string foregroundMaximizedAppId: ""
72+ onForegroundMaximizedAppIdChanged: console.log("MAXIMISED APP CHANGED", foregroundMaximizedAppId)
73+ property int foregroundMaximizedAppIdIndex: -1
74+
75+ function updateForegroundMaximizedApp() {
76+ for (var i = 0; i < appRepeater.count; i++) {
77+ var item = appRepeater.itemAt(i);
78+
79+ if (item && item.visuallyMaximized) {
80+ var app = ApplicationManager.get(i);
81+ if (app) {
82+ foregroundMaximizedAppIdIndex = i;
83+ foregroundMaximizedAppId = app.appId;
84+ return;
85+ }
86+ }
8387 }
84− return "";
88+ foregroundMaximizedAppIdIndex = -1;
89+ foregroundMaximizedAppId = "";
8590 }
86− property int foregroundMaximizedAppIdIndex: -1
8791
8892 function indexOf(appId) {
8993 for (var i = 0; i < ApplicationManager.count; i++) {
@@ -130,6 +134,9 @@ AbstractStage {
130134 model: ApplicationManager
131135 objectName: "appRepeater"
132136
137+ onItemAdded: priv.updateForegroundMaximizedApp()
138+ onItemRemoved: priv.updateForegroundMaximizedApp()
139+
133140 delegate: FocusScope {
134141 id: appDelegate
135142 objectName: "stageDelegate_" + model.appId
@@ -152,33 +159,8 @@ AbstractStage {
152159 }
153160 }
154161
155− onZChanged: updateMaximized()
156− onVisuallyMaximizedChanged: updateMaximized()
157− Connections {
158− target: priv
159− onForegroundMaximizedAppIdIndexChanged: updateMaximized()
160− }
161−
162− property bool connectMaxEnabled: true
163− function updateMaximized() {
164− if (!connectMaxEnabled) return;
165− connectMaxEnabled = false;
166−
167− // work out if this is the top maximized app.
168− if (visuallyMaximized) {
169− if (priv.foregroundMaximizedAppId === model.appId) {
170− priv.foregroundMaximizedAppIdIndex = index;
171− }
172− else if (priv.foregroundMaximizedAppIdIndex == -1 ||
173− (index >= 0 && index <= priv.foregroundMaximizedAppIdIndex)) {
174− priv.foregroundMaximizedAppIdIndex = index;
175− }
176− } else if (priv.foregroundMaximizedAppId === model.appId) {
177− priv.foregroundMaximizedAppIdIndex = -1;
178− }
179−
180− connectMaxEnabled = true;
181− }
162+ onZChanged: priv.updateForegroundMaximizedApp()
163+ onVisuallyMaximizedChanged: priv.updateForegroundMaximizedApp()
182164
183165 visible: !visuallyMinimized &&
184166 (priv.foregroundMaximizedAppIdIndex === -1 || priv.foregroundMaximizedAppIdIndex >= index) ||
@@ -211,43 +193,62 @@ AbstractStage {
211193 maximized = false;
212194 }
213195
196+// Connections {
197+// target: appDelegate
198+// onVisuallyMaximizedChanged: console.log("MAXIMISED", appDelegate.visuallyMaximized)
199+// onVisuallyMinimizedChanged: console.log("MINIMIZED", appDelegate.visuallyMinimized)
200+// }
201+
214202 states: [
215203 State {
216− name: "normal"; when: !appDelegate.maximized && !appDelegate.minimized
204+ name: "normal";
205+ when: !appDelegate.maximized && !appDelegate.minimized
206+ PropertyChanges {
207+ target: appDelegate;
208+ visuallyMinimized: false;
209+ visuallyMaximized: false
210+ }
217211 },
218212 State {
219213 name: "maximized"; when: appDelegate.maximized
220− PropertyChanges { target: appDelegate; x: 0; y: 0; width: root.width; height: root.height }
214+ PropertyChanges {
215+ target: appDelegate;
216+ x: 0; y: 0;
217+ width: root.width; height: root.height;
218+ visuallyMinimized: false;
219+ visuallyMaximized: true
220+ }
221221 },
222222 State {
223223 name: "minimized"; when: appDelegate.minimized
224− PropertyChanges { target: appDelegate; x: -appDelegate.width / 2; scale: units.gu(5) / appDelegate.width; opacity: 0 }
224+ PropertyChanges {
225+ target: appDelegate;
226+ x: -appDelegate.width / 2;
227+ scale: units.gu(5) / appDelegate.width;
228+ opacity: 0
229+ visuallyMinimized: true;
230+ visuallyMaximized: false
231+ }
225232 }
226233 ]
227234 transitions: [
228235 Transition {
229236 to: "normal"
230237 enabled: appDelegate.animationsEnabled
231− PropertyAction { target: appDelegate; properties: "visuallyMinimized,visuallyMaximized"; value: false }
232− PropertyAnimation { target: appDelegate; properties: "x,y,opacity,width,height,scale," }
238+ PropertyAction { target: appDelegate; properties: "visuallyMinimized,visuallyMaximized" }
239+ PropertyAnimation { target: appDelegate; properties: "x,y,opacity,width,height,scale,opacity" }
233240 },
234241 Transition {
235242 to: "maximized"
236243 enabled: appDelegate.animationsEnabled
237− SequentialAnimation {
238− PropertyAction { target: appDelegate; property: "visuallyMinimized"; value: false }
239− PropertyAnimation { target: appDelegate; properties: "x,y,opacity,width,height,scale" }
240− PropertyAction { target: appDelegate; property: "visuallyMaximized"; value: true }
241− }
244+ PropertyAction { target: appDelegate; property: "visuallyMinimized" }
245+ PropertyAnimation { target: appDelegate; properties: "x,y,opacity,width,height,scale,opacity,visuallyMaximized" }
242246 },
243247 Transition {
244248 to: "minimized"
245249 enabled: appDelegate.animationsEnabled
246− SequentialAnimation {
247− PropertyAction { target: appDelegate; property: "visuallyMaximized"; value: false }
248− PropertyAnimation { target: appDelegate; properties: "x,y,opacity,width,height,scale" }
249− PropertyAction { target: appDelegate; property: "visuallyMinimized"; value: true }
250− }
250+ PropertyAction { target: appDelegate; property: "visuallyMaximized" }
251+ PropertyAnimation { target: appDelegate; properties: "x,y,opacity,width,height,scale,opacity,visuallyMinimized" }
251252 },
252253 Transition {
253254 from: ""
@@ -293,7 +294,13 @@ AbstractStage {
293294 focus: true
294295
295296 onClose: ApplicationManager.stopApplication(model.appId)
296− onMaximize: appDelegate.maximize()
297+ onMaximize: {
298+ if (appDelegate.maximized) {
299+ appDelegate.unmaximize()
300+ } else {
301+ appDelegate.maximize()
302+ }
303+ }
297304 onMinimize: appDelegate.minimize()
298305 onDecorationPressed: { ApplicationManager.focusApplication(model.appId) }
299306 }