Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package wlroots for openSUSE:Factory checked 
in at 2026-05-27 16:18:17
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/wlroots (Old)
 and      /work/SRC/openSUSE:Factory/.wlroots.new.1937 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "wlroots"

Wed May 27 16:18:17 2026 rev:42 rq:1355306 version:0.20.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/wlroots/wlroots.changes  2026-04-01 
19:51:52.648237331 +0200
+++ /work/SRC/openSUSE:Factory/.wlroots.new.1937/wlroots.changes        
2026-05-27 16:19:05.842167248 +0200
@@ -1,0 +2,17 @@
+Wed May 20 09:18:17 UTC 2026 - zeus <[email protected]>
+
+- Update to 0.20.1:
+  * ext_image_capture_source_v1/scene: fix extents
+  * {wlr,ext}-foreign-toplevel: add new toplevels to end of list
+  * wlr_ext_workspace_v1.c: add new workspaces to end of list
+  * wlr_virtual_keyboard_v1: specify size when creating keymap
+  * render/pixman: fix bilinear filtering to match gles2 renderer
+  * keyboard: fix modifiers event when no keymap set
+  * scene/surface: schedule on frame pacing output
+  * wlr_compositor: Apply state before updating surface_damage
+  * linux_drm_syncobj_v1: fix memory leak
+  * scene: only send leave events to outputs with matching scene
+    root
+  * toplevel_capture: allocate new_request argument on the stack
+
+-------------------------------------------------------------------

Old:
----
  wlroots-0.20.0.tar.gz
  wlroots-0.20.0.tar.gz.sig

New:
----
  wlroots-0.20.1.tar.gz
  wlroots-0.20.1.tar.gz.sig

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ wlroots.spec ++++++
--- /var/tmp/diff_new_pack.01YIY7/_old  2026-05-27 16:19:06.622199225 +0200
+++ /var/tmp/diff_new_pack.01YIY7/_new  2026-05-27 16:19:06.622199225 +0200
@@ -18,7 +18,7 @@
 
 %global ver_suffix 0.20
 %global sover      0_20
-%global patch_ver  0
+%global patch_ver  1
 %global libname libwlroots-%{sover}
 %bcond_without  drm_backend
 %bcond_without  libinput_backend
@@ -48,7 +48,7 @@
 BuildRequires:  pkgconfig(libavformat)
 BuildRequires:  pkgconfig(libavutil)
 BuildRequires:  pkgconfig(libdisplay-info)
-BuildRequires:  pkgconfig(libdrm) >= 2.4.113
+BuildRequires:  pkgconfig(libdrm) >= 2.4.129
 BuildRequires:  pkgconfig(libliftoff)
 %if %{with libinput_backend}
 BuildRequires:  pkgconfig(libinput) >= 1.14.0

++++++ wlroots-0.20.0.tar.gz -> wlroots-0.20.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wlroots-0.20.0/include/wlr/types/wlr_compositor.h 
new/wlroots-0.20.1/include/wlr/types/wlr_compositor.h
--- old/wlroots-0.20.0/include/wlr/types/wlr_compositor.h       2026-03-26 
17:38:50.000000000 +0100
+++ new/wlroots-0.20.1/include/wlr/types/wlr_compositor.h       2026-05-19 
22:56:13.000000000 +0200
@@ -127,6 +127,8 @@
        struct {
                struct wl_listener bind;
                struct wl_listener destroy;
+
+               bool suspended;
        } WLR_PRIVATE;
 };
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wlroots-0.20.0/meson.build 
new/wlroots-0.20.1/meson.build
--- old/wlroots-0.20.0/meson.build      2026-03-26 17:38:50.000000000 +0100
+++ new/wlroots-0.20.1/meson.build      2026-05-19 22:56:13.000000000 +0200
@@ -1,7 +1,7 @@
 project(
        'wlroots',
        'c',
-       version: '0.20.0',
+       version: '0.20.1',
        license: 'MIT',
        meson_version: '>=1.3',
        default_options: [
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wlroots-0.20.0/render/pixman/pass.c 
new/wlroots-0.20.1/render/pixman/pass.c
--- old/wlroots-0.20.0/render/pixman/pass.c     2026-03-26 17:38:50.000000000 
+0100
+++ new/wlroots-0.20.1/render/pixman/pass.c     2026-05-19 22:56:13.000000000 
+0200
@@ -159,6 +159,7 @@
 
                switch (options->filter_mode) {
                case WLR_SCALE_FILTER_BILINEAR:
+                       pixman_image_set_repeat(texture->image, 
PIXMAN_REPEAT_PAD);
                        pixman_image_set_filter(texture->image, 
PIXMAN_FILTER_BILINEAR, NULL, 0);
                        break;
                case WLR_SCALE_FILTER_NEAREST:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/wlroots-0.20.0/types/ext_image_capture_source_v1/foreign_toplevel.c 
new/wlroots-0.20.1/types/ext_image_capture_source_v1/foreign_toplevel.c
--- old/wlroots-0.20.0/types/ext_image_capture_source_v1/foreign_toplevel.c     
2026-03-26 17:38:50.000000000 +0100
+++ new/wlroots-0.20.1/types/ext_image_capture_source_v1/foreign_toplevel.c     
2026-05-19 22:56:13.000000000 +0200
@@ -34,18 +34,13 @@
                return;
        }
 
-       struct wlr_ext_foreign_toplevel_image_capture_source_manager_v1_request 
*request =
-               calloc(1, sizeof(*request));
-       if (request == NULL) {
-               wl_resource_post_no_memory(manager_resource);
-               return;
-       }
-
-       request->toplevel_handle = toplevel_handle;
-       request->client = client;
-       request->new_id = new_id;
+       struct wlr_ext_foreign_toplevel_image_capture_source_manager_v1_request 
request = {
+               .toplevel_handle = toplevel_handle,
+               .client = client,
+               .new_id = new_id,
+       };
 
-       wl_signal_emit_mutable(&manager->events.new_request, request);
+       wl_signal_emit_mutable(&manager->events.new_request, &request);
 }
 
 static void foreign_toplevel_manager_handle_destroy(struct wl_client *client,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/wlroots-0.20.0/types/ext_image_capture_source_v1/scene.c 
new/wlroots-0.20.1/types/ext_image_capture_source_v1/scene.c
--- old/wlroots-0.20.0/types/ext_image_capture_source_v1/scene.c        
2026-03-26 17:38:50.000000000 +0100
+++ new/wlroots-0.20.1/types/ext_image_capture_source_v1/scene.c        
2026-05-19 22:56:13.000000000 +0200
@@ -34,13 +34,14 @@
 
 static size_t last_output_num = 0;
 
-static void _get_scene_node_extents(struct wlr_scene_node *node, struct 
wlr_box *box, int lx, int ly) {
+static void _get_scene_node_extents(struct wlr_scene_node *node, int lx, int 
ly,
+               int *x_min, int *y_min, int *x_max, int *y_max) {
        switch (node->type) {
        case WLR_SCENE_NODE_TREE:;
                struct wlr_scene_tree *scene_tree = 
wlr_scene_tree_from_node(node);
                struct wlr_scene_node *child;
                wl_list_for_each(child, &scene_tree->children, link) {
-                       _get_scene_node_extents(child, box, lx + child->x, ly + 
child->y);
+                       _get_scene_node_extents(child, lx + child->x, ly + 
child->y, x_min, y_min, x_max, y_max);
                }
                break;
        case WLR_SCENE_NODE_RECT:
@@ -48,27 +49,30 @@
                struct wlr_box node_box = { .x = lx, .y = ly };
                scene_node_get_size(node, &node_box.width, &node_box.height);
 
-               if (node_box.x < box->x) {
-                       box->x = node_box.x;
+               if (node_box.x < *x_min) {
+                       *x_min = node_box.x;
                }
-               if (node_box.y < box->y) {
-                       box->y = node_box.y;
+               if (node_box.y < *y_min) {
+                       *y_min = node_box.y;
                }
-               if (node_box.x + node_box.width > box->x + box->width) {
-                       box->width = node_box.x + node_box.width - box->x;
+               if (node_box.x + node_box.width > *x_max) {
+                       *x_max = node_box.x + node_box.width;
                }
-               if (node_box.y + node_box.height > box->y + box->height) {
-                       box->height = node_box.y + node_box.height - box->y;
+               if (node_box.y + node_box.height > *y_max) {
+                       *y_max = node_box.y + node_box.height;
                }
                break;
        }
 }
 
 static void get_scene_node_extents(struct wlr_scene_node *node, struct wlr_box 
*box) {
-       *box = (struct wlr_box){ .x = INT_MAX, .y = INT_MAX };
        int lx = 0, ly = 0;
        wlr_scene_node_coords(node, &lx, &ly);
-       _get_scene_node_extents(node, box, lx, ly);
+       *box = (struct wlr_box){ .x = INT_MAX, .y = INT_MAX };
+       int x_max = INT_MIN, y_max = INT_MIN;
+       _get_scene_node_extents(node, lx, ly, &box->x, &box->y, &x_max, &y_max);
+       box->width = x_max - box->x;
+       box->height = y_max - box->y;
 }
 
 static void source_render(struct scene_node_source *source) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wlroots-0.20.0/types/scene/surface.c 
new/wlroots-0.20.1/types/scene/surface.c
--- old/wlroots-0.20.0/types/scene/surface.c    2026-03-26 17:38:50.000000000 
+0100
+++ new/wlroots-0.20.1/types/scene/surface.c    2026-05-19 22:56:13.000000000 
+0200
@@ -30,8 +30,8 @@
        struct wlr_output *frame_pacing_output = NULL;
        struct wlr_surface_output *surface_output;
        wl_list_for_each(surface_output, &surface->current_outputs, link) {
-               if (frame_pacing_output == NULL ||
-                               surface_output->output->refresh > 
frame_pacing_output->refresh) {
+               if (!surface_output->suspended && (frame_pacing_output == NULL 
||
+                               surface_output->output->refresh > 
frame_pacing_output->refresh)) {
                        frame_pacing_output = surface_output->output;
                }
        }
@@ -97,11 +97,9 @@
        struct wlr_scene_outputs_update_event *event = data;
        struct wlr_scene *scene = scene_node_get_root(&surface->buffer->node);
 
-       // If the surface is no longer visible on any output, keep the last sent
-       // preferred configuration to avoid unnecessary redraws
-       if (event->size == 0) {
-               return;
-       }
+       // If the surface is no longer visible on any output in the scene, keep 
the
+       // last sent preferred configuration to avoid unnecessary redraws
+       bool suspend = event->size == 0;
 
        // To avoid sending redundant leave/enter events when a surface is 
hidden and then shown
        // without moving to a different output the following policy is 
implemented:
@@ -121,11 +119,24 @@
                                break;
                        }
                }
-               if (!active) {
-                       wlr_surface_send_leave(surface->surface, 
entered_output->output);
+
+               struct wlr_scene_output *scene_output;
+               wl_list_for_each(scene_output, &scene->outputs, link) {
+                       if (scene_output->output == entered_output->output) {
+                               entered_output->suspended = suspend;
+                               if (!suspend && !active) {
+                                       
wlr_surface_send_leave(surface->surface, entered_output->output);
+                               }
+                               break;
+                       }
                }
        }
 
+       // No reason to update the preferred configuration if we aren't sending 
leave/enter events.
+       if (suspend) {
+               return;
+       }
+
        for (size_t i = 0; i < event->size; i++) {
                // This function internally checks if an enter event was 
already sent for the output
                // to avoid sending redundant events.
@@ -361,10 +372,9 @@
        // the surface anyway.
        int lx, ly;
        bool enabled = wlr_scene_node_coords(&scene_buffer->node, &lx, &ly);
-
-       if (!wl_list_empty(&surface->surface->current.frame_callback_list) &&
-                       surface->buffer->primary_output != NULL && enabled) {
-               
wlr_output_schedule_frame(surface->buffer->primary_output->output);
+       struct wlr_output *output = 
get_surface_frame_pacing_output(surface->surface);
+       if (!wl_list_empty(&surface->surface->current.frame_callback_list) && 
output && enabled) {
+               wlr_output_schedule_frame(output);
        }
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wlroots-0.20.0/types/wlr_compositor.c 
new/wlroots-0.20.1/types/wlr_compositor.c
--- old/wlroots-0.20.0/types/wlr_compositor.c   2026-03-26 17:38:50.000000000 
+0100
+++ new/wlroots-0.20.1/types/wlr_compositor.c   2026-05-19 22:56:13.000000000 
+0200
@@ -246,40 +246,40 @@
 }
 
 static void surface_update_damage(pixman_region32_t *buffer_damage,
-               struct wlr_surface_state *current, struct wlr_surface_state 
*pending) {
+               struct wlr_surface_state *state) {
        pixman_region32_clear(buffer_damage);
 
        // Copy over surface damage + buffer damage
        pixman_region32_t surface_damage;
        pixman_region32_init(&surface_damage);
 
-       pixman_region32_copy(&surface_damage, &pending->surface_damage);
+       pixman_region32_copy(&surface_damage, &state->surface_damage);
 
-       if (pending->viewport.has_dst) {
+       if (state->viewport.has_dst) {
                int src_width, src_height;
-               surface_state_viewport_src_size(pending, &src_width, 
&src_height);
-               float scale_x = (float)pending->viewport.dst_width / src_width;
-               float scale_y = (float)pending->viewport.dst_height / 
src_height;
+               surface_state_viewport_src_size(state, &src_width, &src_height);
+               float scale_x = (float)state->viewport.dst_width / src_width;
+               float scale_y = (float)state->viewport.dst_height / src_height;
                wlr_region_scale_xy(&surface_damage, &surface_damage,
                        1.0 / scale_x, 1.0 / scale_y);
        }
-       if (pending->viewport.has_src) {
+       if (state->viewport.has_src) {
                // This is lossy: do a best-effort conversion
                pixman_region32_translate(&surface_damage,
-                       floor(pending->viewport.src.x),
-                       floor(pending->viewport.src.y));
+                       floor(state->viewport.src.x),
+                       floor(state->viewport.src.y));
        }
 
-       wlr_region_scale(&surface_damage, &surface_damage, pending->scale);
+       wlr_region_scale(&surface_damage, &surface_damage, state->scale);
 
        int width, height;
-       surface_state_transformed_buffer_size(pending, &width, &height);
+       surface_state_transformed_buffer_size(state, &width, &height);
        wlr_region_transform(&surface_damage, &surface_damage,
-               wlr_output_transform_invert(pending->transform),
+               wlr_output_transform_invert(state->transform),
                width, height);
 
        pixman_region32_union(buffer_damage,
-               &pending->buffer_damage, &surface_damage);
+               &state->buffer_damage, &surface_damage);
 
        pixman_region32_fini(&surface_damage);
 }
@@ -521,8 +521,6 @@
                surface->unmap_commit = false;
        }
 
-       surface_update_damage(&surface->buffer_damage, &surface->current, next);
-
        surface->previous.scale = surface->current.scale;
        surface->previous.transform = surface->current.transform;
        surface->previous.width = surface->current.width;
@@ -531,6 +529,7 @@
        surface->previous.buffer_height = surface->current.buffer_height;
 
        surface_state_move(&surface->current, next, surface);
+       surface_update_damage(&surface->buffer_damage, &surface->current);
 
        if (invalid_buffer) {
                surface_apply_damage(surface);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/wlroots-0.20.0/types/wlr_ext_foreign_toplevel_list_v1.c 
new/wlroots-0.20.1/types/wlr_ext_foreign_toplevel_list_v1.c
--- old/wlroots-0.20.0/types/wlr_ext_foreign_toplevel_list_v1.c 2026-03-26 
17:38:50.000000000 +0100
+++ new/wlroots-0.20.1/types/wlr_ext_foreign_toplevel_list_v1.c 2026-05-19 
22:56:13.000000000 +0200
@@ -168,7 +168,7 @@
                return NULL;
        }
 
-       wl_list_insert(&list->toplevels, &toplevel->link);
+       wl_list_insert(list->toplevels.prev, &toplevel->link);
        toplevel->list = list;
        if (state->app_id) {
                toplevel->app_id = strdup(state->app_id);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wlroots-0.20.0/types/wlr_ext_workspace_v1.c 
new/wlroots-0.20.1/types/wlr_ext_workspace_v1.c
--- old/wlroots-0.20.0/types/wlr_ext_workspace_v1.c     2026-03-26 
17:38:50.000000000 +0100
+++ new/wlroots-0.20.1/types/wlr_ext_workspace_v1.c     2026-05-19 
22:56:13.000000000 +0200
@@ -790,7 +790,7 @@
        wl_array_init(&workspace->coordinates);
        wl_signal_init(&workspace->events.destroy);
 
-       wl_list_insert(&manager->workspaces, &workspace->link);
+       wl_list_insert(manager->workspaces.prev, &workspace->link);
 
        struct wlr_ext_workspace_manager_v1_resource *manager_res;
        wl_list_for_each(manager_res, &manager->resources, link) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/wlroots-0.20.0/types/wlr_foreign_toplevel_management_v1.c 
new/wlroots-0.20.1/types/wlr_foreign_toplevel_management_v1.c
--- old/wlroots-0.20.0/types/wlr_foreign_toplevel_management_v1.c       
2026-03-26 17:38:50.000000000 +0100
+++ new/wlroots-0.20.1/types/wlr_foreign_toplevel_management_v1.c       
2026-05-19 22:56:13.000000000 +0200
@@ -530,7 +530,7 @@
                return NULL;
        }
 
-       wl_list_insert(&manager->toplevels, &toplevel->link);
+       wl_list_insert(manager->toplevels.prev, &toplevel->link);
        toplevel->manager = manager;
 
        wl_list_init(&toplevel->resources);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wlroots-0.20.0/types/wlr_keyboard.c 
new/wlroots-0.20.1/types/wlr_keyboard.c
--- old/wlroots-0.20.0/types/wlr_keyboard.c     2026-03-26 17:38:50.000000000 
+0100
+++ new/wlroots-0.20.1/types/wlr_keyboard.c     2026-05-19 22:56:13.000000000 
+0200
@@ -84,6 +84,16 @@
                uint32_t mods_depressed, uint32_t mods_latched, uint32_t 
mods_locked,
                uint32_t group) {
        if (keyboard->xkb_state == NULL) {
+               if (keyboard->modifiers.depressed != mods_depressed ||
+                               keyboard->modifiers.latched != mods_latched ||
+                               keyboard->modifiers.locked != mods_locked ||
+                               keyboard->modifiers.group != group) {
+                       keyboard->modifiers.depressed = mods_depressed;
+                       keyboard->modifiers.latched = mods_latched;
+                       keyboard->modifiers.locked = mods_locked;
+                       keyboard->modifiers.group = group;
+                       wl_signal_emit_mutable(&keyboard->events.modifiers, 
keyboard);
+               }
                return;
        }
        xkb_state_update_mask(keyboard->xkb_state, mods_depressed, mods_latched,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wlroots-0.20.0/types/wlr_linux_drm_syncobj_v1.c 
new/wlroots-0.20.1/types/wlr_linux_drm_syncobj_v1.c
--- old/wlroots-0.20.0/types/wlr_linux_drm_syncobj_v1.c 2026-03-26 
17:38:50.000000000 +0100
+++ new/wlroots-0.20.1/types/wlr_linux_drm_syncobj_v1.c 2026-05-19 
22:56:13.000000000 +0200
@@ -386,6 +386,7 @@
        struct wl_resource *timeline_resource = wl_resource_create(client,
                &wp_linux_drm_syncobj_timeline_v1_interface, version, id);
        if (timeline_resource == NULL) {
+               wlr_drm_syncobj_timeline_unref(timeline);
                wl_resource_post_no_memory(resource);
                return;
        }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wlroots-0.20.0/types/wlr_virtual_keyboard_v1.c 
new/wlroots-0.20.1/types/wlr_virtual_keyboard_v1.c
--- old/wlroots-0.20.0/types/wlr_virtual_keyboard_v1.c  2026-03-26 
17:38:50.000000000 +0100
+++ new/wlroots-0.20.1/types/wlr_virtual_keyboard_v1.c  2026-05-19 
22:56:13.000000000 +0200
@@ -52,7 +52,7 @@
        if (data == MAP_FAILED) {
                goto fd_fail;
        }
-       struct xkb_keymap *keymap = xkb_keymap_new_from_string(context, data,
+       struct xkb_keymap *keymap = xkb_keymap_new_from_buffer(context, data, 
size,
                XKB_KEYMAP_FORMAT_TEXT_V1, XKB_KEYMAP_COMPILE_NO_FLAGS);
        munmap(data, size);
        if (!keymap) {

Reply via email to