changeset 96084:0623378cdbca

* w32fns.c, xfnc.c (x_default_font_parameter): Only set `font-param' for explicit `font' parameters. * frame.c (x_set_font): Remove unexplained call to fix inf-recursion.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Fri, 20 Jun 2008 01:53:32 +0000
parents 06ba89946164
children c6a0766ce37e
files src/ChangeLog src/frame.c src/w32fns.c src/xfns.c
diffstat 4 files changed, 33 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Thu Jun 19 10:37:11 2008 +0000
+++ b/src/ChangeLog	Fri Jun 20 01:53:32 2008 +0000
@@ -1,3 +1,10 @@
+2008-06-20  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* w32fns.c, xfnc.c (x_default_font_parameter): Only set `font-param'
+	for explicit `font' parameters.
+
+	* frame.c (x_set_font): Remove unexplained call to fix inf-recursion.
+
 2008-06-19  Kenichi Handa  <handa@m17n.org>
 
 	* frame.c: Include <ctype.h>.
--- a/src/frame.c	Thu Jun 19 10:37:11 2008 +0000
+++ b/src/frame.c	Fri Jun 20 01:53:32 2008 +0000
@@ -3400,7 +3400,13 @@
   if (FRAME_FACE_CACHE (f))
     {
       XSETFRAME (frame, f);
-      call1 (Qface_set_after_frame_default, frame);
+      /* We used to call face-set-after-frame-default here, but it leads to
+	 recursive calls (since that function can set the `default' face's
+	 font which in turns changes the frame's `font' parameter).
+	 Also I don't know what this call is meant to do, but it seems the
+	 wrong way to do it anyway (it does a lot more work than what seems
+	 reasonable in response to a change to `font').  */
+      /* call1 (Qface_set_after_frame_default, frame); */
     }
 }
 
--- a/src/w32fns.c	Thu Jun 19 10:37:11 2008 +0000
+++ b/src/w32fns.c	Fri Jun 20 01:53:32 2008 +0000
@@ -4274,8 +4274,13 @@
      Lisp_Object parms;
 {
   struct w32_display_info *dpyinfo = FRAME_W32_DISPLAY_INFO (f);
-  Lisp_Object font = x_get_arg (dpyinfo, parms, Qfont, "font", "Font",
-                                RES_TYPE_STRING);
+  Lisp_Object font_param = x_get_arg (dpyinfo, parms, Qfont, NULL, NULL,
+				RES_TYPE_STRING);
+  Lisp_Object font;
+  if (EQ (font_param, Qunbound))
+    font_param = Qnil;
+  font = !NILP (font_param) ? font_param
+    : x_get_arg (dpyinfo, parms, Qfont, "font", "Font", RES_TYPE_STRING);
 
   if (!STRINGP (font))
     {
@@ -4296,12 +4301,12 @@
       if (NILP (font))
         error ("No suitable font was found");
     }
-  else
+  else if (!NILP (font_param))
     {
       /* Remember the explicit font parameter, so we can re-apply it after
 	 we've applied the `default' face settings.  */
-      x_set_frame_parameters (f, Fcons (Fcons (Qfont_param, font), Qnil));
-  }
+      x_set_frame_parameters (f, Fcons (Fcons (Qfont_param, font_param), Qnil));
+    }
   x_default_parameter (f, parms, Qfont, font, "font", "Font", RES_TYPE_STRING);
 }
 
--- a/src/xfns.c	Thu Jun 19 10:37:11 2008 +0000
+++ b/src/xfns.c	Fri Jun 20 01:53:32 2008 +0000
@@ -3060,8 +3060,13 @@
      Lisp_Object parms;
 {
   struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f);
-  Lisp_Object font = x_get_arg (dpyinfo, parms, Qfont, "font", "Font",
+  Lisp_Object font_param = x_get_arg (dpyinfo, parms, Qfont, NULL, NULL,
 				RES_TYPE_STRING);
+  Lisp_Object font;
+  if (EQ (font_param, Qunbound))
+    font_param = Qnil;
+  font = !NILP (font_param) ? font_param
+    : x_get_arg (dpyinfo, parms, Qfont, "font", "Font", RES_TYPE_STRING);
 
   if (! STRINGP (font))
     {
@@ -3088,12 +3093,12 @@
       if (NILP (font))
 	error ("No suitable font was found");
     }
-  else
+  else if (!NILP (font_param))
     {
       /* Remember the explicit font parameter, so we can re-apply it after
 	 we've applied the `default' face settings.  */
-      x_set_frame_parameters (f, Fcons (Fcons (Qfont_param, font), Qnil));
-  }
+      x_set_frame_parameters (f, Fcons (Fcons (Qfont_param, font_param), Qnil));
+    }
   x_default_parameter (f, parms, Qfont, font, "font", "Font", RES_TYPE_STRING);
 }