> It seems to have a different effect: the last version at least has one size where s-f-a changes the height by 2 line heights. > > See this transcript where at the end (and multiple times before that) change the frame to 118x35 (per GNOME) which is 112x35 internally, and s-f-a changes the height to 33 (per GNOME) which is 34 internally. I suppose you're talking about this part: x_new_font old char size 17x37 new char size 17x37 text chars 112x35 old text pixels 1904x1330 new text pixels 1904x1295 xg_frame_set_char_size old native pixels 1952x1330 new native pixels 1952x1295 outer pixels 976x713 outer rest 0x0 xg_frame_resized old native pixels 1952x1330 new native pixels 1952x1294 adjust_frame_size old native pixels 1952x1330 new native pixels 1952x1294 old text pixels 1904x1330 new text pixels 1904x1294 old text chars 112x35 new text chars 112x34 And what you probably mean here is that you've seen the GNOME window show 118x35, then you did 'set-face-attribute' and after that the GNOME window showed 118x33. The explanation is probably that GNOME shows the N from the frame_height = base_height + N * height_inc calculation and after 'set-face-attribute' already removed one line, increasing base_height to make the equation hold removed another one. I attach a patch where I try to mimic in *foo*, after a text "WM hint", what a WM would typically show there. Please switch to *foo* right away and, while you drag a border, check whether the numbers are the same GNOME displays. If so, please show me again the transcript of the above. (118 vs 112 looks slightly preposterous BTW - it would mean that scroll bar and fringes are six characters wide. Here both width and height differ by 1 only.) martin