Intercept mouse/key events when a context menu is open

Closes #180.
This commit is contained in:
Fingercomp 2025-09-05 18:09:54 +03:00
parent 479d13cc0c
commit cbc80baf71
No known key found for this signature in database
GPG Key ID: BBC71CEE45D86E37

View File

@ -25,11 +25,16 @@ class ContextMenus extends Widget {
override def receiveAllMouseEvents: Boolean = true
eventHandlers += {
case KeyEvent(KeyEvent.State.Press, Keyboard.KEY_ESCAPE, _) =>
case event @ KeyEvent(KeyEvent.State.Press, Keyboard.KEY_ESCAPE, _) if menus.nonEmpty =>
closeAll()
event.consume()
case MouseEvent(MouseEvent.State.Pressed, _) =>
if (!menus.map(_.bounds).exists(_.contains(UiHandler.mousePosition))) closeAll()
case event @ MouseEvent(MouseEvent.State.Pressed, _) if menus.nonEmpty =>
if (!menus.exists(_.bounds.contains(UiHandler.mousePosition))) {
closeAll()
}
event.consume()
}
def open(menu: ContextMenu,