[evince] libview: Add delay before showing link preview popover
- From: Germán Poo-Caamaño <gpoo src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evince] libview: Add delay before showing link preview popover
- Date: Sun, 28 Jun 2020 16:08:13 +0000 (UTC)
commit 727657a4e13fd00bbb5bd35c1c19e80723a8bbb0
Author: Mads Chr. Olesen <mads mchro dk>
Date: Sun Jun 28 12:08:20 2020 +0200
libview: Add delay before showing link preview popover
Partially fixes #662
libview/ev-view-private.h | 1 +
libview/ev-view.c | 23 ++++++++++++++++++++++-
2 files changed, 23 insertions(+), 1 deletion(-)
---
diff --git a/libview/ev-view-private.h b/libview/ev-view-private.h
index 648a4b30..bcf66cee 100644
--- a/libview/ev-view-private.h
+++ b/libview/ev-view-private.h
@@ -138,6 +138,7 @@ typedef struct {
gdouble top;
GtkWidget *popover;
EvLink *link;
+ guint delay_timeout_id;
} EvLinkPreview;
struct _EvView {
diff --git a/libview/ev-view.c b/libview/ev-view.c
index 51f856f4..23afc9b9 100644
--- a/libview/ev-view.c
+++ b/libview/ev-view.c
@@ -121,6 +121,7 @@ typedef struct {
#define LINK_PREVIEW_PAGE_RATIO 1.0 / 3.0 /* Size of popover with respect to page size */
#define LINK_PREVIEW_HORIZONTAL_LINK_POS 0.5 /* as fraction of preview width */
#define LINK_PREVIEW_VERTICAL_LINK_POS 0.3 /* as fraction of preview height */
+#define LINK_PREVIEW_DELAY_MS 300 /* Delay before showing preview in milliseconds */
/*** Scrolling ***/
static void view_update_range_and_current_page (EvView *view);
@@ -161,6 +162,7 @@ static void link_preview_job_finished_cb (EvJobThumbnail
EvView *view);
static gboolean link_preview_popover_motion_notify (EvView *view,
GdkEventMotion *event);
+static gboolean link_preview_delayed_show (EvView *view);
/*** Forms ***/
static EvFormField *ev_view_get_form_field_at_location (EvView *view,
gdouble x,
@@ -2291,7 +2293,11 @@ ev_view_handle_cursor_over_xy (EvView *view, gint x, gint y)
if (type == EV_LINK_DEST_TYPE_NAMED)
g_object_unref (dest);
- gtk_widget_show (popover);
+ view->link_preview.delay_timeout_id = g_timeout_add (LINK_PREVIEW_DELAY_MS,
+ (GSourceFunc)link_preview_delayed_show,
+ view);
+ g_source_set_name_by_id (view->link_preview.delay_timeout_id,
+ "[evince] link_preview_timeout");
} else {
ev_view_link_preview_popover_cleanup (view);
view->link_preview.link = NULL;
@@ -5230,6 +5236,16 @@ link_preview_popover_motion_notify (EvView *view,
return TRUE;
}
+static gboolean
+link_preview_delayed_show (EvView *view)
+{
+ GtkWidget *popover = view->link_preview.popover;
+ gtk_widget_show (popover);
+
+ view->link_preview.delay_timeout_id = 0;
+ return FALSE;
+}
+
static void
link_preview_job_finished_cb (EvJobThumbnail *job,
EvView *view)
@@ -5270,6 +5286,11 @@ ev_view_link_preview_popover_cleanup (EvView *view) {
gtk_widget_destroy (view->link_preview.popover);
view->link_preview.popover = NULL;
}
+
+ if (view->link_preview.delay_timeout_id) {
+ g_source_remove (view->link_preview.delay_timeout_id);
+ view->link_preview.delay_timeout_id = 0;
+ }
}
static gboolean
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]