@@ -42,6 +42,38 @@ AbstractStage {
46+ function windowMoveRequested(scenePos) {
48+ if (priv.focusedAppDelegate && priv.focusedAppDelegate.contains(mapToItem(priv.focusedAppDelegate, scenePos.x, scenePos.y))) {
49+ candidate = priv.focusedAppDelegate;
51+ candidate = appContainer.childAt(scenePos.x, scenePos.y);
54+ if (candidate && candidate.moveHandler) {
55+ print("!!! Window move requested", scenePos);
56+ var localPos = mapToItem(candidate, scenePos.x, scenePos.y)
57+ candidate.focus = true;
58+ candidate.moveHandler.handlePressedChanged(true, Qt.LeftButton, localPos.x, localPos.y);
61+ function windowMoveUpdated(scenePos) {
62+ if (priv.focusedAppDelegate) {
63+ print("!!! Window move updated", scenePos);
64+ var localPos = mapToItem(priv.focusedAppDelegate, scenePos.x, scenePos.y)
65+ priv.focusedAppDelegate.moveHandler.handlePositionChanged(localPos);
68+ function windowMoveEnded() {
69+ if (priv.focusedAppDelegate) {
70+ print("!!! Window move ended");
71+ priv.focusedAppDelegate.moveHandler.handlePressedChanged(false, Qt.LeftButton);
72+ priv.focusedAppDelegate.moveHandler.handleReleased();
73+ fakeRectangle.commit();
45 // Used by TutorialRight
77 // Used by TutorialRight
46 property bool spreadShown: spread.state == "altTab"
78 property bool spreadShown: spread.state == "altTab"
@@ -248,6 +280,20 @@ AbstractStage {
248 source: root.background
280 source: root.background
283+ Timer { // fix a race condition between TopLevelSurfaceRepeater and app (usually dash) starting up; set a focusedAppDelegate
284+ running: !appRepeater.startingUp
287+ for (var i = 0; i < appRepeater.count; i++) {
288+ var appDelegate = appRepeater.itemAt(i);
289+ if (appDelegate && appDelegate.focus) {
290+ priv.focusedAppDelegate = appDelegate;
251 TopLevelSurfaceRepeater {
297 TopLevelSurfaceRepeater {
252 id: appRepeater
298 id: appRepeater
253 model: topLevelSurfaceList
299 model: topLevelSurfaceList
@@ -350,7 +396,8 @@ AbstractStage {
350 readonly property var surface: model.surface
396 readonly property var surface: model.surface
351 readonly property alias resizeArea: resizeArea
397 readonly property alias resizeArea: resizeArea
352 readonly property alias focusedSurface: decoratedWindow.focusedSurface
398 readonly property alias focusedSurface: decoratedWindow.focusedSurface
353− readonly property bool dragging: touchControls.overlayShown ? touchControls.dragging : decoratedWindow.dragging
399+ readonly property bool dragging: moveHandler.dragging
400+ readonly property alias moveHandler: decoratedWindow.moveHandler // for Alt+LMB dragging
355 readonly property bool isDash: model.application.appId == "unity8-dash"
402 readonly property bool isDash: model.application.appId == "unity8-dash"
356 readonly property alias clientAreaItem: decoratedWindow.clientAreaItem
403 readonly property alias clientAreaItem: decoratedWindow.clientAreaItem