aerc: use contextual ui styleset for tabs/compose
Use contextual ui styleset for tabs and compose widgets. If no account is selected, use default styleset as fallback. Fixes: https://todo.sr.ht/~rjarry/aerc/3 Signed-off-by: Koni Marti <koni.marti@gmail.com> Acked-by: Robin Jarry <robin@jarry.cc>
This commit is contained in:
parent
1ecee8efa5
commit
6edfbfa8ce
2 changed files with 24 additions and 8 deletions
|
@ -31,6 +31,7 @@ type Tab struct {
|
||||||
invalid bool
|
invalid bool
|
||||||
pinned bool
|
pinned bool
|
||||||
indexBeforePin int
|
indexBeforePin int
|
||||||
|
uiConf *config.UIConfig
|
||||||
}
|
}
|
||||||
|
|
||||||
type TabStrip Tabs
|
type TabStrip Tabs
|
||||||
|
@ -47,10 +48,11 @@ func NewTabs(uiConf *config.UIConfig) *Tabs {
|
||||||
return tabs
|
return tabs
|
||||||
}
|
}
|
||||||
|
|
||||||
func (tabs *Tabs) Add(content Drawable, name string) *Tab {
|
func (tabs *Tabs) Add(content Drawable, name string, uiConf *config.UIConfig) *Tab {
|
||||||
tab := &Tab{
|
tab := &Tab{
|
||||||
Content: content,
|
Content: content,
|
||||||
Name: name,
|
Name: name,
|
||||||
|
uiConf: uiConf,
|
||||||
}
|
}
|
||||||
tabs.Tabs = append(tabs.Tabs, tab)
|
tabs.Tabs = append(tabs.Tabs, tab)
|
||||||
tabs.TabStrip.Invalidate()
|
tabs.TabStrip.Invalidate()
|
||||||
|
@ -283,9 +285,13 @@ func (tabs *Tabs) removeHistory(index int) {
|
||||||
func (strip *TabStrip) Draw(ctx *Context) {
|
func (strip *TabStrip) Draw(ctx *Context) {
|
||||||
x := 0
|
x := 0
|
||||||
for i, tab := range strip.Tabs {
|
for i, tab := range strip.Tabs {
|
||||||
style := strip.uiConfig.GetStyle(config.STYLE_TAB)
|
uiConfig := strip.uiConfig
|
||||||
|
if tab.uiConf != nil {
|
||||||
|
uiConfig = tab.uiConf
|
||||||
|
}
|
||||||
|
style := uiConfig.GetStyle(config.STYLE_TAB)
|
||||||
if strip.Selected == i {
|
if strip.Selected == i {
|
||||||
style = strip.uiConfig.GetStyleSelected(config.STYLE_TAB)
|
style = uiConfig.GetStyleSelected(config.STYLE_TAB)
|
||||||
}
|
}
|
||||||
tabWidth := 32
|
tabWidth := 32
|
||||||
if ctx.Width()-x < tabWidth {
|
if ctx.Width()-x < tabWidth {
|
||||||
|
@ -293,7 +299,7 @@ func (strip *TabStrip) Draw(ctx *Context) {
|
||||||
}
|
}
|
||||||
name := tab.Name
|
name := tab.Name
|
||||||
if tab.pinned {
|
if tab.pinned {
|
||||||
name = strip.uiConfig.PinnedTabMarker + name
|
name = uiConfig.PinnedTabMarker + name
|
||||||
}
|
}
|
||||||
trunc := runewidth.Truncate(name, tabWidth, "…")
|
trunc := runewidth.Truncate(name, tabWidth, "…")
|
||||||
x += ctx.Printf(x, 0, style, " %s ", trunc)
|
x += ctx.Printf(x, 0, style, " %s ", trunc)
|
||||||
|
|
|
@ -87,10 +87,11 @@ func NewAerc(conf *config.AercConfig, logger *log.Logger,
|
||||||
for i, acct := range conf.Accounts {
|
for i, acct := range conf.Accounts {
|
||||||
view, err := NewAccountView(aerc, conf, &conf.Accounts[i], logger, aerc, deferLoop)
|
view, err := NewAccountView(aerc, conf, &conf.Accounts[i], logger, aerc, deferLoop)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
tabs.Add(errorScreen(err.Error(), conf.Ui), acct.Name)
|
tabs.Add(errorScreen(err.Error(), conf.Ui), acct.Name, nil)
|
||||||
} else {
|
} else {
|
||||||
aerc.accounts[acct.Name] = view
|
aerc.accounts[acct.Name] = view
|
||||||
tabs.Add(view, acct.Name)
|
conf := view.UiConfig()
|
||||||
|
tabs.Add(view, acct.Name, &conf)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -303,7 +304,11 @@ func (aerc *Aerc) Logger() *log.Logger {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (aerc *Aerc) SelectedAccount() *AccountView {
|
func (aerc *Aerc) SelectedAccount() *AccountView {
|
||||||
switch tab := aerc.SelectedTab().(type) {
|
return aerc.account(aerc.SelectedTab())
|
||||||
|
}
|
||||||
|
|
||||||
|
func (aerc *Aerc) account(d ui.Drawable) *AccountView {
|
||||||
|
switch tab := d.(type) {
|
||||||
case *AccountView:
|
case *AccountView:
|
||||||
return tab
|
return tab
|
||||||
case *MessageViewer:
|
case *MessageViewer:
|
||||||
|
@ -335,7 +340,12 @@ func (aerc *Aerc) NumTabs() int {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (aerc *Aerc) NewTab(clickable ui.Drawable, name string) *ui.Tab {
|
func (aerc *Aerc) NewTab(clickable ui.Drawable, name string) *ui.Tab {
|
||||||
tab := aerc.tabs.Add(clickable, name)
|
var uiConf *config.UIConfig = nil
|
||||||
|
if acct := aerc.account(clickable); acct != nil {
|
||||||
|
conf := acct.UiConfig()
|
||||||
|
uiConf = &conf
|
||||||
|
}
|
||||||
|
tab := aerc.tabs.Add(clickable, name, uiConf)
|
||||||
aerc.tabs.Select(len(aerc.tabs.Tabs) - 1)
|
aerc.tabs.Select(len(aerc.tabs.Tabs) - 1)
|
||||||
aerc.UpdateStatus()
|
aerc.UpdateStatus()
|
||||||
return tab
|
return tab
|
||||||
|
|
Loading…
Reference in a new issue