Textinput can request keyboard exclusively.

This commit is contained in:
Jakub Sobon 2020-12-27 02:19:38 -05:00
parent 42652429b4
commit 912de88b90
No known key found for this signature in database
GPG Key ID: F2451A77FB05D3B7
4 changed files with 33 additions and 5 deletions

View File

@ -54,6 +54,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- the `button` widget allows specifying separate fill color values for each of
its main states (up, focused and up, down).
#### Updates to the `textinput` widget
- the `textinput` widget can now be configured to request keyboard events
exclusively when focused.
## [0.13.0] - 17-Nov-2020
### Added

View File

@ -59,9 +59,10 @@ type options struct {
placeHolder string
hideTextWith rune
filter FilterFn
onSubmit SubmitFn
clearOnSubmit bool
filter FilterFn
onSubmit SubmitFn
clearOnSubmit bool
exclusiveKeyboardOnFocus bool
}
// validate validates the provided options.
@ -263,3 +264,11 @@ func ClearOnSubmit() Option {
opts.clearOnSubmit = true
})
}
// ExclusiveKeyboardOnFocus when set ensures that when this widget is focused,
// no other widget receives any keyboard events.
func ExclusiveKeyboardOnFocus() Option {
return option(func(opts *options) {
opts.exclusiveKeyboardOnFocus = true
})
}

View File

@ -326,8 +326,9 @@ func (ti *TextInput) Options() widgetapi.Options {
maxWidth,
needHeight,
},
WantKeyboard: widgetapi.KeyScopeFocused,
WantMouse: widgetapi.MouseScopeWidget,
WantKeyboard: widgetapi.KeyScopeFocused,
WantMouse: widgetapi.MouseScopeWidget,
ExclusiveKeyboardOnFocus: ti.opts.exclusiveKeyboardOnFocus,
}
}

View File

@ -1704,6 +1704,19 @@ func TestOptions(t *testing.T) {
WantMouse: widgetapi.MouseScopeWidget,
},
},
{
desc: "requests ExclusiveKeyboardOnFocus",
opts: []Option{
ExclusiveKeyboardOnFocus(),
},
want: widgetapi.Options{
MinimumSize: image.Point{4, 1},
MaximumSize: image.Point{0, 1},
WantKeyboard: widgetapi.KeyScopeFocused,
WantMouse: widgetapi.MouseScopeWidget,
ExclusiveKeyboardOnFocus: true,
},
},
}
for _, tc := range tests {