Check if size changed before hiding a surface

Ronan Pigott requested to merge RPigott1/gtk:surfaceloop into gtk-3-24

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.

Edited by Ronan Pigott

Merge request reports