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:
parent
776d8f4d2e
commit
40f6767cfc
@ -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 {
|
||||
|
Loading…
Reference in New Issue
Block a user