summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan-Michael Brummer <jan.brummer@tabos.org>2021-08-10 14:40:30 +0200
committerMarge Bot <marge-bot@gnome.org>2023-02-08 18:32:02 +0000
commit9131f927a2b1abcba6b31fdd72bd60d51c6b05f2 (patch)
treeff42cbbf9fdb344b692211b500da1ddd74e2e02b
parentcec91dbd9bd0f712ad471afe36394260fdc2807b (diff)
downloadepiphany-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.xml5
-rw-r--r--embed/ephy-web-view.c17
-rw-r--r--lib/ephy-prefs.h7
-rw-r--r--src/preferences/prefs-general-page.c64
-rw-r--r--src/resources/gtk/prefs-general-page.ui20
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>