aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorEli Zaretskii2022-07-03 15:37:50 +0300
committerEli Zaretskii2022-07-03 15:37:50 +0300
commite9bb92940e895c73c802d8c4c79e45de20ebbf83 (patch)
tree4bdafcaa7f0d1fe0c03b68a15f1b40ed22e85a03 /src
parent6e2f9dd3dd8b3c65608366039ce69666905d80cb (diff)
downloademacs-e9bb92940e895c73c802d8c4c79e45de20ebbf83.tar.gz
emacs-e9bb92940e895c73c802d8c4c79e45de20ebbf83.zip
Fix implementation of 'reset' face values
* src/xfaces.c (Finternal_merge_in_global_face) (gui_supports_face_attributes_p): Only modify local copy of face attributes when replacing 'reset' pseudo-values with real values. (Bug#38771)
Diffstat (limited to 'src')
-rw-r--r--src/xfaces.c67
1 files changed, 33 insertions, 34 deletions
diff --git a/src/xfaces.c b/src/xfaces.c
index 6142fe1ab17..8ae922578ec 100644
--- a/src/xfaces.c
+++ b/src/xfaces.c
@@ -4190,12 +4190,6 @@ Default face attributes override any local face attributes. */)
4190 the previously-cached vector. */ 4190 the previously-cached vector. */
4191 memcpy (attrs, oldface->lface, sizeof attrs); 4191 memcpy (attrs, oldface->lface, sizeof attrs);
4192 4192
4193 /* Make explicit any attributes whose value is 'reset'. */
4194 int i;
4195 for (i = 1; i < LFACE_VECTOR_SIZE; i++)
4196 if (EQ (lvec[i], Qreset))
4197 lvec[i] = attrs[i];
4198
4199 merge_face_vectors (NULL, f, lvec, attrs, 0); 4193 merge_face_vectors (NULL, f, lvec, attrs, 0);
4200 vcopy (local_lface, 0, attrs, LFACE_VECTOR_SIZE); 4194 vcopy (local_lface, 0, attrs, LFACE_VECTOR_SIZE);
4201 newface = realize_face (c, lvec, DEFAULT_FACE_ID); 4195 newface = realize_face (c, lvec, DEFAULT_FACE_ID);
@@ -5193,55 +5187,60 @@ gui_supports_face_attributes_p (struct frame *f,
5193 struct face *def_face) 5187 struct face *def_face)
5194{ 5188{
5195 Lisp_Object *def_attrs = def_face->lface; 5189 Lisp_Object *def_attrs = def_face->lface;
5190 Lisp_Object lattrs[LFACE_VECTOR_SIZE];
5196 5191
5197 /* Make explicit any attributes whose value is 'reset'. */ 5192 /* Make explicit any attributes whose value is 'reset'. */
5198 int i; 5193 int i;
5199 for (i = 1; i < LFACE_VECTOR_SIZE; i++) 5194 for (i = 1; i < LFACE_VECTOR_SIZE; i++)
5200 if (EQ (attrs[i], Qreset)) 5195 {
5201 attrs[i] = def_attrs[i]; 5196 if (EQ (attrs[i], Qreset))
5197 lattrs[i] = def_attrs[i];
5198 else
5199 lattrs[i] = attrs[i];
5200 }
5202 5201
5203 /* Check that other specified attributes are different from the 5202 /* Check that other specified attributes are different from the
5204 default face. */ 5203 default face. */
5205 if ((!UNSPECIFIEDP (attrs[LFACE_UNDERLINE_INDEX]) 5204 if ((!UNSPECIFIEDP (lattrs[LFACE_UNDERLINE_INDEX])
5206 && face_attr_equal_p (attrs[LFACE_UNDERLINE_INDEX], 5205 && face_attr_equal_p (lattrs[LFACE_UNDERLINE_INDEX],
5207 def_attrs[LFACE_UNDERLINE_INDEX])) 5206 def_attrs[LFACE_UNDERLINE_INDEX]))
5208 || (!UNSPECIFIEDP (attrs[LFACE_INVERSE_INDEX]) 5207 || (!UNSPECIFIEDP (lattrs[LFACE_INVERSE_INDEX])
5209 && face_attr_equal_p (attrs[LFACE_INVERSE_INDEX], 5208 && face_attr_equal_p (lattrs[LFACE_INVERSE_INDEX],
5210 def_attrs[LFACE_INVERSE_INDEX])) 5209 def_attrs[LFACE_INVERSE_INDEX]))
5211 || (!UNSPECIFIEDP (attrs[LFACE_EXTEND_INDEX]) 5210 || (!UNSPECIFIEDP (lattrs[LFACE_EXTEND_INDEX])
5212 && face_attr_equal_p (attrs[LFACE_EXTEND_INDEX], 5211 && face_attr_equal_p (lattrs[LFACE_EXTEND_INDEX],
5213 def_attrs[LFACE_EXTEND_INDEX])) 5212 def_attrs[LFACE_EXTEND_INDEX]))
5214 || (!UNSPECIFIEDP (attrs[LFACE_FOREGROUND_INDEX]) 5213 || (!UNSPECIFIEDP (lattrs[LFACE_FOREGROUND_INDEX])
5215 && face_attr_equal_p (attrs[LFACE_FOREGROUND_INDEX], 5214 && face_attr_equal_p (lattrs[LFACE_FOREGROUND_INDEX],
5216 def_attrs[LFACE_FOREGROUND_INDEX])) 5215 def_attrs[LFACE_FOREGROUND_INDEX]))
5217 || (!UNSPECIFIEDP (attrs[LFACE_DISTANT_FOREGROUND_INDEX]) 5216 || (!UNSPECIFIEDP (lattrs[LFACE_DISTANT_FOREGROUND_INDEX])
5218 && face_attr_equal_p (attrs[LFACE_DISTANT_FOREGROUND_INDEX], 5217 && face_attr_equal_p (lattrs[LFACE_DISTANT_FOREGROUND_INDEX],
5219 def_attrs[LFACE_DISTANT_FOREGROUND_INDEX])) 5218 def_attrs[LFACE_DISTANT_FOREGROUND_INDEX]))
5220 || (!UNSPECIFIEDP (attrs[LFACE_BACKGROUND_INDEX]) 5219 || (!UNSPECIFIEDP (lattrs[LFACE_BACKGROUND_INDEX])
5221 && face_attr_equal_p (attrs[LFACE_BACKGROUND_INDEX], 5220 && face_attr_equal_p (lattrs[LFACE_BACKGROUND_INDEX],
5222 def_attrs[LFACE_BACKGROUND_INDEX])) 5221 def_attrs[LFACE_BACKGROUND_INDEX]))
5223 || (!UNSPECIFIEDP (attrs[LFACE_STIPPLE_INDEX]) 5222 || (!UNSPECIFIEDP (lattrs[LFACE_STIPPLE_INDEX])
5224 && face_attr_equal_p (attrs[LFACE_STIPPLE_INDEX], 5223 && face_attr_equal_p (lattrs[LFACE_STIPPLE_INDEX],
5225 def_attrs[LFACE_STIPPLE_INDEX])) 5224 def_attrs[LFACE_STIPPLE_INDEX]))
5226 || (!UNSPECIFIEDP (attrs[LFACE_OVERLINE_INDEX]) 5225 || (!UNSPECIFIEDP (lattrs[LFACE_OVERLINE_INDEX])
5227 && face_attr_equal_p (attrs[LFACE_OVERLINE_INDEX], 5226 && face_attr_equal_p (lattrs[LFACE_OVERLINE_INDEX],
5228 def_attrs[LFACE_OVERLINE_INDEX])) 5227 def_attrs[LFACE_OVERLINE_INDEX]))
5229 || (!UNSPECIFIEDP (attrs[LFACE_STRIKE_THROUGH_INDEX]) 5228 || (!UNSPECIFIEDP (lattrs[LFACE_STRIKE_THROUGH_INDEX])
5230 && face_attr_equal_p (attrs[LFACE_STRIKE_THROUGH_INDEX], 5229 && face_attr_equal_p (lattrs[LFACE_STRIKE_THROUGH_INDEX],
5231 def_attrs[LFACE_STRIKE_THROUGH_INDEX])) 5230 def_attrs[LFACE_STRIKE_THROUGH_INDEX]))
5232 || (!UNSPECIFIEDP (attrs[LFACE_BOX_INDEX]) 5231 || (!UNSPECIFIEDP (lattrs[LFACE_BOX_INDEX])
5233 && face_attr_equal_p (attrs[LFACE_BOX_INDEX], 5232 && face_attr_equal_p (lattrs[LFACE_BOX_INDEX],
5234 def_attrs[LFACE_BOX_INDEX]))) 5233 def_attrs[LFACE_BOX_INDEX])))
5235 return false; 5234 return false;
5236 5235
5237 /* Check font-related attributes, as those are the most commonly 5236 /* Check font-related attributes, as those are the most commonly
5238 "unsupported" on a window-system (because of missing fonts). */ 5237 "unsupported" on a window-system (because of missing fonts). */
5239 if (!UNSPECIFIEDP (attrs[LFACE_FAMILY_INDEX]) 5238 if (!UNSPECIFIEDP (lattrs[LFACE_FAMILY_INDEX])
5240 || !UNSPECIFIEDP (attrs[LFACE_FOUNDRY_INDEX]) 5239 || !UNSPECIFIEDP (lattrs[LFACE_FOUNDRY_INDEX])
5241 || !UNSPECIFIEDP (attrs[LFACE_HEIGHT_INDEX]) 5240 || !UNSPECIFIEDP (lattrs[LFACE_HEIGHT_INDEX])
5242 || !UNSPECIFIEDP (attrs[LFACE_WEIGHT_INDEX]) 5241 || !UNSPECIFIEDP (lattrs[LFACE_WEIGHT_INDEX])
5243 || !UNSPECIFIEDP (attrs[LFACE_SLANT_INDEX]) 5242 || !UNSPECIFIEDP (lattrs[LFACE_SLANT_INDEX])
5244 || !UNSPECIFIEDP (attrs[LFACE_SWIDTH_INDEX])) 5243 || !UNSPECIFIEDP (lattrs[LFACE_SWIDTH_INDEX]))
5245 { 5244 {
5246 int face_id; 5245 int face_id;
5247 struct face *face; 5246 struct face *face;