[evince] history: Record links in history when activating bookmarks



commit 8ac15c3f487b5dde83f77243ce88f77c54d6718f
Author: Casey Jao <casey jao gmail com>
Date:   Tue Sep 5 09:25:11 2017 -0400

    history: Record links in history when activating bookmarks
    
    shell/ev-sidebar-bookmarks.h:
    shell/ev-sidebar-bookmarks.c:
      * Added a new "bookmark-activated" signal to be emitted
        when a bookmark is selected on the sidebar.
    
    shell/ev-window.c:
      * Added a handler for "bookmark-activated" which records
        the appropriate pages in the history.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=785627
    Partially fixes #810 (2/5)

 shell/ev-sidebar-bookmarks.c | 21 +++++++++++++++++++++
 shell/ev-sidebar-bookmarks.h |  3 +++
 shell/ev-window.c            | 21 +++++++++++++++++++++
 3 files changed, 45 insertions(+)
---
diff --git a/shell/ev-sidebar-bookmarks.c b/shell/ev-sidebar-bookmarks.c
index e5b90146..1acccdd3 100644
--- a/shell/ev-sidebar-bookmarks.c
+++ b/shell/ev-sidebar-bookmarks.c
@@ -40,6 +40,13 @@ enum {
         N_COLUMNS
 };
 
+enum {
+        ACTIVATED,
+        N_SIGNALS
+};
+
+static guint signals[N_SIGNALS] = { 0 };
+
 struct _EvSidebarBookmarksPrivate {
         EvDocumentModel *model;
         EvBookmarks     *bookmarks;
@@ -103,9 +110,11 @@ ev_bookmarks_popup_cmd_open_bookmark (GtkAction          *action,
         EvSidebarBookmarksPrivate *priv = sidebar_bookmarks->priv;
         GtkTreeSelection          *selection;
         gint                       page;
+        gint old_page = ev_document_model_get_page (priv->model);
 
         selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->tree_view));
         page = ev_sidebar_bookmarks_get_selected_page (sidebar_bookmarks, selection);
+        g_signal_emit (sidebar_bookmarks, signals[ACTIVATED], 0, old_page, page);
         ev_document_model_set_page (priv->model, page);
 }
 
@@ -226,6 +235,8 @@ ev_sidebar_bookmarks_selection_changed (GtkTreeSelection   *selection,
 
         page = ev_sidebar_bookmarks_get_selected_page (sidebar_bookmarks, selection);
         if (page >= 0) {
+                gint old_page = ev_document_model_get_page (priv->model);
+                g_signal_emit (sidebar_bookmarks, signals[ACTIVATED], 0, old_page, page);
                 ev_document_model_set_page (priv->model, page);
                 gtk_widget_set_sensitive (priv->del_button, TRUE);
         } else {
@@ -553,6 +564,16 @@ ev_sidebar_bookmarks_class_init (EvSidebarBookmarksClass *klass)
         widget_class->popup_menu = ev_sidebar_bookmarks_popup_menu;
 
         g_object_class_override_property (g_object_class, PROP_WIDGET, "main-widget");
+       /* Signals */
+        signals[ACTIVATED] =
+                g_signal_new ("bookmark-activated",
+                              EV_TYPE_SIDEBAR_BOOKMARKS,
+                              G_SIGNAL_RUN_LAST,
+                              G_STRUCT_OFFSET (EvSidebarBookmarksClass, activated),
+                              NULL, NULL,
+                              NULL,
+                              G_TYPE_NONE, 2,
+                              G_TYPE_INT, G_TYPE_INT);
 }
 
 GtkWidget *
diff --git a/shell/ev-sidebar-bookmarks.h b/shell/ev-sidebar-bookmarks.h
index c2438b0d..4efd133f 100644
--- a/shell/ev-sidebar-bookmarks.h
+++ b/shell/ev-sidebar-bookmarks.h
@@ -49,6 +49,9 @@ struct _EvSidebarBookmarksClass {
        GtkBoxClass base_class;
 
         void (*add_bookmark) (EvSidebarBookmarks *sidebar_bookmarks);
+        void (*activated)    (EvSidebarBookmarks *sidebar_bookmarks,
+                              gint                old_page,
+                              gint                page);
 };
 
 GType      ev_sidebar_bookmarks_get_type      (void) G_GNUC_CONST;
diff --git a/shell/ev-window.c b/shell/ev-window.c
index 30618179..a0741500 100644
--- a/shell/ev-window.c
+++ b/shell/ev-window.c
@@ -365,6 +365,10 @@ static void        view_handle_link_cb                     (EvView           *view,
                                                         gint              old_page,
                                                         EvLink           *link, 
                                                         EvWindow         *window);
+static void    bookmark_activated_cb                   (EvSidebarBookmarks *sidebar_bookmarks,
+                                                        gint              old_page,
+                                                        gint              page,
+                                                        EvWindow         *window);
 static void     activate_link_cb                        (GObject          *object,
                                                         EvLink           *link,
                                                         EvWindow         *window);
@@ -956,6 +960,16 @@ view_handle_link_cb (EvView *view, gint old_page, EvLink *link, EvWindow *window
                g_object_unref (new_link);
 }
 
+static void
+bookmark_activated_cb (EvSidebarBookmarks *sidebar_bookmarks,
+                      gint                old_page,
+                      gint                page,
+                      EvWindow           *window)
+{
+       ev_history_add_page (window->priv->history, old_page);
+       ev_history_add_page (window->priv->history, page);
+}
+
 static void
 view_selection_changed_cb (EvView   *view,
                           EvWindow *window)
@@ -5158,6 +5172,10 @@ ev_window_activate_goto_bookmark_action (GSimpleAction *action,
 {
        EvWindow *window = user_data;
        EvWindowPrivate *priv = GET_PRIVATE (window);
+       gint old_page = ev_document_model_get_page (priv->model);
+
+       ev_history_add_page (priv->history, old_page);
+       ev_history_add_page (priv->history, g_variant_get_uint32 (parameter));
 
        ev_document_model_set_page (priv->model, g_variant_get_uint32 (parameter));
 }
@@ -7680,6 +7698,9 @@ ev_window_init (EvWindow *ev_window)
        g_signal_connect_object (priv->view, "selection-changed",
                                 G_CALLBACK (view_selection_changed_cb),
                                 ev_window, 0);
+       g_signal_connect_object (priv->sidebar_bookmarks, "bookmark-activated",
+                                G_CALLBACK (bookmark_activated_cb),
+                                ev_window, 0);
        g_signal_connect_object (priv->view, "annot-added",
                                 G_CALLBACK (view_annot_added),
                                 ev_window, 0);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]