diff options
author | Po Lu <luangruo@yahoo.com> | 2022-11-19 13:59:53 +0800 |
---|---|---|
committer | Po Lu <luangruo@yahoo.com> | 2022-11-19 13:59:53 +0800 |
commit | b18d4dbe0d64bd1277731f9a7faedbb4dd3cd197 (patch) | |
tree | f611fd6ba7cf9a19f7b9ba317840d9b04daaea71 /src/xfaces.c | |
parent | 10701635cfefde5e416215d72f4dababe0ce8d7f (diff) | |
download | emacs-b18d4dbe0d64bd1277731f9a7faedbb4dd3cd197.tar.gz |
Fix automatic DPI adjustment and add workarounds for some systems
* lisp/faces.el (x-create-frame-with-faces): New field
`delayed-font'. Set the `font-parameter' property to `font' in
the given parameter list after face-set-after-frame-default is
called.
* src/fontset.c (Fset_fontset_font): Avoid changing
`font-parameter' with the call to Fmodify_frame_parameters.
* src/frame.c (gui_set_frame_parameters_1): New function.
Factor out gui_set_frame_parameters here, and add an argument
DEFAULT_PARAMETER. If the `font' parameter is set, and
`default_parameter' is not, then set the `font-parameter' frame
parameter to the `font' parameter as well, to keep track of
which user-specified `font' frame parameter set the default
face's font on the frame.
(gui_set_frame_parameters): Call gui_set_frame_parameters_1 with
new arg set to false.
(gui_set_font): Remove broken implementation of
`font-parameter'.
(gui_default_parameter): If the default value was used, then
call gui_set_frame_parameters_1 with the new argument set to
false. This is because no font was specified as a frame
parameter by the user, so Freconsider_frame_fonts is free to do
anything it wants.
(Freconsider_frame_fonts): If `font-parameter' is set, then use
it.
(syms_of_frame): New defsym Qfont_parameter.
* src/frame.h: Update prototypes.
* src/haikuterm.c (haiku_default_font_parameter):
* src/pgtkfns.c (pgtk_default_font_parameter):
* src/w32fns.c (w32_default_font_parameter): Stop setting
`font-parameter' here. This code resulted in decades of
automatic font rescaling not working correctly.
* src/xfaces.c (set_font_frame_param): Clear the
`font-parameter' frame parameter.
(Finternal_merge_in_global_face):
* src/xfns.c (x_default_font_parameter): Avoid changing
`font-parameter' in response to changes to face attributes.
* src/xsettings.c (apply_xft_settings): Add workaround for
Cairo. (bug#59371, bug#59347, bug#59283, bug#59271, bug#59285,
bug#59306.)
Diffstat (limited to 'src/xfaces.c')
-rw-r--r-- | src/xfaces.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/src/xfaces.c b/src/xfaces.c index ed76db9adb7..df078227c8a 100644 --- a/src/xfaces.c +++ b/src/xfaces.c @@ -3809,8 +3809,12 @@ set_font_frame_param (Lisp_Object frame, Lisp_Object lface) ASET (lface, LFACE_FONT_INDEX, font); } f->default_face_done_p = false; - AUTO_FRAME_ARG (arg, Qfont, font); - Fmodify_frame_parameters (frame, arg); + AUTO_LIST2 (arg, AUTO_CONS_EXPR (Qfont, font), + /* Clear the `font-parameter' frame property, as the + font is now being specified by a face, not a + frame property. */ + AUTO_CONS_EXPR (Qfont_parameter, Qnil)); + gui_set_frame_parameters_1 (f, arg, true); } } @@ -4208,7 +4212,17 @@ Default face attributes override any local face attributes. */) { Lisp_Object name = newface->font->props[FONT_NAME_INDEX]; AUTO_FRAME_ARG (arg, Qfont, name); - Fmodify_frame_parameters (frame, arg); + +#ifdef HAVE_WINDOW_SYSTEM + if (FRAME_WINDOW_P (f)) + /* This is a window-system frame. Prevent changes of + the `font' parameter here from messing with the + `font-parameter' frame property, as the frame + parameter is not being changed by the user. */ + gui_set_frame_parameters_1 (f, arg, true); + else +#endif + Fmodify_frame_parameters (frame, arg); } if (STRINGP (gvec[LFACE_FOREGROUND_INDEX])) |