bug-gnu-emacs
[Top][All Lists]
Advanced

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

bug#25542: 25.1; Restoring the frame from fullscreen to maximized


From: martin rudalics
Subject: bug#25542: 25.1; Restoring the frame from fullscreen to maximized
Date: Fri, 27 Jan 2017 14:47:40 +0100

> ** Before step 2 (i.e. just after maximizing the frame with the mouse):
>
> ((outer-position 54 . -8) (outer-size 1554 . 916)

54 because the frame's left outer edge is by external-border-size
pixels left of the taskbar's right end which according to

> LEFT:
> (((geometry 0 0 1600 900) (workarea 62 0 1538 900) (mm-size 443 249)
> (name . "\\\\.\\DISPLAY1") (frames #<frame emacs@CPX-L6Q03C31DOX
> 0x10100bc30>)))

is at 62.  -8 because the frame's top edge is by external-border-size
pixels above the display.

> (external-border-size 8 . 8) (title-bar-size 1516 . 23)
> (menu-bar-external . t) (menu-bar-size 1538 . 20) (tool-bar-external)
> (tool-bar-position . top) (tool-bar-size 1554 . 36)
> (internal-border-width . 0))
>
> ** After step 3 (i.e. just after pressing F11 a second time)
>
> ((outer-position 192 . 130) (outer-size 689 . 671)
> (external-border-size 8 . 8) (title-bar-size 651 . 23)
> (menu-bar-external . t) (menu-bar-size 673 . 20) (tool-bar-external)
> (tool-bar-position . top) (tool-bar-size 689 . 36)
> (internal-border-width . 0))

All these values are consistent now and indicate that the frame has
returned to its normal state after step 3.

> These values (after final step) are the same I get at the very
> beginning (just after "emacs -Q").

Everything seems clear - the bug is all mine.  Windows just told us that
the frame was maximized but the simple hack in w32.term.c

                case SIZE_MAXIMIZED:
                  ...
                  /* Windows can send us a SIZE_MAXIMIZED message even
                     when fullscreen is fullboth.  The following is a
                     simple hack to check that based on the fact that
                     only a maximized fullscreen frame should have both
                     top/left outside the screen.  */
                  if (EQ (fullscreen, Qfullwidth) || EQ (fullscreen, 
Qfullheight)
                      || NILP (fullscreen))
                      {
                        int x, y;

                        x_real_positions (f, &x, &y);
                        if (x < 0 && y < 0)
                          store_frame_param (f, Qfullscreen, Qmaximized);
                      }

fails becaue either x (in your case) or y (in the taskbar at top case)
are greater zero.  (I boldly assume that NILP (fullscreen) held, maybe
Noam can verify - I never move my taskbar.)  I could replace

                        if (x < 0 && y < 0)
                        
with

                        if (x < 0 || y < 0)

to handle the two cases but that check appears downright silly and will
fail anyway for border-less, maximized frames.  I must devise something
better.

Thanks for all the information you sent, martin





reply via email to

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