diff options
| author | Dmitry Antipov | 2013-12-12 18:26:06 +0400 |
|---|---|---|
| committer | Dmitry Antipov | 2013-12-12 18:26:06 +0400 |
| commit | cf86e18b159f754d6e5537b7b9cbefc32297f7d2 (patch) | |
| tree | b584773b90d5cb4c5993cc194037686110a89e36 /src/alloc.c | |
| parent | c4246a6008ef0c69db296df4aab95530f8e2b95e (diff) | |
| download | emacs-cf86e18b159f754d6e5537b7b9cbefc32297f7d2.tar.gz emacs-cf86e18b159f754d6e5537b7b9cbefc32297f7d2.zip | |
* 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/alloc.c')
| -rw-r--r-- | src/alloc.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/src/alloc.c b/src/alloc.c index aeda42637cd..022d1e5dcbb 100644 --- a/src/alloc.c +++ b/src/alloc.c | |||
| @@ -2874,10 +2874,22 @@ vector_nbytes (struct Lisp_Vector *v) | |||
| 2874 | static void | 2874 | static void |
| 2875 | cleanup_vector (struct Lisp_Vector *vector) | 2875 | cleanup_vector (struct Lisp_Vector *vector) |
| 2876 | { | 2876 | { |
| 2877 | if (PSEUDOVECTOR_TYPEP (&vector->header, PVEC_FONT) | 2877 | if (PSEUDOVECTOR_TYPEP (&vector->header, PVEC_FONT)) |
| 2878 | && ((vector->header.size & PSEUDOVECTOR_SIZE_MASK) | 2878 | { |
| 2879 | == FONT_OBJECT_MAX)) | 2879 | ptrdiff_t size = vector->header.size & PSEUDOVECTOR_SIZE_MASK; |
| 2880 | ((struct font *) vector)->driver->close ((struct font *) vector); | 2880 | Lisp_Object obj = make_lisp_ptr (vector, Lisp_Vectorlike); |
| 2881 | |||
| 2882 | if (size == FONT_OBJECT_MAX) | ||
| 2883 | font_close_object (obj); | ||
| 2884 | #ifdef HAVE_NS | ||
| 2885 | else if (size == FONT_ENTITY_MAX) | ||
| 2886 | { | ||
| 2887 | struct font_entity *entity = (struct font_entity *) vector; | ||
| 2888 | if (entity->driver && entity->driver->free_entity) | ||
| 2889 | entity->driver->free_entity (obj); | ||
| 2890 | } | ||
| 2891 | #endif /* HAVE_NS */ | ||
| 2892 | } | ||
| 2881 | } | 2893 | } |
| 2882 | 2894 | ||
| 2883 | /* Reclaim space used by unmarked vectors. */ | 2895 | /* Reclaim space used by unmarked vectors. */ |