@@ -39,33 +39,18 @@ Item {
3939 d.dismissAll();
4040 }
4141
42− // Need 2 shortcuts because Alt press gives a different event to Alt release.
4342 GlobalShortcut {
4443 shortcut: Qt.Key_Alt|Qt.AltModifier
4544 active: enableKeyFilter
46− onTriggered: {
47− d.altPressed = true;
48− d.longAltPressed = false;
49− menuBarShortcutTimer.start();
50− }
45+ onTriggered: d.startShortcutTimer()
46+ onReleased: d.stopSHortcutTimer()
5147 }
48+ // On an actual keyboard, the AltModifier is not supplied on release.
5249 GlobalShortcut {
5350 shortcut: Qt.Key_Alt
5451 active: enableKeyFilter
55− onReleased: {
56− menuBarShortcutTimer.stop();
57− d.altPressed = false;
58− d.longAltPressed = false;
59− }
60− }
61−
62− Timer {
63− id: menuBarShortcutTimer
64− interval: 200
65− repeat: false
66− onTriggered: {
67− d.longAltPressed = true;
68− }
52+ onTriggered: d.startShortcutTimer()
53+ onReleased: d.stopSHortcutTimer()
6954 }
7055
7156 InverseMouseArea {
@@ -187,6 +172,32 @@ Item {
187172 } // Repeater
188173 } // Row
189174
175+ MouseArea {
176+ anchors.fill: parent
177+ hoverEnabled: d.currentItem
178+
179+ onPositionChanged: {
180+ if (d.currentItem) {
181+ updateCurrentItemFromPosition(mouse)
182+ }
183+ }
184+ onClicked: updateCurrentItemFromPosition(mouse)
185+
186+ function updateCurrentItemFromPosition(point) {
187+ var pos = mapToItem(row, point.x, point.y);
188+
189+ if (!d.hoveredItem || !d.currentItem || !d.hoveredItem.contains(Qt.point(pos.x - d.currentItem.x, pos.y - d.currentItem.y))) {
190+ d.hoveredItem = row.childAt(pos.x, pos.y);
191+ if (!d.hoveredItem || !d.hoveredItem.enabled)
192+ return false;
193+ if (d.currentItem != d.hoveredItem) {
194+ d.currentItem = d.hoveredItem;
195+ }
196+ }
197+ return true;
198+ }
199+ }
200+
190201 Rectangle {
191202 id: underline
192203 anchors {
@@ -224,32 +235,25 @@ Item {
224235 if (currentItem) currentItem.show();
225236 prevCurrentItem = currentItem;
226237 }
227− }
228−
229− MouseArea {
230− id: menuMouseArea
231− anchors.fill: parent
232− hoverEnabled: d.currentItem
233238
234− onPositionChanged: {
235− if (d.currentItem) {
236− updateCurrentItemFromPosition(mouse)
237− }
239+ function startShortcutTimer() {
240+ d.altPressed = true;
241+ menuBarShortcutTimer.start();
238242 }
239− onClicked: updateCurrentItemFromPosition(mouse)
240243
241− function updateCurrentItemFromPosition(point) {
242− var pos = mapToItem(row, point.x, point.y);
244+ function stopSHortcutTimer() {
245+ menuBarShortcutTimer.stop();
246+ d.altPressed = false;
247+ d.longAltPressed = false;
248+ }
249+ }
243250
244− if (!d.hoveredItem || !d.currentItem || !d.hoveredItem.contains(Qt.point(pos.x - d.currentItem.x, pos.y - d.currentItem.y))) {
245− d.hoveredItem = row.childAt(pos.x, pos.y);
246− if (!d.hoveredItem || !d.hoveredItem.enabled)
247− return false;
248− if (d.currentItem != d.hoveredItem) {
249− d.currentItem = d.hoveredItem;
250− }
251− }
252− return true;
251+ Timer {
252+ id: menuBarShortcutTimer
253+ interval: 200
254+ repeat: false
255+ onTriggered: {
256+ d.longAltPressed = true;
253257 }
254258 }
255259