[epiphany] Add reader mode options in Preferences dialog
- From: Michael Catanzaro <mcatanzaro src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [epiphany] Add reader mode options in Preferences dialog
- Date: Thu, 30 Aug 2018 16:21:47 +0000 (UTC)
commit 6cfc45eda2ce36b2f0aaa6c57adb7c3d24d1b0a1
Author: Adrian Perez de Castro <aperez igalia com>
Date: Tue Jul 24 02:25:50 2018 +0200
Add reader mode options in Preferences dialog
src/prefs-dialog.c | 122 +++++++++++++++++++++++++++++++++++++-
src/resources/gtk/prefs-dialog.ui | 114 +++++++++++++++++++++++++++++++----
2 files changed, 224 insertions(+), 12 deletions(-)
---
diff --git a/src/prefs-dialog.c b/src/prefs-dialog.c
index f8f780eda..f868d1cc2 100644
--- a/src/prefs-dialog.c
+++ b/src/prefs-dialog.c
@@ -33,6 +33,7 @@
#include "ephy-flatpak-utils.h"
#include "ephy-gui.h"
#include "ephy-langs.h"
+#include "ephy-lib-type-builtins.h"
#include "ephy-prefs.h"
#include "ephy-search-engine-dialog.h"
#include "ephy-session.h"
@@ -93,7 +94,7 @@ struct _PrefsDialog {
GtkWidget *enable_plugins_checkbutton;
GtkWidget *enable_safe_browsing_checkbutton;
- /* fonts */
+ /* fonts & style */
GtkWidget *use_gnome_fonts_checkbutton;
GtkWidget *custom_fonts_table;
GtkWidget *sans_fontbutton;
@@ -101,6 +102,8 @@ struct _PrefsDialog {
GtkWidget *mono_fontbutton;
GtkWidget *css_checkbox;
GtkWidget *css_edit_button;
+ GtkWidget *reader_mode_font_style;
+ GtkWidget *reader_mode_color_scheme;
/* stored data */
GtkWidget *always;
@@ -958,7 +961,7 @@ prefs_dialog_class_init (PrefsDialogClass *klass)
gtk_widget_class_bind_template_child (widget_class, PrefsDialog, download_button_label);
gtk_widget_class_bind_template_child (widget_class, PrefsDialog, download_box);
- /* fonts */
+ /* fonts & style */
gtk_widget_class_bind_template_child (widget_class, PrefsDialog, use_gnome_fonts_checkbutton);
gtk_widget_class_bind_template_child (widget_class, PrefsDialog, custom_fonts_table);
gtk_widget_class_bind_template_child (widget_class, PrefsDialog, sans_fontbutton);
@@ -966,6 +969,8 @@ prefs_dialog_class_init (PrefsDialogClass *klass)
gtk_widget_class_bind_template_child (widget_class, PrefsDialog, mono_fontbutton);
gtk_widget_class_bind_template_child (widget_class, PrefsDialog, css_checkbox);
gtk_widget_class_bind_template_child (widget_class, PrefsDialog, css_edit_button);
+ gtk_widget_class_bind_template_child (widget_class, PrefsDialog, reader_mode_font_style);
+ gtk_widget_class_bind_template_child (widget_class, PrefsDialog, reader_mode_color_scheme);
/* stored data */
gtk_widget_class_bind_template_child (widget_class, PrefsDialog, always);
@@ -1984,12 +1989,124 @@ setup_general_page (PrefsDialog *dialog)
create_download_path_button (dialog);
}
+enum {
+ ENUM_MODEL_COLUMN_LABEL,
+ ENUM_MODEL_COLUMN_NICK,
+ ENUM_MODEL_N_COLUMNS,
+};
+
+typedef struct {
+ gint value;
+ const char *label;
+} EnumModelItem;
+
+static GtkTreeModel *
+enum_model_new (GType enum_type,
+ gsize n_items,
+ const EnumModelItem *items)
+{
+ GtkListStore *model;
+ GEnumClass *enum_class;
+ gsize i;
+
+ enum_class = g_type_class_ref (enum_type);
+ model = gtk_list_store_new (ENUM_MODEL_N_COLUMNS,
+ G_TYPE_STRING,
+ G_TYPE_STRING);
+
+ for (i = 0; i < n_items; i++) {
+ GtkTreeIter iter;
+ const char *nick;
+ guint j;
+
+ nick = NULL;
+ for (j = 0; j < enum_class->n_values; j++) {
+ if (enum_class->values[j].value == items[i].value) {
+ nick = enum_class->values[j].value_nick;
+ break;
+ }
+ }
+ g_assert (nick != NULL);
+
+ gtk_list_store_append (model, &iter);
+ gtk_list_store_set (model,
+ &iter,
+ ENUM_MODEL_COLUMN_LABEL, _(items[i].label),
+ ENUM_MODEL_COLUMN_NICK, nick,
+ -1);
+ }
+
+ g_type_class_unref (enum_class);
+ return GTK_TREE_MODEL (model);
+}
+
+static void
+enum_model_attach (GtkTreeModel *model,
+ GtkComboBox *combobox,
+ GSettings *settings,
+ const char *key)
+{
+ GtkCellRenderer *renderer;
+
+ gtk_cell_layout_clear (GTK_CELL_LAYOUT (combobox));
+
+ gtk_combo_box_set_model (combobox, model);
+ gtk_combo_box_set_id_column (combobox,
+ ENUM_MODEL_COLUMN_NICK);
+
+ g_settings_bind (settings,
+ key,
+ combobox,
+ "active-id",
+ G_SETTINGS_BIND_DEFAULT);
+
+ renderer = gtk_cell_renderer_text_new ();
+ gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
+ renderer,
+ FALSE);
+ gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (combobox),
+ renderer,
+ "text",
+ ENUM_MODEL_COLUMN_LABEL);
+}
+
+static const EnumModelItem reader_font_style_items[] = {
+ { EPHY_PREFS_READER_FONT_STYLE_SANS, N_("Sans") },
+ { EPHY_PREFS_READER_FONT_STYLE_SERIF, N_("Serif") },
+};
+
+static const EnumModelItem reader_color_scheme_items[] = {
+ { EPHY_PREFS_READER_COLORS_LIGHT, N_("Light") },
+ { EPHY_PREFS_READER_COLORS_DARK, N_("Dark") },
+};
+
static void
setup_fonts_page (PrefsDialog *dialog)
{
GSettings *web_settings;
+ GSettings *reader_settings;
+ GtkTreeModel *model;
web_settings = ephy_settings_get (EPHY_PREFS_WEB_SCHEMA);
+ reader_settings = ephy_settings_get (EPHY_PREFS_READER_SCHEMA);
+
+ model = enum_model_new (EPHY_TYPE_PREFS_READER_FONT_STYLE,
+ G_N_ELEMENTS (reader_font_style_items),
+ reader_font_style_items);
+ enum_model_attach (model,
+ GTK_COMBO_BOX (dialog->reader_mode_font_style),
+ reader_settings,
+ EPHY_PREFS_READER_FONT_STYLE);
+ g_object_unref (model);
+
+ model = enum_model_new (EPHY_TYPE_PREFS_READER_COLOR_SCHEME,
+ G_N_ELEMENTS (reader_color_scheme_items),
+ reader_color_scheme_items);
+ enum_model_attach (model,
+ GTK_COMBO_BOX (dialog->reader_mode_color_scheme),
+ reader_settings,
+ EPHY_PREFS_READER_COLOR_SCHEME);
+ g_object_unref (model);
g_settings_bind (web_settings,
EPHY_PREFS_WEB_USE_GNOME_FONTS,
@@ -2027,6 +2144,7 @@ setup_fonts_page (PrefsDialog *dialog)
dialog->css_edit_button,
"sensitive",
G_SETTINGS_BIND_GET);
+
g_signal_connect (dialog->css_edit_button,
"clicked",
G_CALLBACK (css_edit_button_clicked_cb),
diff --git a/src/resources/gtk/prefs-dialog.ui b/src/resources/gtk/prefs-dialog.ui
index eea805285..593f21a53 100644
--- a/src/resources/gtk/prefs-dialog.ui
+++ b/src/resources/gtk/prefs-dialog.ui
@@ -265,7 +265,7 @@
</attributes>
</object>
</child>
- <child>
+ <child>
<object class="GtkButton" id="search_engine_dialog_button">
<property name="label" translatable="yes">_Manage Search Engines</property>
<property name="visible">True</property>
@@ -275,21 +275,21 @@
</child>
</object>
</child>
- <child>
- <object class="GtkLabel">
+ <child>
+ <object class="GtkLabel">
<property name="visible">True</property>
- <property name="margin_left">12</property>
+ <property name="margin_left">12</property>
<property name="halign">start</property>
<property name="label" translatable="yes">You can select different search engines to
use.</property>
<attributes>
</attributes>
</object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
</object>
</child>
<child>
@@ -538,6 +538,100 @@
</child>
</object>
</child>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <property name="margin-top">12</property>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="margin_top">6</property>
+ <property name="label" translatable="yes">Reader Mode</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkGrid">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin_left">12</property>
+ <property name="row_spacing">6</property>
+ <property name="hexpand">True</property>
+ <property name="column_spacing">12</property>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="valign">center</property>
+ <property name="margin_left">12</property>
+ <property name="label" translatable="yes">Font style:</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="valign">center</property>
+ <property name="margin_left">12</property>
+ <property name="label" translatable="yes">Color scheme:</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="reader_mode_font_style">
+ <property name="visible">True</property>
+ <property name="hexpand">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="reader_mode_color_scheme">
+ <property name="visible">True</property>
+ <property name="hexpand">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
</object>
</child>
</object>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]