@@ -28,11 +28,19 @@ Item {
28 property alias unityMenuModel: rowRepeater.model
28 property alias unityMenuModel: rowRepeater.model
29 property bool enableKeyFilter: false
29 property bool enableKeyFilter: false
30 property real overflowWidth: width
30 property real overflowWidth: width
31+ property bool windowMoving: false
32 // read from outside
33 // read from outside
33 readonly property bool valid: rowRepeater.count > 0
34 readonly property bool valid: rowRepeater.count > 0
34 readonly property bool showRequested: d.longAltPressed || d.currentItem != null
35 readonly property bool showRequested: d.longAltPressed || d.currentItem != null
37+ // MoveHandler API for DecoratedWindow
38+ signal pressed(var mouse)
39+ signal pressedChangedEx(bool pressed, var pressedButtons, real mouseX, real mouseY)
40+ signal positionChanged(var mouse)
41+ signal released(var mouse)
42+ signal doubleClicked(var mouse)
36 implicitWidth: row.width
44 implicitWidth: row.width
37 height: parent.height
45 height: parent.height
@@ -77,7 +85,7 @@ Item {
77 anchors.fill: parent
85 anchors.fill: parent
78 enabled: d.currentItem != null
86 enabled: d.currentItem != null
79 hoverEnabled: enabled && d.currentItem && d.currentItem.__popup != null
87 hoverEnabled: enabled && d.currentItem && d.currentItem.__popup != null
80− onPressed: d.dismissAll()
88+ onPressed: { mouse.accepted = false; d.dismissAll(); }
@@ -96,6 +104,11 @@ Item {
96 onModelReset: d.firstInvisibleIndex = undefined
104 onModelReset: d.firstInvisibleIndex = undefined
99 Repeater {
112 Repeater {
100 id: rowRepeater
113 id: rowRepeater
@@ -119,7 +132,14 @@ Item {
120 function show() {
133 function show() {
121 if (!__popup) {
134 if (!__popup) {
122− __popup = menuComponent.createObject(root, { objectName: visualItem.objectName + "-menu" });
135+ __popup = menuComponent.createObject(root,
137+ objectName: visualItem.objectName + "-menu",
138+ desiredX: Qt.binding(function() { return visualItem.x - units.gu(1); }),
139+ desiredY: Qt.binding(function() { return root.height; }),
140+ unityMenuModel: Qt.binding(function() { return root.unityMenuModel.submenu(visualItem.__ownIndex); })
123 __popup.childActivated.connect(dismiss);
143 __popup.childActivated.connect(dismiss);
124 // force the current item to be the newly popped up menu
144 // force the current item to be the newly popped up menu
@@ -162,17 +182,6 @@ Item {
162 onDismissAll: visualItem.dismiss()
182 onDismissAll: visualItem.dismiss()
168− desiredX: visualItem.x - units.gu(1)
169− desiredY: parent.height
170− unityMenuModel: root.unityMenuModel.submenu(visualItem.__ownIndex)
172− Component.onCompleted: reset();
176 RowLayout {
185 RowLayout {
177 id: column
186 id: column
178 spacing: units.gu(1)
187 spacing: units.gu(1)
@@ -217,24 +226,40 @@ Item {
219 MouseArea {
228 MouseArea {
220− anchors.fill: row
229+ anchors.fill: parent
221 hoverEnabled: d.currentItem
230 hoverEnabled: d.currentItem
232+ property bool moved: false
223 onEntered: {
234 onEntered: {
224 if (d.currentItem) {
235 if (d.currentItem) {
225 updateCurrentItemFromPosition(Qt.point(mouseX, mouseY))
236 updateCurrentItemFromPosition(Qt.point(mouseX, mouseY))
228− onPositionChanged: {
239+
229− if (d.currentItem) {
240+ onClicked: {
242+ var prevItem = d.currentItem;
230− updateCurrentItemFromPosition(Qt.point(mouse.x, mouse.y))
243+ updateCurrentItemFromPosition(Qt.point(mouseX, mouseY));
244+ if (prevItem && d.currentItem == prevItem) {
234− var prevItem = d.currentItem;
251+ // for the MoveHandler
252+ onPressed: root.pressed(mouse)
253+ onPressedChanged: root.pressedChangedEx(pressed, pressedButtons, mouseX, mouseY)
254+ onReleased: root.released(mouse)
255+ onDoubleClicked: root.doubleClicked(mouse)
257+ Mouse.ignoreSynthesizedEvents: true
258+ Mouse.onPositionChanged: {
259+ root.positionChanged(mouse);
260+ moved = root.windowMoving;
261+ if (d.currentItem) {
235− updateCurrentItemFromPosition(Qt.point(mouse.x, mouse.y))
262+ updateCurrentItemFromPosition(Qt.point(mouse.x, mouse.y))
236− if (prevItem && d.currentItem == prevItem) {
@@ -259,7 +284,7 @@ Item {
259 hoverEnabled: d.currentItem
284 hoverEnabled: d.currentItem
260 onEntered: d.currentItem = this
285 onEntered: d.currentItem = this
261 onPositionChanged: d.currentItem = this
286 onPositionChanged: d.currentItem = this
262− onClicked: d.currentItem = this
287+ onPressed: d.currentItem = this
264 property Item __popup: null;
289 property Item __popup: null;
265 readonly property bool popupVisible: __popup && __popup.visible
290 readonly property bool popupVisible: __popup && __popup.visible