From 78e8f6260a205031d33e4d3ac1610921f6fb5181 Mon Sep 17 00:00:00 2001
From: "Mads Chr. Olesen" <mads@mchro.dk>
Date: Sat, 19 Mar 2016 23:19:39 +0100
Subject: [PATCH] Include preview thumbnail in link tooltips

---
 libview/ev-view.c | 37 +++++++++++++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)

diff --git a/libview/ev-view.c b/libview/ev-view.c
index f76eca8..921365e 100644
--- a/libview/ev-view.c
+++ b/libview/ev-view.c
@@ -4739,6 +4739,43 @@ ev_view_query_tooltip (GtkWidget  *widget,
 		gtk_tooltip_set_tip_area (tooltip, &link_area);
 		g_free (text);
 
+		/* Display thumbnail, if applicable */
+		EvLinkAction    *action = ev_link_get_action (link);
+		if (!action) return TRUE;
+		EvLinkDest *dest = ev_link_action_get_dest (action);
+		if (!dest) return TRUE;
+		EvLinkDestType type = ev_link_dest_get_dest_type (dest);
+
+		if (type == EV_LINK_DEST_TYPE_NAMED) {
+			dest = ev_document_links_find_link_dest (EV_DOCUMENT_LINKS (view->document),
+				ev_link_dest_get_named_dest (dest));
+		}
+		EvPage          *ev_page;
+		ev_page = ev_document_get_page (view->document, ev_link_dest_get_page(dest));
+		EvRenderContext *rc;
+		rc = ev_render_context_new (ev_page, view->rotation, view->scale);
+
+		GdkPixbuf       *pixbuf;
+		pixbuf = ev_document_get_thumbnail (view->document, rc);
+
+		gdouble         left = ev_link_dest_get_left(dest, FALSE) * view->scale;
+		gdouble         top = ev_link_dest_get_top(dest, FALSE) * view->scale;
+		GdkPixbuf       *pixbuf2;
+		int             width = gdk_pixbuf_get_width(pixbuf) - left;
+		int             height = MIN(gdk_pixbuf_get_height(pixbuf) - top, 200);
+
+		pixbuf2 = gdk_pixbuf_new_subpixbuf(pixbuf, (int)left, (int)top,
+			width, height);
+
+		gtk_tooltip_set_icon(tooltip, pixbuf2);
+
+		g_object_unref (pixbuf);
+		if (type == EV_LINK_DEST_TYPE_NAMED) {
+			g_object_unref (dest);
+		}
+		g_object_unref (rc);
+		g_object_unref (ev_page);
+
 		return TRUE;
 	}
 	g_free (text);
-- 
1.9.1

