M io/input/router.go => io/input/router.go +5 -5
@@ 171,22 171,22 @@ func (q *Router) Source() Source {
// Execute a command.
func (s Source) Execute(c Command) {
- if !s.Enabled() {
+ if !s.enabled() {
return
}
s.r.execute(c)
}
-// Enabled reports whether the source is enabled. Only enabled
+// enabled reports whether the source is enabled. Only enabled
// Sources deliver events and respond to commands.
-func (s Source) Enabled() bool {
+func (s Source) enabled() bool {
return s.r != nil
}
// Focused reports whether tag is focused, according to the most recent
// [key.FocusEvent] delivered.
func (s Source) Focused(tag event.Tag) bool {
- if !s.Enabled() {
+ if !s.enabled() {
return false
}
return s.r.state().keyState.focus == tag
@@ 194,7 194,7 @@ func (s Source) Focused(tag event.Tag) bool {
// Event returns the next event that matches at least one of filters.
func (s Source) Event(filters ...event.Filter) (event.Event, bool) {
- if !s.Enabled() {
+ if !s.enabled() {
return nil, false
}
return s.r.Event(filters...)
M layout/context.go => layout/context.go +17 -3
@@ 5,6 5,7 @@ package layout
import (
"time"
+ "gioui.org/io/event"
"gioui.org/io/input"
"gioui.org/io/system"
"gioui.org/op"
@@ 28,6 29,7 @@ type Context struct {
// Interested users must look up and populate these values manually.
Locale system.Locale
+ disabled bool
input.Source
*op.Ops
}
@@ 42,9 44,21 @@ func (c Context) Sp(v unit.Sp) int {
return c.Metric.Sp(v)
}
-// Disabled returns a copy of this context with a disabled Source,
-// blocking widgets from changing its state and receiving events.
+func (c Context) Event(filters ...event.Filter) (event.Event, bool) {
+ if c.disabled {
+ return nil, false
+ }
+ return c.Source.Event(filters...)
+}
+
+// Enabled reports whether this context is enabled. Disabled contexts
+// don't report events.
+func (c Context) Enabled() bool {
+ return !c.disabled
+}
+
+// Disabled returns a copy of this context that don't deliver any events.
func (c Context) Disabled() Context {
- c.Source = input.Source{}
+ c.disabled = true
return c
}