Commit Graph

8 Commits

Author SHA1 Message Date
Daniel Stone
80e9482292 xdg-shell: Fail xdg_surface creation when surface has role
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>
2021-07-23 17:17:16 +01:00
Daniel Stone
baa8f6b1af xdg-shell: Move check for surface having buffer earlier
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>
2021-07-23 16:11:31 +00:00
Alexandros Frantzis
f6bd212924 xdg-shell: Allow fullscreen surfaces to not cover the whole screen
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>
2020-05-25 10:11:09 +00:00
Daniel Stone
24c0f83778 xdg-shell: More helpful surface-state-mismatch error
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>
2020-03-20 15:02:14 +00:00
Pekka Paalanen
8ebd9817e7 Move libweston-desktop.h
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>
2019-04-18 12:31:46 +03:00
Pekka Paalanen
ecbdcfd373 Rename zalloc.h to libweston/zalloc.h
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>
2019-04-18 12:31:46 +03:00
Pekka Paalanen
3d5d9476e3 Rename compositor.h to libweston/libweston.h
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>
2019-04-18 12:31:46 +03:00
ant8me
d8d9f5e6e1 libweston-desktop: implement the new xdg_shell (stable) protocol
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>
2019-02-15 11:18:38 +00:00