Subject: bug#14233: 24.3; Don't constrain frame size to character multiples

From: martin rudalics <[email-masked]>
Date: Mon, 22 Apr 2013 11:34:38 +0200

> For NS a maximized and fullscreen requests comes in as separate
 > requests, for X they are normal resize request.
[...]
 > The problem is that you think from the W32 point of view where (if I
 > interepret you correctly), Emacs applies size hints after the resize
 > request has been delivered.

I think so.

 > This is not so for NS and X.  Any size in a resize request is
 > accepted.  If it follows WM size hints, great, if it don't, who
 > cares?.  The frame size is set to the size in the request anyway.

IIUC we do care because we want to fit the frame's windows according to
the incoming request.

 > So for NS and X, fullscreen, maximized and such is no problem.  A
 > minor glitch in NS is that we calculate the maximized sizes ourself,
 > and these are rounded to character sizes.  If windows could handle
 > pixel sizes, we could easily fix this.

In any case, the maximized size of the frame is not necessarily an
integral multiple of character sizes so the frame gets or should get
resized pixelwise.

 > But there is no restriction on NS and X11 frames to resize by pixel
 > (i.e. not character multiples).

So by default, on Windows I always accept a maximize request and resize
windows accordingly.  For any other size request I process a non-rounded
size iff the variable `frame-resize-pixelwise' is non-nil.

On all other platforms, `frame-resize-pixelwise' has no impact.  If and
whether size hints are turned on and have any impact depends on settings
for the window manager used and is of no concern to me.  Whatever size
is requested by the WM is processed without any rounding.

The interface to the window subsystem will be the function

change_frame_size (struct frame *f, int new_width, int new_height,
		   bool pretend, bool delay, bool safe, bool pixelwise)

which processes new_width and new_height in terms of pixels if pixelwise
is non-nil.

martin