compose: make headerEditor focusing more reliable
Focusing header editors was hardcoded as integers which only worked with the default ui. If a user changed the UI to, for example, put CC as a field below "to", FocusSubject would focus the CC field instead of the subject. This commit reuses and modifies the function FocusEditor to generalize the focusing of header editors - which can now be called by name via FocusEditor(name string) Signed-off-by: Tim Culverhouse <tim@timculverhouse.com> Acked-by: Robin Jarry <robin@jarry.cc>
This commit is contained in:
parent
93c160ab66
commit
e56648029f
3 changed files with 10 additions and 22 deletions
|
@ -94,7 +94,7 @@ func (forward) Execute(aerc *widgets.Aerc, args []string) error {
|
||||||
|
|
||||||
tab := aerc.NewTab(composer, subject)
|
tab := aerc.NewTab(composer, subject)
|
||||||
if !h.Has("to") {
|
if !h.Has("to") {
|
||||||
composer.FocusRecipient()
|
composer.FocusEditor("to")
|
||||||
} else {
|
} else {
|
||||||
composer.FocusTerminal()
|
composer.FocusTerminal()
|
||||||
}
|
}
|
||||||
|
|
|
@ -575,14 +575,14 @@ func (aerc *Aerc) Mailto(addr *url.URL) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
composer.SetContents(strings.NewReader(body))
|
composer.SetContents(strings.NewReader(body))
|
||||||
composer.FocusSubject()
|
composer.FocusEditor("subject")
|
||||||
title := "New email"
|
title := "New email"
|
||||||
if subject != "" {
|
if subject != "" {
|
||||||
title = subject
|
title = subject
|
||||||
composer.FocusTerminal()
|
composer.FocusTerminal()
|
||||||
}
|
}
|
||||||
if to == nil {
|
if to == nil {
|
||||||
composer.FocusRecipient()
|
composer.FocusEditor("to")
|
||||||
}
|
}
|
||||||
tab := aerc.NewTab(composer, title)
|
tab := aerc.NewTab(composer, title)
|
||||||
composer.OnHeaderChange("Subject", func(subject string) {
|
composer.OnHeaderChange("Subject", func(subject string) {
|
||||||
|
|
|
@ -294,20 +294,6 @@ func (c *Composer) FocusTerminal() *Composer {
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Composer) FocusSubject() *Composer {
|
|
||||||
c.focusable[c.focused].Focus(false)
|
|
||||||
c.focused = 2
|
|
||||||
c.focusable[c.focused].Focus(true)
|
|
||||||
return c
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Composer) FocusRecipient() *Composer {
|
|
||||||
c.focusable[c.focused].Focus(false)
|
|
||||||
c.focused = 1
|
|
||||||
c.focusable[c.focused].Focus(true)
|
|
||||||
return c
|
|
||||||
}
|
|
||||||
|
|
||||||
// OnHeaderChange registers an OnChange callback for the specified header.
|
// OnHeaderChange registers an OnChange callback for the specified header.
|
||||||
func (c *Composer) OnHeaderChange(header string, fn func(subject string)) {
|
func (c *Composer) OnHeaderChange(header string, fn func(subject string)) {
|
||||||
if editor, ok := c.editors[strings.ToLower(header)]; ok {
|
if editor, ok := c.editors[strings.ToLower(header)]; ok {
|
||||||
|
@ -374,7 +360,7 @@ func (c *Composer) MouseEvent(localX int, localY int, event tcell.Event) {
|
||||||
for _, e := range c.focusable {
|
for _, e := range c.focusable {
|
||||||
he, ok := e.(*headerEditor)
|
he, ok := e.(*headerEditor)
|
||||||
if ok && he.focused {
|
if ok && he.focused {
|
||||||
c.FocusEditor(he)
|
c.FocusEditor(he.name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -722,10 +708,12 @@ func (c *Composer) NextField() {
|
||||||
c.focusable[c.focused].Focus(true)
|
c.focusable[c.focused].Focus(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Composer) FocusEditor(editor *headerEditor) {
|
func (c *Composer) FocusEditor(editor string) {
|
||||||
|
editor = strings.ToLower(editor)
|
||||||
c.focusable[c.focused].Focus(false)
|
c.focusable[c.focused].Focus(false)
|
||||||
for i, e := range c.focusable {
|
for i, f := range c.focusable {
|
||||||
if e == editor {
|
e := f.(*headerEditor)
|
||||||
|
if strings.ToLower(e.name) == editor {
|
||||||
c.focused = i
|
c.focused = i
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
@ -768,7 +756,7 @@ func (c *Composer) AddEditor(header string, value string, appendHeader bool) {
|
||||||
editor.storeValue()
|
editor.storeValue()
|
||||||
}
|
}
|
||||||
if value == "" {
|
if value == "" {
|
||||||
c.FocusEditor(c.editors[header])
|
c.FocusEditor(c.editors[header].name)
|
||||||
}
|
}
|
||||||
c.updateGrid()
|
c.updateGrid()
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue