diff options
author | Nickolay V. Shmyrev <nshmyrev@yandex.ru> | 2006-11-16 15:58:37 (GMT) |
---|---|---|
committer | Nickolay V. Shmyrev <nshmyrev@src.gnome.org> | 2006-11-16 15:58:37 (GMT) |
commit | 4a54de2ac54b0e301382ad56eff1ce4c1935fcde (patch) | |
tree | 64464826dcdc9490126a31cc1842a930c6d62c64 /dvi | |
parent | f444faebb607e14ba75193545a98c5cd00a2da2d (diff) |
Add reference to subfont. Fixes bug #374277.
2006-11-16 Nickolay V. Shmyrev <nshmyrev@yandex.ru>
* dvi/dvi-document.c: (dvi_document_load), (dvi_document_finalize),
(dvi_document_class_init), (dvi_document_init_params):
* dvi/mdvi-lib/font.c: (font_reference):
Add reference to subfont. Fixes bug #374277.
Diffstat (limited to 'dvi')
-rw-r--r-- | dvi/dvi-document.c | 17 | ||||
-rw-r--r-- | dvi/mdvi-lib/font.c | 7 |
2 files changed, 17 insertions, 7 deletions
diff --git a/dvi/dvi-document.c b/dvi/dvi-document.c index 81a2af2..4de5e64 100644 --- a/dvi/dvi-document.c +++ b/dvi/dvi-document.c @@ -92,10 +92,12 @@ dvi_document_load (EvDocument *document, return FALSE; } + g_mutex_lock (dvi_context_mutex); if (dvi_document->context) mdvi_destroy_context (dvi_document->context); dvi_document->context = mdvi_init_context(dvi_document->params, dvi_document->spec, filename); + g_mutex_unlock (dvi_context_mutex); if (!dvi_document->context) { g_set_error (error, @@ -113,8 +115,6 @@ dvi_document_load (EvDocument *document, dvi_document->base_height = dvi_document->context->dvi_page_h * dvi_document->context->params.vconv + 2 * unit2pix(dvi_document->params->vdpi, MDVI_VMARGIN) / dvi_document->params->vshrink; - dvi_context_mutex = g_mutex_new (); - g_free (dvi_document->uri); dvi_document->uri = g_strdup (uri); @@ -206,12 +206,14 @@ static void dvi_document_finalize (GObject *object) { DviDocument *dvi_document = DVI_DOCUMENT(object); - + + g_mutex_lock (dvi_context_mutex); if (dvi_document->context) { mdvi_pixbuf_device_free (&dvi_document->context->device); mdvi_destroy_context (dvi_document->context); } + g_mutex_unlock (dvi_context_mutex); if (dvi_document->params) g_free (dvi_document->params); @@ -228,6 +230,11 @@ dvi_document_class_init (DviDocumentClass *klass) GObjectClass *gobject_class = G_OBJECT_CLASS (klass); gobject_class->finalize = dvi_document_finalize; + + mdvi_init_kpathsea("evince", MDVI_MFMODE, MDVI_FALLBACK_FONT, MDVI_DPI); + mdvi_register_fonts (); + + dvi_context_mutex = g_mutex_new (); } static gboolean @@ -359,10 +366,6 @@ dvi_document_init_params (DviDocument *dvi_document) dvi_document->params->bg = 0xffffffff; dvi_document->params->fg = 0xff000000; - - mdvi_init_kpathsea("evince", MDVI_MFMODE, MDVI_FALLBACK_FONT, MDVI_DPI); - - mdvi_register_fonts (); } static void diff --git a/dvi/mdvi-lib/font.c b/dvi/mdvi-lib/font.c index ca3436c..fedb7e7 100644 --- a/dvi/mdvi-lib/font.c +++ b/dvi/mdvi-lib/font.c @@ -162,6 +162,7 @@ font_reference( { DviFont *font; DviFontRef *ref; + DviFontRef *subfont_ref; /* see if there is a font with the same characteristics */ for(font = (DviFont *)fontlist.head; font; font = font->next) { @@ -185,7 +186,13 @@ font_reference( } ref = xalloc(DviFontRef); ref->ref = font; + font->links++; + for(subfont_ref = font->subfonts; subfont_ref; subfont_ref = subfont_ref->next) { + /* just adjust the reference counts */ + subfont_ref->ref->links++; + } + ref->fontid = id; if(LIST(font) != fontlist.head) { |