viewporter: remove crop and scale state upon destruction
According to the viewport protocol, upon wp_viewport::destroy(): > The associated wl_surface's crop and scale state is removed. > The change is applied on the next wl_surface.commit. Therefore, wp_viewport_destroy(viewport) should remove all viewport state. Currently, wlroots does not remove the crop and scale state. Instead, a client must do: wl_fixed_t clear = wl_fixed_from_int(-1); wp_viewport_set_source(viewport, clear, clear, clear, clear); wp_viewport_set_destination(viewport, -1, -1); wp_viewport_destroy(viewport); This commit adds the necessary logic into viewport_destroy and makes wlroots comply with the protocol.
This commit is contained in:
parent
f5df956c18
commit
456c6e2279
|
@ -95,6 +95,12 @@ static void viewport_destroy(struct wlr_viewport *viewport) {
|
||||||
if (viewport == NULL) {
|
if (viewport == NULL) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct wlr_surface_state *pending = &viewport->surface->pending;
|
||||||
|
pending->viewport.has_src = false;
|
||||||
|
pending->viewport.has_dst = false;
|
||||||
|
pending->committed |= WLR_SURFACE_STATE_VIEWPORT;
|
||||||
|
|
||||||
wl_resource_set_user_data(viewport->resource, NULL);
|
wl_resource_set_user_data(viewport->resource, NULL);
|
||||||
wl_list_remove(&viewport->surface_destroy.link);
|
wl_list_remove(&viewport->surface_destroy.link);
|
||||||
wl_list_remove(&viewport->surface_commit.link);
|
wl_list_remove(&viewport->surface_commit.link);
|
||||||
|
|
Loading…
Reference in New Issue