diff options
author | raveit65 <[email protected]> | 2016-06-23 12:20:40 +0200 |
---|---|---|
committer | raveit65 <[email protected]> | 2016-06-24 20:48:20 +0200 |
commit | d0056f66f2d719eef718f3770dcbb6130a25101e (patch) | |
tree | 7f7859c7d8ddfaa1696195e3e795bd5a37af7573 | |
parent | a89b45d36cae65743d7524682d3f79b55112dea0 (diff) | |
download | atril-d0056f66f2d719eef718f3770dcbb6130a25101e.tar.bz2 atril-d0056f66f2d719eef718f3770dcbb6130a25101e.tar.xz |
libdocument: Make EvSourceLink boxed.
https://bugzilla.gnome.org/show_bug.cgi?id=635705
taken from:
https://git.gnome.org/browse/evince/commit/?id=0ac0898
-rw-r--r-- | libdocument/ev-document.c | 49 | ||||
-rw-r--r-- | libdocument/ev-document.h | 24 | ||||
-rw-r--r-- | libview/ev-view.c | 2 |
3 files changed, 63 insertions, 12 deletions
diff --git a/libdocument/ev-document.c b/libdocument/ev-document.c index a929b3be..b3a6c62a 100644 --- a/libdocument/ev-document.c +++ b/libdocument/ev-document.c @@ -440,10 +440,9 @@ ev_document_synctex_backward_search (EvDocument *document, filename = synctex_scanner_get_name (scanner, synctex_node_tag (node)); if (filename) { - result = g_new (EvSourceLink, 1); - result->filename = filename; - result->line = synctex_node_line (node); - result->col = synctex_node_column (node); + result = ev_source_link_new (filename, + synctex_node_line (node), + synctex_node_column (node)); } } } @@ -732,6 +731,48 @@ ev_document_find_page_by_label (EvDocument *document, return FALSE; } +/* EvSourceLink */ +G_DEFINE_BOXED_TYPE (EvSourceLink, ev_source_link, ev_source_link_copy, ev_source_link_free) + +EvSourceLink * +ev_source_link_new (const gchar *filename, + gint line, + gint col) +{ + EvSourceLink *link = g_slice_new (EvSourceLink); + + link->filename = g_strdup (filename); + link->line = line; + link->col = col; + + return link; +} + +EvSourceLink * +ev_source_link_copy (EvSourceLink *link) +{ + EvSourceLink *copy; + + g_return_val_if_fail (link != NULL, NULL); + + copy = g_slice_new (EvSourceLink); + + *copy = *link; + copy->filename = g_strdup (link->filename); + + return copy; +} + +void +ev_source_link_free (EvSourceLink *link) +{ + if (link == NULL) + return; + + g_free (link->filename); + g_slice_free (EvSourceLink, link); +} + /* EvDocumentInfo */ G_DEFINE_BOXED_TYPE (EvDocumentInfo, ev_document_info, ev_document_info_copy, ev_document_info_free) diff --git a/libdocument/ev-document.h b/libdocument/ev-document.h index 1089d79c..6c492da8 100644 --- a/libdocument/ev-document.h +++ b/libdocument/ev-document.h @@ -66,20 +66,15 @@ typedef struct { typedef struct _EvRectangle EvRectangle; typedef struct _EvMapping EvMapping; - +typedef struct _EvSourceLink EvSourceLink; typedef struct _EvDocumentBackendInfo EvDocumentBackendInfo; + struct _EvDocumentBackendInfo { const gchar *name; const gchar *version; }; -typedef struct { - const gchar *filename; - gint line; - gint col; -} EvSourceLink; - struct _EvDocument { GObject base; @@ -209,6 +204,21 @@ struct _EvMapping { gpointer data; }; +#define EV_TYPE_SOURCE_LINK (ev_source_link_get_type ()) +struct _EvSourceLink +{ + gchar *filename; + gint line; + gint col; +}; + +GType ev_source_link_get_type (void) G_GNUC_CONST; +EvSourceLink *ev_source_link_new (const gchar *filename, + gint line, + gint col); +EvSourceLink *ev_source_link_copy (EvSourceLink *link); +void ev_source_link_free (EvSourceLink *link); + /* convenience macro to ease interface addition in the CODE * section of EV_BACKEND_REGISTER_WITH_CODE (this macro relies on * the g_define_type_id present within EV_BACKEND_REGISTER_WITH_CODE()). diff --git a/libview/ev-view.c b/libview/ev-view.c index 413acf20..9ddf78d2 100644 --- a/libview/ev-view.c +++ b/libview/ev-view.c @@ -3062,7 +3062,7 @@ ev_view_synctex_backward_search (EvView *view, link = ev_document_synctex_backward_search (view->document, page, x_new, y_new); if (link) { g_signal_emit (view, signals[SIGNAL_SYNC_SOURCE], 0, link); - g_free (link); + ev_source_link_free (link); return TRUE; } |