From: Jan Djärv Date: Sun, 13 Jan 2013 12:05:17 +0000 (+0100) Subject: * nsfont.m (ns_findfonts): Add block/unblock_input calls. X-Git-Tag: emacs-24.3.90~173^2~7^2~318 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=7bc916b48d69e5b47bb09db43b85a622dbeaf38d;p=emacs.git * nsfont.m (ns_findfonts): Add block/unblock_input calls. Remove check for fkeys count > zero, block/unblock fixes the real bug. (nsfont_list_family): Add block/unblock_input calls. (nsfont_open): Move block_input earlier. Add unblock_input before early return. (nsfont_draw): Add block/unblock_input calls. --- diff --git a/src/ChangeLog b/src/ChangeLog index 13b53e922ed..a002eaf33d8 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,12 @@ +2013-01-13 Jan Djärv + + * nsfont.m (ns_findfonts): Add block/unblock_input calls. + Remove check for fkeys count > zero, block/unblock fixes the real bug. + (nsfont_list_family): Add block/unblock_input calls. + (nsfont_open): Move block_input earlier. Add unblock_input before early + return. + (nsfont_draw): Add block/unblock_input calls. + 2013-01-12 Dmitry Antipov * indent.c (Fvertical_motion): Remove now-incorrect GCPROs diff --git a/src/nsfont.m b/src/nsfont.m index c0bea2e225c..39f9e2ef3bc 100644 --- a/src/nsfont.m +++ b/src/nsfont.m @@ -546,6 +546,7 @@ ns_findfonts (Lisp_Object font_spec, BOOL isMatch) NSSet *cFamilies; BOOL foundItal = NO; + block_input (); if (NSFONT_TRACE) { fprintf (stderr, "nsfont: %s for fontspec:\n ", @@ -560,10 +561,7 @@ ns_findfonts (Lisp_Object font_spec, BOOL isMatch) if (isMatch) [fkeys removeObject: NSFontFamilyAttribute]; - if ([fkeys count] > 0) - matchingDescs = [fdesc matchingFontDescriptorsWithMandatoryKeys: fkeys]; - else - matchingDescs = [NSMutableArray array]; + matchingDescs = [fdesc matchingFontDescriptorsWithMandatoryKeys: fkeys]; if (NSFONT_TRACE) NSLog(@"Got desc %@ and found %d matching fonts from it: ", fdesc, @@ -598,6 +596,8 @@ ns_findfonts (Lisp_Object font_spec, BOOL isMatch) [s1 release]; } + unblock_input (); + /* Return something if was a match and nothing found. */ if (isMatch) return ns_fallback_entity (); @@ -701,10 +701,12 @@ static Lisp_Object nsfont_list_family (Lisp_Object frame) { Lisp_Object list = Qnil; - NSEnumerator *families = - [[[NSFontManager sharedFontManager] availableFontFamilies] - objectEnumerator]; + NSEnumerator *families; NSString *family; + + block_input (); + families = [[[NSFontManager sharedFontManager] availableFontFamilies] + objectEnumerator]; while ((family = [families nextObject])) list = Fcons (intern ([family UTF8String]), list); /* FIXME: escape the name? */ @@ -713,6 +715,7 @@ nsfont_list_family (Lisp_Object frame) fprintf (stderr, "nsfont: list families returning %"pI"d entries\n", XINT (Flength (list))); + unblock_input (); return list; } @@ -735,6 +738,8 @@ nsfont_open (FRAME_PTR f, Lisp_Object font_entity, int pixel_size) Lisp_Object font_object; int fixLeopardBug; + block_input (); + if (NSFONT_TRACE) { fprintf (stderr, "nsfont: open size %d of fontentity:\n ", pixel_size); @@ -794,13 +799,14 @@ nsfont_open (FRAME_PTR f, Lisp_Object font_entity, int pixel_size) font_info = (struct nsfont_info *) XFONT_OBJECT (font_object); font = (struct font *) font_info; if (!font) - return Qnil; /* FIXME: other terms do, but return Qnil causes segfault */ + { + unblock_input (); + return Qnil; /* FIXME: other terms do, but return Qnil causes segfault */ + } font_info->glyphs = xzalloc (0x100 * sizeof *font_info->glyphs); font_info->metrics = xzalloc (0x100 * sizeof *font_info->metrics); - block_input (); - /* for metrics */ #ifdef NS_IMPL_COCOA sfont = [nsfont screenFontWithRenderingMode: @@ -1051,6 +1057,7 @@ nsfont_draw (struct glyph_string *s, int from, int to, int x, int y, char isComposite = s->first_glyph->type == COMPOSITE_GLYPH; int end = isComposite ? s->cmp_to : s->nchars; + block_input (); /* Select face based on input flags */ switch (ns_tmp_flags) { @@ -1273,6 +1280,7 @@ nsfont_draw (struct glyph_string *s, int from, int to, int x, int y, /* Draw underline, overline, strike-through. */ ns_draw_text_decoration (s, face, col, r.size.width, r.origin.x); + unblock_input (); return to-from; }