]> git.mdlowis.com Git - proto/labwc.git/commitdiff
scaled-scene-buffer: block sharing of buffers created before reconfigure
authortokyo4j <hrak1529@gmail.com>
Sun, 12 Jan 2025 09:18:28 +0000 (18:18 +0900)
committerHiroaki Yamamoto <hrak1529@gmail.com>
Mon, 13 Jan 2025 09:24:10 +0000 (18:24 +0900)
This prevents potential bugs that buffers created by scaled_scene_buffers
before Reconfigure are reused by other newly created scaled_scene_buffers.

This is targeted for scaled_icon_buffer whose buffer creation depends on
server->sfdo.

include/common/scaled-scene-buffer.h
src/common/scaled-scene-buffer.c
src/server.c

index 29f058132a1b2470131db6f0ec2f907b28a26348..657b9b57ea0717157bb7173d6579b8f5a3e7e33b 100644 (file)
@@ -128,6 +128,14 @@ struct scaled_scene_buffer *scaled_scene_buffer_create(
 void scaled_scene_buffer_request_update(struct scaled_scene_buffer *self,
        int width, int height);
 
+/**
+ * scaled_scene_buffer_invalidate_sharing - clear the list of entire cached
+ * scaled_scene_buffers used to share visually dupliated buffers. This should
+ * be called on Reconfigure to force updates of newly created
+ * scaled_scene_buffers rather than reusing ones created before Reconfigure.
+ */
+void scaled_scene_buffer_invalidate_sharing(void);
+
 /* Private */
 struct scaled_scene_buffer_cache_entry {
        struct wl_list link;   /* struct scaled_scene_buffer.cache */
index c45fc9835d2cb63a8f49077b769d3c43435eee87..7b5d8c40b5ece74d712b17695605a755b6ac4019 100644 (file)
@@ -251,3 +251,13 @@ scaled_scene_buffer_request_update(struct scaled_scene_buffer *self,
                _update_buffer(self, self->active_scale);
        }
 }
+
+void
+scaled_scene_buffer_invalidate_sharing(void)
+{
+       struct scaled_scene_buffer *scene_buffer, *tmp;
+       wl_list_for_each_safe(scene_buffer, tmp, &all_scaled_buffers, link) {
+               wl_list_remove(&scene_buffer->link);
+               wl_list_init(&scene_buffer->link);
+       }
+}
index e4cf22000b953cdd3ddd31fb90e9f9d4168eae24..2c611bd3fec736daae6a53bdcd9d6187f97705ec 100644 (file)
@@ -31,6 +31,7 @@
 
 #include "drm-lease-v1-protocol.h"
 #include "common/macros.h"
+#include "common/scaled-scene-buffer.h"
 #include "config/rcxml.h"
 #include "config/session.h"
 #include "decorations.h"
@@ -68,6 +69,7 @@ static struct wl_event_source *sigchld_source;
 static void
 reload_config_and_theme(struct server *server)
 {
+       scaled_scene_buffer_invalidate_sharing();
        rcxml_finish();
        rcxml_read(rc.config_file);
        theme_finish(server->theme);