widget: add a Focus() method to widget.Clickable

Signed-off-by: Larry Clapp <larry@theclapp.org>
This commit is contained in:
Larry Clapp
2023-01-16 12:27:25 -05:00
committed by Elias Naur
parent af7afea5a3
commit e0cf570339
+12 -2
View File
@@ -25,8 +25,9 @@ type Clickable struct {
prevClicks int
history []Press
keyTag struct{}
focused bool
keyTag struct{}
requestFocus bool
focused bool
}
// Click represents a click.
@@ -80,6 +81,11 @@ func (b *Clickable) Pressed() bool {
return b.click.Pressed()
}
// Focus requests the input focus for the element.
func (b *Clickable) Focus() {
b.requestFocus = true
}
// Focused reports whether b has focus.
func (b *Clickable) Focused() bool {
return b.focused
@@ -115,6 +121,10 @@ func (b *Clickable) Layout(gtx layout.Context, w layout.Widget) layout.Dimension
keys = ""
}
key.InputOp{Tag: &b.keyTag, Keys: keys}.Add(gtx.Ops)
if b.requestFocus {
key.FocusOp{Tag: &b.keyTag}.Add(gtx.Ops)
b.requestFocus = false
}
} else {
b.focused = false
}