summaryrefslogtreecommitdiff
path: root/lib/ui/textinput.go
diff options
context:
space:
mode:
Diffstat (limited to 'lib/ui/textinput.go')
-rw-r--r--lib/ui/textinput.go14
1 files changed, 14 insertions, 0 deletions
diff --git a/lib/ui/textinput.go b/lib/ui/textinput.go
index aa15300..0a331dc 100644
--- a/lib/ui/textinput.go
+++ b/lib/ui/textinput.go
@@ -26,6 +26,7 @@ type TextInput struct {
scroll int
text []rune
change []func(ti *TextInput)
+ focusLost []func(ti *TextInput)
tabcomplete func(s string) ([]string, string)
completions []string
prefix string
@@ -157,6 +158,9 @@ func (ti *TextInput) MouseEvent(localX int, localY int, event tcell.Event) {
}
func (ti *TextInput) Focus(focus bool) {
+ if ti.focus && !focus {
+ ti.onFocusLost()
+ }
ti.focus = focus
if focus && ti.ctx != nil {
cells := runewidth.StringWidth(string(ti.text[:ti.index]))
@@ -274,6 +278,12 @@ func (ti *TextInput) onChange() {
}
}
+func (ti *TextInput) onFocusLost() {
+ for _, focusLost := range ti.focusLost {
+ focusLost(ti)
+ }
+}
+
func (ti *TextInput) updateCompletions() {
if ti.tabcomplete == nil {
// no completer
@@ -304,6 +314,10 @@ func (ti *TextInput) OnChange(onChange func(ti *TextInput)) {
ti.change = append(ti.change, onChange)
}
+func (ti *TextInput) OnFocusLost(onFocusLost func(ti *TextInput)) {
+ ti.focusLost = append(ti.focusLost, onFocusLost)
+}
+
func (ti *TextInput) Event(event tcell.Event) bool {
switch event := event.(type) {
case *tcell.EventKey: