diff options
author | Carlos Garcia Campos <[email protected]> | 2015-07-24 09:32:31 +0200 |
---|---|---|
committer | infirit <[email protected]> | 2015-07-24 09:32:31 +0200 |
commit | 380b232a6fe2a8871a2fe44bd196ae32b6a4d3e5 (patch) | |
tree | e78dedc6069f4250dd9e22205a677ea25c8f07a8 /shell | |
parent | 1d28040885192ecf832c655d955e9e65d6ef0249 (diff) | |
download | atril-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
Diffstat (limited to 'shell')
-rw-r--r-- | shell/ev-metadata.c | 7 | ||||
-rw-r--r-- | shell/ev-metadata.h | 2 | ||||
-rw-r--r-- | shell/ev-window.c | 250 |
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); |