Fix menus popping back up when clicking on a menu bar item / combo box with the respective menu open
This commit is contained in:
parent
10cd3fb8c4
commit
4fb22e821a
2 changed files with 34 additions and 17 deletions
|
@ -39,6 +39,7 @@ gui.MenuItem = {
|
||||||
m._menu = nil;
|
m._menu = nil;
|
||||||
m._parent_menu = nil;
|
m._parent_menu = nil;
|
||||||
m._is_menubar_item = 0;
|
m._is_menubar_item = 0;
|
||||||
|
m._mouseOver = 0;
|
||||||
|
|
||||||
m._setView(style.createWidget(parent, cfg.get("type", "menu-item"), cfg));
|
m._setView(style.createWidget(parent, cfg.get("type", "menu-item"), cfg));
|
||||||
|
|
||||||
|
@ -70,12 +71,18 @@ gui.MenuItem = {
|
||||||
}
|
}
|
||||||
me._unsetOthersHovered();
|
me._unsetOthersHovered();
|
||||||
if (me._is_menubar_item and me._enabled) {
|
if (me._is_menubar_item and me._enabled) {
|
||||||
me._hovered = 1;
|
if (!me._menu.isVisible()) {
|
||||||
me.update();
|
me._hovered = 1;
|
||||||
var x = e.screenX - e.localX;
|
me.update();
|
||||||
var y = e.screenY - e.localY;
|
var x = e.screenX - e.localX;
|
||||||
me._showMenu(x, y);
|
var y = e.screenY - e.localY;
|
||||||
} elsif (me._parent_menu != nil) {
|
me._showMenu(x, y);
|
||||||
|
} else {
|
||||||
|
me._hovered = 0;
|
||||||
|
me.update();
|
||||||
|
me._hideMenu();
|
||||||
|
}
|
||||||
|
} elsif (me._parent_menu != nil and me._menu == nil) {
|
||||||
me._hovered = 0;
|
me._hovered = 0;
|
||||||
me.update();
|
me.update();
|
||||||
me._parent_menu.hide();
|
me._parent_menu.hide();
|
||||||
|
@ -99,6 +106,7 @@ gui.MenuItem = {
|
||||||
any_hovered |= me._parent_menu._layout.itemAt(i)._hovered;
|
any_hovered |= me._parent_menu._layout.itemAt(i)._hovered;
|
||||||
}
|
}
|
||||||
me._unsetOthersHovered();
|
me._unsetOthersHovered();
|
||||||
|
me._mouseOver = 1;
|
||||||
if ((!me._is_menubar_item or any_hovered) and me._enabled) {
|
if ((!me._is_menubar_item or any_hovered) and me._enabled) {
|
||||||
me._hovered = 1;
|
me._hovered = 1;
|
||||||
me.update();
|
me.update();
|
||||||
|
@ -109,6 +117,7 @@ gui.MenuItem = {
|
||||||
},
|
},
|
||||||
|
|
||||||
onMouseLeave: func(e) {
|
onMouseLeave: func(e) {
|
||||||
|
me._mouseOver = 0;
|
||||||
if (me._menu == nil) {
|
if (me._menu == nil) {
|
||||||
me._hovered = 0;
|
me._hovered = 0;
|
||||||
}
|
}
|
||||||
|
@ -132,18 +141,14 @@ gui.MenuItem = {
|
||||||
} elsif (me._menu_position == gui.MenuItem.MenuPosition.Left) {
|
} elsif (me._menu_position == gui.MenuItem.MenuPosition.Left) {
|
||||||
pos = [x - me._menu.getSize()[0], y];
|
pos = [x - me._menu.getSize()[0], y];
|
||||||
}
|
}
|
||||||
me._menu.setPosition(pos[0], pos[1]);
|
me._menu.show(pos[0], pos[1]);
|
||||||
me._menu.show();
|
|
||||||
}
|
}
|
||||||
me._hovered = 1;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_hideMenu: func {
|
_hideMenu: func {
|
||||||
if (me._menu) {
|
if (me._menu) {
|
||||||
me._menu.clearFocus();
|
me._menu.hide(1);
|
||||||
me._menu.hide();
|
|
||||||
}
|
}
|
||||||
me._hovered = 0;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
setEnabled: func(enabled = 1) {
|
setEnabled: func(enabled = 1) {
|
||||||
|
@ -378,12 +383,22 @@ gui.Menu = {
|
||||||
append(gui.open_popups, me);
|
append(gui.open_popups, me);
|
||||||
},
|
},
|
||||||
|
|
||||||
hide: func {
|
# @description Hide the menu (force should only be set to 1 from within the click handler of menu items)
|
||||||
|
hide: func(force=0) {
|
||||||
if (me._parent_item != nil) {
|
if (me._parent_item != nil) {
|
||||||
me._parent_item._hovered = 0;
|
if (
|
||||||
me._parent_item.update();
|
force or
|
||||||
|
me._parent_item._parent_menu == nil or
|
||||||
|
me._parent_item._parent_menu._view._root._node.getValue("id") != "menu-bar" or
|
||||||
|
me._parent_item._mouseOver == 0
|
||||||
|
) {
|
||||||
|
me._parent_item._hovered = 0;
|
||||||
|
me._parent_item.update();
|
||||||
|
call(me.parents[1].hide, [], me);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
call(me.parents[1].hide, [], me);
|
||||||
}
|
}
|
||||||
call(me.parents[1].hide, [], me);
|
|
||||||
},
|
},
|
||||||
|
|
||||||
# @description Destructor
|
# @description Destructor
|
||||||
|
|
|
@ -115,7 +115,9 @@ gui.widgets.ComboBox = {
|
||||||
el.addEventListener("click", func(e) {
|
el.addEventListener("click", func(e) {
|
||||||
if (me._enabled) {
|
if (me._enabled) {
|
||||||
me.setDown(!me._down);
|
me.setDown(!me._down);
|
||||||
me._openMenu(e.screenX - e.localX, e.screenY - e.localY + me._size[1]);
|
if (me._down) {
|
||||||
|
me._openMenu(e.screenX - e.localX, e.screenY - e.localY + me._size[1]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
Loading…
Add table
Reference in a new issue