compositor: send WL_SURFACE_ERROR_INVALID_SIZE for non-cursor surfaces

See the discussion at [1]: there's no easy way to fix libwayland-cursor
without a new API. Sending the error for other roles will prevent the
same client bug from appearing elsewhere.

[1]: https://gitlab.freedesktop.org/wayland/wayland/-/issues/194
This commit is contained in:
Simon Ser 2022-05-07 10:28:05 +02:00 committed by Isaac Freund
parent 1284f85da4
commit 18595000f3

View file

@ -176,12 +176,21 @@ static void surface_finalize_pending(struct wlr_surface *surface) {
if (!pending->viewport.has_src && if (!pending->viewport.has_src &&
(pending->buffer_width % pending->scale != 0 || (pending->buffer_width % pending->scale != 0 ||
pending->buffer_height % pending->scale != 0)) { pending->buffer_height % pending->scale != 0)) {
// TODO: send WL_SURFACE_ERROR_INVALID_SIZE error once this issue is // TODO: send WL_SURFACE_ERROR_INVALID_SIZE error to cursor surfaces
// resolved: // once this issue is resolved:
// https://gitlab.freedesktop.org/wayland/wayland/-/issues/194 // https://gitlab.freedesktop.org/wayland/wayland/-/issues/194
wlr_log(WLR_DEBUG, "Client bug: submitted a buffer whose size (%dx%d) " if (!surface->role
"is not divisible by scale (%d)", pending->buffer_width, || strcmp(surface->role->name, "wl_pointer-cursor") == 0
pending->buffer_height, pending->scale); || strcmp(surface->role->name, "wp_tablet_tool-cursor") == 0) {
wlr_log(WLR_DEBUG, "Client bug: submitted a buffer whose size (%dx%d) "
"is not divisible by scale (%d)", pending->buffer_width,
pending->buffer_height, pending->scale);
} else {
wl_resource_post_error(surface->resource,
WL_SURFACE_ERROR_INVALID_SIZE,
"Buffer size (%dx%d) is not divisible by scale (%d)",
pending->buffer_width, pending->buffer_height, pending->scale);
}
} }
if (pending->viewport.has_dst) { if (pending->viewport.has_dst) {