@@ -39,33 +39,18 @@ Item {
39 d.dismissAll();
39 d.dismissAll();
42− // Need 2 shortcuts because Alt press gives a different event to Alt release.
43 GlobalShortcut {
42 GlobalShortcut {
44 shortcut: Qt.Key_Alt|Qt.AltModifier
43 shortcut: Qt.Key_Alt|Qt.AltModifier
45 active: enableKeyFilter
44 active: enableKeyFilter
46− onTriggered: {
45+ onTriggered: d.startShortcutTimer()
47− d.altPressed = true;
46+ onReleased: d.stopSHortcutTimer()
48− d.longAltPressed = false;
49− menuBarShortcutTimer.start();
48+ // On an actual keyboard, the AltModifier is not supplied on release.
52 GlobalShortcut {
49 GlobalShortcut {
53 shortcut: Qt.Key_Alt
50 shortcut: Qt.Key_Alt
54 active: enableKeyFilter
51 active: enableKeyFilter
56− menuBarShortcutTimer.stop();
57− d.altPressed = false;
58− d.longAltPressed = false;
63− id: menuBarShortcutTimer
66− onTriggered: {
52+ onTriggered: d.startShortcutTimer()
67− d.longAltPressed = true;
53+ onReleased: d.stopSHortcutTimer()
71 InverseMouseArea {
56 InverseMouseArea {
@@ -187,6 +172,32 @@ Item {
187 } // Repeater
172 } // Repeater
176+ anchors.fill: parent
177+ hoverEnabled: d.currentItem
179+ onPositionChanged: {
180+ if (d.currentItem) {
181+ updateCurrentItemFromPosition(mouse)
184+ onClicked: updateCurrentItemFromPosition(mouse)
186+ function updateCurrentItemFromPosition(point) {
187+ var pos = mapToItem(row, point.x, point.y);
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)
193+ if (d.currentItem != d.hoveredItem) {
194+ d.currentItem = d.hoveredItem;
190 Rectangle {
201 Rectangle {
191 id: underline
202 id: underline
192 anchors {
203 anchors {
@@ -224,32 +235,25 @@ Item {
224 if (currentItem) currentItem.show();
235 if (currentItem) currentItem.show();
225 prevCurrentItem = currentItem;
236 prevCurrentItem = currentItem;
231− anchors.fill: parent
232− hoverEnabled: d.currentItem
234− onPositionChanged: {
239+ function startShortcutTimer() {
235− if (d.currentItem) {
240+ d.altPressed = true;
236− updateCurrentItemFromPosition(mouse)
241+ menuBarShortcutTimer.start();
239− onClicked: updateCurrentItemFromPosition(mouse)
241− function updateCurrentItemFromPosition(point) {
244+ function stopSHortcutTimer() {
242− var pos = mapToItem(row, point.x, point.y);
245+ menuBarShortcutTimer.stop();
246+ d.altPressed = false;
247+ d.longAltPressed = false;
244− if (!d.hoveredItem || !d.currentItem || !d.hoveredItem.contains(Qt.point(pos.x - d.currentItem.x, pos.y - d.currentItem.y))) {
251+ Timer {
245− d.hoveredItem = row.childAt(pos.x, pos.y);
252+ id: menuBarShortcutTimer
246− if (!d.hoveredItem || !d.hoveredItem.enabled)
253+ interval: 200
247− return false;
254+ repeat: false
248− if (d.currentItem != d.hoveredItem) {
255+ onTriggered: {
249− d.currentItem = d.hoveredItem;
256+ d.longAltPressed = true;