From aca13ba05e939e77efdf3a5e3cd90b45877534fa Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 7 Dec 2016 09:23:08 +0530 Subject: [PATCH] Handle removal of tabs --- kitty/boss.py | 4 ++++ kitty/tabs.py | 11 +++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/kitty/boss.py b/kitty/boss.py index 562899ed2..fb828ed70 100644 --- a/kitty/boss.py +++ b/kitty/boss.py @@ -225,6 +225,10 @@ class Boss(Thread): self.pending_resize = False glfw_post_empty_event() + def tabbar_visibility_changed(self): + self.tab_manager.resize(only_tabs=True) + glfw_post_empty_event() + @property def active_tab(self): return self.tab_manager.active_tab diff --git a/kitty/tabs.py b/kitty/tabs.py index b3da7df42..cd1d1a18f 100644 --- a/kitty/tabs.py +++ b/kitty/tabs.py @@ -169,10 +169,12 @@ class TabManager: self.close_fg = as_rgb(0xff << 16) self.can_render = False - def resize(self): - self.can_render = False + def resize(self, only_tabs=False): for tab in self.tabs: tab.relayout() + if only_tabs: + return + self.can_render = False ncells = viewport_size.width // cell_size.width s = Screen(None, 1, ncells) s.reset_mode(DECAWM) @@ -208,8 +210,13 @@ class TabManager: def remove(self, tab): ' Must be called in the GUI thread ' + needs_resize = len(self.tabs) == 2 self.tabs.remove(tab) + self.active_tab_idx = max(0, min(self.active_tab_idx, len(self.tabs) - 1)) + self.tabbar_dirty = True tab.destroy() + if needs_resize: + queue_action(get_boss().tabbar_visibility_changed) def update_tab_bar_data(self, sprites): s = self.tab_bar_screen