@@ -110,6 +110,8 @@ UbuntuShape {
110110 } else {
111111 hoveredItem = null;
112112 }
113+
114+ submenuHoverTimer.stop();
113115 }
114116
115117 onSelect: {
@@ -210,6 +212,12 @@ UbuntuShape {
210212 contentHeight: menuColumn.height
211213 interactive: height < contentHeight
212214
215+ Timer {
216+ id: submenuHoverTimer
217+ interval: 225 // GTK MENU_POPUP_DELAY, Qt SH_Menu_SubMenuPopupDelay in QCommonStyle is 256
218+ onTriggered: d.currentItem.item.trigger();
219+ }
220+
213221 MouseArea {
214222 anchors.fill: parent
215223 hoverEnabled: true
@@ -223,12 +231,17 @@ UbuntuShape {
223231
224232 if (!d.hoveredItem || !d.currentItem ||
225233 !d.hoveredItem.contains(Qt.point(pos.x - d.currentItem.x, pos.y - d.currentItem.y))) {
234+ submenuHoverTimer.stop();
235+
226236 d.hoveredItem = menuColumn.childAt(pos.x, pos.y)
227237 if (!d.hoveredItem || !d.hoveredItem.enabled)
228− return false;
238+ return;
229239 d.currentItem = d.hoveredItem;
240+
241+ if (!d.currentItem.__isSeparator && d.currentItem.item.hasSubmenu && d.currentItem.item.enabled) {
242+ submenuHoverTimer.start();
243+ }
230244 }
231− return true;
232245 }
233246 }
234247
@@ -283,6 +296,8 @@ UbuntuShape {
283296 width: MathUtils.clamp(implicitWidth, d.__minimumWidth, d.__maximumWidth)
284297
285298 action.onTriggered: {
299+ submenuHoverTimer.stop();
300+
286301 d.currentItem = loader;
287302
288303 if (hasSubmenu) {