@@ -28,11 +28,19 @@ Item {
2828 property alias unityMenuModel: rowRepeater.model
2929 property bool enableKeyFilter: false
3030 property real overflowWidth: width
31+ property bool windowMoving: false
3132
3233 // read from outside
3334 readonly property bool valid: rowRepeater.count > 0
3435 readonly property bool showRequested: d.longAltPressed || d.currentItem != null
3536
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)
43+
3644 implicitWidth: row.width
3745 height: parent.height
3846
@@ -77,7 +85,7 @@ Item {
7785 anchors.fill: parent
7886 enabled: d.currentItem != null
7987 hoverEnabled: enabled && d.currentItem && d.currentItem.__popup != null
80− onPressed: d.dismissAll()
88+ onPressed: { mouse.accepted = false; d.dismissAll(); }
8189 }
8290
8391 Row {
@@ -218,24 +226,40 @@ Item {
218226 } // Row
219227
220228 MouseArea {
221− anchors.fill: row
229+ anchors.fill: parent
222230 hoverEnabled: d.currentItem
223231
232+ property bool moved: false
233+
224234 onEntered: {
225235 if (d.currentItem) {
226236 updateCurrentItemFromPosition(Qt.point(mouseX, mouseY))
227237 }
228238 }
229− onPositionChanged: {
230− if (d.currentItem) {
231− updateCurrentItemFromPosition(Qt.point(mouse.x, mouse.y))
239+
240+ onClicked: {
241+ if (!moved) {
242+ var prevItem = d.currentItem;
243+ updateCurrentItemFromPosition(Qt.point(mouseX, mouseY));
244+ if (prevItem && d.currentItem == prevItem) {
245+ prevItem.hide();
246+ }
232247 }
248+ moved = false;
233249 }
234− onClicked: {
235− var prevItem = d.currentItem;
236− updateCurrentItemFromPosition(Qt.point(mouse.x, mouse.y))
237− if (prevItem && d.currentItem == prevItem) {
238− prevItem.hide();
250+
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)
256+
257+ Mouse.ignoreSynthesizedEvents: true
258+ Mouse.onPositionChanged: {
259+ root.positionChanged(mouse);
260+ moved = root.windowMoving;
261+ if (d.currentItem) {
262+ updateCurrentItemFromPosition(Qt.point(mouse.x, mouse.y))
239263 }
240264 }
241265
@@ -260,7 +284,7 @@ Item {
260284 hoverEnabled: d.currentItem
261285 onEntered: d.currentItem = this
262286 onPositionChanged: d.currentItem = this
263− onClicked: d.currentItem = this
287+ onPressed: d.currentItem = this
264288
265289 property Item __popup: null;
266290 readonly property bool popupVisible: __popup && __popup.visible