changeset 91258:5e8f33ad8f63

*** empty log message ***
author Jason Rumney <jasonr@gnu.org>
date Wed, 19 Dec 2007 22:22:55 +0000
parents 699989dc6a69
children 51863d34f0f1
files src/w32font.c
diffstat 1 files changed, 17 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/w32font.c	Wed Dec 19 22:22:43 2007 +0000
+++ b/src/w32font.c	Wed Dec 19 22:22:55 2007 +0000
@@ -203,6 +203,8 @@
   if (w32_font == NULL)
     return NULL;
 
+  safe_debug_print (font_entity);
+
   if (!w32font_open_internal (f, font_entity, pixel_size, w32_font))
     {
       xfree (w32_font);
@@ -293,7 +295,14 @@
   WORD *wcode = alloca(nglyphs * sizeof (WORD));
   SIZE size;
 
+#if 0
+  /* Frames can come and go, and their fonts outlive them. This is
+     particularly troublesome with tooltip frames, and causes crashes.  */
   f = ((struct w32font_info *)font)->owning_frame;
+#else
+  f = selected_frame;
+#endif
+
   dc = get_frame_dc (f);
   old_font = SelectObject (dc, ((W32FontStruct *)(font->font.font))->hfont);
 
@@ -601,6 +610,10 @@
   bzero (&match_data.pattern, sizeof (LOGFONT));
   fill_in_logfont (f, &match_data.pattern, font_spec);
 
+  /* If weight was not specified, try to get a normal weight font.  */
+  if (!match_data.pattern.lfWeight)
+    match_data.pattern.lfWeight = FW_NORMAL;
+
   match_data.opentype_only = opentype_only;
   if (opentype_only)
     match_data.pattern.lfOutPrecision = OUT_OUTLINE_PRECIS;
@@ -637,6 +650,10 @@
   bzero (&logfont, sizeof (logfont));
   fill_in_logfont (f, &logfont, font_entity);
 
+  /* If weight was not specified, try to get a normal weight font.  */
+  if (!logfont.lfWeight)
+    logfont.lfWeight = FW_NORMAL;
+
   size = XINT (AREF (font_entity, FONT_SIZE_INDEX));
   if (!size)
     size = pixel_size;