summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Garcia Campos <[email protected]>2015-07-24 09:32:31 +0200
committerinfirit <[email protected]>2015-07-24 09:32:31 +0200
commit380b232a6fe2a8871a2fe44bd196ae32b6a4d3e5 (patch)
treee78dedc6069f4250dd9e22205a677ea25c8f07a8
parent1d28040885192ecf832c655d955e9e65d6ef0249 (diff)
downloadatril-380b232a6fe2a8871a2fe44bd196ae32b6a4d3e5.tar.bz2
atril-380b232a6fe2a8871a2fe44bd196ae32b6a4d3e5.tar.xz
Save always settings that can bse saved as default in metadata
We relided on default values to store settings in metadata, so that settings that don't change are not saved in metdata. Now that default settings can change, that approach doesn't work, so we need o save all settings in metadata. evince commit: 720eebf9f0dd2e6a2765f6117f3bce9d7c74fcfa evince bug: https://bugzilla.gnome.org/show_bug.cgi?id=639003
-rw-r--r--shell/ev-metadata.c7
-rw-r--r--shell/ev-metadata.h2
-rw-r--r--shell/ev-window.c250
3 files changed, 131 insertions, 128 deletions
diff --git a/shell/ev-metadata.c b/shell/ev-metadata.c
index da393e1b..dba8e511 100644
--- a/shell/ev-metadata.c
+++ b/shell/ev-metadata.c
@@ -290,6 +290,13 @@ ev_metadata_set_boolean (EvMetadata *metadata,
}
gboolean
+ev_metadata_has_key (EvMetadata *metadata,
+ const gchar *key)
+{
+ return g_hash_table_lookup (metadata->items, key) != NULL;
+}
+
+gboolean
ev_is_metadata_supported_for_file (GFile *file)
{
GFileAttributeInfoList *namespaces;
diff --git a/shell/ev-metadata.h b/shell/ev-metadata.h
index edb5320d..57f4397b 100644
--- a/shell/ev-metadata.h
+++ b/shell/ev-metadata.h
@@ -62,6 +62,8 @@ gboolean ev_metadata_get_boolean (EvMetadata *metadata,
gboolean ev_metadata_set_boolean (EvMetadata *metadata,
const gchar *key,
gboolean value);
+gboolean ev_metadata_has_key (EvMetadata *metadata,
+ const gchar *key);
gboolean ev_is_metadata_supported_for_file (GFile *file);
diff --git a/shell/ev-window.c b/shell/ev-window.c
index 69c43a1e..16d86975 100644
--- a/shell/ev-window.c
+++ b/shell/ev-window.c
@@ -205,7 +205,6 @@ struct _EvWindowPrivate {
EvWindowTitle *title;
EvMetadata *metadata;
EvBookmarks *bookmarks;
- gboolean is_new_doc;
/* Load params */
EvLinkDest *dest;
@@ -1097,120 +1096,110 @@ update_document_mode (EvWindow *window, EvDocumentMode mode)
}
static void
-setup_chrome_from_metadata (EvWindow *window)
+ev_window_init_metadata_with_default_values (EvWindow *window)
{
- EvChrome chrome = EV_CHROME_NORMAL;
- gboolean show_toolbar = TRUE;
+ GSettings *settings = window->priv->default_settings;
+ EvMetadata *metadata = window->priv->metadata;
- if (ev_window_is_empty (window)) {
- window->priv->chrome = chrome;
+ /* Chrome */
+ if (!ev_metadata_has_key (metadata, "show_toolbar")) {
+ ev_metadata_set_boolean (metadata, "show_toolbar",
+ g_settings_get_boolean (settings, "show-toolbar"));
+ }
+ if (!ev_metadata_has_key (metadata, "sidebar_visibility")) {
+ ev_metadata_set_boolean (metadata, "sidebar_visibility",
+ g_settings_get_boolean (settings, "show-sidebar"));
+ }
- return;
+ /* Sidebar */
+ if (!ev_metadata_has_key (metadata, "sidebar_size")) {
+ ev_metadata_set_int (metadata, "sidebar_size",
+ g_settings_get_int (settings, "sidebar-size"));
+ }
+ if (!ev_metadata_has_key (metadata, "sidebar_page")) {
+ gchar *sidebar_page_id = g_settings_get_string (settings, "sidebar-page");
+
+ ev_metadata_set_string (metadata, "sidebar_page", sidebar_page_id);
+ g_free (sidebar_page_id);
+ }
+
+ /* Document model */
+ if (!ev_metadata_has_key (metadata, "continuous")) {
+ ev_metadata_set_boolean (metadata, "continuous",
+ g_settings_get_boolean (settings, "continuous"));
}
+ if (!ev_metadata_has_key (metadata, "dual-page")) {
+ ev_metadata_set_boolean (metadata, "dual-page",
+ g_settings_get_boolean (settings, "dual-page"));
+ }
+ if (!ev_metadata_has_key (metadata, "inverted-colors")) {
+ ev_metadata_set_boolean (metadata, "inverted-colors",
+ g_settings_get_boolean (settings, "inverted-colors"));
+ }
+ if (!ev_metadata_has_key (metadata, "sizing_mode")) {
+ EvSizingMode mode = g_settings_get_enum (settings, "sizing-mode");
+ GEnumValue *enum_value = g_enum_get_value (g_type_class_peek (EV_TYPE_SIZING_MODE), mode);
- if (!window->priv->metadata) {
- show_toolbar = g_settings_get_boolean (window->priv->default_settings, "show-toolbar");
- } else if (!ev_metadata_get_boolean (window->priv->metadata, "show_toolbar", &show_toolbar)) {
- if (window->priv->is_new_doc)
- show_toolbar = g_settings_get_boolean (window->priv->default_settings, "show-toolbar");
+ ev_metadata_set_string (metadata, "sizing_mode", enum_value->value_nick);
}
- if (!show_toolbar)
- chrome &= ~EV_CHROME_TOOLBAR;
+ if (!ev_metadata_has_key (metadata, "zoom")) {
+ ev_metadata_set_double (metadata, "zoom",
+ g_settings_get_double (settings, "zoom"));
+ }
- window->priv->chrome = chrome;
+ if (!ev_metadata_has_key (metadata, "fullscreen")) {
+ ev_metadata_set_boolean (metadata, "fullscreen",
+ g_settings_get_boolean (settings, "fullscreen"));
+ }
}
static void
-setup_sidebar_from_metadata (EvWindow *window)
+setup_chrome_from_metadata (EvWindow *window)
{
- EvDocument *document = window->priv->document;
- GSettings *settings = window->priv->default_settings;
- gchar *page_id;
- gint sidebar_size;
- gboolean sidebar_visibility = TRUE;
+ gboolean show_toolbar;
+ gboolean show_sidebar;
- if (ev_window_is_empty (window))
+ if (!window->priv->metadata)
return;
- if (!window->priv->metadata) {
- sidebar_visibility = g_settings_get_boolean (settings, "show-sidebar");
- } else if (!ev_metadata_get_boolean (window->priv->metadata, "sidebar_visibility", &sidebar_visibility)) {
- if (window->priv->is_new_doc)
- sidebar_visibility = g_settings_get_boolean (settings, "show-sidebar");
- }
-
- update_chrome_flag (window, EV_CHROME_SIDEBAR, sidebar_visibility);
+ if (ev_metadata_get_boolean (window->priv->metadata, "show_toolbar", &show_toolbar))
+ update_chrome_flag (window, EV_CHROME_TOOLBAR, show_toolbar);
+ if (ev_metadata_get_boolean (window->priv->metadata, "sidebar_visibility", &show_sidebar))
+ update_chrome_flag (window, EV_CHROME_SIDEBAR, show_sidebar);
update_chrome_visibility (window);
+}
- if (!window->priv->metadata) {
- /* Set default values */
- gtk_paned_set_position (GTK_PANED (window->priv->hpaned),
- g_settings_get_int (settings, "sidebar-size"));
- if (document) {
- page_id = g_settings_get_string (settings, "sidebar-page");
- ev_window_sidebar_set_current_page (window, page_id);
- g_free (page_id);
- }
+static void
+setup_sidebar_from_metadata (EvWindow *window)
+{
+ gchar *page_id;
+ gint sidebar_size;
+ if (!window->priv->metadata)
return;
- }
- if (ev_metadata_get_int (window->priv->metadata, "sidebar_size", &sidebar_size)) {
+ if (ev_metadata_get_int (window->priv->metadata, "sidebar_size", &sidebar_size))
gtk_paned_set_position (GTK_PANED (window->priv->hpaned), sidebar_size);
- } else if (window->priv->is_new_doc) {
- gtk_paned_set_position (GTK_PANED (window->priv->hpaned),
- g_settings_get_int (settings, "sidebar-size"));
- }
-
- if (!document)
- return;
- if (ev_metadata_get_string (window->priv->metadata, "sidebar_page", &page_id)) {
- ev_window_sidebar_set_current_page (window, page_id);
- } else if (window->priv->is_new_doc) {
- page_id = g_settings_get_string (settings, "sidebar-page");
+ if (ev_metadata_get_string (window->priv->metadata, "sidebar_page", &page_id))
ev_window_sidebar_set_current_page (window, page_id);
- g_free (page_id);
- }
}
static void
setup_model_from_metadata (EvWindow *window)
{
- GSettings *settings = window->priv->default_settings;
- gint page;
- gchar *sizing_mode;
- gdouble zoom;
- gint rotation;
- gboolean inverted_colors = FALSE;
- gboolean continuous = FALSE;
- gboolean dual_page = FALSE;
- gboolean fullscreen = FALSE;
-
- if (!window->priv->metadata) {
- EvSizingMode sizing_mode;
-
- /* Set default values */
- sizing_mode = g_settings_get_enum (settings, "sizing-mode");
- ev_document_model_set_sizing_mode (window->priv->model, sizing_mode);
- if (sizing_mode == EV_SIZING_FREE) {
- zoom = g_settings_get_double (settings, "zoom");
- zoom *= get_screen_dpi (window) / 72.0;
- ev_document_model_set_scale (window->priv->model, zoom);
- }
- ev_document_model_set_inverted_colors (window->priv->model,
- g_settings_get_boolean (settings, "inverted-colors"));
- ev_document_model_set_continuous (window->priv->model,
- g_settings_get_boolean (settings, "continuous"));
- ev_document_model_set_dual_page (window->priv->model,
- g_settings_get_boolean (settings, "dual-page"));
- fullscreen = g_settings_get_boolean (settings, "fullscreen");
- if (fullscreen)
- ev_window_run_fullscreen (window);
+ gint page;
+ gchar *sizing_mode;
+ gdouble zoom;
+ gint rotation;
+ gboolean inverted_colors = FALSE;
+ gboolean continuous = FALSE;
+ gboolean dual_page = FALSE;
+ gboolean fullscreen = FALSE;
+ if (!window->priv->metadata)
return;
- }
/* Current page */
if (!window->priv->dest &&
@@ -1225,9 +1214,6 @@ setup_model_from_metadata (EvWindow *window)
enum_value = g_enum_get_value_by_nick
(g_type_class_peek (EV_TYPE_SIZING_MODE), sizing_mode);
ev_document_model_set_sizing_mode (window->priv->model, enum_value->value);
- } else if (window->priv->is_new_doc) {
- ev_document_model_set_sizing_mode (window->priv->model,
- g_settings_get_enum (settings, "sizing-mode"));
}
/* Zoom */
@@ -1235,10 +1221,6 @@ setup_model_from_metadata (EvWindow *window)
if (ev_metadata_get_double (window->priv->metadata, "zoom", &zoom)) {
zoom *= get_screen_dpi (window) / 72.0;
ev_document_model_set_scale (window->priv->model, zoom);
- } else if (window->priv->is_new_doc) {
- zoom = g_settings_get_double (settings, "zoom");
- zoom *= get_screen_dpi (window) / 72.0;
- ev_document_model_set_scale (window->priv->model, zoom);
}
}
@@ -1264,35 +1246,23 @@ setup_model_from_metadata (EvWindow *window)
/* Inverted Colors */
if (ev_metadata_get_boolean (window->priv->metadata, "inverted-colors", &inverted_colors)) {
ev_document_model_set_inverted_colors (window->priv->model, inverted_colors);
- } else if (window->priv->is_new_doc) {
- ev_document_model_set_inverted_colors (window->priv->model,
- g_settings_get_boolean (settings, "inverted-colors"));
}
/* Continuous */
if (ev_metadata_get_boolean (window->priv->metadata, "continuous", &continuous)) {
ev_document_model_set_continuous (window->priv->model, continuous);
- } else if (window->priv->is_new_doc) {
- ev_document_model_set_continuous (window->priv->model,
- g_settings_get_boolean (settings, "continuous"));
}
/* Dual page */
if (ev_metadata_get_boolean (window->priv->metadata, "dual-page", &dual_page)) {
ev_document_model_set_dual_page (window->priv->model, dual_page);
- } else if (window->priv->is_new_doc) {
- ev_document_model_set_dual_page (window->priv->model,
- g_settings_get_boolean (settings, "dual-page"));
}
/* Fullscreen */
- if (!ev_metadata_get_boolean (window->priv->metadata, "fullscreen", &fullscreen)) {
- if (window->priv->is_new_doc)
- fullscreen = g_settings_get_boolean (settings, "fullscreen");
+ if (ev_metadata_get_boolean (window->priv->metadata, "fullscreen", &fullscreen)) {
+ if (fullscreen)
+ ev_window_run_fullscreen (window);
}
-
- if (fullscreen)
- ev_window_run_fullscreen (window);
}
static void
@@ -1304,22 +1274,23 @@ setup_document_from_metadata (EvWindow *window)
gdouble width_ratio;
gdouble height_ratio;
+ if (!window->priv->metadata)
+ return;
+
setup_sidebar_from_metadata (window);
- if (window->priv->metadata) {
- /* Make sure to not open a document on the last page,
- * since closing it on the last page most likely means the
- * user was finished reading the document. In that case, reopening should
- * show the first page. */
- page = ev_document_model_get_page (window->priv->model);
- n_pages = ev_document_get_n_pages (window->priv->document);
- if (page == n_pages - 1)
- ev_document_model_set_page (window->priv->model, 0);
+ /* Make sure to not open a document on the last page,
+ * since closing it on the last page most likely means the
+ * user was finished reading the document. In that case, reopening should
+ * show the first page. */
+ page = ev_document_model_get_page (window->priv->model);
+ n_pages = ev_document_get_n_pages (window->priv->document);
+ if (page == n_pages - 1)
+ ev_document_model_set_page (window->priv->model, 0);
- if (ev_metadata_get_int (window->priv->metadata, "window_width", &width) &&
- ev_metadata_get_int (window->priv->metadata, "window_height", &height))
- return; /* size was already set in setup_size_from_metadata */
- }
+ if (ev_metadata_get_int (window->priv->metadata, "window_width", &width) &&
+ ev_metadata_get_int (window->priv->metadata, "window_height", &height))
+ return; /* size was already set in setup_size_from_metadata */
g_settings_get (window->priv->default_settings, "window-ratio", "(dd)", &width_ratio, &height_ratio);
if (width_ratio > 0. && height_ratio > 0.) {
@@ -1403,6 +1374,33 @@ setup_view_from_metadata (EvWindow *window)
}
static void
+ev_window_setup_default (EvWindow *ev_window)
+{
+ EvDocumentModel *model = ev_window->priv->model;
+ GSettings *settings = ev_window->priv->default_settings;
+
+ /* Chrome */
+ update_chrome_flag (ev_window, EV_CHROME_TOOLBAR,
+ g_settings_get_boolean (settings, "show-toolbar"));
+ update_chrome_flag (ev_window, EV_CHROME_SIDEBAR,
+ g_settings_get_boolean (settings, "show-sidebar"));
+ update_chrome_visibility (ev_window);
+
+ /* Sidebar */
+ gtk_paned_set_position (GTK_PANED (ev_window->priv->hpaned),
+ g_settings_get_int (settings, "sidebar-size"));
+
+ /* Document model */
+ ev_document_model_set_continuous (model, g_settings_get_boolean (settings, "continuous"));
+ ev_document_model_set_dual_page (model, g_settings_get_boolean (settings, "dual-page"));
+ ev_document_model_set_inverted_colors (model, g_settings_get_boolean (settings, "inverted-colors"));
+ ev_document_model_set_sizing_mode (model, g_settings_get_enum (settings, "sizing-mode"));
+ if (ev_document_model_get_sizing_mode (model) == EV_SIZING_FREE)
+ ev_document_model_set_scale (model, g_settings_get_double (settings, "zoom"));
+}
+
+
+static void
ev_window_clear_thumbnail_job (EvWindow *ev_window)
{
if (ev_window->priv->thumbnail_job != NULL) {
@@ -2182,7 +2180,7 @@ ev_window_open_uri (EvWindow *ev_window,
source_file = g_file_new_for_uri (uri);
if (!ev_file_is_temp (source_file) && ev_is_metadata_supported_for_file (source_file)) {
ev_window->priv->metadata = ev_metadata_new (source_file);
- ev_window->priv->is_new_doc = ev_metadata_is_empty (ev_window->priv->metadata);
+ ev_window_init_metadata_with_default_values (ev_window);
} else {
ev_window->priv->metadata = NULL;
}
@@ -7420,6 +7418,7 @@ ev_window_init (EvWindow *ev_window)
ev_window->priv->model = ev_document_model_new ();
ev_window->priv->page_mode = PAGE_MODE_DOCUMENT;
+ ev_window->priv->chrome = EV_CHROME_NORMAL;
ev_window->priv->title = ev_window_title_new (ev_window);
ev_window->priv->main_box = gtk_vbox_new (FALSE, 0);
@@ -7790,21 +7789,16 @@ ev_window_init (EvWindow *ev_window)
ev_window->priv->default_settings = g_settings_new (GS_SCHEMA_NAME".Default");
g_settings_delay (ev_window->priv->default_settings);
+ ev_window_setup_default (ev_window);
+ update_chrome_actions (ev_window);
/* Set it user interface params */
ev_window_setup_recent (ev_window);
ev_window_setup_gtk_settings (ev_window);
- setup_chrome_from_metadata (ev_window);
- update_chrome_actions (ev_window);
- update_chrome_visibility (ev_window);
-
gtk_window_set_default_size (GTK_WINDOW (ev_window), 600, 600);
- setup_view_from_metadata (ev_window);
- setup_sidebar_from_metadata (ev_window);
-
ev_window_sizing_mode_changed_cb (ev_window->priv->model, NULL, ev_window);
ev_window_setup_action_sensitivity (ev_window);