Blob Blame History Raw
From 9d6ebdb168f8438449c43e63f38f687e09c8fe4f Mon Sep 17 00:00:00 2001
From: Marek Kasik <mkasik@redhat.com>
Date: Thu, 5 Mar 2020 13:21:59 +0100
Subject: [PATCH] ev-view: Move annotation popup window to new position

Open annotation popup window at new position if its
annotation was moved when the popup window was hidden.
This places existing popup window the same way as when
it was created.
---
 libview/ev-view.c | 35 +++++++++++++++++++++++++++++++++++
 1 file changed, 35 insertions(+)

diff --git a/libview/ev-view.c b/libview/ev-view.c
index ffbe1704..43a0410d 100644
--- a/libview/ev-view.c
+++ b/libview/ev-view.c
@@ -3390,6 +3390,41 @@ ev_view_handle_annotation (EvView       *view,
 
 			parent = GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (view)));
 			window = ev_view_create_annotation_window (view, annot, parent);
+		} else if (window && ev_annotation_markup_has_popup (EV_ANNOTATION_MARKUP (annot))) {
+			EvViewWindowChild *child;
+			EvMappingList     *annots;
+			EvRectangle        popup_rect;
+			EvMapping         *mapping;
+			GdkPoint           view_point;
+			EvPoint            annotation_corner;
+
+			child = ev_view_get_window_child (view, window);
+			annots = ev_page_cache_get_annot_mapping (view->page_cache,
+								  ev_annotation_get_page_index (annot));
+			mapping = ev_mapping_list_find (annots, annot);
+			ev_annotation_markup_get_rectangle (EV_ANNOTATION_MARKUP (annot),
+							    &popup_rect);
+
+			popup_rect.x2 = mapping->area.x2 + popup_rect.x2 - popup_rect.x1;
+			popup_rect.y2 = mapping->area.y2 + popup_rect.y2 - popup_rect.y1;
+			popup_rect.x1 = mapping->area.x2;
+			popup_rect.y1 = mapping->area.y2;
+			g_object_set (annot,
+				      "rectangle", &popup_rect,
+				      "popup_is_open", TRUE,
+				      NULL);
+
+			annotation_corner.x = mapping->area.x2;
+			annotation_corner.y = mapping->area.y2;
+
+			_ev_view_transform_doc_point_to_view_point (view,
+								    ev_annotation_get_page_index (annot),
+								    &annotation_corner,
+								    &view_point);
+
+			ev_view_window_child_move (view, child,
+						   child->parent_x + view_point.x - view->scroll_x,
+						   child->parent_y + view_point.y - view->scroll_y);
 		}
 		ev_view_annotation_show_popup_window (view, window);
 	}
-- 
2.24.1