From c10fbb47f82e7cd9602c575d3739438d7a787d9c Mon Sep 17 00:00:00 2001 From: Carlos Garcia Campos Date: Sun, 28 Jul 2013 10:51:12 +0200 Subject: Store the caret cursor position in document metadata origin commit: https://git.gnome.org/browse/evince/commit/?h=gnome-3-10&id=3e468fa --- shell/ev-window.c | 49 +++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 45 insertions(+), 4 deletions(-) (limited to 'shell') diff --git a/shell/ev-window.c b/shell/ev-window.c index 9ad35037..afece3ca 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -1009,6 +1009,26 @@ view_layers_changed_cb (EvView *view, ev_sidebar_layers_update_layers_state (EV_SIDEBAR_LAYERS (window->priv->sidebar_layers)); } +static void +view_caret_cursor_moved_cb (EvView *view, + guint page, + guint offset, + EvWindow *window) +{ + GVariant *position; + gchar *caret_position; + + if (!window->priv->metadata) + return; + + position = g_variant_new ("(uu)", page, offset); + caret_position = g_variant_print (position, FALSE); + g_variant_unref (position); + + ev_metadata_set_string (window->priv->metadata, "caret-position", caret_position); + g_free (caret_position); +} + static void ev_window_page_changed_cb (EvWindow *ev_window, gint old_page, @@ -1387,7 +1407,7 @@ setup_size_from_metadata (EvWindow *window) static void setup_view_from_metadata (EvWindow *window) { - gboolean presentation, caret_navigation; + gboolean presentation; if (!window->priv->metadata) return; @@ -1405,9 +1425,27 @@ setup_view_from_metadata (EvWindow *window) } /* Caret navigation mode */ - if (ev_view_supports_caret_navigation (EV_VIEW (window->priv->view)) && - ev_metadata_get_boolean (window->priv->metadata, "caret-navigation", &caret_navigation)) { - ev_view_set_caret_navigation_enabled (EV_VIEW (window->priv->view), caret_navigation); + if (ev_view_supports_caret_navigation (EV_VIEW (window->priv->view))) { + gboolean caret_navigation; + gchar *caret_position; + + if (ev_metadata_get_string (window->priv->metadata, "caret-position", &caret_position)) { + GVariant *position; + + position = g_variant_parse (G_VARIANT_TYPE ("(uu)"), caret_position, NULL, NULL, NULL); + if (position) { + guint page, offset; + + g_variant_get (position, "(uu)", &page, &offset); + g_variant_unref (position); + + ev_view_set_caret_cursor_position (EV_VIEW (window->priv->view), + page, offset); + } + } + + if (ev_metadata_get_boolean (window->priv->metadata, "caret-navigation", &caret_navigation)) + ev_view_set_caret_navigation_enabled (EV_VIEW (window->priv->view), caret_navigation); } } @@ -7980,6 +8018,9 @@ ev_window_init (EvWindow *ev_window) g_signal_connect_object (ev_window->priv->view, "layers-changed", G_CALLBACK (view_layers_changed_cb), ev_window, 0); + g_signal_connect_object (ev_window->priv->view, "cursor-moved", + G_CALLBACK (view_caret_cursor_moved_cb), + ev_window, 0); #ifdef ENABLE_DBUS g_signal_connect_swapped (ev_window->priv->view, "sync-source", G_CALLBACK (ev_window_sync_source), -- cgit v1.2.1