diff options
author | Dmitry Antipov <dmantipov@yandex.ru> | 2013-12-12 18:26:06 +0400 |
---|---|---|
committer | Dmitry Antipov <dmantipov@yandex.ru> | 2013-12-12 18:26:06 +0400 |
commit | cf86e18b159f754d6e5537b7b9cbefc32297f7d2 (patch) | |
tree | b584773b90d5cb4c5993cc194037686110a89e36 /src/font.c | |
parent | c4246a6008ef0c69db296df4aab95530f8e2b95e (diff) | |
download | emacs-cf86e18b159f754d6e5537b7b9cbefc32297f7d2.tar.gz |
* font.h (struct font_entity) [HAVE_NS]: New field to record
font driver which was used to create this entity.
(struct font) [HAVE_WINDOW_SYSTEM]: New field to record
frame where the font was opened.
(font_close_object): Add prototype.
* font.c (font_make_entity) [HAVE_NS]: Zero out driver field.
(font_close_object): Not static any more. Lost frame arg.
Adjust comment and users.
* alloc.c (cleanup_vector): Call font_close_object to adjust
per-frame font counters correctly. If HAVE_NS, also call
driver-specific cleanup for font-entity objects.
* ftfont.c (ftfont_open):
* nsfont.m (nsfont_open):
* w32font.c (w32font_open_internal):
* xfont.c (xfont_open):
* xftfont.c (xftfont_open): Save frame pointer in font object.
* macfont.m (macfont_open): Likewise.
(macfont_descriptor_entity): Save driver pointer to be able
to call its free_entity routine when font-entity is swept.
* ftxfont.c (ftxfont_open): Add eassert because frame
pointer should be saved by ftfont_driver.open.
Diffstat (limited to 'src/font.c')
-rw-r--r-- | src/font.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/src/font.c b/src/font.c index fb56b3d3fb3..d0a10332028 100644 --- a/src/font.c +++ b/src/font.c @@ -173,6 +173,9 @@ font_make_entity (void) allocate_pseudovector (VECSIZE (struct font_entity), FONT_ENTITY_MAX, PVEC_FONT)); XSETFONT (font_entity, entity); +#ifdef HAVE_NS + entity->driver = NULL; +#endif return font_entity; } @@ -2881,10 +2884,10 @@ font_open_entity (struct frame *f, Lisp_Object entity, int pixel_size) } -/* Close FONT_OBJECT that is opened on frame F. */ +/* Close FONT_OBJECT. */ -static void -font_close_object (struct frame *f, Lisp_Object font_object) +void +font_close_object (Lisp_Object font_object) { struct font *font = XFONT_OBJECT (font_object); @@ -2894,8 +2897,9 @@ font_close_object (struct frame *f, Lisp_Object font_object) FONT_ADD_LOG ("close", font_object, Qnil); font->driver->close (font); #ifdef HAVE_WINDOW_SYSTEM - eassert (FRAME_DISPLAY_INFO (f)->n_fonts); - FRAME_DISPLAY_INFO (f)->n_fonts--; + eassert (font->frame); + eassert (FRAME_DISPLAY_INFO (font->frame)->n_fonts); + FRAME_DISPLAY_INFO (font->frame)->n_fonts--; #endif } @@ -4548,11 +4552,11 @@ DEFUN ("open-font", Fopen_font, Sopen_font, 1, 3, 0, } DEFUN ("close-font", Fclose_font, Sclose_font, 1, 2, 0, - doc: /* Close FONT-OBJECT. */) + doc: /* Close FONT-OBJECT. Optional FRAME is unused. */) (Lisp_Object font_object, Lisp_Object frame) { CHECK_FONT_OBJECT (font_object); - font_close_object (decode_live_frame (frame), font_object); + font_close_object (font_object); return Qnil; } @@ -4887,7 +4891,7 @@ If the named font is not yet loaded, return nil. */) /* As font_object is still in FONT_OBJLIST of the entity, we can't close it now. Perhaps, we should manage font-objects by `reference-count'. */ - font_close_object (f, font_object); + font_close_object (font_object); #endif return info; } |