pull/436/merge
Trevor Slocum 1 month ago committed by GitHub
commit 7f23385a5b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -92,6 +92,14 @@ type Application struct {
// be forwarded).
inputCapture func(event *tcell.EventKey) *tcell.EventKey
// An optional callback function which is invoked before the application's
// focus changes.
beforeFocus func(p Primitive) bool
// An optional callback function which is invoked after the application's
// focus changes.
afterFocus func(p Primitive)
// An optional callback function which is invoked just before the root
// primitive is drawn.
beforeDraw func(screen tcell.Screen) bool
@ -800,14 +808,34 @@ func (a *Application) ResizeToFullScreen(p Primitive) *Application {
// called on the new primitive.
func (a *Application) SetFocus(p Primitive) *Application {
a.Lock()
if a.beforeFocus != nil {
a.Unlock()
ok := a.beforeFocus(p)
if !ok {
return a
}
a.Lock()
}
if a.focus != nil {
a.focus.Blur()
}
a.focus = p
if a.screen != nil {
a.screen.HideCursor()
}
a.Unlock()
if a.afterFocus != nil {
a.Unlock()
a.afterFocus(p)
} else {
a.Unlock()
}
if p != nil {
p.Focus(func(p Primitive) {
a.SetFocus(p)
@ -825,6 +853,30 @@ func (a *Application) GetFocus() Primitive {
return a.focus
}
// SetBeforeFocusFunc installs a callback function which is invoked before the
// application's focus changes. Return false to maintain the current focus.
//
// Provide nil to uninstall the callback function.
func (a *Application) SetBeforeFocusFunc(handler func(p Primitive) bool) *Application {
a.Lock()
defer a.Unlock()
a.beforeFocus = handler
return a
}
// SetAfterFocusFunc installs a callback function which is invoked after the
// application's focus changes.
//
// Provide nil to uninstall the callback function.
func (a *Application) SetAfterFocusFunc(handler func(p Primitive)) *Application {
a.Lock()
defer a.Unlock()
a.afterFocus = handler
return a
}
// QueueUpdate is used to synchronize access to primitives from non-main
// goroutines. The provided function will be executed as part of the event loop
// and thus will not cause race conditions with other such update functions or

Loading…
Cancel
Save