app: really do deliver top-level key events

This is a fixup of 0dba85f52e.
See discussion at

https://lists.sr.ht/~eliasnaur/gio-patches/%3C20230201160926.240528-1-alessandro.arzilli%40gmail.com%3E#%3C20230404144001.n2pndo5r5aqk46gq@x1%3E

Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
Elias Naur
2023-04-04 09:03:08 -06:00
parent ad3db5212d
commit c0d3f67b04
+28 -27
View File
@@ -604,8 +604,6 @@ func (w *Window) moveFocus(dir router.FocusDirection, d driver) {
dist := v.Mul(int(w.metric.Dp(scrollABit)))
w.queue.q.ScrollFocus(dist)
}
w.setNextFrame(time.Time{})
w.updateAnimation(d)
}
func (c *callbacks) ClickFocus() {
@@ -914,35 +912,38 @@ func (w *Window) processEvent(d driver, e event.Event) bool {
w.out <- e2
case event.Event:
handled := w.queue.q.Queue(e2)
if e, ok := e.(key.Event); ok && !handled {
if e.State == key.Press {
handled = true
isMobile := runtime.GOOS == "ios" || runtime.GOOS == "android"
switch {
case e.Name == key.NameTab && e.Modifiers == 0:
w.moveFocus(router.FocusForward, d)
case e.Name == key.NameTab && e.Modifiers == key.ModShift:
w.moveFocus(router.FocusBackward, d)
case e.Name == key.NameUpArrow && e.Modifiers == 0 && isMobile:
w.moveFocus(router.FocusUp, d)
case e.Name == key.NameDownArrow && e.Modifiers == 0 && isMobile:
w.moveFocus(router.FocusDown, d)
case e.Name == key.NameLeftArrow && e.Modifiers == 0 && isMobile:
w.moveFocus(router.FocusLeft, d)
case e.Name == key.NameRightArrow && e.Modifiers == 0 && isMobile:
w.moveFocus(router.FocusRight, d)
default:
handled = false
}
}
// As a special case, the top-most input handler receives all unhandled
// events.
if !handled {
handled = w.queue.q.QueueTopmost(e)
}
}
w.updateCursor(d)
if handled {
w.setNextFrame(time.Time{})
w.updateAnimation(d)
} else if e, ok := e.(key.Event); ok && e.State == key.Press {
handled = true
isMobile := runtime.GOOS == "ios" || runtime.GOOS == "android"
switch {
case e.Name == key.NameTab && e.Modifiers == 0:
w.moveFocus(router.FocusForward, d)
case e.Name == key.NameTab && e.Modifiers == key.ModShift:
w.moveFocus(router.FocusBackward, d)
case e.Name == key.NameUpArrow && e.Modifiers == 0 && isMobile:
w.moveFocus(router.FocusUp, d)
case e.Name == key.NameDownArrow && e.Modifiers == 0 && isMobile:
w.moveFocus(router.FocusDown, d)
case e.Name == key.NameLeftArrow && e.Modifiers == 0 && isMobile:
w.moveFocus(router.FocusLeft, d)
case e.Name == key.NameRightArrow && e.Modifiers == 0 && isMobile:
w.moveFocus(router.FocusRight, d)
default:
handled = false
}
}
// As a sepcial case, the top-most input handler receives all unhandled
// events.
if e, ok := e.(key.Event); ok && !handled {
handled = w.queue.q.QueueTopmost(e)
}
w.updateCursor(d)
return handled
}
return true