Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package xdg-desktop-portal-wlr for 
openSUSE:Factory checked in at 2024-01-30 18:25:35
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/xdg-desktop-portal-wlr (Old)
 and      /work/SRC/openSUSE:Factory/.xdg-desktop-portal-wlr.new.1815 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "xdg-desktop-portal-wlr"

Tue Jan 30 18:25:35 2024 rev:8 rq:1142648 version:0.7.1

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/xdg-desktop-portal-wlr/xdg-desktop-portal-wlr.changes
    2023-04-15 22:34:21.429956824 +0200
+++ 
/work/SRC/openSUSE:Factory/.xdg-desktop-portal-wlr.new.1815/xdg-desktop-portal-wlr.changes
  2024-01-30 18:25:51.622905968 +0100
@@ -1,0 +2,7 @@
+Mon Jan 29 21:03:26 UTC 2024 - Arnav Singh <opens...@arnavion.dev>
+
+- Update to v0.7.1:
+  * Support for 24-bit RGB formats.
+  * Various bugfixes.
+
+-------------------------------------------------------------------

Old:
----
  xdg-desktop-portal-wlr-0.7.0.tar.gz
  xdg-desktop-portal-wlr-0.7.0.tar.gz.sig

New:
----
  xdg-desktop-portal-wlr-0.7.1.tar.gz
  xdg-desktop-portal-wlr-0.7.1.tar.gz.sig

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

Other differences:
------------------
++++++ xdg-desktop-portal-wlr.spec ++++++
--- /var/tmp/diff_new_pack.qDeFGP/_old  2024-01-30 18:25:52.342931945 +0100
+++ /var/tmp/diff_new_pack.qDeFGP/_new  2024-01-30 18:25:52.346932088 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package xdg-desktop-portal-wlr
 #
-# Copyright (c) 2023 SUSE LLC
+# Copyright (c) 2024 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -17,7 +17,7 @@
 
 
 Name:           xdg-desktop-portal-wlr
-Version:        0.7.0
+Version:        0.7.1
 Release:        0
 Summary:        An xdg-desktop-portal backend for wlroots
 License:        MIT

++++++ xdg-desktop-portal-wlr-0.7.0.tar.gz -> 
xdg-desktop-portal-wlr-0.7.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/xdg-desktop-portal-wlr-0.7.0/contrib/wlroots-portals.conf 
new/xdg-desktop-portal-wlr-0.7.1/contrib/wlroots-portals.conf
--- old/xdg-desktop-portal-wlr-0.7.0/contrib/wlroots-portals.conf       
1970-01-01 01:00:00.000000000 +0100
+++ new/xdg-desktop-portal-wlr-0.7.1/contrib/wlroots-portals.conf       
2024-01-29 21:44:32.000000000 +0100
@@ -0,0 +1,7 @@
+[preferred]
+# Use xdg-desktop-portal-gtk for every portal interface...
+default=gtk
+# ... except for the Screencast, Screenshot and Settings (dark/light mode) 
interface
+org.freedesktop.impl.portal.Screencast=wlr
+org.freedesktop.impl.portal.Screenshot=wlr
+org.freedesktop.impl.portal.Settings=darkman
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/xdg-desktop-portal-wlr-0.7.0/include/screencast_common.h 
new/xdg-desktop-portal-wlr-0.7.1/include/screencast_common.h
--- old/xdg-desktop-portal-wlr-0.7.0/include/screencast_common.h        
2023-04-15 10:32:26.000000000 +0200
+++ new/xdg-desktop-portal-wlr-0.7.1/include/screencast_common.h        
2024-01-29 21:44:32.000000000 +0100
@@ -127,6 +127,7 @@
        struct wl_shm *shm;
        struct zwp_linux_dmabuf_v1 *linux_dmabuf;
        struct zwp_linux_dmabuf_feedback_v1 *linux_dmabuf_feedback;
+       struct zxdg_output_manager_v1 *xdg_output_manager;
        struct xdpw_dmabuf_feedback_data feedback_data;
        struct wl_array format_modifier_pairs;
 
@@ -194,9 +195,12 @@
        struct wl_list link;
        uint32_t id;
        struct wl_output *output;
+       struct zxdg_output_v1 *xdg_output;
        char *make;
        char *model;
        char *name;
+       int x;
+       int y;
        int width;
        int height;
        float framerate;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/xdg-desktop-portal-wlr-0.7.0/include/wlr_screencast.h 
new/xdg-desktop-portal-wlr-0.7.1/include/wlr_screencast.h
--- old/xdg-desktop-portal-wlr-0.7.0/include/wlr_screencast.h   2023-04-15 
10:32:26.000000000 +0200
+++ new/xdg-desktop-portal-wlr-0.7.1/include/wlr_screencast.h   2024-01-29 
21:44:32.000000000 +0100
@@ -13,6 +13,9 @@
 #define LINUX_DMABUF_VERSION 4
 #define LINUX_DMABUF_VERSION_MIN 3
 
+#define XDG_OUTPUT_VERSION 3
+#define XDG_OUTPUT_VERSION_MIN 1
+
 struct xdpw_state;
 
 int xdpw_wlr_screencopy_init(struct xdpw_state *state);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xdg-desktop-portal-wlr-0.7.0/meson.build 
new/xdg-desktop-portal-wlr-0.7.1/meson.build
--- old/xdg-desktop-portal-wlr-0.7.0/meson.build        2023-04-15 
10:32:26.000000000 +0200
+++ new/xdg-desktop-portal-wlr-0.7.1/meson.build        2024-01-29 
21:44:32.000000000 +0100
@@ -1,7 +1,7 @@
 project(
        'xdg-desktop-portal-wlr',
        'c',
-       version: '0.7.0',
+       version: '0.7.1',
        license: 'MIT',
        meson_version: '>=0.58.0',
        default_options: ['c_std=c11', 'warning_level=2', 'werror=true'],
@@ -18,7 +18,7 @@
 
 prefix = get_option('prefix')
 sysconfdir = get_option('sysconfdir')
-add_project_arguments('-DSYSCONFDIR="@0@"'.format(join_paths(prefix, 
sysconfdir)), language : 'c')
+add_project_arguments('-DSYSCONFDIR="@0@"'.format(prefix / sysconfdir), 
language : 'c')
 
 inc = include_directories('include')
 
@@ -31,8 +31,7 @@
 drm = dependency('libdrm')
 
 epoll = dependency('', required: false)
-if (not cc.has_function('timerfd_create', prefix: '#include <sys/timerfd.h>') 
or
-    not cc.has_function('signalfd', prefix: '#include <sys/signalfd.h>'))
+if not cc.has_function('timerfd_create', prefix: '#include <sys/timerfd.h>')
        epoll = dependency('epoll-shim')
 endif
 
@@ -63,7 +62,7 @@
 
 subdir('protocols')
 
-xdpw_files = files([
+xdpw_files = files(
        'src/core/main.c',
        'src/core/logger.c',
        'src/core/config.c',
@@ -77,7 +76,7 @@
        'src/screencast/wlr_screencast.c',
        'src/screencast/pipewire_screencast.c',
        'src/screencast/fps_limit.c',
-])
+)
 
 executable(
        'xdg-desktop-portal-wlr',
@@ -98,12 +97,10 @@
 )
 
 conf_data = configuration_data()
-conf_data.set('libexecdir',
-       join_paths(get_option('prefix'), get_option('libexecdir')))
+conf_data.set('libexecdir', get_option('prefix') / get_option('libexecdir'))
 conf_data.set('systemd_service', '')
 
 systemd = dependency('systemd', required: get_option('systemd'))
-
 if systemd.found()
        systemd_service_file = 'xdg-desktop-portal-wlr.service'
        user_unit_dir = systemd.get_variable(pkgconfig: 'systemduserunitdir',
@@ -122,12 +119,12 @@
        configuration: conf_data,
        input: 'org.freedesktop.impl.portal.desktop.wlr.service.in',
        output: '@BASENAME@',
-       install_dir: join_paths(get_option('datadir'), 'dbus-1', 'services'),
+       install_dir: get_option('datadir') / 'dbus-1' / 'services',
 )
 
 install_data(
        'wlr.portal',
-       install_dir: join_paths(get_option('datadir'), 'xdg-desktop-portal', 
'portals'),
+       install_dir: get_option('datadir') / 'xdg-desktop-portal' / 'portals',
 )
 
 scdoc = dependency('scdoc', required: get_option('man-pages'), version: '>= 
1.9.7', native: true)
@@ -146,7 +143,7 @@
                                'sh', '-c', '@0@ < @INPUT@ > 
@1@'.format(scdoc.get_variable(pkgconfig: 'scdoc'), output)
                        ],
                        install: true,
-                       install_dir: join_paths(get_option('mandir'), 'man' + 
section),
+                       install_dir: get_option('mandir') / ('man' + section),
                )
        endforeach
 endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xdg-desktop-portal-wlr-0.7.0/protocols/meson.build 
new/xdg-desktop-portal-wlr-0.7.1/protocols/meson.build
--- old/xdg-desktop-portal-wlr-0.7.0/protocols/meson.build      2023-04-15 
10:32:26.000000000 +0200
+++ new/xdg-desktop-portal-wlr-0.7.1/protocols/meson.build      2024-01-29 
21:44:32.000000000 +0100
@@ -1,14 +1,10 @@
 wl_protocol_dir = wayland_protos.get_variable('pkgdatadir')
 
-wayland_scanner_dep = dependency('wayland-scanner', required: false, native: 
true)
-if wayland_scanner_dep.found()
-       wayland_scanner = find_program(
-               wayland_scanner_dep.get_variable(pkgconfig: 'wayland_scanner'),
-               native: true,
-       )
-else
-       wayland_scanner = find_program('wayland-scanner', native: true)
-endif
+wayland_scanner_dep = dependency('wayland-scanner', native: true)
+wayland_scanner = find_program(
+       wayland_scanner_dep.get_variable(pkgconfig: 'wayland_scanner'),
+       native: true,
+)
 
 client_protocols = [
        wl_protocol_dir / 'unstable/linux-dmabuf/linux-dmabuf-unstable-v1.xml',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xdg-desktop-portal-wlr-0.7.0/src/core/main.c 
new/xdg-desktop-portal-wlr-0.7.1/src/core/main.c
--- old/xdg-desktop-portal-wlr-0.7.0/src/core/main.c    2023-04-15 
10:32:26.000000000 +0200
+++ new/xdg-desktop-portal-wlr-0.7.1/src/core/main.c    2024-01-29 
21:44:32.000000000 +0100
@@ -175,10 +175,7 @@
        wl_list_init(&state.timers);
 
        struct pollfd pollfds[] = {
-               [EVENT_LOOP_DBUS] = {
-                       .fd = sd_bus_get_fd(state.bus),
-                       .events = POLLIN,
-               },
+               [EVENT_LOOP_DBUS] = {0}, // Filled in later
                [EVENT_LOOP_WAYLAND] = {
                        .fd = wl_display_get_fd(state.wl_display),
                        .events = POLLIN,
@@ -196,7 +193,30 @@
        state.timer_poll_fd = pollfds[EVENT_LOOP_TIMER].fd;
 
        while (1) {
-               ret = poll(pollfds, sizeof(pollfds) / sizeof(pollfds[0]), -1);
+               // sd-bus requires that we update FD/events/timeout every time 
we poll
+               pollfds[EVENT_LOOP_DBUS].fd = sd_bus_get_fd(state.bus);
+               if (pollfds[EVENT_LOOP_DBUS].fd < 0) {
+                       logprint(ERROR, "sd_bus_get_fd failed: %s",
+                               strerror(-pollfds[EVENT_LOOP_DBUS].fd));
+                       goto error;
+               }
+               pollfds[EVENT_LOOP_DBUS].events = sd_bus_get_events(state.bus);
+               if (pollfds[EVENT_LOOP_DBUS].events < 0) {
+                       logprint(ERROR, "sd_bus_get_events failed: %s",
+                               strerror(-pollfds[EVENT_LOOP_DBUS].events));
+                       goto error;
+               }
+               uint64_t usec_timeout = 0;
+               ret = sd_bus_get_timeout(state.bus, &usec_timeout);
+               if (ret < 0) {
+                       logprint(ERROR, "sd_bus_get_timeout failed: %s", 
strerror(-ret));
+                       goto error;
+               }
+               // Convert timestamp from usec to msec.  Value of -1 indicates 
no
+               // timeout, i.e. poll forever.
+               int msec_timeout = usec_timeout == UINT64_MAX ? -1 : 
(int)((usec_timeout + 999) / 1000);
+
+               ret = poll(pollfds, sizeof(pollfds) / sizeof(pollfds[0]), 
msec_timeout);
                if (ret < 0) {
                        logprint(ERROR, "poll failed: %s", strerror(errno));
                        goto error;
@@ -215,7 +235,9 @@
                        break;
                }
 
-               if (pollfds[EVENT_LOOP_DBUS].revents & POLLIN) {
+               // sd-bus sets events=0 if it already has messages to process
+               if (pollfds[EVENT_LOOP_DBUS].revents ||
+                               pollfds[EVENT_LOOP_DBUS].events == 0) {
                        logprint(TRACE, "event-loop: got dbus event");
                        do {
                                ret = sd_bus_process(state.bus, NULL);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/xdg-desktop-portal-wlr-0.7.0/src/screencast/pipewire_screencast.c 
new/xdg-desktop-portal-wlr-0.7.1/src/screencast/pipewire_screencast.c
--- old/xdg-desktop-portal-wlr-0.7.0/src/screencast/pipewire_screencast.c       
2023-04-15 10:32:26.000000000 +0200
+++ new/xdg-desktop-portal-wlr-0.7.1/src/screencast/pipewire_screencast.c       
2024-01-29 21:44:32.000000000 +0100
@@ -594,6 +594,21 @@
        cast->stream = NULL;
 }
 
+static void on_core_error(void *data, uint32_t id, int seq, int res, const 
char* message) {
+       // If our pipewire connection drops then we won't be able to actually
+       // do a screencast.  Exit the process so someone restarts us and the
+       // new xdpw can reconnect to pipewire.
+       logprint(ERROR, "pipewire: fatal error event from core");
+       exit(1);
+}
+
+static const struct pw_core_events core_events = {
+       PW_VERSION_CORE_EVENTS,
+       .error = on_core_error,
+};
+
+static struct spa_hook core_listener;
+
 int xdpw_pwr_context_create(struct xdpw_state *state) {
        struct xdpw_screencast_context *ctx = &state->screencast;
 
@@ -613,6 +628,11 @@
                        logprint(ERROR, "pipewire: couldn't connect to 
context");
                        return -1;
                }
+
+               // Setup a core listener to detect errors / disconnects
+               // (i.e. in case the pipewire daemon is restarted).
+               spa_zero(core_listener);
+               pw_core_add_listener(ctx->core, &core_listener, &core_events, 
state);
        }
        return 0;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/xdg-desktop-portal-wlr-0.7.0/src/screencast/screencast.c 
new/xdg-desktop-portal-wlr-0.7.1/src/screencast/screencast.c
--- old/xdg-desktop-portal-wlr-0.7.0/src/screencast/screencast.c        
2023-04-15 10:32:26.000000000 +0200
+++ new/xdg-desktop-portal-wlr-0.7.1/src/screencast/screencast.c        
2024-01-29 21:44:32.000000000 +0100
@@ -585,12 +585,67 @@
        if (ret < 0) {
                return ret;
        }
-       ret = sd_bus_message_append(reply, "{sv}",
-               "streams", "a(ua{sv})", 1,
-               cast->node_id, 3,
-               "position", "(ii)", 0, 0,
-               "size", "(ii)", cast->screencopy_frame_info[WL_SHM].width, 
cast->screencopy_frame_info[WL_SHM].height,
-               "source_type", "u", 1 << MONITOR);
+       ret = sd_bus_message_open_container(reply, 'e', "sv");
+       if (ret < 0) {
+               return ret;
+       }
+       ret = sd_bus_message_append(reply, "s", "streams");
+       if (ret < 0) {
+               return ret;
+       }
+       ret = sd_bus_message_open_container(reply, 'v', "a(ua{sv})");
+       if (ret < 0) {
+               return ret;
+       }
+       ret = sd_bus_message_open_container(reply, 'a', "(ua{sv})");
+       if (ret < 0) {
+               return ret;
+       }
+       ret = sd_bus_message_open_container(reply, 'r', "ua{sv}");
+       if (ret < 0) {
+               return ret;
+       }
+       ret = sd_bus_message_append(reply, "u", cast->node_id);
+       if (ret < 0) {
+               return ret;
+       }
+       ret = sd_bus_message_open_container(reply, 'a', "{sv}");
+       if (ret < 0) {
+               return ret;
+       }
+       if (cast->target->output->xdg_output) {
+               ret = sd_bus_message_append(reply, "{sv}",
+                       "position", "(ii)", cast->target->output->x, 
cast->target->output->y);
+               if (ret < 0) {
+                       return ret;
+               }
+               ret = sd_bus_message_append(reply, "{sv}",
+                       "size", "(ii)", cast->target->output->width, 
cast->target->output->height);
+               if (ret < 0) {
+                       return ret;
+               }
+       }
+       ret = sd_bus_message_append(reply, "{sv}", "source_type", "u", MONITOR);
+       if (ret < 0) {
+               return ret;
+       }
+       ret = sd_bus_message_close_container(reply);
+       if (ret < 0) {
+               return ret;
+       }
+       ret = sd_bus_message_close_container(reply);
+       if (ret < 0) {
+               return ret;
+       }
+       ret = sd_bus_message_close_container(reply);
+       if (ret < 0) {
+               return ret;
+       }
+       ret = sd_bus_message_close_container(reply);
+       if (ret < 0) {
+               return ret;
+       }
+       ret = sd_bus_message_close_container(reply);
        if (ret < 0) {
                return ret;
        }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/xdg-desktop-portal-wlr-0.7.0/src/screencast/screencast_common.c 
new/xdg-desktop-portal-wlr-0.7.1/src/screencast/screencast_common.c
--- old/xdg-desktop-portal-wlr-0.7.0/src/screencast/screencast_common.c 
2023-04-15 10:32:26.000000000 +0200
+++ new/xdg-desktop-portal-wlr-0.7.1/src/screencast/screencast_common.c 
2024-01-29 21:44:32.000000000 +0100
@@ -279,6 +279,8 @@
        case DRM_FORMAT_ABGR2101010:
        case DRM_FORMAT_RGBA1010102:
        case DRM_FORMAT_BGRA1010102:
+       case DRM_FORMAT_BGR888:
+       case DRM_FORMAT_RGB888:
                return (enum wl_shm_format)format;
        default:
                logprint(ERROR, "xdg-desktop-portal-wlr: unsupported drm "
@@ -308,6 +310,8 @@
        case WL_SHM_FORMAT_ABGR2101010:
        case WL_SHM_FORMAT_RGBA1010102:
        case WL_SHM_FORMAT_BGRA1010102:
+       case WL_SHM_FORMAT_BGR888:
+       case WL_SHM_FORMAT_RGB888:
                return (uint32_t)format;
        default:
                logprint(ERROR, "xdg-desktop-portal-wlr: unsupported wl_shm "
@@ -352,6 +356,10 @@
                return SPA_VIDEO_FORMAT_RGBA_102LE;
        case DRM_FORMAT_BGRA1010102:
                return SPA_VIDEO_FORMAT_BGRA_102LE;
+       case DRM_FORMAT_BGR888:
+               return SPA_VIDEO_FORMAT_RGB;
+       case DRM_FORMAT_RGB888:
+               return SPA_VIDEO_FORMAT_BGR;
        default:
                logprint(ERROR, "xdg-desktop-portal-wlr: failed to convert drm "
                        "format 0x%08x to spa_video_format", format);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/xdg-desktop-portal-wlr-0.7.0/src/screencast/wlr_screencast.c 
new/xdg-desktop-portal-wlr-0.7.1/src/screencast/wlr_screencast.c
--- old/xdg-desktop-portal-wlr-0.7.0/src/screencast/wlr_screencast.c    
2023-04-15 10:32:26.000000000 +0200
+++ new/xdg-desktop-portal-wlr-0.7.1/src/screencast/wlr_screencast.c    
2024-01-29 21:44:32.000000000 +0100
@@ -2,6 +2,7 @@
 
 #include "linux-dmabuf-unstable-v1-client-protocol.h"
 #include "wlr-screencopy-unstable-v1-client-protocol.h"
+#include "xdg-output-unstable-v1-client-protocol.h"
 #include <fcntl.h>
 #include <limits.h>
 #include <stdbool.h>
@@ -306,6 +307,42 @@
        .description = wlr_output_handle_description,
 };
 
+static void xdg_output_handle_logical_position(void *data, struct 
zxdg_output_v1 *xdg_output_v1,
+               int32_t x, int32_t y) {
+       struct xdpw_wlr_output *output = data;
+       output->x = x;
+       output->y = y;
+}
+
+static void xdg_output_handle_logical_size(void *data, struct zxdg_output_v1 
*xdg_output_v1,
+               int32_t width, int32_t height) {
+       struct xdpw_wlr_output *output = data;
+       output->width = width;
+       output->height = height;
+}
+
+static void xdg_output_handle_done(void *data, struct zxdg_output_v1 
*xdg_output_v1) {
+       /* Nothing to do */
+}
+
+static void xdg_output_handle_name(void *data, struct zxdg_output_v1 
*xdg_output_v1,
+               const char *name) {
+       /* Nothing to do */
+}
+
+static void xdg_output_handle_description(void *data, struct zxdg_output_v1 
*xdg_output_v1,
+               const char *description) {
+       /* Nothing to do */
+}
+
+static const struct zxdg_output_v1_listener xdg_output_listener = {
+       .logical_position = xdg_output_handle_logical_position,
+       .logical_size = xdg_output_handle_logical_size,
+       .done = xdg_output_handle_done,
+       .name = xdg_output_handle_name,
+       .description = xdg_output_handle_description,
+};
+
 static struct xdpw_wlr_output *xdpw_wlr_output_first(struct wl_list 
*output_list) {
        struct xdpw_wlr_output *output, *tmp;
        wl_list_for_each_safe(output, tmp, output_list, link) {
@@ -555,6 +592,9 @@
        free(out->name);
        free(out->make);
        free(out->model);
+       if (out->xdg_output) {
+               zxdg_output_v1_destroy(out->xdg_output);
+       }
        wl_output_destroy(out->output);
        wl_list_remove(&out->link);
        free(out);
@@ -737,6 +777,12 @@
                logprint(DEBUG, "wlroots: |-- registered to interface %s 
(Version %u)", interface, WL_OUTPUT_VERSION);
                output->output = wl_registry_bind(reg, id, 
&wl_output_interface, WL_OUTPUT_VERSION);
 
+               if (ctx->xdg_output_manager) {
+                       output->xdg_output = 
zxdg_output_manager_v1_get_xdg_output(
+                               ctx->xdg_output_manager, output->output);
+                       zxdg_output_v1_add_listener(output->xdg_output, 
&xdg_output_listener, output);
+               }
+
                wl_output_add_listener(output->output, &wlr_output_listener, 
output);
                wl_list_insert(&ctx->output_list, &output->link);
        }
@@ -776,6 +822,17 @@
                        zwp_linux_dmabuf_v1_add_listener(ctx->linux_dmabuf, 
&linux_dmabuf_listener, ctx);
                }
        }
+
+       if (strcmp(interface, zxdg_output_manager_v1_interface.name) == 0
+                       && ver >= XDG_OUTPUT_VERSION_MIN) {
+               uint32_t version = ver;
+               if (XDG_OUTPUT_VERSION < ver) {
+                       version = XDG_OUTPUT_VERSION;
+               }
+               logprint(DEBUG, "wlroots: |-- registered to interface %s 
(Version %u)", interface, version);
+               ctx->xdg_output_manager = wl_registry_bind(
+                       reg, id, &zxdg_output_manager_v1_interface, version);
+       }
 }
 
 static void wlr_registry_handle_remove(void *data, struct wl_registry *reg,
@@ -856,6 +913,19 @@
                }
        }
 
+       if (ctx->xdg_output_manager) {
+               struct xdpw_wlr_output *output;
+               wl_list_for_each(output, &ctx->output_list, link) {
+                       if (!output->xdg_output) {
+                               output->xdg_output = 
zxdg_output_manager_v1_get_xdg_output(
+                                       ctx->xdg_output_manager, 
output->output);
+                               zxdg_output_v1_add_listener(output->xdg_output, 
&xdg_output_listener, output);
+                       }
+               }
+               wl_display_roundtrip(state->wl_display);
+               logprint(DEBUG, "wayland: xdg_output listeners run");
+       }
+
        return 0;
 }
 
@@ -865,6 +935,9 @@
        struct xdpw_wlr_output *output, *tmp_o;
        wl_list_for_each_safe(output, tmp_o, &ctx->output_list, link) {
                wl_list_remove(&output->link);
+               if (output->xdg_output) {
+                       zxdg_output_v1_destroy(output->xdg_output);
+               }
                wl_output_destroy(output->output);
        }
 
@@ -890,6 +963,9 @@
        if (ctx->linux_dmabuf) {
                zwp_linux_dmabuf_v1_destroy(ctx->linux_dmabuf);
        }
+       if (ctx->xdg_output_manager) {
+               zxdg_output_manager_v1_destroy(ctx->xdg_output_manager);
+       }
        if (ctx->registry) {
                wl_registry_destroy(ctx->registry);
        }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/xdg-desktop-portal-wlr-0.7.0/xdg-desktop-portal-wlr.5.scd 
new/xdg-desktop-portal-wlr-0.7.1/xdg-desktop-portal-wlr.5.scd
--- old/xdg-desktop-portal-wlr-0.7.0/xdg-desktop-portal-wlr.5.scd       
2023-04-15 10:32:26.000000000 +0200
+++ new/xdg-desktop-portal-wlr-0.7.1/xdg-desktop-portal-wlr.5.scd       
2024-01-29 21:44:32.000000000 +0100
@@ -40,8 +40,7 @@
        Select which output will be screencast.
 
        This option is used with **chooser_type** = none. The list of available 
outputs
-       can be obtained via **wayland-info**(1) (under the 
_zxdg_output_manager_v1_
-       section).
+       can be obtained via **wayland-info**(1) (under the _wl_output_ section).
 
 **max_fps** = _limit_
        Limit the number of frames per second to the provided rate.

Reply via email to