diff --git a/widget/enum.go b/widget/enum.go index 883d0c26..1c9c509d 100644 --- a/widget/enum.go +++ b/widget/enum.go @@ -10,8 +10,9 @@ import ( ) type Enum struct { - Value string - Hovered string + Value string + hovered string + hovering bool changed bool @@ -36,6 +37,11 @@ func (e *Enum) Changed() bool { return changed } +// Hovered returns the key that is highlighted, or false if none are. +func (e *Enum) Hovered() (string, bool) { + return e.hovered, e.hovering +} + // Layout adds the event handler for key. func (e *Enum) Layout(gtx layout.Context, key string) layout.Dimensions { defer op.Save(gtx.Ops).Load() @@ -57,11 +63,12 @@ func (e *Enum) Layout(gtx layout.Context, key string) layout.Dimensions { } } } - if e.Hovered == key { - e.Hovered = "" + if e.hovering && e.hovered == key { + e.hovering = false } if clk.Hovered() { - e.Hovered = key + e.hovered = key + e.hovering = true } clk.Add(gtx.Ops) } diff --git a/widget/material/radiobutton.go b/widget/material/radiobutton.go index 24e9537d..96544a6f 100644 --- a/widget/material/radiobutton.go +++ b/widget/material/radiobutton.go @@ -36,7 +36,8 @@ func RadioButton(th *Theme, group *widget.Enum, key, label string) RadioButtonSt // Layout updates enum and displays the radio button. func (r RadioButtonStyle) Layout(gtx layout.Context) layout.Dimensions { - dims := r.layout(gtx, r.Group.Value == r.Key, r.Group.Hovered == r.Key) + hovered, hovering := r.Group.Hovered() + dims := r.layout(gtx, r.Group.Value == r.Key, hovering && hovered == r.Key) gtx.Constraints.Min = dims.Size r.Group.Layout(gtx, r.Key) return dims