refactor: make tabs.find_next/previous_tab_buffer also return view
This commit is contained in:
parent
09bb80b268
commit
2d2d8a915b
1 changed files with 18 additions and 12 deletions
|
|
@ -422,45 +422,50 @@ pub const TabBar = struct {
|
||||||
return last;
|
return last;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn find_next_tab_buffer(self: *Self) ?Buffer.Ref {
|
fn find_next_tab_buffer(self: *Self) struct { ?Buffer.Ref, usize } {
|
||||||
var found_active: bool = false;
|
var found_active: bool = false;
|
||||||
for (self.widget_list.widgets.items) |*split_widget| if (split_widget.widget.dynamic_cast(WidgetList)) |split|
|
for (self.widget_list.widgets.items) |*split_widget| if (split_widget.widget.dynamic_cast(WidgetList)) |split|
|
||||||
for (split.widgets.items) |*widget_state| if (widget_state.widget.dynamic_cast(Tab.ButtonType)) |btn| {
|
for (split.widgets.items) |*widget_state| if (widget_state.widget.dynamic_cast(Tab.ButtonType)) |btn| {
|
||||||
if (found_active)
|
if (found_active)
|
||||||
return btn.opts.ctx.buffer_ref;
|
return .{ btn.opts.ctx.buffer_ref, btn.opts.ctx.view };
|
||||||
if (btn.opts.ctx.buffer_ref == self.active_focused_buffer_ref)
|
if (btn.opts.ctx.buffer_ref == self.active_focused_buffer_ref)
|
||||||
found_active = true;
|
found_active = true;
|
||||||
};
|
};
|
||||||
return null;
|
return .{ null, 0 };
|
||||||
}
|
}
|
||||||
|
|
||||||
fn find_previous_tab_buffer(self: *Self) ?Buffer.Ref {
|
fn find_previous_tab_buffer(self: *Self) struct { ?Buffer.Ref, usize } {
|
||||||
var previous: ?Buffer.Ref = null;
|
var previous: ?Buffer.Ref = null;
|
||||||
|
var previous_view: usize = 0;
|
||||||
for (self.widget_list.widgets.items) |*split_widget| if (split_widget.widget.dynamic_cast(WidgetList)) |split|
|
for (self.widget_list.widgets.items) |*split_widget| if (split_widget.widget.dynamic_cast(WidgetList)) |split|
|
||||||
for (split.widgets.items) |*widget_state| if (widget_state.widget.dynamic_cast(Tab.ButtonType)) |btn| {
|
for (split.widgets.items) |*widget_state| if (widget_state.widget.dynamic_cast(Tab.ButtonType)) |btn| {
|
||||||
if (btn.opts.ctx.buffer_ref == self.active_focused_buffer_ref)
|
if (btn.opts.ctx.buffer_ref == self.active_focused_buffer_ref)
|
||||||
return previous;
|
return .{ previous, previous_view };
|
||||||
previous = btn.opts.ctx.buffer_ref;
|
previous = btn.opts.ctx.buffer_ref;
|
||||||
|
previous_view = btn.opts.ctx.view;
|
||||||
};
|
};
|
||||||
return null;
|
return .{ null, 0 };
|
||||||
}
|
}
|
||||||
|
|
||||||
fn select_next_tab(self: *Self) void {
|
fn select_next_tab(self: *Self) void {
|
||||||
tp.trace(tp.channel.debug, .{"select_next_tab"});
|
tp.trace(tp.channel.debug, .{"select_next_tab"});
|
||||||
const buffer_ref = self.find_next_tab_buffer() orelse self.find_first_tab_buffer() orelse return;
|
const buffer_ref, _ = self.find_next_tab_buffer();
|
||||||
navigate_to_buffer(buffer_ref);
|
if (buffer_ref) |ref| return navigate_to_buffer(ref);
|
||||||
|
if (self.find_first_tab_buffer()) |ref| return navigate_to_buffer(ref);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn select_previous_tab(self: *Self) void {
|
fn select_previous_tab(self: *Self) void {
|
||||||
tp.trace(tp.channel.debug, .{"select_previous_tab"});
|
tp.trace(tp.channel.debug, .{"select_previous_tab"});
|
||||||
const buffer_ref = self.find_previous_tab_buffer() orelse self.find_last_tab_buffer() orelse return;
|
const buffer_ref, _ = self.find_previous_tab_buffer();
|
||||||
navigate_to_buffer(buffer_ref);
|
if (buffer_ref) |ref| return navigate_to_buffer(ref);
|
||||||
|
if (self.find_last_tab_buffer()) |ref| return navigate_to_buffer(ref);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn move_tab_next(self: *Self) void {
|
fn move_tab_next(self: *Self) void {
|
||||||
tp.trace(tp.channel.debug, .{"move_tab_next"});
|
tp.trace(tp.channel.debug, .{"move_tab_next"});
|
||||||
const this_idx = self.find_buffer_tab(self.active_focused_buffer_ref orelse return) orelse return;
|
const this_idx = self.find_buffer_tab(self.active_focused_buffer_ref orelse return) orelse return;
|
||||||
const other_buffer_ref = self.find_next_tab_buffer() orelse return self.move_tab_to_new_split(this_idx);
|
const other_buffer_ref_, _ = self.find_next_tab_buffer();
|
||||||
|
const other_buffer_ref = other_buffer_ref_ orelse return self.move_tab_to_new_split(this_idx);
|
||||||
const other_idx = self.find_buffer_tab(other_buffer_ref) orelse return;
|
const other_idx = self.find_buffer_tab(other_buffer_ref) orelse return;
|
||||||
self.move_tab_to(other_idx, this_idx);
|
self.move_tab_to(other_idx, this_idx);
|
||||||
}
|
}
|
||||||
|
|
@ -468,7 +473,8 @@ pub const TabBar = struct {
|
||||||
fn move_tab_previous(self: *Self) void {
|
fn move_tab_previous(self: *Self) void {
|
||||||
tp.trace(tp.channel.debug, .{"move_tab_previous"});
|
tp.trace(tp.channel.debug, .{"move_tab_previous"});
|
||||||
const this_idx = self.find_buffer_tab(self.active_focused_buffer_ref orelse return) orelse return;
|
const this_idx = self.find_buffer_tab(self.active_focused_buffer_ref orelse return) orelse return;
|
||||||
const other_buffer_ref = self.find_previous_tab_buffer() orelse return;
|
const other_buffer_ref_, _ = self.find_previous_tab_buffer();
|
||||||
|
const other_buffer_ref = other_buffer_ref_ orelse return;
|
||||||
const other_idx = self.find_buffer_tab(other_buffer_ref) orelse return;
|
const other_idx = self.find_buffer_tab(other_buffer_ref) orelse return;
|
||||||
self.move_tab_to(other_idx, this_idx);
|
self.move_tab_to(other_idx, this_idx);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue