From e862761e17affb4ad7642e9d65ce89a659e79e13 Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Tue, 2 Jul 2019 19:33:21 +0200 Subject: [PATCH] ui/input: keep default focus on earliest focusable Signed-off-by: Elias Naur --- ui/input/key.go | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/ui/input/key.go b/ui/input/key.go index 9ef87745..947def1e 100644 --- a/ui/input/key.go +++ b/ui/input/key.go @@ -103,7 +103,8 @@ loop: default: newPri = priDefault } - if newPri >= pri { + // Switch focus if higher priority or if focus requested. + if newPri.replaces(pri) { k, pri = op.Key, newPri } h, ok := q.handlers[op.Key] @@ -119,7 +120,7 @@ loop: case ops.TypePush: newK, newPri, h := q.resolveFocus(events) hide = hide || h - if newPri >= pri { + if newPri.replaces(pri) { k, pri = newK, newPri } case ops.TypePop: @@ -128,3 +129,8 @@ loop: } return k, pri, hide } + +func (p listenerPriority) replaces(p2 listenerPriority) bool { + // Favor earliest default focus or latest requested focus. + return p > p2 || p == p2 && p == priNewFocus +}