summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorDrew DeVault <sir@cmpwn.com>2019-03-21 21:34:12 -0400
committerDrew DeVault <sir@cmpwn.com>2019-03-21 21:34:12 -0400
commite59122150932ae2cad32ab5881ed40ef0d722812 (patch)
tree036d3bc807bc6bbad4bda301c6de6d5897f9f976
parenta602891768d0272c8688731752f491eb92668d7d (diff)
downloadaerc-e59122150932ae2cad32ab5881ed40ef0d722812.tar.gz
Expire status errors on input
-rw-r--r--widgets/aerc.go9
-rw-r--r--widgets/status.go4
-rw-r--r--widgets/terminal.go14
3 files changed, 21 insertions, 6 deletions
diff --git a/widgets/aerc.go b/widgets/aerc.go
index bdf94bd..92fc06e 100644
--- a/widgets/aerc.go
+++ b/widgets/aerc.go
@@ -124,6 +124,7 @@ func (aerc *Aerc) Event(event tcell.Event) bool {
 
 	switch event := event.(type) {
 	case *tcell.EventKey:
+		aerc.statusline.Expire()
 		aerc.pendingKeys = append(aerc.pendingKeys, config.KeyStroke{
 			Key:  event.Key(),
 			Rune: event.Rune(),
@@ -231,8 +232,16 @@ func (aerc *Aerc) focus(item libui.Interactive) {
 		aerc.focused.Focus(false)
 	}
 	aerc.focused = item
+	interactive, ok := aerc.tabs.Tabs[aerc.tabs.Selected].Content.(ui.Interactive)
 	if item != nil {
 		item.Focus(true)
+		if ok {
+			interactive.Focus(false)
+		}
+	} else {
+		if ok {
+			interactive.Focus(true)
+		}
 	}
 }
 
diff --git a/widgets/status.go b/widgets/status.go
index b7d9490..7a746fa 100644
--- a/widgets/status.go
+++ b/widgets/status.go
@@ -81,6 +81,10 @@ func (status *StatusLine) Push(text string, expiry time.Duration) *StatusMessage
 	return msg
 }
 
+func (status *StatusLine) Expire() {
+	status.stack = nil
+}
+
 func (msg *StatusMessage) Color(bg tcell.Color, fg tcell.Color) {
 	msg.bg = bg
 	msg.fg = fg
diff --git a/widgets/terminal.go b/widgets/terminal.go
index 4a339cc..e7286f9 100644
--- a/widgets/terminal.go
+++ b/widgets/terminal.go
@@ -310,12 +310,14 @@ func (term *Terminal) Draw(ctx *ui.Context) {
 
 func (term *Terminal) Focus(focus bool) {
 	term.focus = focus
-	if !term.focus {
-		term.ctx.HideCursor()
-	} else {
-		state := term.vterm.ObtainState()
-		row, col := state.GetCursorPos()
-		term.ctx.SetCursor(col, row)
+	if term.ctx != nil {
+		if !term.focus {
+			term.ctx.HideCursor()
+		} else {
+			state := term.vterm.ObtainState()
+			row, col := state.GetCursorPos()
+			term.ctx.SetCursor(col, row)
+		}
 	}
 }