From eb26f274786e7fce2964c1d56e6691f06cbc661f Mon Sep 17 00:00:00 2001 From: BBaoVanC Date: Mon, 6 Feb 2023 18:16:48 -0600 Subject: [PATCH] tree/container: Fix crash when going fullscreen --- sway/tree/container.c | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/sway/tree/container.c b/sway/tree/container.c index dbe880287..6c65b80a5 100644 --- a/sway/tree/container.c +++ b/sway/tree/container.c @@ -1129,26 +1129,39 @@ static void set_fullscreen(struct sway_container *con, bool enable) { return; } - struct wlr_linux_dmabuf_feedback_v1_tranche tranches[] = { - { - .target_device = scanout_dev, - .flags = ZWP_LINUX_DMABUF_FEEDBACK_V1_TRANCHE_FLAGS_SCANOUT, - .formats = &scanout_formats, - }, - { - .target_device = render_dev, - .formats = renderer_formats, - }, + size_t tranche_size = sizeof(struct wlr_linux_dmabuf_feedback_v1_tranche); + struct wl_array tranches; + wl_array_init(&tranches); + + struct wlr_linux_dmabuf_feedback_v1_tranche *ptr; + ptr = wl_array_add(&tranches, tranche_size); + if (!sway_assert(ptr, "Unable to allocate tranche")) { + return; + } + *ptr = (struct wlr_linux_dmabuf_feedback_v1_tranche) { + .target_device = scanout_dev, + .flags = ZWP_LINUX_DMABUF_FEEDBACK_V1_TRANCHE_FLAGS_SCANOUT, + .formats = scanout_formats, + }; + + ptr = wl_array_add(&tranches, tranche_size); + if (!sway_assert(ptr, "Unable to allocate tranche")) { + return; + } + *ptr = (struct wlr_linux_dmabuf_feedback_v1_tranche) { + .target_device = render_dev, + .formats = *renderer_formats, }; const struct wlr_linux_dmabuf_feedback_v1 feedback = { .main_device = render_dev, .tranches = tranches, - .tranches_len = sizeof(tranches) / sizeof(tranches[0]), }; wlr_linux_dmabuf_v1_set_surface_feedback(server.linux_dmabuf_v1, con->view->surface, &feedback); + wl_array_release(&tranches); + wlr_drm_format_set_finish(&scanout_formats); }