AW: Re: macOS window maximization weirdness
Mark Waddingham
mark at livecode.com
Mon Feb 12 11:36:35 EST 2024
On 2024-02-10 21:16, Paul Dupuis via use-livecode wrote:
> My desktopChanged handler, at one point, executes either a:
>
> set the effective width of window tWindow to tMontiorWidth
> OR a
> set the effective height of window tWindow to tMonitorHeight
>
> Either of which sends a resizeStack message to the stack/window.
> However, when it is sent this 2nd time as a result of the window
> maximization (which does a successful resizeStack, then desktopChanged,
> which sets teh effecting width/height, that causes a resizeStack) the
> resizeStack parameters, pNewWidth and pNewHeight are EMPTY, so any
> placement of controls based on the parameters use empty, which gets
> treated as zero.
As far as I can see, the engine only ever sends resizeStack with all
parameters - so if your stack is getting a resizeStack with only two
arguments - that's being sent from your code or a library you are using
I think.
> The work-around is the do Example 2 for resizeStack, but I think is
> might be considered an ENGINE BUG that on macOS, not Windows,
> maximization sends a resizeStack and then a desktopChanged message. No
> monitor has been added or removed, nor has the resolution of any
> monitor been changed, therefore I don't think a desktopChanged message
> SHOULD be sent on macOS window maximization. I think this is a bug?
> Does anyone have a valid reason why macOS should receive a
> desktopChanged message on window maximization when Windows does not?
So the engine hooks into the notification from the OS for a change in
screen parameters... The engine then checks the new ones against the old
and sends desktopChanged if there are any differences.
In the case of maximization on macOS - using (what is now!) the
fullscreen gadget on the titlebar of windows causes the OS furniture to
ebb away - i.e. the *working* screenRect changes - and thus the engine
sends the desktopChanged notification.*
(You can test this by creating a stack and 'answer the screenRect &
return & the working screenRect' - click before and after the fullscreen
gadget on the title bar, and there will be a difference.)
Warmest Regards,
Mark.
P.S. The message is also sent when the dock is adjusted in size too - so
presumably you would see the same problem then (assuming your handling
of the desktopChanged message is causing the errant resizeStack with
only two arguments to be sent from script somehow).
--
Mark Waddingham ~ mark at livecode.com ~ http://www.livecode.com/
LiveCode: Build Amazing Things
More information about the use-livecode
mailing list