diff --git a/frappe/public/js/frappe/ui/menu.js b/frappe/public/js/frappe/ui/menu.js index d918f2740b..5a306d5675 100644 --- a/frappe/public/js/frappe/ui/menu.js +++ b/frappe/public/js/frappe/ui/menu.js @@ -167,8 +167,23 @@ frappe.ui.menu = class ContextMenu { if (item.items) { let nested_menu = this.handle_nested_menu(item_wrapper, item); this.nested_menus.push(nested_menu); + me.handle_submenu_hover(item_wrapper); } } + handle_submenu_hover(item_wrapper) { + const me = this; + + $(item_wrapper).on("mouseenter", function (event) { + me.nested_menus.forEach((menu) => { + if (menu.parent.get(0) === this) { + me.current_menu = menu; + menu.show(event); + } else { + menu.hide(); + } + }); + }); + } handle_nested_menu(item_wrapper, item) { return frappe.ui.create_menu({ @@ -234,6 +249,11 @@ frappe.ui.menu = class ContextMenu { hide() { this.template.css("display", "none"); this.visible = false; + if (this.nested_menus && this.nested_menus.length) { + this.nested_menus.forEach((menu) => { + menu.hide(); + }); + } } mouseX(evt) { if (evt.pageX) {