summaryrefslogtreecommitdiff
path: root/pango/pangox.c
diff options
context:
space:
mode:
authorOwen Taylor <otaylor@redhat.com>2000-06-06 00:49:23 +0000
committerOwen Taylor <otaylor@src.gnome.org>2000-06-06 00:49:23 +0000
commit7d1548546ec01ec01b7d8c9b2d47299e3c77b7ba (patch)
tree6e9faf238b1d9893c04d604f9c1664347aece7dc /pango/pangox.c
parent7b428440247958a9c52fe29c4aeeecfd6f43f39b (diff)
downloadpango-7d1548546ec01ec01b7d8c9b2d47299e3c77b7ba.tar.gz
Add a function to free cached information for a particular display. (This
Mon Jun 5 20:45:12 2000 Owen Taylor <otaylor@redhat.com> * pango/pangox-fontmap.c (pango_x_shutdown_display): Add a function to free cached information for a particular display. (This is basically pango_x_fontmap_destroy()) * pango/pangox.c pango/pangox-private.h pango/pangox-fontmap.c: Make a XFont always keep a pointer to (and ref) a fontmap.
Diffstat (limited to 'pango/pangox.c')
-rw-r--r--pango/pangox.c21
1 files changed, 11 insertions, 10 deletions
diff --git a/pango/pangox.c b/pango/pangox.c
index 9110ace1..37ab9c7c 100644
--- a/pango/pangox.c
+++ b/pango/pangox.c
@@ -128,11 +128,9 @@ static void
pango_x_make_font_struct (PangoFont *font, PangoXSubfontInfo *info)
{
PangoXFont *xfont = (PangoXFont *)font;
- PangoFontMap *fontmap;
PangoXFontCache *cache;
- fontmap = pango_x_font_map_for_display (xfont->display);
- cache = pango_x_font_map_get_font_cache (fontmap);
+ cache = pango_x_font_map_get_font_cache (xfont->fontmap);
info->font_struct = pango_x_font_cache_load (cache, info->xlfd);
if (!info->font_struct)
@@ -266,16 +264,18 @@ pango_x_font_class_init (PangoXFontClass *class)
}
PangoXFont *
-pango_x_font_new (Display *display, const char *spec, int size)
+pango_x_font_new (PangoFontMap *fontmap, const char *spec, int size)
{
PangoXFont *result;
- g_return_val_if_fail (display != NULL, NULL);
+ g_return_val_if_fail (fontmap != NULL, NULL);
g_return_val_if_fail (spec != NULL, NULL);
result = (PangoXFont *)g_type_create_instance (PANGO_TYPE_X_FONT);
- result->display = display;
+ result->fontmap = fontmap;
+ g_object_ref (G_OBJECT (fontmap));
+ result->display = pango_x_fontmap_get_display (fontmap);
result->fonts = g_strsplit(spec, ",", -1);
for (result->n_fonts = 0; result->fonts[result->n_fonts]; result->n_fonts++)
@@ -305,7 +305,7 @@ pango_x_load_font (Display *display,
g_return_val_if_fail (display != NULL, NULL);
g_return_val_if_fail (spec != NULL, NULL);
- result = pango_x_font_new (display, spec, -1);
+ result = pango_x_font_new (pango_x_font_map_for_display (display), spec, -1);
return (PangoFont *)result;
}
@@ -916,7 +916,7 @@ pango_x_font_shutdown (GObject *object)
* if it is already there, do nothing and the font will be
* freed.
*/
- if (!xfont->in_cache)
+ if (!xfont->in_cache && xfont->fontmap)
pango_x_fontmap_cache_add (xfont->fontmap, xfont);
G_OBJECT_CLASS (parent_class)->shutdown (object);
@@ -934,8 +934,7 @@ static void
pango_x_font_finalize (GObject *object)
{
PangoXFont *xfont = (PangoXFont *)object;
- PangoFontMap *fontmap = pango_x_font_map_for_display (xfont->display);
- PangoXFontCache *cache = pango_x_font_map_get_font_cache (fontmap);
+ PangoXFontCache *cache = pango_x_font_map_get_font_cache (xfont->fontmap);
int i;
@@ -962,6 +961,8 @@ pango_x_font_finalize (GObject *object)
if (xfont->entry)
pango_x_font_entry_remove (xfont->entry, (PangoFont *)xfont);
+ g_object_unref (G_OBJECT (xfont->fontmap));
+
g_strfreev (xfont->fonts);
G_OBJECT_CLASS (parent_class)->finalize (object);