diff --git a/src/controls/Menu.qml b/src/controls/Menu.qml
index 362fe03c71163367020fdf91cb59369bb856779b..9399f88935edab7d9094c2b48558a51e7c8f7040 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 36c111fd799eb9d9b3503d5bbe8fe6b3aa5d77e7..65cbe1fd2f0924d42b7987dbdef941692f8c8435 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 dcb15d22cfbb3f6bd48cec0b04348b68131eb24d..f690fa91924b2b7908c91af68c7bd4c504437050 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 6b11ef30364518d231ade8166157189508987c56..7d0441662b539edd19e0337d13d6e93c5e69f859 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"))
     }