Managing maximized windows on MacOS
paul at researchware.com
Wed Nov 20 08:17:33 EST 2019
On 11/20/2019 3:45 AM, Giovanni via use-livecode wrote:
> Hi everybody,
> as already said the main problem is that there is no way to intercept the maximization action and to understand if the window is maximized or not.
> screenrects or windowBoundingRect are not useful in this case mainly when the maximized window has a maxWidth or maxHeight value lower than the maximum width/height of the screenrect.
> Moreover due to the bug #21311 (https://quality.livecode.com/show_bug.cgi?id=21311 <https://quality.livecode.com/show_bug.cgi?id=21311>) it’s not possible to prevent the windows maximization for the resizable stacks.
> So, any other hint about this topic?
As this is really an issue mainly on recent versions of macOS where
maximize goes to full screen and then really on on the primary monitor
as it covers things like the menu bar, I think a work-around in
resizeStack is the way to go. in the resizeStack handler see get the
rect of the stack - this will be the stacks new rect. If the top in the
space normally reserved for the menu bar. It doesn't have to equal the
rect of the primary monitor. You just eed to check the top and see if it
is less than the height of the macOS menubar (I think 44px? Can't
remember off the top of my head). If top is less than 44px then the
stack has been maximized and then you can reset the rect to the
effective working rect of the primary screen
so something like:
if the screen of this stack = 1 then -- this stack is on the primary
if (the effective top of this stack < (item 2 of the screenRect +
44)) then -- this stack has been maximized as its top is "above" the menubar
set the effective rect of this stack to the effective working
-- do the rest of resizeStack based on the (now) revised stack rect,
so don't use the height or width passed as params, but get the height,
width, or rect after this line so you have the revised rect.
I have not tested this - I just wrote it off the top of my head, so
check to see if it works.
More information about the use-livecode