If a given wl_surface already has a role (e.g. cursor or subsurface),
there is nothing you can do with an xdg_surface which won't raise an
error, apart from destroying it.
As of wayland/wayland-protocols@11fecf0808 this is now explicitly
specified to be illegal, so disallow it within libweston-desktop. This
avoids us tying ourselves in knots with surface-private ownership.
Signed-off-by: Daniel Stone <daniels@collabora.com>
It's illegal to create an xdg_surface for a surface which already has a
buffer attached to it. We check for this, but only after we've created
our weston_desktop_surface; this simply avoids creating the internal
tracking structure when we're only going to destroy it after posting the
error.
Signed-off-by: Daniel Stone <daniels@collabora.com>
The wording of the xdg-shell protocol allows surfaces to not cover the
whole screen when they are made fullscreen. From the description of the
fullscreen state in xdg-shell:
The window geometry specified in the configure event is a maximum; the
client cannot resize beyond it. For a surface to cover the whole
fullscreened area, the geometry dimensions must be obeyed by the
client.
The last sentence is the condition for fullscreen coverage, not a
requirement.
This commit updates the code to not flag size mismatches for fullscreen
surfaces as a protocol error when the surface fits within the screen. In
such cases, the shell is responsible for centering surfaces
appropriately and also for obscuring other screen content as described
in the xdg_toplevel.set_fullscreen request description (and, indeed,
desktop-shell does all this).
For reference, contrast with the corresponding, stricter wording in the
obsolete xdg-shell-unstable-v6 protocol for the fullscreen state:
The window geometry specified in the configure event must be obeyed by
the client.
Signed-off-by: Alexandros Frantzis <alexandros.frantzis@collabora.com>
When libweston-desktop kills an xdg-shell client because it has failed
to configure its surface as demanded, be more helpful by explaining
exactly what the error is.
Signed-off-by: Daniel Stone <daniels@collabora.com>
This too is a public installed header.
The public headers are moved under a new top-level directory include/ to make
them clearly stand out as special (public API).
Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
It is a public installed header used by libweston.h.
See "Rename compositor.h to libweston/libweston.h" for rationale.
Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
The main idea is to make libweston users use the form
#include <libweston/libweston.h>
instead of the plain
#include <compositor.h>
which is prone to name conflicts. This is reflected both in the installed
files, and the internal header search paths so that Weston would use the exact
same form as an external project using libweston would.
The public headers are moved under a new top-level directory include/ to make
them clearly stand out as special (public API).
Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
Some clients like the mpv video player now request the xdg_shell
protocol so these will fail if the compositor only provides the
xdg_shell_unstable_v6 protocol. Compositors like mir and gnome provide
both protocols.
The two protocols are very similar therefore the code in xdg-shell-v6.c
has been refactored to work with the new xdg_shell protocol and now
resides in xdg-shell.c.
Pekka:
- split the patch
- fix continued line alignment
Daniel
- allow anchor_rect to initially have zero dimensions
- account for get_popup allowing NULL parent surface
Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
Signed-off-by: Daniel Stone <daniels@collabora.com>