emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Proposing changes to adjust_frame_size


From: martin rudalics
Subject: Re: Proposing changes to adjust_frame_size
Date: Sun, 16 May 2021 10:29:34 +0200

> With --load repro.el the initial frame has:
>
> --8<---------------cut here---------------start------------->8---
> Frame size history of #<frame *scratch* - GNU Emacs at thinkpad-t440p 
0x555ace1cfc60>
> x_create_frame_1 (5), TS=80x25~>640x525, NS=80x25~>656x525, 
IS=80x25~>656x525, MS=16x42 IH IV
> gui_figure_window_size (5), TS=640x525~>640x756, TC=80x25~>80x36, 
NS=656x525~>656x756, IS=656x525~>656x756, MS=16x42 IH IV
> scroll-bar-width (3), NS=656x756~>672x756, IS=656x756~>672x756, MS=80x105

16 pixels for the scroll bar, we don't know yet that it will be turned
off.

> scroll-bar-height (3), MS=80x105
> menu-bar-lines (2), MS=80x105
> x_create_frame_2 (0), MS=80x105
> xg_frame_set_char_size, invisible, PS=672x756, XS=672x756, DS=672x756
> xg_frame_set_char_size (5), MS=16x42 IH IV
> MapNotify, not hidden & not iconified, PS=672x756, DS=672x756
> ConfigureNotify, PS=672x756, XS=672x756, DS=672x756

This was a ConfigureNotify for the frame size we asked for.  We don't
pass it on to change_frame_size since it's the size we have set already.

> xg_frame_resized, unchanged, PS=672x756, XS=672x756
> ConfigureNotify, PS=672x756, XS=1594x851, DS=672x756

And this was a ConfigureNotify for the frame size the WM allots to us.
This time it gives you the entire display - 1594x851 native pixels,
right?.

> xg_frame_resized, changed, PS=672x756, XS=1594x851
> change_frame_size_1, delayed, PS=672x756, XS=1594x851, DS=672x756
> change_frame_size (5), TS=640x756~>1562x851, TC=80x36~>195x40, 
NS=672x756~>1594x851, IS=672x756~>1594x851, MS=16x42 IH IV

Here Emacs should have dealt with the size we got from the WM resulting
in 195x40 characters.

> tool-bar-lines (2), MS=80x105 IH IV
> menu-bar-lines (2), MS=80x105 IH IV
> vertical-scroll-bars (3), TS=1562x851~>1578x851, TC=195x40~>197x40, MS=80x105 
IH IV

Here we presumably processed the removal of the various bars.

> size (1), TS=1578x851~>720x1050, TC=197x40~>90x50, NS=1594x851~>736x1050, 
IS=1594x851~>736x1050, MS=80x105

And here the 90x50 characters size request from `default-frame-alist'
kicked in.

> xg_frame_set_char_size, visible, PS=1594x851, XS=736x1050, DS=736x1050
> ConfigureNotify, PS=1594x851, XS=1594x878, DS=736x1050

Here we got a ConfigureNotify of 1594x878 native pixels.  These are 17
pixels more than before, probably from the recovered menu bar pixels
(leaving the outer frame size unchanged).

> xg_frame_resized, changed, PS=1594x851, XS=1594x878
> change_frame_size_1, delayed, PS=1594x851, XS=1594x878, DS=736x1050
> change_frame_size (5), TS=1578x851~>1578x878, TC=197x40~>197x41, 
NS=1594x851~>1594x878, IS=1594x851~>1594x878, MS=16x42 IH IV

And here we processed the ConfigureNotify, resulting in 197x41
characters.

> --8<---------------cut here---------------end--------------->8---

The problem with this history is that the focus/resize is somewhere
processed in it but I cannot tell where.  I suppose that at the time the
1594x878 pixels appear in the history, everything looks good, that is
the menu bar has disappeared probably after the frame has got focus.

>> After that do
>>
>> (setq frame-size-history '(100))
>>
>> run C-x 5 2 and again post what `frame--size-history' returns.
>
> --8<---------------cut here---------------start------------->8---
> Frame size history of #<frame *scratch* 0x555ace358480>
> x_create_frame_1 (5), TS=80x25~>640x525, NS=80x25~>656x525, 
IS=80x25~>656x525, MS=16x42 IH IV
> gui_figure_window_size (5), TS=640x525~>720x1050, TC=80x25~>90x50, 
NS=656x525~>736x1050, IS=656x525~>736x1050, MS=16x42 IH IV
> scroll-bar-width (3), NS=736x1050~>752x1050, IS=736x1050~>752x1050, MS=80x105

16 pixels for the scroll bar with `scroll-bar-mode' turned off?  Looks
silly and is probably the cause of the "scrollbar which won't vanish
except by M-x scroll-bar-mode RET twice".

> scroll-bar-height (3), MS=80x105
> x_create_frame_2 (0), MS=80x105
> xg_frame_set_char_size, invisible, PS=752x1050, XS=752x1050, DS=752x1050
> xg_frame_set_char_size (5), MS=16x42 IH IV
> x_make_frame_visible
> MapNotify, not hidden & not iconified, PS=752x1050, DS=752x1050
> ConfigureNotify, PS=752x1050, XS=752x1050, DS=752x1050
> xg_frame_resized, unchanged, PS=752x1050, XS=752x1050
> ConfigureNotify, PS=752x1050, XS=794x878, DS=752x1050
> xg_frame_resized, changed, PS=752x1050, XS=794x878
> change_frame_size_1, delayed, PS=752x1050, XS=794x878, DS=752x1050
> change_frame_size (5), TS=720x1050~>762x878, TC=90x50~>95x41, 
NS=752x1050~>794x878, IS=752x1050~>794x878, MS=16x42 IH IV

This looks normal again just that I don't have any idea where this

> set_window_configuration (4), MS=80x105 IH IV

comes from.

> --8<---------------cut here---------------end--------------->8---
>
> And now the same with the repro.el where the default-frame-alist setting
> is commented out, and thereby it works all fine, i.e., the initial frame
> has tool/menu/scrollbars disabled and the second frame has, too.
>
> Initial frame:
>
> --8<---------------cut here---------------start------------->8---
> Frame size history of #<frame *scratch* - GNU Emacs at thinkpad-t440p 
0x55dd691fa0c0>
> x_create_frame_1 (5), TS=80x25~>640x525, NS=80x25~>656x525, 
IS=80x25~>656x525, MS=16x42 IH IV
> gui_figure_window_size (5), TS=640x525~>640x756, TC=80x25~>80x36, 
NS=656x525~>656x756, IS=656x525~>656x756, MS=16x42 IH IV
> scroll-bar-width (3), NS=656x756~>672x756, IS=656x756~>672x756, MS=80x105
> scroll-bar-height (3), MS=80x105
> menu-bar-lines (2), MS=80x105
> x_create_frame_2 (0), MS=80x105
> xg_frame_set_char_size, invisible, PS=672x756, XS=672x756, DS=672x756
> xg_frame_set_char_size (5), MS=16x42 IH IV
> MapNotify, not hidden & not iconified, PS=672x756, DS=672x756
> ConfigureNotify, PS=672x756, XS=672x756, DS=672x756
> xg_frame_resized, unchanged, PS=672x756, XS=672x756
> ConfigureNotify, PS=672x756, XS=1594x851, DS=672x756
> xg_frame_resized, changed, PS=672x756, XS=1594x851
> change_frame_size_1, delayed, PS=672x756, XS=1594x851, DS=672x756
> change_frame_size (5), TS=640x756~>1562x851, TC=80x36~>195x40, 
NS=672x756~>1594x851, IS=672x756~>1594x851, MS=16x42 IH IV
> tool-bar-lines (2), MS=80x105 IH IV
> menu-bar-lines (2), MS=80x105 IH IV
> vertical-scroll-bars (3), TS=1562x851~>1578x851, TC=195x40~>197x40, MS=80x105 
IH IV

No 90x50 request here.

> ConfigureNotify, PS=1594x851, XS=1594x878
> xg_frame_resized, changed, PS=1594x851, XS=1594x878
> change_frame_size_1, delayed, PS=1594x851, XS=1594x878
> change_frame_size (5), TS=1578x851~>1578x878, TC=197x40~>197x41, 
NS=1594x851~>1594x878, IS=1594x851~>1594x878, MS=16x42 IH IV

And everything looks like above.

> --8<---------------cut here---------------end--------------->8---

>> Is this behavior new or did it already occur in Emacs 27?
>
> Yes, with my repro.el containing the `default-frame-alist' setting, the
> initial frame has a menubar (until resize/focus), and the new frame
> after C-x 5 2 has a scrollbar.

And with Emacs 27 the initial frame did not have a menu bar initially
and the new frame after C-x 5 2 did not have a scroll bar initially.
Right?

Did my latest commit (c18403302df3f07a7f94c3984d65b808fb40e8c1) in this
area change anything in this regard?

martin



reply via email to

[Prev in Thread] Current Thread [Next in Thread]