summaryrefslogtreecommitdiff
path: root/shell/ev-window.c
diff options
context:
space:
mode:
Diffstat (limited to 'shell/ev-window.c')
-rw-r--r--shell/ev-window.c90
1 files changed, 74 insertions, 16 deletions
diff --git a/shell/ev-window.c b/shell/ev-window.c
index b0768d88..1149c929 100644
--- a/shell/ev-window.c
+++ b/shell/ev-window.c
@@ -482,6 +482,7 @@ ev_window_setup_action_sensitivity (EvWindow *ev_window)
*/
ev_window_set_action_sensitive (ev_window, "ViewContinuous", has_pages && !(document->iswebdocument));
ev_window_set_action_sensitive (ev_window, "ViewDual", has_pages && !(document->iswebdocument));
+ ev_window_set_action_sensitive (ev_window, "ViewDualOddLeft", has_pages);
ev_window_set_action_sensitive (ev_window, "ViewBestFit", has_pages && !(document->iswebdocument));
ev_window_set_action_sensitive (ev_window, "ViewPageWidth", has_pages && !(document->iswebdocument));
ev_window_set_action_sensitive (ev_window, "ViewReload", has_pages);
@@ -1144,6 +1145,10 @@ ev_window_init_metadata_with_default_values (EvWindow *window)
ev_metadata_set_boolean (metadata, "dual-page",
g_settings_get_boolean (settings, "dual-page"));
}
+ if (!ev_metadata_has_key (metadata, "dual-page-odd-left")) {
+ ev_metadata_set_boolean (metadata, "dual-page-odd-left",
+ g_settings_get_boolean (settings, "dual-page-odd-left"));
+ }
if (!ev_metadata_has_key (metadata, "inverted-colors")) {
ev_metadata_set_boolean (metadata, "inverted-colors",
g_settings_get_boolean (settings, "inverted-colors"));
@@ -1208,6 +1213,7 @@ setup_model_from_metadata (EvWindow *window)
gboolean inverted_colors = FALSE;
gboolean continuous = FALSE;
gboolean dual_page = FALSE;
+ gboolean dual_page_odd_left = FALSE;
gboolean fullscreen = FALSE;
if (!window->priv->metadata)
@@ -1270,6 +1276,11 @@ setup_model_from_metadata (EvWindow *window)
ev_document_model_set_dual_page (window->priv->model, dual_page);
}
+ /* Dual page odd pages left */
+ if (ev_metadata_get_boolean (window->priv->metadata, "dual-page-odd-left", &dual_page_odd_left)) {
+ ev_document_model_set_dual_page_odd_pages_left (window->priv->model, dual_page_odd_left);
+ }
+
/* Fullscreen */
if (ev_metadata_get_boolean (window->priv->metadata, "fullscreen", &fullscreen)) {
if (fullscreen)
@@ -1417,6 +1428,7 @@ ev_window_setup_default (EvWindow *ev_window)
/* 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_dual_page_odd_pages_left (model, g_settings_get_boolean (settings, "dual-page-odd-left"));
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)
@@ -3937,6 +3949,17 @@ ev_window_cmd_dual (GtkAction *action, EvWindow *ev_window)
}
static void
+ev_window_cmd_dual_odd_pages_left (GtkAction *action, EvWindow *ev_window)
+{
+ gboolean dual_page_odd_left;
+
+ ev_window_stop_presentation (ev_window, TRUE);
+ dual_page_odd_left = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));
+ ev_document_model_set_dual_page_odd_pages_left (ev_window->priv->model,
+ dual_page_odd_left);
+}
+
+static void
ev_window_cmd_view_best_fit (GtkAction *action, EvWindow *ev_window)
{
ev_window_stop_presentation (ev_window, TRUE);
@@ -4633,6 +4656,8 @@ ev_window_cmd_edit_save_settings (GtkAction *action, EvWindow *ev_window)
ev_document_model_get_continuous (model));
g_settings_set_boolean (settings, "dual-page",
ev_document_model_get_dual_page (model));
+ g_settings_set_boolean (settings, "dual-page-odd-left",
+ ev_document_model_get_dual_page_odd_pages_left (model));
g_settings_set_boolean (settings, "fullscreen",
ev_document_model_get_fullscreen (model));
g_settings_set_boolean (settings, "inverted-colors",
@@ -5023,20 +5048,6 @@ ev_window_update_continuous_action (EvWindow *window)
}
static void
-ev_window_update_dual_page_action (EvWindow *window)
-{
- GtkAction *action;
-
- action = gtk_action_group_get_action (window->priv->action_group, "ViewDual");
- g_signal_handlers_block_by_func
- (action, G_CALLBACK (ev_window_cmd_dual), window);
- gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action),
- ev_document_model_get_dual_page (window->priv->model));
- g_signal_handlers_unblock_by_func
- (action, G_CALLBACK (ev_window_cmd_dual), window);
-}
-
-static void
ev_window_continuous_changed_cb (EvDocumentModel *model,
GParamSpec *pspec,
EvWindow *ev_window)
@@ -5094,6 +5105,20 @@ ev_window_inverted_colors_changed_cb (EvDocumentModel *model,
}
static void
+ev_window_update_dual_page_action (EvWindow *window)
+{
+ GtkAction *action;
+
+ action = gtk_action_group_get_action (window->priv->action_group, "ViewDual");
+ g_signal_handlers_block_by_func
+ (action, G_CALLBACK (ev_window_cmd_dual), window);
+ gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action),
+ ev_document_model_get_dual_page (window->priv->model));
+ g_signal_handlers_unblock_by_func
+ (action, G_CALLBACK (ev_window_cmd_dual), window);
+}
+
+static void
ev_window_dual_mode_changed_cb (EvDocumentModel *model,
GParamSpec *pspec,
EvWindow *ev_window)
@@ -5105,6 +5130,32 @@ ev_window_dual_mode_changed_cb (EvDocumentModel *model,
ev_document_model_get_dual_page (model));
}
+static void
+ev_window_update_dual_page_odd_pages_left_action (EvWindow *window)
+{
+ GtkAction *action;
+
+ action = gtk_action_group_get_action (window->priv->action_group, "ViewDualOddLeft");
+ g_signal_handlers_block_by_func
+ (action, G_CALLBACK (ev_window_cmd_dual_odd_pages_left), window);
+ gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action),
+ ev_document_model_get_dual_page_odd_pages_left (window->priv->model));
+ g_signal_handlers_unblock_by_func
+ (action, G_CALLBACK (ev_window_cmd_dual_odd_pages_left), window);
+}
+
+static void
+ev_window_dual_mode_odd_pages_left_changed_cb (EvDocumentModel *model,
+ GParamSpec *pspec,
+ EvWindow *ev_window)
+{
+ ev_window_update_dual_page_odd_pages_left_action (ev_window);
+
+ if (ev_window->priv->metadata && !ev_window_is_empty (ev_window))
+ ev_metadata_set_boolean (ev_window->priv->metadata, "dual-page-odd-left",
+ ev_document_model_get_dual_page_odd_pages_left (model));
+}
+
static char *
build_comments_string (EvDocument *document)
{
@@ -6278,9 +6329,12 @@ static const GtkToggleActionEntry toggle_entries[] = {
{ "ViewContinuous", EV_STOCK_VIEW_CONTINUOUS, N_("_Continuous"), NULL,
N_("Show the entire document"),
G_CALLBACK (ev_window_cmd_continuous), TRUE },
- { "ViewDual", EV_STOCK_VIEW_DUAL, N_("_Dual"), NULL,
- N_("Show two pages at once"),
+ { "ViewDual", EV_STOCK_VIEW_DUAL, N_("_Dual (Even pages left)"), NULL,
+ N_("Show two pages at once with even pages on the left"),
G_CALLBACK (ev_window_cmd_dual), FALSE },
+ { "ViewDualOddLeft", EV_STOCK_VIEW_DUAL, N_("Dual (_Odd pages left)"), NULL,
+ N_("Show two pages at once with odd pages on the left"),
+ G_CALLBACK (ev_window_cmd_dual_odd_pages_left), FALSE },
{ "ViewFullscreen", GTK_STOCK_FULLSCREEN, N_("_Fullscreen"), "F11",
N_("Expand the window to fill the screen"),
G_CALLBACK (ev_window_cmd_view_fullscreen) },
@@ -7930,6 +7984,10 @@ ev_window_init (EvWindow *ev_window)
G_CALLBACK (ev_window_dual_mode_changed_cb),
ev_window);
g_signal_connect (ev_window->priv->model,
+ "notify::dual-odd-left",
+ G_CALLBACK (ev_window_dual_mode_odd_pages_left_changed_cb),
+ ev_window);
+ g_signal_connect (ev_window->priv->model,
"notify::inverted-colors",
G_CALLBACK (ev_window_inverted_colors_changed_cb),
ev_window);