diff src/font.c @ 106201:01190029e5d3

Set Xft defaults if no XSETTING is found, better default for Gtk+ font dialog. * xfns.c (Fx_select_font): Try to convert Fontconfig name to Gtk name because that is what Gtk+ font dialog understands. * font.c (font_make_object, Fcopy_font_spec): Use Fcopy_alist instead of Fcopy_sequence. (font_open_by_name): Put name given into QCname for font-object returned. * frame.c (x_set_font): Save original font name as frame parameter font-parameter. * xsettings.c (set_default_xft_settings): New function. (init_xfd_settings): Call set_default_xft_settings if no XSETTINGS window is found.
author Jan Djärv <jan.h.d@swipnet.se>
date Mon, 23 Nov 2009 08:55:08 +0000
parents f2cea199b0c4
children da3ca3481c0b
line wrap: on
line diff
--- a/src/font.c	Mon Nov 23 05:37:34 2009 +0000
+++ b/src/font.c	Mon Nov 23 08:55:08 2009 +0000
@@ -218,7 +218,7 @@
 	font->props[i] = AREF (entity, i);
       if (! NILP (AREF (entity, FONT_EXTRA_INDEX)))
 	font->props[FONT_EXTRA_INDEX]
-	  = Fcopy_sequence (AREF (entity, FONT_EXTRA_INDEX));
+	  = Fcopy_alist (AREF (entity, FONT_EXTRA_INDEX));
     }
   if (size > 0)
     font->props[FONT_SIZE_INDEX] = make_number (pixelsize);
@@ -721,10 +721,12 @@
       while (CONSP (extra)
 	     && NILP (Fstring_lessp (prop, XCAR (XCAR (extra)))))
 	prev = extra, extra = XCDR (extra);
-      if (NILP (prev))
-	ASET (font, FONT_EXTRA_INDEX, Fcons (Fcons (prop, val), extra));
-      else
-	XSETCDR (prev, Fcons (Fcons (prop, val), extra));
+
+      if (NILP (prev)) 
+        ASET (font, FONT_EXTRA_INDEX, Fcons (Fcons (prop, val), extra));
+      else 
+        XSETCDR (prev, Fcons (Fcons (prop, val), extra));
+      
       return val;
     }
   XSETCDR (slot, val);
@@ -3600,12 +3602,16 @@
      char *name;
 {
   Lisp_Object args[2];
-  Lisp_Object spec;
+  Lisp_Object spec, ret;
 
   args[0] = QCname;
   args[1] = make_unibyte_string (name, strlen (name));
   spec = Ffont_spec (2, args);
-  return font_open_by_spec (f, spec);
+  ret = font_open_by_spec (f, spec);
+  /* Do not loose name originally put in.  */
+  font_put_extra (ret, QCname, args[1]);
+
+  return ret;
 }
 
 
@@ -4137,7 +4143,7 @@
   new_spec = font_make_spec ();
   for (i = 1; i < FONT_EXTRA_INDEX; i++)
     ASET (new_spec, i, AREF (font, i));
-  extra = Fcopy_sequence (AREF (font, FONT_EXTRA_INDEX));
+  extra = Fcopy_alist (AREF (font, FONT_EXTRA_INDEX));
   /* We must remove :font-entity property.  */
   for (prev = Qnil, tail = extra; CONSP (tail); prev = tail, tail = XCDR (tail))
     if (EQ (XCAR (XCAR (tail)), QCfont_entity))