diff options
author | Jan-Michael Brummer <jan.brummer@tabos.org> | 2021-08-10 14:40:30 +0200 |
---|---|---|
committer | Marge Bot <marge-bot@gnome.org> | 2023-02-08 18:32:02 +0000 |
commit | 9131f927a2b1abcba6b31fdd72bd60d51c6b05f2 (patch) | |
tree | ff42cbbf9fdb344b692211b500da1ddd74e2e02b | |
parent | cec91dbd9bd0f712ad471afe36394260fdc2807b (diff) | |
download | epiphany-9131f927a2b1abcba6b31fdd72bd60d51c6b05f2.tar.gz |
Add option to select new tab page
Allow user to specify the new tab page independent of homepage setting.
Fixes: https://gitlab.gnome.org/GNOME/epiphany/-/issues/1569
Part-of: <https://gitlab.gnome.org/GNOME/epiphany/-/merge_requests/999>
-rw-r--r-- | data/org.gnome.epiphany.gschema.xml | 5 | ||||
-rw-r--r-- | embed/ephy-web-view.c | 17 | ||||
-rw-r--r-- | lib/ephy-prefs.h | 7 | ||||
-rw-r--r-- | src/preferences/prefs-general-page.c | 64 | ||||
-rw-r--r-- | src/resources/gtk/prefs-general-page.ui | 20 |
5 files changed, 111 insertions, 2 deletions
diff --git a/data/org.gnome.epiphany.gschema.xml b/data/org.gnome.epiphany.gschema.xml index 5925672c9..62ddb0c96 100644 --- a/data/org.gnome.epiphany.gschema.xml +++ b/data/org.gnome.epiphany.gschema.xml @@ -17,6 +17,11 @@ <summary>Home page</summary> <description>Address of the user’s home page.</description> </key> + <key name="new-tab-page" enum="org.gnome.Epiphany.EphyPrefsNewTabPage"> + <default>'homepage'</default> + <summary>New tab page.</summary> + <description>Selects which page should be shown as a new page tab. Possible values are “homepage” and “blank”.</description> + </key> <key type="s" name="default-search-engine"> <default>'DuckDuckGo'</default> <summary>Default search engine.</summary> diff --git a/embed/ephy-web-view.c b/embed/ephy-web-view.c index 0250fe452..3aa6af238 100644 --- a/embed/ephy-web-view.c +++ b/embed/ephy-web-view.c @@ -3810,6 +3810,7 @@ ephy_web_view_load_new_tab_page (EphyWebView *view) { EphyEmbedShell *shell; EphyEmbedShellMode mode; + g_autofree char *home = NULL; g_assert (EPHY_IS_WEB_VIEW (view)); @@ -3822,8 +3823,20 @@ ephy_web_view_load_new_tab_page (EphyWebView *view) ephy_web_view_load_url (view, "about:incognito"); else if (mode == EPHY_EMBED_SHELL_MODE_AUTOMATION) ephy_web_view_load_url (view, "about:blank"); - else - ephy_web_view_load_url (view, "about:overview"); + else { + EphyPrefsNewTabPage new_tab_page = g_settings_get_enum (EPHY_SETTINGS_MAIN, EPHY_PREFS_NEW_TAB_PAGE); + + if (new_tab_page == EPHY_PREFS_NEW_TAB_PAGE_BLANK) + ephy_web_view_load_url (view, "about:blank"); + else { + home = g_settings_get_string (EPHY_SETTINGS_MAIN, EPHY_PREFS_HOMEPAGE_URL); + + if (new_tab_page == EPHY_PREFS_NEW_TAB_PAGE_HOMEPAGE && home && home[0] != '\0') + ephy_web_view_load_url (view, home); + else + ephy_web_view_load_url (view, "about:overview"); + } + } } /** diff --git a/lib/ephy-prefs.h b/lib/ephy-prefs.h index 41c08a3a2..de3830495 100644 --- a/lib/ephy-prefs.h +++ b/lib/ephy-prefs.h @@ -37,6 +37,12 @@ typedef enum typedef enum { + EPHY_PREFS_NEW_TAB_PAGE_HOMEPAGE, + EPHY_PREFS_NEW_TAB_PAGE_BLANK +} EphyPrefsNewTabPage; + +typedef enum +{ EPHY_PREFS_RESTORE_SESSION_POLICY_ALWAYS, EPHY_PREFS_RESTORE_SESSION_POLICY_CRASHED } EphyPrefsRestoreSessionPolicy; @@ -153,6 +159,7 @@ static const char * const ephy_prefs_web_schema[] = { #define EPHY_PREFS_START_IN_INCOGNITO_MODE "start-in-incognito-mode" #define EPHY_PREFS_ACTIVE_CLEAR_DATA_ITEMS "active-clear-data-items" #define EPHY_PREFS_USE_GOOGLE_SEARCH_SUGGESTIONS "use-google-search-suggestions" +#define EPHY_PREFS_NEW_TAB_PAGE "new-tab-page" #define EPHY_PREFS_LOCKDOWN_SCHEMA "org.gnome.Epiphany.lockdown" #define EPHY_PREFS_LOCKDOWN_FULLSCREEN "disable-fullscreen" diff --git a/src/preferences/prefs-general-page.c b/src/preferences/prefs-general-page.c index b3ca9747f..9b83eb64c 100644 --- a/src/preferences/prefs-general-page.c +++ b/src/preferences/prefs-general-page.c @@ -28,6 +28,7 @@ #include "ephy-flatpak-utils.h" #include "ephy-lang-row.h" #include "ephy-langs.h" +#include "ephy-lib-type-builtins.h" #include "ephy-settings.h" #include "ephy-search-engine-listbox.h" #include "ephy-web-app-utils.h" @@ -64,6 +65,9 @@ struct _PrefsGeneralPage { GtkWidget *custom_homepage_radiobutton; GtkWidget *custom_homepage_entry; + /* New Tab */ + GtkWidget *new_tab_page; + /* Downloads */ GtkWidget *download_box; GtkWidget *ask_on_download_switch; @@ -891,6 +895,50 @@ on_manage_webapp_additional_urls_row_activated (GtkWidget *button, gtk_window_present (GTK_WINDOW (urls_dialog)); } +static gchar * +new_tab_page_get_name (gpointer user_data, + EphyPrefsNewTabPage new_tab_page) +{ + switch (new_tab_page) { + case EPHY_PREFS_NEW_TAB_PAGE_HOMEPAGE: + return g_strdup (_("Homepage")); + case EPHY_PREFS_NEW_TAB_PAGE_BLANK: + return g_strdup (_("Blank")); + } + + return g_strdup (_("Blank")); +} + +static gboolean +new_tab_page_get_mapping (GValue *value, + GVariant *variant, + gpointer user_data) +{ + const char *settings = g_variant_get_string (variant, NULL); + + if (g_strcmp0 (settings, "homepage") == 0) + g_value_set_uint (value, EPHY_PREFS_NEW_TAB_PAGE_HOMEPAGE); + else if (g_strcmp0 (settings, "blank") == 0) + g_value_set_uint (value, EPHY_PREFS_NEW_TAB_PAGE_BLANK); + + return TRUE; +} + +static GVariant * +new_tab_page_set_mapping (const GValue *value, + const GVariantType *expected_type, + gpointer user_data) +{ + switch (g_value_get_uint (value)) { + case EPHY_PREFS_NEW_TAB_PAGE_HOMEPAGE: + return g_variant_new_string ("homepage"); + case EPHY_PREFS_NEW_TAB_PAGE_BLANK: + return g_variant_new_string ("blank"); + default: + return g_variant_new_string ("homepage"); + } +} + static void prefs_general_page_class_init (PrefsGeneralPageClass *klass) { @@ -920,6 +968,9 @@ prefs_general_page_class_init (PrefsGeneralPageClass *klass) gtk_widget_class_bind_template_child (widget_class, PrefsGeneralPage, custom_homepage_radiobutton); gtk_widget_class_bind_template_child (widget_class, PrefsGeneralPage, custom_homepage_entry); + /* New Tab */ + gtk_widget_class_bind_template_child (widget_class, PrefsGeneralPage, new_tab_page); + /* Downloads */ gtk_widget_class_bind_template_child (widget_class, PrefsGeneralPage, download_box); gtk_widget_class_bind_template_child (widget_class, PrefsGeneralPage, ask_on_download_switch); @@ -946,6 +997,7 @@ prefs_general_page_class_init (PrefsGeneralPageClass *klass) gtk_widget_class_bind_template_child (widget_class, PrefsGeneralPage, enable_spell_checking_switch); /* Signals */ + gtk_widget_class_bind_template_callback (widget_class, new_tab_page_get_name); gtk_widget_class_bind_template_callback (widget_class, on_webapp_icon_row_activated); gtk_widget_class_bind_template_callback (widget_class, on_webapp_entry_changed); gtk_widget_class_bind_template_callback (widget_class, on_manage_webapp_additional_urls_row_activated); @@ -1067,6 +1119,18 @@ setup_general_page (PrefsGeneralPage *general_page) NULL); /* ======================================================================== */ + /* =========================== New Tab ==================================== */ + /* ======================================================================== */ + g_settings_bind_with_mapping (settings, + EPHY_PREFS_NEW_TAB_PAGE, + general_page->new_tab_page, + "selected", + G_SETTINGS_BIND_DEFAULT, + new_tab_page_get_mapping, + new_tab_page_set_mapping, + NULL, NULL); + + /* ======================================================================== */ /* ========================== Downloads =================================== */ /* ======================================================================== */ if (ephy_is_running_inside_sandbox ()) diff --git a/src/resources/gtk/prefs-general-page.ui b/src/resources/gtk/prefs-general-page.ui index cca5de9bf..7ffa37ce4 100644 --- a/src/resources/gtk/prefs-general-page.ui +++ b/src/resources/gtk/prefs-general-page.ui @@ -131,6 +131,26 @@ </object> </child> <child> + <object class="AdwPreferencesGroup" id="new_tab_box"> + <property name="title" translatable="yes">New Tab</property> + <child> + <object class="AdwComboRow" id="new_tab_page"> + <property name="title" translatable="yes">New Tab Page</property> + <property name="expression"> + <closure type="gchararray" function="new_tab_page_get_name"> + <lookup name="value" type="AdwEnumListItem"/> + </closure> + </property> + <property name="model"> + <object class="AdwEnumListModel"> + <property name="enum-type">EphyPrefsNewTabPage</property> + </object> + </property> + </object> + </child> + </object> + </child> + <child> <object class="AdwPreferencesGroup" id="download_box"> <property name="title" translatable="yes">Downloads</property> <child> |