diff --git a/guake/data/org.guake.gschema.xml b/guake/data/org.guake.gschema.xml index fcbfc2a14..14b2d688e 100644 --- a/guake/data/org.guake.gschema.xml +++ b/guake/data/org.guake.gschema.xml @@ -111,6 +111,11 @@ Hide tab bar when fullscreen When true, the tab bar will hide when is in fullscreen + + true + Hide tab bar if there is only one tab + When true, the tab bar will hide when there is only one tab + false Enable Quick Open feature. diff --git a/guake/data/prefs.glade b/guake/data/prefs.glade index eb21d7a3b..cc431f70b 100644 --- a/guake/data/prefs.glade +++ b/guake/data/prefs.glade @@ -773,6 +773,7 @@ True True + 0 @@ -932,6 +933,21 @@ 2 + + + Hide tab bar if there is only one tab + True + True + True + True + True + + + + 1 + 4 + + diff --git a/guake/gsettings.py b/guake/gsettings.py index 6c23457b7..428e4831b 100644 --- a/guake/gsettings.py +++ b/guake/gsettings.py @@ -87,6 +87,7 @@ def __init__(self, guake_inst): settings.general.onChangedValue("custom-command_file", self.custom_command_file_changed) settings.general.onChangedValue("max-tab-name-length", self.max_tab_name_length_changed) settings.general.onChangedValue("display-tab-names", self.display_tab_names_changed) + settings.general.onChangedValue("hide-tabs-if-one-tab", self.hide_tabs_if_one_tab_changed) def custom_command_file_changed(self, settings, key, user_data): self.guake.load_custom_commands() @@ -116,7 +117,10 @@ def tabbar_toggled(self, settings, key, user_data): called and will show/hide the tabbar. """ if settings.get_boolean(key): - self.guake.notebook_manager.set_notebooks_tabbar_visible(True) + if settings.get_boolean(key): + self.guake.get_notebook().hide_if_one_tab() + else: + self.guake.notebook_manager.set_notebooks_tabbar_visible(True) else: self.guake.notebook_manager.set_notebooks_tabbar_visible(False) @@ -130,7 +134,10 @@ def fullscreen_hide_tabbar_toggled(self, settings, key, user_data): if settings.get_boolean(key): self.guake.notebook_manager.set_notebooks_tabbar_visible(False) else: - self.guake.notebook_manager.set_notebooks_tabbar_visible(True) + if settings.get_boolean(key): + self.guake.get_notebook().hide_if_one_tab() + else: + self.guake.notebook_manager.set_notebooks_tabbar_visible(True) def alignment_changed(self, settings, key, user_data): """If the gconf var window_halignment be changed, this method will @@ -423,3 +430,9 @@ def display_tab_names_changed(self, settings, key, user_data): """ self.guake.display_tab_names = settings.get_int("display-tab-names") self.guake.recompute_tabs_titles() + + def hide_tabs_if_one_tab_changed(self, settings, key, user_data): + """If the gconf var hide-tabs-if-one-tab was changed, this method will + be called and will show/hide the tab bar if necessary + """ + self.guake.get_notebook().hide_if_one_tab() diff --git a/guake/notebook.py b/guake/notebook.py index 793eab1e3..8afa9cbfb 100644 --- a/guake/notebook.py +++ b/guake/notebook.py @@ -323,6 +323,8 @@ def remove_page(self, page_num): page = self.get_nth_page(self.get_current_page()) if page.get_terminals(): page.get_terminals()[0].grab_focus() + + self.hide_if_one_tab() self.emit("page-deleted") def delete_page_by_label(self, label, kill=True, prompt=0): @@ -350,12 +352,20 @@ def new_page(self, directory=None, position=None): # this is needed to initially set the last_terminal_focused, # one could also call terminal.get_parent().on_terminal_focus() self.terminal_attached(terminal) + self.hide_if_one_tab() if self.guake: # Attack background image draw callback to root terminal box root_terminal_box.connect_after("draw", self.guake.background_image_manager.draw) return root_terminal_box, page_num, terminal + def hide_if_one_tab(self): + if self.guake.settings.general.get_boolean("window-tabbar"): + if self.guake.settings.general.get_boolean("hide-tabs-if-one-tab"): + self.set_property("show-tabs", self.get_n_pages() != 1) + else: + self.set_property("show-tabs", True) + def terminal_spawn(self, directory=None): terminal = GuakeTerminal(self.guake) terminal.grab_focus() diff --git a/guake/prefs.py b/guake/prefs.py index 85ec9fce9..d56c0eefe 100644 --- a/guake/prefs.py +++ b/guake/prefs.py @@ -349,6 +349,11 @@ def on_fullscreen_hide_tabbar_toggled(self, chk): """Changes the activity of fullscreen_hide_tabbar in dconf""" self.settings.general.set_boolean("fullscreen-hide-tabbar", chk.get_active()) + def on_hide_tabs_if_one_tab_toggled(self, chk): + """Changes the activity of hide_tabs_if_one_tab in dconf + """ + self.settings.general.set_boolean("hide-tabs-if-one-tab", chk.get_active()) + def on_start_fullscreen_toggled(self, chk): """Changes the activity of start_fullscreen in dconf""" self.settings.general.set_boolean("start-fullscreen", chk.get_active()) @@ -538,6 +543,9 @@ def toggle_use_font_background_sensitivity(self, chk): def toggle_display_n_sensitivity(self, chk): self.prefDlg.toggle_display_n_sensitivity(chk) + def toggle_show_tabbar_sensitivity(self, chk): + self.prefDlg.toggle_show_tabbar_sensitivity(chk) + def toggle_quick_open_command_line_sensitivity(self, chk): self.prefDlg.toggle_quick_open_command_line_sensitivity(chk) @@ -762,6 +770,13 @@ def toggle_use_font_background_sensitivity(self, chk): self.get_widget("palette_16").set_sensitive(chk.get_active()) self.get_widget("palette_17").set_sensitive(chk.get_active()) + def toggle_show_tabbar_sensitivity(self, chk): + """If the user chooses to not show the tab bar, it means that they + cannot see the tab bar regardless of what other tab bar options say. + """ + self.get_widget("fullscreen_hide_tabbar").set_sensitive(chk.get_active()) + self.get_widget("hide_tabs_if_one_tab").set_sensitive(chk.get_active()) + def toggle_display_n_sensitivity(self, chk): """When the user unchecks 'on mouse display', the option to select an alternate display should be enabled. @@ -1080,6 +1095,10 @@ def load_configs(self): value = self.settings.general.get_boolean("fullscreen-hide-tabbar") self.get_widget("fullscreen_hide_tabbar").set_active(value) + # hide tabbar if only one tab + value = self.settings.general.get_boolean("hide-tabs-if-one-tab") + self.get_widget("hide_tabs_if_one_tab").set_active(value) + # start fullscreen value = self.settings.general.get_boolean("start-fullscreen") self.get_widget("start_fullscreen").set_active(value) diff --git a/releasenotes/notes/auto_hide_tabbar-0a20cd95984dfd91.yaml b/releasenotes/notes/auto_hide_tabbar-0a20cd95984dfd91.yaml new file mode 100644 index 000000000..0c4cd016b --- /dev/null +++ b/releasenotes/notes/auto_hide_tabbar-0a20cd95984dfd91.yaml @@ -0,0 +1,40 @@ +release_summary: > + Automatically hide the tab bar when there is only one tab + +features: + - | + - Automatically hide the tab bar when there is only one tab #924 + +known_issues: + - | + - None + +upgrade: + - | + If setting is undesired, uncheck the hide tab if one tab option in settings + +deprecations: + - | + None + +security: + - | + None + +fixes: + - | + fixes #924 + +translations: + - Only put a list of updated 2 letters language code, for example:: + + translations: + - en + +notes_for_package_maintainers: + - | + None + +other: + - | + None