xdg-shell: specify version in wlr_xdg_shell_create

With protocol additions such as [1], compositors currently have no
way to opt out of the version upgrade. The protocol upgrade will
always be backwards-compatible but may require new compositor
features.

The status quo doesn't make it possible to ship a protocol addition
without breaking the wlroots API. This will be an issue for API
stabilization [2].

To address this, let compositors provide a maximum version in the
function creating the global. We need to support all previous versions
of the interface anyways because of older clients.

This mechanism works the same way as Wayland clients passing a version
in wl_global.bind.

[1]: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/3514
[2]: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/1008

References: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3397
This commit is contained in:
Simon Ser 2022-05-11 13:57:51 +02:00 committed by Isaac Freund
parent 19896e7fb6
commit 8fe3aa29da
5 changed files with 19 additions and 8 deletions

View file

@ -17,6 +17,7 @@
struct wlr_xdg_shell {
struct wl_global *global;
uint32_t version;
struct wl_list clients;
struct wl_list popup_grabs;
uint32_t ping_timeout;
@ -263,7 +264,11 @@ struct wlr_xdg_toplevel_show_window_menu_event {
uint32_t x, y;
};
struct wlr_xdg_shell *wlr_xdg_shell_create(struct wl_display *display);
/**
* Create the xdg_wm_base global with the specified version.
*/
struct wlr_xdg_shell *wlr_xdg_shell_create(struct wl_display *display,
uint32_t version);
/** Get the corresponding wlr_xdg_surface from a resource.
*