diff options
Diffstat (limited to 'libdocument')
-rw-r--r-- | libdocument/ev-document.c | 49 | ||||
-rw-r--r-- | libdocument/ev-document.h | 24 |
2 files changed, 62 insertions, 11 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()). |