diff options
author | Simon Hausmann <simon.hausmann@theqtcompany.com> | 2015-10-02 12:43:06 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@theqtcompany.com> | 2015-10-02 12:43:48 +0200 |
commit | 63d832bcae98104bf071096605fc27a59a52254c (patch) | |
tree | ba2fd42487c5889aad0b80aaddb0f304a690b561 /src/controls/MenuBar.qml | |
parent | 53ff51b61a3ecfc485d7c8ec6d9a5b61d2791719 (diff) | |
parent | a21a33fe79e82a7bd3471612b46106ac1343648f (diff) | |
download | qtquickcontrols-63d832bcae98104bf071096605fc27a59a52254c.tar.gz |
Merge remote-tracking branch 'origin/5.5' into 5.6
Change-Id: Ie26c941c33fdd8baab49dc13b84d02e2b83af5e1
Diffstat (limited to 'src/controls/MenuBar.qml')
-rw-r--r-- | src/controls/MenuBar.qml | 81 |
1 files changed, 44 insertions, 37 deletions
diff --git a/src/controls/MenuBar.qml b/src/controls/MenuBar.qml index 26533574..a16635ff 100644 --- a/src/controls/MenuBar.qml +++ b/src/controls/MenuBar.qml @@ -147,11 +147,39 @@ MenuBarPrivate { property bool altPressedAgain: false property var mnemonicsMap: ({}) + function openMenuAtIndex(index) { + if (openedMenuIndex === index) + return; + + var oldIndex = openedMenuIndex + openedMenuIndex = index + + if (oldIndex !== -1) { + var menu = root.menus[oldIndex] + if (menu.__popupVisible) + menu.__dismissAndDestroy() + } + + if (openedMenuIndex !== -1) { + menu = root.menus[openedMenuIndex] + if (menu.enabled) { + if (menu.__usingDefaultStyle) + menu.style = d.style.menuStyle + + var xPos = row.LayoutMirroring.enabled ? menuItemLoader.width : 0 + menu.__popup(Qt.rect(xPos, menuBarLoader.height - d.heightPadding, 0, 0), 0) + + if (preselectMenuItem) + menu.__currentIndex = 0 + } + } + } + function dismissActiveFocus(event, reason) { if (reason) { altPressedAgain = false altPressed = false - openedMenuIndex = -1 + openMenuAtIndex(-1) root.__contentItem.parent.forceActiveFocus() } else { event.accepted = false @@ -161,7 +189,7 @@ MenuBarPrivate { function maybeOpenFirstMenu(event) { if (altPressed && openedMenuIndex === -1) { preselectMenuItem = true - openedMenuIndex = 0 + openMenuAtIndex(0) } else { event.accepted = false } @@ -198,7 +226,7 @@ MenuBarPrivate { idx-- if (idx >= 0) { d.preselectMenuItem = true - d.openedMenuIndex = idx + d.openMenuAtIndex(idx) } } else { event.accepted = false; @@ -212,7 +240,7 @@ MenuBarPrivate { idx++ if (idx < root.menus.length) { d.preselectMenuItem = true - d.openedMenuIndex = idx + d.openMenuAtIndex(idx) } } else { event.accepted = false; @@ -234,7 +262,7 @@ MenuBarPrivate { Accessible.role: Accessible.MenuItem Accessible.name: StyleHelpers.removeMnemonics(opts.text) - Accessible.onPressAction: d.openedMenuIndex = opts.index + Accessible.onPressAction: d.openMenuAtIndex(opts.index) property var styleData: QtObject { id: opts @@ -255,35 +283,18 @@ MenuBarPrivate { visible: __menuItem.visible Connections { - target: d - onOpenedMenuIndexChanged: { - if (!__menuItem.enabled) - return; + target: __menuItem + onAboutToHide: { if (d.openedMenuIndex === index) { - if (__menuItem.__usingDefaultStyle) - __menuItem.style = d.style.menuStyle - __menuItem.__popup(Qt.rect(row.LayoutMirroring.enabled ? menuItemLoader.width : 0, - menuBarLoader.height - d.heightPadding, 0, 0), 0) - if (d.preselectMenuItem) - __menuItem.__currentIndex = 0 - } else if (__menuItem.__popupVisible) { - __menuItem.__dismissMenu() - __menuItem.__destroyAllMenuPopups() + d.openMenuAtIndex(-1) + menuMouseArea.hoveredItem = null } } } Connections { - target: __menuItem - onPopupVisibleChanged: { - if (!__menuItem.__popupVisible && d.openedMenuIndex === index) - d.openedMenuIndex = -1 - } - } - - Connections { target: __menuItem.__action - onTriggered: d.openedMenuIndex = __menuItemIndex + onTriggered: d.openMenuAtIndex(__menuItemIndex) } Component.onCompleted: { @@ -303,27 +314,23 @@ MenuBarPrivate { anchors.fill: parent hoverEnabled: Settings.hoverEnabled - onPositionChanged: updateCurrentItem(mouse, false) - onPressed: { - if (updateCurrentItem(mouse)) { - d.preselectMenuItem = false - d.openedMenuIndex = currentItem.__menuItemIndex - } - } + onPositionChanged: updateCurrentItem(mouse) + onPressed: updateCurrentItem(mouse) onExited: hoveredItem = null property Item currentItem: null property Item hoveredItem: null function updateCurrentItem(mouse) { var pos = mapToItem(row, mouse.x, mouse.y) - if (!hoveredItem || !hoveredItem.contains(Qt.point(pos.x - currentItem.x, pos.y - currentItem.y))) { + if (pressed || !hoveredItem + || !hoveredItem.contains(Qt.point(pos.x - currentItem.x, pos.y - currentItem.y))) { hoveredItem = row.childAt(pos.x, pos.y) if (!hoveredItem) return false; currentItem = hoveredItem - if (d.openedMenuIndex !== -1) { + if (pressed || d.openedMenuIndex !== -1) { d.preselectMenuItem = false - d.openedMenuIndex = currentItem.__menuItemIndex + d.openMenuAtIndex(currentItem.__menuItemIndex) } } return true; |