on xenial help sign in
manually propagate the mosue events, get rid of the delayed timer, works \o/
5cb158bLukáš Tinkl
qml/ApplicationMenus/MenuBar.qml+22−22
@@ -34,6 +34,12 @@ Item {
34 readonly property bool valid: rowRepeater.count > 0
34 readonly property bool valid: rowRepeater.count > 0
35 readonly property bool showRequested: d.longAltPressed || d.currentItem != null
35 readonly property bool showRequested: d.longAltPressed || d.currentItem != null
36
36
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+
37 implicitWidth: row.width
43 implicitWidth: row.width
38 height: parent.height
44 height: parent.height
39
45
@@ -45,12 +51,6 @@ Item {
45 d.dismissAll();
51 d.dismissAll();
46 }
52 }
47
53
48− onWindowMovingChanged: {
49− if (windowMoving) {
50− dismiss();
51− }
52− }
53−
54 GlobalShortcut {
54 GlobalShortcut {
55 shortcut: Qt.Key_Alt|Qt.AltModifier
55 shortcut: Qt.Key_Alt|Qt.AltModifier
56 active: enableKeyFilter
56 active: enableKeyFilter
@@ -228,18 +228,7 @@ Item {
228 anchors.fill: parent
228 anchors.fill: parent
229 hoverEnabled: d.currentItem
229 hoverEnabled: d.currentItem
230
230
231− Timer {
231+ property bool moved: false
232− id: delayedPopupTimer
233− interval: 150
234− onTriggered: {
235− if (root.windowMoving) return;
236− var prevItem = d.currentItem;
237− mouseArea.updateCurrentItemFromPosition(Qt.point(mouseArea.mouseX, mouseArea.mouseY));
238− if (prevItem && d.currentItem == prevItem) {
239− prevItem.hide();
240− }
241− }
242− }
243
232
244 onEntered: {
233 onEntered: {
245 if (d.currentItem) {
234 if (d.currentItem) {
@@ -247,18 +236,29 @@ Item {
247 }
236 }
248 }
237 }
249 onPositionChanged: {
238 onPositionChanged: {
239+ root.positionChanged(mouse);
240+ moved = root.windowMoving;
250 if (d.currentItem) {
241 if (d.currentItem) {
251 updateCurrentItemFromPosition(Qt.point(mouse.x, mouse.y))
242 updateCurrentItemFromPosition(Qt.point(mouse.x, mouse.y))
252 }
243 }
253 }
244 }
254
245
255− onPressed: {
246+ onClicked: {
256− mouse.accepted = false;
247+ if (!moved) {
257− if (containsPress && !root.windowMoving) {
248+ var prevItem = d.currentItem;
258− delayedPopupTimer.start();
249+ mouseArea.updateCurrentItemFromPosition(Qt.point(mouseArea.mouseX, mouseArea.mouseY));
250+ if (prevItem && d.currentItem == prevItem) {
251+ prevItem.hide();
252+ }
259 }
253 }
254+ moved = false;
260 }
255 }
261
256
257+ // for the MoveHandler
258+ onPressed: root.pressed(mouse)
259+ onPressedChanged: root.pressedChangedEx(pressed, pressedButtons, mouseX, mouseY)
260+ onReleased: root.released(mouse);
261+
262 function updateCurrentItemFromPosition(point) {
262 function updateCurrentItemFromPosition(point) {
263 var pos = mapToItem(row, point.x, point.y);
263 var pos = mapToItem(row, point.x, point.y);
264
264
qml/Stage/DecoratedWindow.qml+1
@@ -211,6 +211,7 @@ FocusScope {
211
211
212 onPressed: root.decorationPressed();
212 onPressed: root.decorationPressed();
213 onPressedChanged: moveHandler.handlePressedChanged(pressed, pressedButtons, mouseX, mouseY)
213 onPressedChanged: moveHandler.handlePressedChanged(pressed, pressedButtons, mouseX, mouseY)
214+ onPressedChangedEx: moveHandler.handlePressedChanged(pressed, pressedButtons, mouseX, mouseY)
214 onPositionChanged: moveHandler.handlePositionChanged(mouse)
215 onPositionChanged: moveHandler.handlePositionChanged(mouse)
215 onReleased: {
216 onReleased: {
216 root.decorationReleased();
217 root.decorationReleased();
qml/Stage/WindowDecoration.qml+7
@@ -46,6 +46,8 @@ MouseArea {
46 signal maximizeHorizontallyClicked()
46 signal maximizeHorizontallyClicked()
47 signal maximizeVerticallyClicked()
47 signal maximizeVerticallyClicked()
48
48
49+ signal pressedChangedEx(bool pressed, var pressedButtons, real mouseX, real mouseY)
50+
49 onDoubleClicked: {
51 onDoubleClicked: {
50 if (mouse.button == Qt.LeftButton) {
52 if (mouse.button == Qt.LeftButton) {
51 root.maximizeClicked();
53 root.maximizeClicked();
@@ -144,6 +146,11 @@ MouseArea {
144 enableKeyFilter: valid && root.active && root.enableMenus
146 enableKeyFilter: valid && root.active && root.enableMenus
145 unityMenuModel: root.menu
147 unityMenuModel: root.menu
146 windowMoving: root.windowMoving
148 windowMoving: root.windowMoving
149+
150+ onPressed: root.onPressed(mouse)
151+ onPressedChangedEx: root.pressedChangedEx(pressed, pressedButtons, mouseX, mouseY)
152+ onPositionChanged: root.onPositionChanged(mouse)
153+ onReleased: root.onReleased(mouse)
147 }
154 }
148
155
149 opacity: (!overlayShown && priv.shouldShowMenus) || (active && priv.menuBar.valid && root.windowMoving) ? 1 : 0
156 opacity: (!overlayShown && priv.shouldShowMenus) || (active && priv.menuBar.valid && root.windowMoving) ? 1 : 0