in the case of internal windows, the client is deleted before any surfaces
are destroyed. this requires a special case to perform cleanups in order to
prevent client objects from leaking
this occurs when the shell resource dies before all the surfaces/positioners
are destroyed. usually this means the client has aborted, so there's no point in
sending an error or doing anything beyond performing a thorough cleanup
Replaces any checked-in wayland protocol files with auto-generation.
In some cases this means renaming include files that didn't use "standard"
names, or adding missing xml files. Any source edits are simple search and
replace, there should be no functional changes.
Our xdg_shell implementation has received some fixes that are also
applicable to wl_shell. Qt still uses wl_shell, so we do have a test
case, and do need to keep it up to date.
This copies some window attributes, clamping logic, and diagnostic prints
from the xdg_shell implementation.
- remove (wrong) global variables which tracked client-specific resources
- start ping upon creating a shell surface
- track client-specific shell resources on a per-client basis
this allows different display protocols to start their applications at
different times to ensure that any initialization has completed prior to
starting anything requiring a window
fix T3475
maximize is client-initiated and compositor-enforced in wayland, meaning that a
maximize should only be acted upon in the compositor after the client has
acknowledged that it has transitioned into the maximized state (likely removing
part of its csd region) and has resized itself to match the expected maximize
size
fix T3297
xdg shell configure states (maximize, fullscreen) return a client ack when the
client has applied the state. the ack, followed by the next surface commit,
indicates that the surface is ready to be transitioned into the configured state
wayland clients were previously set as ignored until they obtained
a shell surface in order to avoid early execution of things like placement.
this had no effect.
the ignore must last until the first commit, at which point surfaces have been
sized and can be placed accurately without needing to move the surface around
a lot of times due to resize/frame adjust/birthdays
_e_shell_surface_destroy() is already the implementation's destructor, so
it'll be called when the surface is destroyed anyway. What we have to do
here is just call wl_resource_destroy(resource) - which will call that
function for us.
It'll also do us the favor of actually destroying the resource and
removing it from the client's resource list so we won't get a SECOND call
to _e_shell_surface_destroy() on client exit.