aboutsummaryrefslogtreecommitdiffstats
path: root/src/font.c
diff options
context:
space:
mode:
authorJan Djärv2009-11-23 08:55:08 +0000
committerJan Djärv2009-11-23 08:55:08 +0000
commit581e51e8918b3ba9b58e67768a1de39ce5f1cbd3 (patch)
treeb210e82974c9e4ab1d3cc1c0a9e86348a425526b /src/font.c
parent0f202d5d8fa1f0dea9c1e5e52e6ad66e4848aa75 (diff)
downloademacs-581e51e8918b3ba9b58e67768a1de39ce5f1cbd3.tar.gz
emacs-581e51e8918b3ba9b58e67768a1de39ce5f1cbd3.zip
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.
Diffstat (limited to 'src/font.c')
-rw-r--r--src/font.c22
1 files changed, 14 insertions, 8 deletions
diff --git a/src/font.c b/src/font.c
index aa07c7805d1..5aa14ca4211 100644
--- a/src/font.c
+++ b/src/font.c
@@ -218,7 +218,7 @@ font_make_object (size, entity, pixelsize)
218 font->props[i] = AREF (entity, i); 218 font->props[i] = AREF (entity, i);
219 if (! NILP (AREF (entity, FONT_EXTRA_INDEX))) 219 if (! NILP (AREF (entity, FONT_EXTRA_INDEX)))
220 font->props[FONT_EXTRA_INDEX] 220 font->props[FONT_EXTRA_INDEX]
221 = Fcopy_sequence (AREF (entity, FONT_EXTRA_INDEX)); 221 = Fcopy_alist (AREF (entity, FONT_EXTRA_INDEX));
222 } 222 }
223 if (size > 0) 223 if (size > 0)
224 font->props[FONT_SIZE_INDEX] = make_number (pixelsize); 224 font->props[FONT_SIZE_INDEX] = make_number (pixelsize);
@@ -721,10 +721,12 @@ font_put_extra (font, prop, val)
721 while (CONSP (extra) 721 while (CONSP (extra)
722 && NILP (Fstring_lessp (prop, XCAR (XCAR (extra))))) 722 && NILP (Fstring_lessp (prop, XCAR (XCAR (extra)))))
723 prev = extra, extra = XCDR (extra); 723 prev = extra, extra = XCDR (extra);
724 if (NILP (prev)) 724
725 ASET (font, FONT_EXTRA_INDEX, Fcons (Fcons (prop, val), extra)); 725 if (NILP (prev))
726 else 726 ASET (font, FONT_EXTRA_INDEX, Fcons (Fcons (prop, val), extra));
727 XSETCDR (prev, Fcons (Fcons (prop, val), extra)); 727 else
728 XSETCDR (prev, Fcons (Fcons (prop, val), extra));
729
728 return val; 730 return val;
729 } 731 }
730 XSETCDR (slot, val); 732 XSETCDR (slot, val);
@@ -3600,12 +3602,16 @@ font_open_by_name (f, name)
3600 char *name; 3602 char *name;
3601{ 3603{
3602 Lisp_Object args[2]; 3604 Lisp_Object args[2];
3603 Lisp_Object spec; 3605 Lisp_Object spec, ret;
3604 3606
3605 args[0] = QCname; 3607 args[0] = QCname;
3606 args[1] = make_unibyte_string (name, strlen (name)); 3608 args[1] = make_unibyte_string (name, strlen (name));
3607 spec = Ffont_spec (2, args); 3609 spec = Ffont_spec (2, args);
3608 return font_open_by_spec (f, spec); 3610 ret = font_open_by_spec (f, spec);
3611 /* Do not loose name originally put in. */
3612 font_put_extra (ret, QCname, args[1]);
3613
3614 return ret;
3609} 3615}
3610 3616
3611 3617
@@ -4137,7 +4143,7 @@ DEFUN ("copy-font-spec", Fcopy_font_spec, Scopy_font_spec, 1, 1, 0,
4137 new_spec = font_make_spec (); 4143 new_spec = font_make_spec ();
4138 for (i = 1; i < FONT_EXTRA_INDEX; i++) 4144 for (i = 1; i < FONT_EXTRA_INDEX; i++)
4139 ASET (new_spec, i, AREF (font, i)); 4145 ASET (new_spec, i, AREF (font, i));
4140 extra = Fcopy_sequence (AREF (font, FONT_EXTRA_INDEX)); 4146 extra = Fcopy_alist (AREF (font, FONT_EXTRA_INDEX));
4141 /* We must remove :font-entity property. */ 4147 /* We must remove :font-entity property. */
4142 for (prev = Qnil, tail = extra; CONSP (tail); prev = tail, tail = XCDR (tail)) 4148 for (prev = Qnil, tail = extra; CONSP (tail); prev = tail, tail = XCDR (tail))
4143 if (EQ (XCAR (XCAR (tail)), QCfont_entity)) 4149 if (EQ (XCAR (XCAR (tail)), QCfont_entity))