mirror of
https://git.sr.ht/~eliasnaur/gio
synced 2026-07-07 10:25:37 +00:00
app,io/router: map Androids' DPAD_CENTER to a click
Mapping it to key.NameReturn confuses widgets such as Editor that treats clicks separate from return key presses. Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
+3
-1
@@ -903,7 +903,7 @@ func convertKeyCode(code C.jint) (string, bool) {
|
|||||||
n = key.NameDeleteBackward
|
n = key.NameDeleteBackward
|
||||||
case C.AKEYCODE_NUMPAD_ENTER:
|
case C.AKEYCODE_NUMPAD_ENTER:
|
||||||
n = key.NameEnter
|
n = key.NameEnter
|
||||||
case C.AKEYCODE_ENTER, C.AKEYCODE_DPAD_CENTER:
|
case C.AKEYCODE_ENTER:
|
||||||
n = key.NameReturn
|
n = key.NameReturn
|
||||||
case C.AKEYCODE_CTRL_LEFT, C.AKEYCODE_CTRL_RIGHT:
|
case C.AKEYCODE_CTRL_LEFT, C.AKEYCODE_CTRL_RIGHT:
|
||||||
n = key.NameCtrl
|
n = key.NameCtrl
|
||||||
@@ -932,6 +932,8 @@ func Java_org_gioui_GioView_onKeyEvent(env *C.JNIEnv, class C.jclass, handle C.j
|
|||||||
w.callbacks.MoveFocus(router.FocusLeft)
|
w.callbacks.MoveFocus(router.FocusLeft)
|
||||||
case C.AKEYCODE_DPAD_RIGHT:
|
case C.AKEYCODE_DPAD_RIGHT:
|
||||||
w.callbacks.MoveFocus(router.FocusRight)
|
w.callbacks.MoveFocus(router.FocusRight)
|
||||||
|
case C.AKEYCODE_DPAD_CENTER:
|
||||||
|
w.callbacks.ClickFocus()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if n, ok := convertKeyCode(keyCode); ok {
|
if n, ok := convertKeyCode(keyCode); ok {
|
||||||
|
|||||||
@@ -510,6 +510,12 @@ func (c *callbacks) MoveFocus(dir router.FocusDirection) {
|
|||||||
c.w.updateAnimation(c.d)
|
c.w.updateAnimation(c.d)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *callbacks) ClickFocus() {
|
||||||
|
c.w.queue.q.ClickFocus()
|
||||||
|
c.w.setNextFrame(time.Time{})
|
||||||
|
c.w.updateAnimation(c.d)
|
||||||
|
}
|
||||||
|
|
||||||
func (e *editorState) Replace(r key.Range, text string) {
|
func (e *editorState) Replace(r key.Range, text string) {
|
||||||
if r.Start > r.End {
|
if r.Start > r.End {
|
||||||
r.Start, r.End = r.End, r.Start
|
r.Start, r.End = r.End, r.Start
|
||||||
|
|||||||
@@ -253,6 +253,11 @@ func (q *keyQueue) Push(e event.Event, events *handlerEvents) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (q *keyQueue) BoundsFor(t event.Tag) f32.Rectangle {
|
||||||
|
order := q.handlers[t].dirOrder
|
||||||
|
return q.dirOrder[order].bounds
|
||||||
|
}
|
||||||
|
|
||||||
func (q *keyQueue) setFocus(focus event.Tag, events *handlerEvents) {
|
func (q *keyQueue) setFocus(focus event.Tag, events *handlerEvents) {
|
||||||
if focus != nil {
|
if focus != nil {
|
||||||
if _, exists := q.handlers[focus]; !exists {
|
if _, exists := q.handlers[focus]; !exists {
|
||||||
|
|||||||
@@ -152,6 +152,23 @@ func (q *Router) MoveFocus(dir FocusDirection) {
|
|||||||
q.key.queue.MoveFocus(dir, &q.handlers)
|
q.key.queue.MoveFocus(dir, &q.handlers)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (q *Router) ClickFocus() {
|
||||||
|
focus := q.key.queue.focus
|
||||||
|
if focus == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
bounds := q.key.queue.BoundsFor(focus)
|
||||||
|
center := bounds.Max.Add(bounds.Min).Mul(.5)
|
||||||
|
e := pointer.Event{
|
||||||
|
Position: center,
|
||||||
|
Source: pointer.Touch,
|
||||||
|
}
|
||||||
|
e.Type = pointer.Press
|
||||||
|
q.pointer.queue.Push(e, &q.handlers)
|
||||||
|
e.Type = pointer.Release
|
||||||
|
q.pointer.queue.Push(e, &q.handlers)
|
||||||
|
}
|
||||||
|
|
||||||
// TextInputState returns the input state from the most recent
|
// TextInputState returns the input state from the most recent
|
||||||
// call to Frame.
|
// call to Frame.
|
||||||
func (q *Router) TextInputState() TextInputState {
|
func (q *Router) TextInputState() TextInputState {
|
||||||
|
|||||||
Reference in New Issue
Block a user