Check if size changed before hiding a surface
Commit 68188fc9 introduces a workaround for clients that try to change the size of a popup after it is created, but inadvertently introduces an infinite loop of surface creation when the popup enters two or more wl_outputs with different scales on creation.
This commit checks if the size actually changed before applying the workaround and avoids the loop.
Fixes #4198 (closed) and replaces !3898 (closed).
Unfortunately for Firefox, even if this bit doesn't infinite loop, a single loop is sufficient to break its use case since the original surface is destroyed. It will need to wait until the popup is no longer withdrawn before requesting a callback and creating a subsurface if it wants to work reliably.