# HG changeset patch # User Jan Dj¸«£rv # Date 1247245656 0 # Node ID a9bb4a9d0ebd984cebaed12a65690e9e7a25ff0a # Parent 65b0cbb5b077b682f105ebd2477c1b2a1f1fe3a7 xfns.c (Fx_select_font): Remember last font selected in x_last_font_name and use that the next time. Also try the frame parameter font-parameter as default to the font dialog. diff -r 65b0cbb5b077 -r a9bb4a9d0ebd src/ChangeLog --- a/src/ChangeLog Fri Jul 10 12:05:14 2009 +0000 +++ b/src/ChangeLog Fri Jul 10 17:07:36 2009 +0000 @@ -1,3 +1,9 @@ +2009-07-10 Jan DjƤrv + + * xfns.c (Fx_select_font): Remember last font selected in + x_last_font_name and use that the next time. Also try the frame + parameter font-parameter as default to the font dialog. + 2009-07-10 Kenichi Handa * xftfont.c (xftfont_open): Fix typo: FC_RGBA->FC_HINT_STYLE. diff -r 65b0cbb5b077 -r a9bb4a9d0ebd src/xfns.c --- a/src/xfns.c Fri Jul 10 12:05:14 2009 +0000 +++ b/src/xfns.c Fri Jul 10 17:07:36 2009 +0000 @@ -208,6 +208,9 @@ int image_cache_refcount, dpyinfo_refcount; #endif +#if defined (USE_GTK) && defined (HAVE_FREETYPE) +char *x_last_font_name; +#endif /* Error if we are not connected to X. */ @@ -5629,6 +5632,9 @@ FRAME_PTR f = check_x_frame (frame); char *name; Lisp_Object default_font, font = Qnil; + Lisp_Object font_param; + char *default_name = NULL; + struct gcpro gcpro1; int count = SPECPDL_INDEX (); check_x (); @@ -5642,21 +5648,28 @@ BLOCK_INPUT; - XSETFONT (default_font, FRAME_FONT (f)); - if (FONTP (default_font)) + GCPRO1(font_param); + font_param = Fframe_parameter (frame, Qfont_param); + + if (x_last_font_name != NULL) + default_name = x_last_font_name; + else if (STRINGP (font_param)) + default_name = SDATA (font_param); + else if (FONTP (default_font)) { - char *default_name = alloca (256); + XSETFONT (default_font, FRAME_FONT (f)); + default_name = alloca (256); if (font_unparse_gtkname (default_font, f, default_name, 256) < 0) default_name = NULL; - name = xg_get_font_name (f, default_name); } - else - name = xg_get_font_name (f, NULL); + + name = xg_get_font_name (f, default_name); if (name) { font = build_string (name); - xfree (name); + g_free (x_last_font_name); + x_last_font_name = name; } UNBLOCK_INPUT; @@ -6028,6 +6041,7 @@ #if defined (USE_GTK) && defined (HAVE_FREETYPE) defsubr (&Sx_select_font); + x_last_font_name = NULL; #endif }