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 fullscreenWhen 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
+ falseEnable 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 @@
TrueTrue
+ 0
@@ -932,6 +933,21 @@
2
+
+
+
+ 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