From 2d97935e82fe942cf146068d5ed99c2a06547df9 Mon Sep 17 00:00:00 2001 From: Alexander Orzechowski Date: Tue, 12 Mar 2024 01:55:36 -0400 Subject: [PATCH] wlr_scene: Call surface enter scale events on surface create We would fail to call scene_node_update() which would then call output events for us. We need to make sure to update the node when we first map a buffer, as the comment explained. --- types/scene/wlr_scene.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/types/scene/wlr_scene.c b/types/scene/wlr_scene.c index 7e5b3136..3a97cdaa 100644 --- a/types/scene/wlr_scene.c +++ b/types/scene/wlr_scene.c @@ -667,21 +667,21 @@ void wlr_scene_buffer_set_buffer_with_damage(struct wlr_scene_buffer *scene_buff assert(buffer || !damage); bool update = false; - - wlr_texture_destroy(scene_buffer->texture); - scene_buffer->texture = NULL; - if (buffer) { // if this node used to not be mapped or its previous displayed // buffer region will be different from what the new buffer would // produce we need to update the node. - update = scene_buffer->dst_width == 0 && scene_buffer->dst_height == 0 && - (scene_buffer->buffer_width != buffer->width || - scene_buffer->buffer_height != buffer->height); + update = (!scene_buffer->buffer && !scene_buffer->texture) || + (scene_buffer->dst_width == 0 && scene_buffer->dst_height == 0 && + (scene_buffer->buffer_width != buffer->width || + scene_buffer->buffer_height != buffer->height)); } else { update = true; } + wlr_texture_destroy(scene_buffer->texture); + scene_buffer->texture = NULL; + scene_buffer_set_buffer(scene_buffer, buffer); if (update) {