[evince] history: Record current page when going back in history
- From: Germán Poo-Caamaño <gpoo src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evince] history: Record current page when going back in history
- Date: Sat, 27 Jun 2020 04:49:17 +0000 (UTC)
commit e50b114b970e70bb4663a6467383f9827d2d7c69
Author: Casey Jao <casey jao gmail com>
Date: Wed Aug 22 05:48:45 2018 -0700
history: Record current page when going back in history
Adjust ev_history_can_go_back to trigger when the
current page differs by >1 from the head of the history.
Partially fixes #810 (4/5)
shell/ev-history.c | 12 +++++++++---
shell/ev-window.c | 53 +++++++++++++++++++++++++++++++++++------------------
2 files changed, 44 insertions(+), 21 deletions(-)
---
diff --git a/shell/ev-history.c b/shell/ev-history.c
index 7e254fb2..a0b33d18 100644
--- a/shell/ev-history.c
+++ b/shell/ev-history.c
@@ -22,6 +22,7 @@
#include <glib/gi18n.h>
#include <string.h>
+#include <stdlib.h>
#include "ev-history.h"
@@ -49,8 +50,9 @@ G_DEFINE_TYPE_WITH_PRIVATE (EvHistory, ev_history, G_TYPE_OBJECT)
#define GET_PRIVATE(o) ev_history_get_instance_private (o);
-static void ev_history_set_model (EvHistory *history,
- EvDocumentModel *model);
+static void ev_history_set_model (EvHistory *history,
+ EvDocumentModel *model);
+static gint ev_history_get_current_page (EvHistory *history);
static void
clear_list (GList *list)
@@ -196,10 +198,14 @@ ev_history_can_go_back (EvHistory *history)
g_return_val_if_fail (EV_IS_HISTORY (history), FALSE);
+ priv = GET_PRIVATE (history);
+
if (ev_history_is_frozen (history))
return FALSE;
- priv = GET_PRIVATE (history);
+ if (abs (ev_document_model_get_page (priv->model) - ev_history_get_current_page (history)) > 1)
+ return TRUE;
+
return priv->current && priv->current->prev;
}
diff --git a/shell/ev-window.c b/shell/ev-window.c
index bf482441..67f67190 100644
--- a/shell/ev-window.c
+++ b/shell/ev-window.c
@@ -974,8 +974,10 @@ bookmark_activated_cb (EvSidebarBookmarks *sidebar_bookmarks,
gint page,
EvWindow *window)
{
- ev_history_add_page (window->priv->history, old_page);
- ev_history_add_page (window->priv->history, page);
+ EvWindowPrivate *priv = ev_window_get_instance_private (window);
+
+ ev_history_add_page (priv->history, old_page);
+ ev_history_add_page (priv->history, page);
}
static void
@@ -984,26 +986,29 @@ scroll_history_cb (EvView *view,
gboolean horizontal,
EvWindow *window)
{
- if (!window->priv->document)
- return;
-
+ EvWindowPrivate *priv = ev_window_get_instance_private (window);
gint old_page = -1;
gint new_page = -1;
+
+ if (!priv->document)
+ return;
+
switch (scroll) {
case GTK_SCROLL_START:
- old_page = ev_document_model_get_page (window->priv->model);
+ old_page = ev_document_model_get_page (priv->model);
new_page = 0;
break;
case GTK_SCROLL_END:
- old_page = ev_document_model_get_page (window->priv->model);
- new_page = ev_document_get_n_pages (window->priv->document) - 1;
+ old_page = ev_document_model_get_page (priv->model);
+ new_page = ev_document_get_n_pages (priv->document) - 1;
break;
default:
break;
}
+
if (old_page >= 0 && new_page >= 0) {
- ev_history_add_page (window->priv->history, old_page);
- ev_history_add_page (window->priv->history, new_page);
+ ev_history_add_page (priv->history, old_page);
+ ev_history_add_page (priv->history, new_page);
}
}
@@ -1013,27 +1018,29 @@ scroll_child_history_cb (GtkScrolledWindow *scrolled_window,
gboolean horizontal,
EvWindow *window)
{
- if (!window->priv->document)
+ EvWindowPrivate *priv = ev_window_get_instance_private (window);
+
+ if (!priv->document)
return;
- if (ev_document_model_get_continuous (window->priv->model) && !horizontal) {
+ if (ev_document_model_get_continuous (priv->model) && !horizontal) {
gint old_page = -1;
gint new_page = -1;
switch (scroll) {
case GTK_SCROLL_START:
- old_page = ev_document_model_get_page (window->priv->model);
+ old_page = ev_document_model_get_page (priv->model);
new_page = 0;
break;
case GTK_SCROLL_END:
- old_page = ev_document_model_get_page (window->priv->model);
- new_page = ev_document_get_n_pages (window->priv->document) - 1;
+ old_page = ev_document_model_get_page (priv->model);
+ new_page = ev_document_get_n_pages (priv->document) - 1;
break;
default:
break;
}
if (old_page >= 0 && new_page >= 0) {
- ev_history_add_page (window->priv->history, old_page);
- ev_history_add_page (window->priv->history, new_page);
+ ev_history_add_page (priv->history, old_page);
+ ev_history_add_page (priv->history, new_page);
}
}
@@ -5071,6 +5078,10 @@ ev_window_cmd_go_back_history (GSimpleAction *action,
{
EvWindow *ev_window = user_data;
EvWindowPrivate *priv = GET_PRIVATE (ev_window);
+ gint old_page = ev_document_model_get_page (priv->model);
+
+ if (old_page >= 0)
+ ev_history_add_page (priv->history, old_page);
ev_history_go_back (priv->history);
}
@@ -6365,9 +6376,15 @@ ev_window_button_press_event (GtkWidget *widget,
EvWindowPrivate *priv = GET_PRIVATE (window);
switch (event->button) {
- case MOUSE_BACK_BUTTON:
+ case MOUSE_BACK_BUTTON: {
+ gint old_page = ev_document_model_get_page (priv->model);
+
+ if (old_page >= 0)
+ ev_history_add_page (priv->history, old_page);
+
ev_history_go_back (priv->history);
return TRUE;
+ }
case MOUSE_FORWARD_BUTTON:
ev_history_go_forward (priv->history);
return TRUE;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]