Fix bug with close-all command
There are really multiple things here in the close_all_docviews function: 1. we reset the Node's tab_offset 2. we ensure the core's active_view is properly set 3. we close LogViews as well as DocViews Some conditions seems to never happen but we stay safe and try to cover all possible cases.
This commit is contained in:
parent
dc501cb41a
commit
daf916769f
|
@ -8,6 +8,7 @@ local View = require "core.view"
|
||||||
local CommandView = require "core.commandview"
|
local CommandView = require "core.commandview"
|
||||||
local NagView = require "core.nagview"
|
local NagView = require "core.nagview"
|
||||||
local DocView = require "core.docview"
|
local DocView = require "core.docview"
|
||||||
|
local LogView = require "core.logview"
|
||||||
|
|
||||||
|
|
||||||
local EmptyView = View:extend()
|
local EmptyView = View:extend()
|
||||||
|
@ -595,19 +596,35 @@ end
|
||||||
|
|
||||||
|
|
||||||
function Node:close_all_docviews(keep_active)
|
function Node:close_all_docviews(keep_active)
|
||||||
|
local node_active_view = self.active_view
|
||||||
|
local lost_active_view = false
|
||||||
if self.type == "leaf" then
|
if self.type == "leaf" then
|
||||||
local i = 1
|
local i = 1
|
||||||
while i <= #self.views do
|
while i <= #self.views do
|
||||||
local view = self.views[i]
|
local view = self.views[i]
|
||||||
if view:is(DocView) and not view:is(CommandView) and
|
if (view:is(DocView) or view:is(LogView)) and not view:is(CommandView) and
|
||||||
(not keep_active or view ~= self.active_view) then
|
(not keep_active or view ~= self.active_view) then
|
||||||
table.remove(self.views, i)
|
table.remove(self.views, i)
|
||||||
|
if view == node_active_view then
|
||||||
|
lost_active_view = true
|
||||||
|
end
|
||||||
else
|
else
|
||||||
i = i + 1
|
i = i + 1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if #self.views == 0 and self.is_primary_node then
|
self.tab_offset = 1
|
||||||
|
if #self.views == 0 then
|
||||||
|
if self.is_primary_node then
|
||||||
self:add_view(EmptyView())
|
self:add_view(EmptyView())
|
||||||
|
elseif node_active_view == core.active_view then
|
||||||
|
-- Apparently we never gets here. In practice the primary node
|
||||||
|
-- is cleared first and get the active view on the empty view it sets.
|
||||||
|
local default_view = core.root_view:get_primary_node().views[1]
|
||||||
|
core.set_active_view(default_view)
|
||||||
|
end
|
||||||
|
elseif #self.views > 0 and lost_active_view then
|
||||||
|
-- We never get there either
|
||||||
|
self:set_active_view(self.views[1])
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
self.a:close_all_docviews(keep_active)
|
self.a:close_all_docviews(keep_active)
|
||||||
|
|
Loading…
Reference in New Issue