diff --git a/pages.go b/pages.go index a6a1cff..0a5dfcf 100644 --- a/pages.go +++ b/pages.go @@ -67,7 +67,9 @@ func (p *Pages) AddPage(name string, item Primitive, resize, visible bool) *Page if p.changed != nil { p.changed() } - p.refocus() + if p.HasFocus() { + p.Focus(p.setFocus) + } return p } @@ -81,6 +83,7 @@ func (p *Pages) AddAndSwitchToPage(name string, item Primitive, resize bool) *Pa // RemovePage removes the page with the given name. func (p *Pages) RemovePage(name string) *Pages { + hasFocus := p.HasFocus() for index, page := range p.pages { if page.Name == name { p.pages = append(p.pages[:index], p.pages[index+1:]...) @@ -90,7 +93,9 @@ func (p *Pages) RemovePage(name string) *Pages { break } } - p.refocus() + if hasFocus { + p.Focus(p.setFocus) + } return p } @@ -116,7 +121,9 @@ func (p *Pages) ShowPage(name string) *Pages { break } } - p.refocus() + if p.HasFocus() { + p.Focus(p.setFocus) + } return p } @@ -131,7 +138,9 @@ func (p *Pages) HidePage(name string) *Pages { break } } - p.refocus() + if p.HasFocus() { + p.Focus(p.setFocus) + } return p } @@ -148,7 +157,9 @@ func (p *Pages) SwitchToPage(name string) *Pages { if p.changed != nil { p.changed() } - p.refocus() + if p.HasFocus() { + p.Focus(p.setFocus) + } return p } @@ -167,7 +178,9 @@ func (p *Pages) SendToFront(name string) *Pages { break } } - p.refocus() + if p.HasFocus() { + p.Focus(p.setFocus) + } return p } @@ -186,7 +199,9 @@ func (p *Pages) SendToBack(name string) *Pages { break } } - p.refocus() + if p.HasFocus() { + p.Focus(p.setFocus) + } return p } @@ -214,25 +229,6 @@ func (p *Pages) Focus(delegate func(p Primitive)) { } } -// refocus sets the focus to the topmost visible page but only if we have focus. -func (p *Pages) refocus() { - var ( - topItem Primitive - hasFocus bool - ) - for _, page := range p.pages { - if page.Item.GetFocusable().HasFocus() { - hasFocus = true - } - if page.Visible { - topItem = page.Item - } - } - if hasFocus && p.setFocus != nil && topItem != nil { - p.setFocus(topItem) - } -} - // Draw draws this primitive onto the screen. func (p *Pages) Draw(screen tcell.Screen) { for _, page := range p.pages {