1
0
mirror of https://github.com/jesseduffield/lazygit.git synced 2025-01-06 03:53:59 +02:00

Avoid deactivating and activating when pushing the current context again

When calling PushContext, do nothing if the context to be pushed is already on
top of the stack. Avoids flicker in certain situations.
This commit is contained in:
Stefan Haller 2023-03-13 21:23:08 +01:00 committed by Jesse Duffield
parent 776d8f4d2e
commit 40f6767cfc

View File

@ -52,7 +52,7 @@ func (gui *Gui) pushContext(c types.Context, opts types.OnFocusOpts) error {
return nil
}
contextsToDeactivate := gui.pushToContextStack(c)
contextsToDeactivate, contextToActivate := gui.pushToContextStack(c)
for _, contextToDeactivate := range contextsToDeactivate {
if err := gui.deactivateContext(contextToDeactivate, types.OnFocusLostOpts{NewContextKey: c.GetKey()}); err != nil {
@ -60,16 +60,28 @@ func (gui *Gui) pushContext(c types.Context, opts types.OnFocusOpts) error {
}
}
return gui.activateContext(c, opts)
if contextToActivate == nil {
return nil
}
return gui.activateContext(contextToActivate, opts)
}
// Adjusts the context stack based on the context that's being pushed and returns contexts to deactivate
func (gui *Gui) pushToContextStack(c types.Context) []types.Context {
// Adjusts the context stack based on the context that's being pushed and
// returns (contexts to deactivate, context to activate)
func (gui *Gui) pushToContextStack(c types.Context) ([]types.Context, types.Context) {
contextsToDeactivate := []types.Context{}
gui.State.ContextManager.Lock()
defer gui.State.ContextManager.Unlock()
if len(gui.State.ContextManager.ContextStack) > 0 &&
c == gui.State.ContextManager.ContextStack[len(gui.State.ContextManager.ContextStack)-1] {
// Context being pushed is already on top of the stack: nothing to
// deactivate or activate
return contextsToDeactivate, nil
}
if len(gui.State.ContextManager.ContextStack) == 0 {
gui.State.ContextManager.ContextStack = append(gui.State.ContextManager.ContextStack, c)
} else if c.GetKind() == types.SIDE_CONTEXT {
@ -105,7 +117,7 @@ func (gui *Gui) pushToContextStack(c types.Context) []types.Context {
}
}
return contextsToDeactivate
return contextsToDeactivate, c
}
func (gui *Gui) popContext() error {