diff --git a/midori/midori-browser.c b/midori/midori-browser.c index e78c6cf9..163ae484 100644 --- a/midori/midori-browser.c +++ b/midori/midori-browser.c @@ -167,14 +167,31 @@ _midori_browser_open_uri (MidoriBrowser* browser, midori_view_set_uri (MIDORI_VIEW (view), uri); } +static void +_toggle_tabbar_smartly (MidoriBrowser* browser) +{ + guint n; + gboolean always_show_tabbar; + + n = gtk_notebook_get_n_pages (GTK_NOTEBOOK (browser->notebook)); + if (n < 2) + { + g_object_get (browser->settings, "always-show-tabbar", + &always_show_tabbar, NULL); + if (always_show_tabbar) + n++; + } + gtk_notebook_set_show_tabs (GTK_NOTEBOOK (browser->notebook), n > 1); +} + static void _midori_browser_update_actions (MidoriBrowser* browser) { guint n; gboolean trash_empty; + _toggle_tabbar_smartly (browser); n = gtk_notebook_get_n_pages (GTK_NOTEBOOK (browser->notebook)); - gtk_notebook_set_show_tabs (GTK_NOTEBOOK (browser->notebook), n > 1); _action_set_sensitive (browser, "TabClose", n > 1); _action_set_sensitive (browser, "TabPrevious", n > 1); _action_set_sensitive (browser, "TabNext", n > 1); @@ -695,6 +712,11 @@ midori_browser_tab_destroy_cb (GtkWidget* widget, midori_browser_tab_destroy_cb, browser); g_signal_emit (browser, signals[REMOVE_TAB], 0, widget); + + /* We don't ever want to be in a situation with no tabs, + so just create an empty one if the last one is closed. */ + if (!midori_browser_get_current_tab (browser)) + midori_browser_add_uri (browser, ""); return FALSE; } @@ -3369,6 +3391,7 @@ _midori_browser_update_settings (MidoriBrowser* browser) } _midori_browser_set_toolbar_style (browser, toolbar_style); + _toggle_tabbar_smartly (browser); if (browser->search_engines) { @@ -3412,6 +3435,8 @@ midori_browser_settings_notify (MidoriWebSettings* web_settings, if (name == g_intern_string ("toolbar-style")) _midori_browser_set_toolbar_style (browser, g_value_get_enum (&value)); + else if (name == g_intern_string ("always-show-tabbar")) + _toggle_tabbar_smartly (browser); else if (name == g_intern_string ("show-new-tab")) sokoke_widget_set_visible (browser->button_tab_new, g_value_get_boolean (&value)); diff --git a/midori/midori-preferences.c b/midori/midori-preferences.c index 23caa880..2ea831b8 100644 --- a/midori/midori-preferences.c +++ b/midori/midori-preferences.c @@ -339,18 +339,20 @@ midori_preferences_set_settings (MidoriPreferences* preferences, /* Page "Interface" */ PAGE_NEW (_("Interface")); FRAME_NEW (_("Navigationbar")); - TABLE_NEW (3, 2); + TABLE_NEW (4, 2); INDENTED_ADD (katze_property_label (settings, "toolbar-style"), 0, 1, 0, 1); button = katze_property_proxy (settings, "toolbar-style", NULL); FILLED_ADD (button, 1, 2, 0, 1); - button = katze_property_proxy (settings, "show-new-tab", NULL); + button = katze_property_proxy (settings, "always-show-tabbar", NULL); INDENTED_ADD (button, 0, 1, 1, 2); - button = katze_property_proxy (settings, "show-web-search", NULL); - SPANNED_ADD (button, 1, 2, 1, 2); - button = katze_property_proxy (settings, "show-homepage", NULL); + button = katze_property_proxy (settings, "show-new-tab", NULL); INDENTED_ADD (button, 0, 1, 2, 3); - button = katze_property_proxy (settings, "show-trash", NULL); + button = katze_property_proxy (settings, "show-web-search", NULL); SPANNED_ADD (button, 1, 2, 2, 3); + button = katze_property_proxy (settings, "show-homepage", NULL); + INDENTED_ADD (button, 0, 1, 3, 4); + button = katze_property_proxy (settings, "show-trash", NULL); + SPANNED_ADD (button, 1, 2, 3, 4); FRAME_NEW (_("Browsing")); TABLE_NEW (3, 2); /* label = katze_property_label (settings, "open-new-pages-in"); diff --git a/midori/midori-websettings.c b/midori/midori-websettings.c index 110d19b3..4d234ebf 100644 --- a/midori/midori-websettings.c +++ b/midori/midori-websettings.c @@ -34,6 +34,7 @@ struct _MidoriWebSettings gboolean show_statusbar; MidoriToolbarStyle toolbar_style; + gboolean always_show_tabbar; gboolean show_new_tab; gboolean show_homepage; gboolean show_web_search; @@ -86,6 +87,7 @@ enum PROP_SHOW_STATUSBAR, PROP_TOOLBAR_STYLE, + PROP_ALWAYS_SHOW_TABBAR, PROP_SHOW_NEW_TAB, PROP_SHOW_HOMEPAGE, PROP_SHOW_WEB_SEARCH, @@ -345,6 +347,15 @@ midori_web_settings_class_init (MidoriWebSettingsClass* class) MIDORI_TOOLBAR_DEFAULT, flags)); + g_object_class_install_property (gobject_class, + PROP_ALWAYS_SHOW_TABBAR, + g_param_spec_boolean ( + "always-show-tabbar", + _("Always Show Tabbar"), + _("Always show the tabbar"), + FALSE, + flags)); + g_object_class_install_property (gobject_class, PROP_SHOW_NEW_TAB, g_param_spec_boolean ( @@ -669,6 +680,9 @@ midori_web_settings_set_property (GObject* object, case PROP_TOOLBAR_STYLE: web_settings->toolbar_style = g_value_get_enum (value); break; + case PROP_ALWAYS_SHOW_TABBAR: + web_settings->always_show_tabbar = g_value_get_boolean (value); + break; case PROP_SHOW_NEW_TAB: web_settings->show_new_tab = g_value_get_boolean (value); break; @@ -824,6 +838,9 @@ midori_web_settings_get_property (GObject* object, case PROP_TOOLBAR_STYLE: g_value_set_enum (value, web_settings->toolbar_style); break; + case PROP_ALWAYS_SHOW_TABBAR: + g_value_set_boolean (value, web_settings->always_show_tabbar); + break; case PROP_SHOW_NEW_TAB: g_value_set_boolean (value, web_settings->show_new_tab); break;