+static void
+ev_window_page_changed_cb (EvWindow *ev_window,
+ gint old_page,
+ gint new_page,
+ EvDocumentModel *model)
+{
+ ev_window_update_actions (ev_window);
+
+ ev_window_update_find_status_message (ev_window);
+
+ if (abs (new_page - old_page) > 1) {
+ ev_window_add_history (ev_window, new_page, NULL);
+ ev_window_add_history (ev_window, old_page, NULL);
+ }
+
+ if (ev_window->priv->metadata && !ev_window_is_empty (ev_window))
+ ev_metadata_set_int (ev_window->priv->metadata, "page", new_page);
+}
+
+static const gchar *
+ev_window_sidebar_get_current_page_id (EvWindow *ev_window)
+{
+ GtkWidget *current_page;
+ const gchar *id;
+
+ g_object_get (ev_window->priv->sidebar,
+ "current_page", ¤t_page,
+ NULL);
+
+ if (current_page == ev_window->priv->sidebar_links) {
+ id = LINKS_SIDEBAR_ID;
+ } else if (current_page == ev_window->priv->sidebar_thumbs) {
+ id = THUMBNAILS_SIDEBAR_ID;
+ } else if (current_page == ev_window->priv->sidebar_attachments) {
+ id = ATTACHMENTS_SIDEBAR_ID;
+ } else if (current_page == ev_window->priv->sidebar_layers) {
+ id = LAYERS_SIDEBAR_ID;
+ } else if (current_page == ev_window->priv->sidebar_annots) {
+ id = ANNOTS_SIDEBAR_ID;
+ } else if (current_page == ev_window->priv->sidebar_bookmarks) {
+ id = BOOKMARKS_SIDEBAR_ID;
+ } else {
+ g_assert_not_reached();
+ }
+
+ g_object_unref (current_page);
+
+ return id;
+}
+
+static void
+ev_window_sidebar_set_current_page (EvWindow *window,
+ const gchar *page_id)
+{
+ EvDocument *document = window->priv->document;
+ EvSidebar *sidebar = EV_SIDEBAR (window->priv->sidebar);
+ GtkWidget *links = window->priv->sidebar_links;
+ GtkWidget *thumbs = window->priv->sidebar_thumbs;
+ GtkWidget *attachments = window->priv->sidebar_attachments;
+ GtkWidget *annots = window->priv->sidebar_annots;
+ GtkWidget *layers = window->priv->sidebar_layers;
+ GtkWidget *bookmarks = window->priv->sidebar_bookmarks;
+
+ if (strcmp (page_id, LINKS_SIDEBAR_ID) == 0 &&
+ ev_sidebar_page_support_document (EV_SIDEBAR_PAGE (links), document)) {
+ ev_sidebar_set_page (sidebar, links);
+ } else if (strcmp (page_id, THUMBNAILS_SIDEBAR_ID) == 0 &&
+ ev_sidebar_page_support_document (EV_SIDEBAR_PAGE (thumbs), document)) {
+ ev_sidebar_set_page (sidebar, thumbs);
+ } else if (strcmp (page_id, ATTACHMENTS_SIDEBAR_ID) == 0 &&
+ ev_sidebar_page_support_document (EV_SIDEBAR_PAGE (attachments), document)) {
+ ev_sidebar_set_page (sidebar, attachments);
+ } else if (strcmp (page_id, LAYERS_SIDEBAR_ID) == 0 &&
+ ev_sidebar_page_support_document (EV_SIDEBAR_PAGE (layers), document)) {
+ ev_sidebar_set_page (sidebar, layers);
+ } else if (strcmp (page_id, ANNOTS_SIDEBAR_ID) == 0 &&
+ ev_sidebar_page_support_document (EV_SIDEBAR_PAGE (annots), document)) {
+ ev_sidebar_set_page (sidebar, annots);
+ } else if (strcmp (page_id, BOOKMARKS_SIDEBAR_ID) == 0 &&
+ ev_sidebar_page_support_document (EV_SIDEBAR_PAGE (bookmarks), document)) {
+ ev_sidebar_set_page (sidebar, bookmarks);
+ }
+}
+
+static void
+update_document_mode (EvWindow *window, EvDocumentMode mode)
+{
+ if (mode == EV_DOCUMENT_MODE_PRESENTATION) {
+ ev_window_run_presentation (window);
+ }
+ else if (mode == EV_DOCUMENT_MODE_FULL_SCREEN) {
+ ev_window_run_fullscreen (window);
+ }
+}
+
+static void
+setup_chrome_from_metadata (EvWindow *window)
+{
+ EvChrome chrome = EV_CHROME_NORMAL;
+ gboolean show_toolbar = TRUE;
+
+ if (ev_window_is_empty (window)) {
+ window->priv->chrome = chrome;
+
+ return;
+ }
+
+ 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");
+ }
+
+ if (!show_toolbar)
+ chrome &= ~EV_CHROME_TOOLBAR;
+
+ window->priv->chrome = chrome;
+}
+
+static void
+setup_sidebar_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;
+
+ if (ev_window_is_empty (window))
+ 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);
+ 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);
+ }
+
+ return;
+ }
+
+ 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");
+ 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) {
+ /* Set default values */
+ ev_document_model_set_sizing_mode (window->priv->model,
+ g_settings_get_enum (settings, "sizing-mode"));
+ 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);
+
+ return;
+ }
+
+ /* Current page */
+ if (!window->priv->dest &&
+ ev_metadata_get_int (window->priv->metadata, "page", &page)) {
+ ev_document_model_set_page (window->priv->model, page);
+ }
+
+ /* Sizing mode */
+ if (ev_metadata_get_string (window->priv->metadata, "sizing_mode", &sizing_mode)) {
+ GEnumValue *enum_value;
+
+ 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 */
+ if (ev_document_model_get_sizing_mode (window->priv->model) == EV_SIZING_FREE &&
+ 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);
+ }
+
+ /* Rotation */
+ if (ev_metadata_get_int (window->priv->metadata, "rotation", &rotation)) {
+ switch (rotation) {
+ case 90:
+ rotation = 90;
+ break;
+ case 180:
+ rotation = 180;
+ break;
+ case 270:
+ rotation = 270;
+ break;
+ default:
+ rotation = 0;
+ break;
+ }
+ ev_document_model_set_rotation (window->priv->model, rotation);
+ }
+
+ /* 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"));
+ }