changeset 106162:4cee82a6f25b

Always suggest system font because .emacs may not have been read yet. * xfns.c (x_default_font_parameter): Call xsettings_get_system_font. * xsettings.h: Declare xsettings_get_system_font. * xsettings.c (xsettings_get_system_font): New function. (init_gconf): No use initiating gconf unless we have Xft also. (syms_of_xsettings): Only provide system-font-setting if HAVE_XFT and HAVE_GCONF.
author Jan Djärv <jan.h.d@swipnet.se>
date Fri, 20 Nov 2009 09:44:42 +0000
parents 0ea716305b13
children 42b0c234616a
files src/ChangeLog src/xfns.c src/xsettings.c src/xsettings.h
diffstat 4 files changed, 30 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Fri Nov 20 08:54:18 2009 +0000
+++ b/src/ChangeLog	Fri Nov 20 09:44:42 2009 +0000
@@ -1,5 +1,14 @@
 2009-11-20  Jan Djärv  <jan.h.d@swipnet.se>
 
+	* xfns.c (x_default_font_parameter): Call xsettings_get_system_font.
+
+	* xsettings.h: Declare xsettings_get_system_font.
+
+	* xsettings.c (xsettings_get_system_font): New function.
+	(init_gconf): No use initiating gconf unless we have Xft also.
+	(syms_of_xsettings): Only provide system-font-setting if HAVE_XFT and
+	HAVE_GCONF.
+
 	* gtkutil.c (xg_modify_menubar_widgets): If menubar is totally empty
 	add a blank entry so it doesn't collapse into nothing.
 
--- a/src/xfns.c	Fri Nov 20 08:54:18 2009 +0000
+++ b/src/xfns.c	Fri Nov 20 09:44:42 2009 +0000
@@ -3031,14 +3031,21 @@
   Lisp_Object font;
   int got_from_gconf = 0;
   if (EQ (font_param, Qunbound))
+    font_param = Qnil;
+
+  if (NILP (font_param))
     {
-      font_param = Ffont_get_system_font();
-      got_from_gconf = !NILP (font_param);
+      /* System font takes precedendce over X resources.  We must suggest this
+         regardless of font-use-system-font because .emacs may not have been
+         read yet.  */
+      const char *system_font = xsettings_get_system_font ();
+      if (system_font) font_param = make_string (system_font,
+                                                 strlen (system_font));
     }
-
+  
   font = !NILP (font_param) ? font_param
     : x_get_arg (dpyinfo, parms, Qfont, "font", "Font", RES_TYPE_STRING);
-  
+
   if (! STRINGP (font))
     {
       char *names[]
--- a/src/xsettings.c	Fri Nov 20 08:54:18 2009 +0000
+++ b/src/xsettings.c	Fri Nov 20 09:44:42 2009 +0000
@@ -498,7 +498,7 @@
 static void
 init_gconf ()
 {
-#ifdef HAVE_GCONF
+#if defined (HAVE_GCONF) && defined (HAVE_XFT)
   int i;
   char *s;
   /* Should be enough, this is called at startup */
@@ -556,7 +556,7 @@
           init_sigio (i);
 #endif /* ! defined (SIGIO) */
       }
-#endif /* HAVE_GCONF */
+#endif /* HAVE_GCONF && HAVE_XFT */
 }
 
 static void
@@ -605,6 +605,11 @@
   init_xfd_settings (dpyinfo);
 }
 
+const char *
+xsettings_get_system_font ()
+{
+  return current_mono_font;
+}
 
 DEFUN ("font-get-system-font", Ffont_get_system_font, Sfont_get_system_font,
        0, 0, 0,
@@ -635,10 +640,10 @@
     doc: /* *Non-nil means to use the system defined font.  */);
   use_system_font = 0;
 
+#ifdef HAVE_XFT
+  Fprovide (intern_c_string ("font-render-setting"), Qnil);
 #ifdef HAVE_GCONF
   Fprovide (intern_c_string ("system-font-setting"), Qnil);
 #endif
-#ifdef HAVE_XFT
-  Fprovide (intern_c_string ("font-render-setting"), Qnil);
 #endif
 }
--- a/src/xsettings.h	Fri Nov 20 08:54:18 2009 +0000
+++ b/src/xsettings.h	Fri Nov 20 09:44:42 2009 +0000
@@ -24,6 +24,7 @@
 extern void xsettings_initialize P_ ((struct x_display_info *dpyinfo));
 extern void xft_settings_event P_ ((struct x_display_info *dpyinfo,
                                     XEvent *));
+extern const char *xsettings_get_system_font P_ ((void));
 
 
 #endif /* XSETTINGS_H */