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 <opensuse(a)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.