fix: always update tab views when splits arrangement has changed

closes #485
This commit is contained in:
CJ van den Berg 2026-02-04 09:54:07 +01:00
parent cc2aabf7dd
commit 7520289442
Signed by: neurocyte
GPG key ID: 8EB1E1BB660E3FB9
2 changed files with 6 additions and 1 deletions

View file

@ -1739,6 +1739,7 @@ fn add_and_activate_view(self: *Self, widget: Widget) !void {
try self.views.add(widget); try self.views.add(widget);
self.active_view = self.views.widgets.items.len - 1; self.active_view = self.views.widgets.items.len - 1;
if (self.views.get_at(self.active_view)) |view| view.focus(); if (self.views.get_at(self.active_view)) |view| view.focus();
_ = try self.widgets_widget.msg(.{"splits_updated"});
} }
pub fn find_view_for_widget(self: *Self, w_: *const Widget) ?usize { pub fn find_view_for_widget(self: *Self, w_: *const Widget) ?usize {
@ -1864,7 +1865,6 @@ fn create_home(self: *Self) !void {
pub fn create_home_split(self: *Self) !void { pub fn create_home_split(self: *Self) !void {
tui.reset_drag_context(); tui.reset_drag_context();
try self.add_and_activate_view(try home.create(self.allocator, Widget.to(self))); try self.add_and_activate_view(try home.create(self.allocator, Widget.to(self)));
_ = try self.widgets_widget.msg(.{"splits_updated"});
tui.resize(); tui.resize();
} }

View file

@ -281,6 +281,7 @@ pub const TabBar = struct {
const mv = tui.mainview() orelse @panic("tabs no main view"); const mv = tui.mainview() orelse @panic("tabs no main view");
const buffer_manager = tui.get_buffer_manager() orelse @panic("tabs no buffer manager"); const buffer_manager = tui.get_buffer_manager() orelse @panic("tabs no buffer manager");
var prev_widget_count: usize = 0; var prev_widget_count: usize = 0;
for (self.widget_list.widgets.items) |*split_widgetstate| if (split_widgetstate.widget.dynamic_cast(WidgetList)) |split| { for (self.widget_list.widgets.items) |*split_widgetstate| if (split_widgetstate.widget.dynamic_cast(WidgetList)) |split| {
prev_widget_count += 1; prev_widget_count += 1;
for (split.widgets.items) |_| prev_widget_count += 1; for (split.widgets.items) |_| prev_widget_count += 1;
@ -296,6 +297,10 @@ pub const TabBar = struct {
split.deinit(self.widget_list.allocator); split.deinit(self.widget_list.allocator);
}; };
for (self.tabs) |*tab| if (buffer_manager.buffer_from_ref(tab.buffer_ref)) |buffer| {
tab.view = buffer.get_last_view() orelse 0;
};
const views = mv.get_view_count(); const views = mv.get_view_count();
var widget_count: usize = 0; var widget_count: usize = 0;