diff options
Diffstat (limited to 'libdocument/ev-document.c')
-rw-r--r-- | libdocument/ev-document.c | 49 |
1 files changed, 45 insertions, 4 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) |