summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGabriel de Dietrich <gabriel.dedietrich@digia.com>2013-03-01 21:07:44 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-03-04 12:47:36 +0100
commita238a5ad5afabbae6682b0f376f4e39611108bdf (patch)
treeef089cf8807e56dc0de02728b6fc8686246139aa /src
parent658ea07229c01405de473265f293e7d39e2b348c (diff)
downloadqtquickcontrols-a238a5ad5afabbae6682b0f376f4e39611108bdf.tar.gz
MenuBar: Fix mouse interaction
Used the same pattern as earlier with Menu. Change-Id: Id7a2d791516ba6d827e90c3b3e11f97dd326ccd5 Reviewed-by: J-P Nurmi <jpnurmi@digia.com>
Diffstat (limited to 'src')
-rw-r--r--src/controls/Menu.qml2
-rw-r--r--src/controls/MenuBar.qml42
-rw-r--r--src/controls/qtmenupopupwindow.cpp14
-rw-r--r--src/styles/Desktop/MenuBarStyle.qml2
4 files changed, 32 insertions, 28 deletions
diff --git a/src/controls/Menu.qml b/src/controls/Menu.qml
index 362fe03c..9399f889 100644
--- a/src/controls/Menu.qml
+++ b/src/controls/Menu.qml
@@ -219,7 +219,7 @@ MenuPrivate {
currentItem = column.childAt(pos.x, pos.y)
if (currentItem) {
root.__currentIndex = currentItem.menuItemIndex
- if (currentItem.hasSubmenu && !currentItem.menuItem.popupVisible)
+ if (currentItem.hasSubmenu && !currentItem.menuItem.__popupVisible)
currentItem.showSubMenu(false)
} else {
root.__currentIndex = -1
diff --git a/src/controls/MenuBar.qml b/src/controls/MenuBar.qml
index 36c111fd..65cbe1fd 100644
--- a/src/controls/MenuBar.qml
+++ b/src/controls/MenuBar.qml
@@ -140,6 +140,27 @@ MenuBarPrivate {
anchors.fill: parent
hoverEnabled: true
+ onPositionChanged: updateCurrentItem(mouse)
+ onPressed: {
+ menuBarLoader.preselectMenuItem = false
+ menuBarLoader.openedMenuIndex = currentItem.menuItemIndex
+ }
+
+ property Item currentItem: null
+ function updateCurrentItem(mouse) {
+ var pos = mapToItem(row, mouse.x, mouse.y)
+ if (!currentItem || !currentItem.contains(Qt.point(pos.x - currentItem.x, pos.y - currentItem.y))) {
+ var newCurrentItem = row.childAt(pos.x, pos.y)
+ if (!newCurrentItem)
+ return;
+ currentItem = newCurrentItem
+ if (menuBarLoader.openedMenuIndex !== -1) {
+ menuBarLoader.preselectMenuItem = false
+ menuBarLoader.openedMenuIndex = currentItem.menuItemIndex
+ }
+ }
+ }
+
Row {
id: row
@@ -150,27 +171,10 @@ MenuBarPrivate {
id: menuItemLoader
property var menuItem: modelData
- property bool selected: menuItem.__popupVisible || itemMouseArea.pressed || menuBarLoader.openedMenuIndex === index
+ property bool selected: menuItem.__popupVisible || menuBarLoader.openedMenuIndex === index
sourceComponent: menuBarLoader.menuItemStyle
-
- MouseArea {
- id: itemMouseArea
- anchors.fill:parent
- hoverEnabled: true
-
- onClicked: {
- menuBarLoader.preselectMenuItem = false
- menuBarLoader.openedMenuIndex = index
- }
- onPositionChanged: {
- if ((pressed || menuMouseArea.pressed || menuBarLoader.openedMenuIndex !== -1)
- && menuBarLoader.openedMenuIndex !== index) {
- menuBarLoader.openedMenuIndex = index
- menuBarLoader.preselectMenuItem = false
- }
- }
- }
+ property int menuItemIndex: index
Connections {
target: menuBarLoader
diff --git a/src/controls/qtmenupopupwindow.cpp b/src/controls/qtmenupopupwindow.cpp
index dcb15d22..f690fa91 100644
--- a/src/controls/qtmenupopupwindow.cpp
+++ b/src/controls/qtmenupopupwindow.cpp
@@ -134,14 +134,14 @@ void QtMenuPopupWindow::mouseReleaseEvent(QMouseEvent *e)
void QtMenuPopupWindow::forwardEventToTransientParent(QMouseEvent *e)
{
- QWindow *parentMenuWindow = qobject_cast<QtMenuPopupWindow*>(transientParent());
- if (!parentMenuWindow) {
- if (m_mouseMoved && e->type() == QEvent::MouseButtonRelease)
- dismissMenu();
- } else {
- QPoint parentPos = parentMenuWindow->mapFromGlobal(mapToGlobal(e->pos()));
+ if (!qobject_cast<QtMenuPopupWindow*>(transientParent())
+ && m_mouseMoved && e->type() == QEvent::MouseButtonRelease) {
+ // Clicked outside any menu
+ dismissMenu();
+ } else if (transientParent()) {
+ QPoint parentPos = transientParent()->mapFromGlobal(mapToGlobal(e->pos()));
QMouseEvent pe = QMouseEvent(e->type(), parentPos, e->button(), e->buttons(), e->modifiers());
- QGuiApplication::sendEvent(parentMenuWindow, &pe);
+ QGuiApplication::sendEvent(transientParent(), &pe);
}
}
diff --git a/src/styles/Desktop/MenuBarStyle.qml b/src/styles/Desktop/MenuBarStyle.qml
index 6b11ef30..7d044166 100644
--- a/src/styles/Desktop/MenuBarStyle.qml
+++ b/src/styles/Desktop/MenuBarStyle.qml
@@ -47,7 +47,7 @@ import QtQuick.Controls.Private 1.0
Style {
property Component frame: StyleItem {
elementType: "menubar"
- width: control.width
+ width: control.__contentItem.width
height: parent ? parent.contentHeight : 0
// + 2 * (pixelMetric("menuvmargin") + pixelMetric("menupanelwidth"))
}