Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package xdg-desktop-portal-cosmic for
openSUSE:Factory checked in at 2026-03-10 17:49:13
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/xdg-desktop-portal-cosmic (Old)
and /work/SRC/openSUSE:Factory/.xdg-desktop-portal-cosmic.new.8177 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "xdg-desktop-portal-cosmic"
Tue Mar 10 17:49:13 2026 rev:11 rq:1337734 version:1.0.8
Changes:
--------
---
/work/SRC/openSUSE:Factory/xdg-desktop-portal-cosmic/xdg-desktop-portal-cosmic.changes
2025-12-22 22:54:14.933411088 +0100
+++
/work/SRC/openSUSE:Factory/.xdg-desktop-portal-cosmic.new.8177/xdg-desktop-portal-cosmic.changes
2026-03-10 17:49:14.305455356 +0100
@@ -1,0 +2,57 @@
+Mon Mar 9 13:46:39 UTC 2026 - Richard Rahl <[email protected]>
+
+- Update to version 1.0.8:
+ * no changes since last release
+
+-------------------------------------------------------------------
+Mon Feb 23 18:54:18 UTC 2026 - Richard Rahl <[email protected]>
+
+- Update to version 1.0.7:
+ * i18n: translation updates from weblate
+ * Add pull request template
+
+-------------------------------------------------------------------
+Thu Feb 12 10:45:25 UTC 2026 - [email protected]
+
+- Update to version 1.0.6:
+ * i18n: translation updates from weblate
+ * fix: use fallback background from cosmic-wallpapers rather than
pop-wallpapers (#267)
+
+-------------------------------------------------------------------
+Thu Feb 05 03:01:26 UTC 2026 - [email protected]
+
+- Update to version 1.0.5:
+ * i18n: translation updates from weblate
+ * feat: add ctrl+c, ctrl+s functionality to cosmic-screenshot (#224)
+ * i18n: translation updates from weblate
+ * i18n: translation updates from weblate
+ * Always copy screenshot to clipboard (#235)
+
+-------------------------------------------------------------------
+Sun Jan 25 17:52:34 UTC 2026 - Eyad Issa <[email protected]>
+
+- Update to version 1.0.3:
+ * fix: Only save config when rectangle drag ends (#253)
+ * i18n: translation updates from weblate
+ * screencast: Set pipewire data flags for memfd
+ * Don't abort if dma-buf support is missing
+ * screencast: Add `position` and `size` properties for stream
+ * screencast: Add `source_type` property to `Start` return value
+ * Exit with warning if name is lost of DBus bus
+ * i18n: translation updates from weblate
+ * feat(screenshot): remember last selected screenshot region
+
+-------------------------------------------------------------------
+Wed Dec 31 01:43:02 UTC 2025 - Richard Rahl <[email protected]>
+
+- Update to version 1.0.1:
+ * Update translations
+
+-------------------------------------------------------------------
+Mon Dec 29 12:36:42 UTC 2025 - Richard Rahl <[email protected]>
+
+- use appid, easier to read
+- remove patch leap-fix-libexec.patch, by using the libexecdir
+ variable
+
+-------------------------------------------------------------------
Old:
----
leap-fix-libexec.patch
xdg-desktop-portal-cosmic-1.0.0+0.obscpio
New:
----
xdg-desktop-portal-cosmic-1.0.8.obscpio
----------(Old B)----------
Old:- use appid, easier to read
- remove patch leap-fix-libexec.patch, by using the libexecdir
variable
----------(Old E)----------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ xdg-desktop-portal-cosmic.spec ++++++
--- /var/tmp/diff_new_pack.hnsp0i/_old 2026-03-10 17:49:15.517505390 +0100
+++ /var/tmp/diff_new_pack.hnsp0i/_new 2026-03-10 17:49:15.521505555 +0100
@@ -1,7 +1,7 @@
#
# spec file for package xdg-desktop-portal-cosmic
#
-# Copyright (c) 2025 SUSE LLC and contributors
+# Copyright (c) 2026 SUSE LLC and contributors
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -16,15 +16,15 @@
#
+%define appid org.freedesktop.impl.portal.desktop.cosmic
Name: xdg-desktop-portal-cosmic
-Version: 1.0.0+0
+Version: 1.0.8
Release: 0
Summary: COSMIC xdg portal
License: GPL-3.0-only
URL: https://github.com/pop-os/xdg-desktop-portal-cosmic
Source0: %{name}-%{version}.tar.zst
Source1: vendor.tar.zst
-Patch0: leap-fix-libexec.patch
BuildRequires: cargo-packaging
BuildRequires: clang-devel
BuildRequires: git-core
@@ -45,26 +45,23 @@
This package contains the xdg portal implementation for COSMIC DE.
%prep
-%autosetup -N -a1
-%if 0%{?suse_version} < 1600
-%autopatch -p0
-%endif
+%autosetup -a1
%build
%make_build
%install
-%make_install DESTDIR=%{buildroot} prefix=%{_prefix}
+%make_install DESTDIR=%{buildroot} prefix=%{_prefix} libexecdir=%{_libexecdir}
%check
%{cargo_test}
%files
%license LICENSE
-%{_datadir}/dbus-1/services/org.freedesktop.impl.portal.desktop.cosmic.service
+%{_datadir}/dbus-1/services/%{appid}.service
%{_datadir}/icons/hicolor/scalable/actions/{screenshot-screen-symbolic,screenshot-selection-symbolic,screenshot-window-symbolic}.svg
%{_datadir}/xdg-desktop-portal/cosmic-portals.conf
%{_datadir}/xdg-desktop-portal/portals/cosmic.portal
%{_libexecdir}/%{name}
-%{_prefix}/lib/systemd/user/org.freedesktop.impl.portal.desktop.cosmic.service
+%{_userunitdir}/%{appid}.service
++++++ _service ++++++
--- /var/tmp/diff_new_pack.hnsp0i/_old 2026-03-10 17:49:15.569507536 +0100
+++ /var/tmp/diff_new_pack.hnsp0i/_new 2026-03-10 17:49:15.577507866 +0100
@@ -3,9 +3,9 @@
<service name="obs_scm" mode="manual">
<param
name="url">https://github.com/pop-os/xdg-desktop-portal-cosmic.git</param>
<param name="scm">git</param>
- <param name="revision">master</param>
- <param name="versionrewrite-pattern">epoch-(.*)\+0</param>
- <param name="versionformat">1.0.0+@TAG_OFFSET@</param>
+ <param name="revision">refs/tags/epoch-1.0.8</param>
+ <param name="versionrewrite-pattern">epoch-(.*)</param>
+ <param name="versionformat">@PARENT_TAG@</param>
<param name="versionrewrite-replacement">\1</param>
<param name="package-meta">yes</param>
<param name="filename">xdg-desktop-portal-cosmic</param>
++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.hnsp0i/_old 2026-03-10 17:49:15.613509353 +0100
+++ /var/tmp/diff_new_pack.hnsp0i/_new 2026-03-10 17:49:15.617509518 +0100
@@ -1,6 +1,6 @@
<servicedata>
<service name="tar_scm">
<param
name="url">https://github.com/pop-os/xdg-desktop-portal-cosmic.git</param>
- <param
name="changesrevision">28fe74badef0e4931dae7220319836bc51c34d37</param></service></servicedata>
+ <param
name="changesrevision">1fe63055bca84d09f3d4ce70b50069554875e4d2</param></service></servicedata>
(No newline at EOF)
++++++ xdg-desktop-portal-cosmic-1.0.0+0.obscpio ->
xdg-desktop-portal-cosmic-1.0.8.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/xdg-desktop-portal-cosmic-1.0.0+0/.git/FETCH_HEAD
new/xdg-desktop-portal-cosmic-1.0.8/.git/FETCH_HEAD
--- old/xdg-desktop-portal-cosmic-1.0.0+0/.git/FETCH_HEAD 1970-01-01
01:00:00.000000000 +0100
+++ new/xdg-desktop-portal-cosmic-1.0.8/.git/FETCH_HEAD 2026-02-17
17:54:40.000000000 +0100
@@ -0,0 +1,14 @@
+02405201d714dcee269d5d8c273c1fb5e6cbab28 not-for-merge branch
'git-f0x-2024' of https://github.com/pop-os/xdg-desktop-portal-cosmic
+1fe63055bca84d09f3d4ce70b50069554875e4d2 not-for-merge branch 'master'
of https://github.com/pop-os/xdg-desktop-portal-cosmic
+a515c190ffec84da981b068db80b847d8243159b not-for-merge branch
'master_jammy' of https://github.com/pop-os/xdg-desktop-portal-cosmic
+e081692a50bedd06fbff88a5bff1e98e55d3996b not-for-merge branch
'metadata-cursor_noble' of https://github.com/pop-os/xdg-desktop-portal-cosmic
+149e8c9e7efce2817b2ba78aa308244cef2bb3c6 not-for-merge branch
'metadata-cursor_nobuild' of https://github.com/pop-os/xdg-desktop-portal-cosmic
+d26d88c1db10ec642658e37c4b2277ed90c01d86 not-for-merge branch
'remote-desktop' of https://github.com/pop-os/xdg-desktop-portal-cosmic
+fe7fbd1a0e8ac21bc2ccc6922fea3ac7cd5205fa not-for-merge branch
'rust-2024-about' of https://github.com/pop-os/xdg-desktop-portal-cosmic
+c4c1673d4366b8b7d12946feade480d7136b9a43 not-for-merge branch
'screenshot' of https://github.com/pop-os/xdg-desktop-portal-cosmic
+d558af7bc6b0c1dc020d8194daa0a768fc0dc407 not-for-merge branch
'screenshot-subsurfaces' of https://github.com/pop-os/xdg-desktop-portal-cosmic
+91c88770300237ead1c50ceb1f8c7b9ac3f5e987 not-for-merge branch
'testing-xdg-desktop-portal-cosmic-pr254' of
https://github.com/pop-os/xdg-desktop-portal-cosmic
+17be8c576fdb8a73962f5b96e860804de5a49f57 not-for-merge branch
'testing-xdg-pr255' of https://github.com/pop-os/xdg-desktop-portal-cosmic
+d993a7251ba0bf86bb0a8a45b8f6215876088ec4 not-for-merge branch
'update-libcosmic' of https://github.com/pop-os/xdg-desktop-portal-cosmic
+9217b285afaa41d024bcd390b4f82118efc82250 not-for-merge branch
'wip-screencapture-dialog_nobuild' of
https://github.com/pop-os/xdg-desktop-portal-cosmic
+d2f81e6925aadd90c3cbb12f1e55dded2ca82ebc not-for-merge branch
'wip-screencast-test_nobuild' of
https://github.com/pop-os/xdg-desktop-portal-cosmic
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/xdg-desktop-portal-cosmic-1.0.0+0/.git/HEAD
new/xdg-desktop-portal-cosmic-1.0.8/.git/HEAD
--- old/xdg-desktop-portal-cosmic-1.0.0+0/.git/HEAD 2025-12-10
01:04:45.000000000 +0100
+++ new/xdg-desktop-portal-cosmic-1.0.8/.git/HEAD 2026-02-17
17:54:40.000000000 +0100
@@ -1 +1 @@
-ref: refs/heads/master
+1fe63055bca84d09f3d4ce70b50069554875e4d2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/xdg-desktop-portal-cosmic-1.0.0+0/.git/ORIG_HEAD
new/xdg-desktop-portal-cosmic-1.0.8/.git/ORIG_HEAD
--- old/xdg-desktop-portal-cosmic-1.0.0+0/.git/ORIG_HEAD 2025-12-10
01:04:45.000000000 +0100
+++ new/xdg-desktop-portal-cosmic-1.0.8/.git/ORIG_HEAD 2026-02-17
17:54:40.000000000 +0100
@@ -1 +1 @@
-28fe74badef0e4931dae7220319836bc51c34d37
+1fe63055bca84d09f3d4ce70b50069554875e4d2
Binary files old/xdg-desktop-portal-cosmic-1.0.0+0/.git/index and
new/xdg-desktop-portal-cosmic-1.0.8/.git/index differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/xdg-desktop-portal-cosmic-1.0.0+0/.git/logs/HEAD
new/xdg-desktop-portal-cosmic-1.0.8/.git/logs/HEAD
--- old/xdg-desktop-portal-cosmic-1.0.0+0/.git/logs/HEAD 2025-12-10
01:04:45.000000000 +0100
+++ new/xdg-desktop-portal-cosmic-1.0.8/.git/logs/HEAD 2026-02-17
17:54:40.000000000 +0100
@@ -1,3 +1,2 @@
-0000000000000000000000000000000000000000
28fe74badef0e4931dae7220319836bc51c34d37 user <[email protected]>
1765482628 +0000 clone: from
https://github.com/pop-os/xdg-desktop-portal-cosmic.git
-28fe74badef0e4931dae7220319836bc51c34d37
28fe74badef0e4931dae7220319836bc51c34d37 user <[email protected]>
1765482628 +0000 checkout: moving from master to master
-28fe74badef0e4931dae7220319836bc51c34d37
28fe74badef0e4931dae7220319836bc51c34d37 user <[email protected]>
1765482628 +0000 reset: moving to master
+0000000000000000000000000000000000000000
1fe63055bca84d09f3d4ce70b50069554875e4d2 Richard Rahl <[email protected]>
1771872858 +0100 clone: from
https://github.com/pop-os/xdg-desktop-portal-cosmic.git
+1fe63055bca84d09f3d4ce70b50069554875e4d2
1fe63055bca84d09f3d4ce70b50069554875e4d2 Richard Rahl <[email protected]>
1771872858 +0100 checkout: moving from master to refs/tags/epoch-1.0.7
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/xdg-desktop-portal-cosmic-1.0.0+0/.git/logs/refs/heads/master
new/xdg-desktop-portal-cosmic-1.0.8/.git/logs/refs/heads/master
--- old/xdg-desktop-portal-cosmic-1.0.0+0/.git/logs/refs/heads/master
2025-12-10 01:04:45.000000000 +0100
+++ new/xdg-desktop-portal-cosmic-1.0.8/.git/logs/refs/heads/master
2026-02-17 17:54:40.000000000 +0100
@@ -1 +1 @@
-0000000000000000000000000000000000000000
28fe74badef0e4931dae7220319836bc51c34d37 user <[email protected]>
1765482628 +0000 clone: from
https://github.com/pop-os/xdg-desktop-portal-cosmic.git
+0000000000000000000000000000000000000000
1fe63055bca84d09f3d4ce70b50069554875e4d2 Richard Rahl <[email protected]>
1771872858 +0100 clone: from
https://github.com/pop-os/xdg-desktop-portal-cosmic.git
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/xdg-desktop-portal-cosmic-1.0.0+0/.git/logs/refs/remotes/origin/HEAD
new/xdg-desktop-portal-cosmic-1.0.8/.git/logs/refs/remotes/origin/HEAD
--- old/xdg-desktop-portal-cosmic-1.0.0+0/.git/logs/refs/remotes/origin/HEAD
2025-12-10 01:04:45.000000000 +0100
+++ new/xdg-desktop-portal-cosmic-1.0.8/.git/logs/refs/remotes/origin/HEAD
2026-02-17 17:54:40.000000000 +0100
@@ -1 +1 @@
-0000000000000000000000000000000000000000
28fe74badef0e4931dae7220319836bc51c34d37 user <[email protected]>
1765482628 +0000 clone: from
https://github.com/pop-os/xdg-desktop-portal-cosmic.git
+0000000000000000000000000000000000000000
1fe63055bca84d09f3d4ce70b50069554875e4d2 Richard Rahl <[email protected]>
1771872858 +0100 clone: from
https://github.com/pop-os/xdg-desktop-portal-cosmic.git
Binary files
old/xdg-desktop-portal-cosmic-1.0.0+0/.git/objects/b2/2f710cf486d17b5e7343849ebebdf74db9eb09
and
new/xdg-desktop-portal-cosmic-1.0.8/.git/objects/b2/2f710cf486d17b5e7343849ebebdf74db9eb09
differ
Binary files
old/xdg-desktop-portal-cosmic-1.0.0+0/.git/objects/pack/pack-28ef289ffbd5b0834e881440700f63df76c005d4.idx
and
new/xdg-desktop-portal-cosmic-1.0.8/.git/objects/pack/pack-28ef289ffbd5b0834e881440700f63df76c005d4.idx
differ
Binary files
old/xdg-desktop-portal-cosmic-1.0.0+0/.git/objects/pack/pack-28ef289ffbd5b0834e881440700f63df76c005d4.pack
and
new/xdg-desktop-portal-cosmic-1.0.8/.git/objects/pack/pack-28ef289ffbd5b0834e881440700f63df76c005d4.pack
differ
Binary files
old/xdg-desktop-portal-cosmic-1.0.0+0/.git/objects/pack/pack-28ef289ffbd5b0834e881440700f63df76c005d4.rev
and
new/xdg-desktop-portal-cosmic-1.0.8/.git/objects/pack/pack-28ef289ffbd5b0834e881440700f63df76c005d4.rev
differ
Binary files
old/xdg-desktop-portal-cosmic-1.0.0+0/.git/objects/pack/pack-5f3cc70ddc38ee2fda313d77027dfd4cc679d5c7.idx
and
new/xdg-desktop-portal-cosmic-1.0.8/.git/objects/pack/pack-5f3cc70ddc38ee2fda313d77027dfd4cc679d5c7.idx
differ
Binary files
old/xdg-desktop-portal-cosmic-1.0.0+0/.git/objects/pack/pack-5f3cc70ddc38ee2fda313d77027dfd4cc679d5c7.pack
and
new/xdg-desktop-portal-cosmic-1.0.8/.git/objects/pack/pack-5f3cc70ddc38ee2fda313d77027dfd4cc679d5c7.pack
differ
Binary files
old/xdg-desktop-portal-cosmic-1.0.0+0/.git/objects/pack/pack-5f3cc70ddc38ee2fda313d77027dfd4cc679d5c7.rev
and
new/xdg-desktop-portal-cosmic-1.0.8/.git/objects/pack/pack-5f3cc70ddc38ee2fda313d77027dfd4cc679d5c7.rev
differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/xdg-desktop-portal-cosmic-1.0.0+0/.git/packed-refs
new/xdg-desktop-portal-cosmic-1.0.8/.git/packed-refs
--- old/xdg-desktop-portal-cosmic-1.0.0+0/.git/packed-refs 2025-12-10
01:04:45.000000000 +0100
+++ new/xdg-desktop-portal-cosmic-1.0.8/.git/packed-refs 2026-02-17
17:54:40.000000000 +0100
@@ -1,13 +1,15 @@
# pack-refs with: peeled fully-peeled sorted
02405201d714dcee269d5d8c273c1fb5e6cbab28 refs/remotes/origin/git-f0x-2024
-28fe74badef0e4931dae7220319836bc51c34d37 refs/remotes/origin/master
+1fe63055bca84d09f3d4ce70b50069554875e4d2 refs/remotes/origin/master
a515c190ffec84da981b068db80b847d8243159b refs/remotes/origin/master_jammy
-70ae377983b6440e809cd5bf97cab60ad74fb06e
refs/remotes/origin/metadata-cursor_noble
+e081692a50bedd06fbff88a5bff1e98e55d3996b
refs/remotes/origin/metadata-cursor_noble
149e8c9e7efce2817b2ba78aa308244cef2bb3c6
refs/remotes/origin/metadata-cursor_nobuild
-ea3df4cf0b42e9cc9193dbe80548c0c79d325150 refs/remotes/origin/remote-desktop
+d26d88c1db10ec642658e37c4b2277ed90c01d86 refs/remotes/origin/remote-desktop
fe7fbd1a0e8ac21bc2ccc6922fea3ac7cd5205fa refs/remotes/origin/rust-2024-about
c4c1673d4366b8b7d12946feade480d7136b9a43 refs/remotes/origin/screenshot
d558af7bc6b0c1dc020d8194daa0a768fc0dc407
refs/remotes/origin/screenshot-subsurfaces
+91c88770300237ead1c50ceb1f8c7b9ac3f5e987
refs/remotes/origin/testing-xdg-desktop-portal-cosmic-pr254
+17be8c576fdb8a73962f5b96e860804de5a49f57 refs/remotes/origin/testing-xdg-pr255
d993a7251ba0bf86bb0a8a45b8f6215876088ec4 refs/remotes/origin/update-libcosmic
9217b285afaa41d024bcd390b4f82118efc82250
refs/remotes/origin/wip-screencapture-dialog_nobuild
d2f81e6925aadd90c3cbb12f1e55dded2ca82ebc
refs/remotes/origin/wip-screencast-test_nobuild
@@ -30,3 +32,14 @@
dd7d22382c4c1a7f1d58843e742d5116f50d8715 refs/tags/epoch-1.0.0-beta.7
31b7a1aa36f1a11c7bd1a14a6da3d87b9edca7d1 refs/tags/epoch-1.0.0-beta.8
31b7a1aa36f1a11c7bd1a14a6da3d87b9edca7d1 refs/tags/epoch-1.0.0-beta.9
+63903c94507d14732f8b95d745d75dc4944ff461 refs/tags/epoch-1.0.1
+c1df2bf9ef8ca15417c3856877161c17cc8257e7 refs/tags/epoch-1.0.2
+e80eb7f11247371efd06e373d891815cd6a8acf1 refs/tags/epoch-1.0.3
+7641667dae014a2a371a2d52cd5ef950f58a5449 refs/tags/epoch-1.0.4
+^2ab83d5053dca735be56304493b8cb2dde462a42
+d652c6ebb554c4155c46bc76e70d39c5bf847de7 refs/tags/epoch-1.0.5
+^ff0633fa8726fb1a770f26a7286f02edf3b39b97
+ac8f41e3580bb369fb4a4a7ca0d68f9869f56f7d refs/tags/epoch-1.0.6
+^276af0b38c77bbb52fcb864ada151ed2eb93ae3a
+1d8f6523b1063bf3c39d99c504425d974a326808 refs/tags/epoch-1.0.7
+^1fe63055bca84d09f3d4ce70b50069554875e4d2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/xdg-desktop-portal-cosmic-1.0.0+0/.git/refs/heads/master
new/xdg-desktop-portal-cosmic-1.0.8/.git/refs/heads/master
--- old/xdg-desktop-portal-cosmic-1.0.0+0/.git/refs/heads/master
2025-12-10 01:04:45.000000000 +0100
+++ new/xdg-desktop-portal-cosmic-1.0.8/.git/refs/heads/master 2026-02-17
17:54:40.000000000 +0100
@@ -1 +1 @@
-28fe74badef0e4931dae7220319836bc51c34d37
+1fe63055bca84d09f3d4ce70b50069554875e4d2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/xdg-desktop-portal-cosmic-1.0.0+0/.git/refs/tags/epoch-1.0.8
new/xdg-desktop-portal-cosmic-1.0.8/.git/refs/tags/epoch-1.0.8
--- old/xdg-desktop-portal-cosmic-1.0.0+0/.git/refs/tags/epoch-1.0.8
1970-01-01 01:00:00.000000000 +0100
+++ new/xdg-desktop-portal-cosmic-1.0.8/.git/refs/tags/epoch-1.0.8
2026-02-17 17:54:40.000000000 +0100
@@ -0,0 +1 @@
+b22f710cf486d17b5e7343849ebebdf74db9eb09
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/xdg-desktop-portal-cosmic-1.0.0+0/.github/PULL_REQUEST_TEMPLATE.md
new/xdg-desktop-portal-cosmic-1.0.8/.github/PULL_REQUEST_TEMPLATE.md
--- old/xdg-desktop-portal-cosmic-1.0.0+0/.github/PULL_REQUEST_TEMPLATE.md
1970-01-01 01:00:00.000000000 +0100
+++ new/xdg-desktop-portal-cosmic-1.0.8/.github/PULL_REQUEST_TEMPLATE.md
2026-02-17 17:54:40.000000000 +0100
@@ -0,0 +1,8 @@
+- [ ] I have disclosed use of any AI generated code in my commit messages.
+ - If you are using an LLM, and do not fully understand the changes it is
making to the code base, do not create a PR.
+ - In our experience, AI generated code often results in overly complex code
that lacks enough context for a proper fix or feature inclusion. This results
in considerably longer code reviews. Due to this, AI authored or partially
authored PRs may be closed without comment.
+- [ ] I understand these changes in full and will be able to respond to review
comments.
+- [ ] My change is accurately described in the commit message.
+- [ ] My contribution is tested and working as described.
+- [ ] I have read the [Developer Certificate of
Origin](https://developercertificate.org/) and certify my contribution under
its conditions.
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/xdg-desktop-portal-cosmic-1.0.0+0/cosmic-portal-config/src/screenshot.rs
new/xdg-desktop-portal-cosmic-1.0.8/cosmic-portal-config/src/screenshot.rs
---
old/xdg-desktop-portal-cosmic-1.0.0+0/cosmic-portal-config/src/screenshot.rs
2025-12-10 01:04:45.000000000 +0100
+++ new/xdg-desktop-portal-cosmic-1.0.8/cosmic-portal-config/src/screenshot.rs
2026-02-17 17:54:40.000000000 +0100
@@ -2,11 +2,22 @@
use serde::{Deserialize, Serialize};
+/// Logical coordinates of a rectangle selection
+#[derive(Debug, Clone, Copy, Default, PartialEq, Deserialize, Serialize)]
+pub struct Rect {
+ pub left: i32,
+ pub top: i32,
+ pub right: i32,
+ pub bottom: i32,
+}
+
#[derive(Debug, Clone, Default, PartialEq, Deserialize, Serialize)]
#[serde(deny_unknown_fields)]
pub struct Screenshot {
pub save_location: ImageSaveLocation,
pub choice: Choice,
+ #[serde(default)]
+ pub last_rectangle: Option<Rect>,
}
#[derive(Default, Clone, Copy, Debug, PartialEq, Eq, Deserialize, Serialize)]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/xdg-desktop-portal-cosmic-1.0.0+0/i18n/ar/xdg_desktop_portal_cosmic.ftl
new/xdg-desktop-portal-cosmic-1.0.8/i18n/ar/xdg_desktop_portal_cosmic.ftl
--- old/xdg-desktop-portal-cosmic-1.0.0+0/i18n/ar/xdg_desktop_portal_cosmic.ftl
2025-12-10 01:04:45.000000000 +0100
+++ new/xdg-desktop-portal-cosmic-1.0.8/i18n/ar/xdg_desktop_portal_cosmic.ftl
2026-02-17 17:54:40.000000000 +0100
@@ -1,8 +1,8 @@
-allow = سماح
+allow = اسمح
cancel = ألغِ
-capture = التقاط
-share = مشاركة
-save-to = حفظ إلى
+capture = التقط
+share = شارك
+save-to = احفظ إلى
.clipboard = { save-to } الحافظة
.pictures = { save-to } الصور
.documents = { save-to } المستندات
@@ -10,5 +10,5 @@
share-screen = شارك شاشتك
.description = النظام يريد مشاركة محتويات شاشتك مع «{ $app_name }». حدِّد
شاشة أو نافذة للمشاركة.
unknown-application = تطبيق مجهول
-output = مخرج
+output = الخرج
window = نافذة
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/xdg-desktop-portal-cosmic-1.0.0+0/i18n/ga/xdg_desktop_portal_cosmic.ftl
new/xdg-desktop-portal-cosmic-1.0.8/i18n/ga/xdg_desktop_portal_cosmic.ftl
--- old/xdg-desktop-portal-cosmic-1.0.0+0/i18n/ga/xdg_desktop_portal_cosmic.ftl
2025-12-10 01:04:45.000000000 +0100
+++ new/xdg-desktop-portal-cosmic-1.0.8/i18n/ga/xdg_desktop_portal_cosmic.ftl
2026-02-17 17:54:40.000000000 +0100
@@ -2,13 +2,13 @@
cancel = Cealaigh
capture = Gabh
share = Comhroinn
-save-to = Sábháil i
+save-to = Sábháil chuig
.clipboard = { save-to } Gearrthaisce
.pictures = { save-to } Pictiúir
.documents = { save-to } Cáipéisí
choose-folder = Roghnaigh fillteán
share-screen = Comhroinn do scáileán
.description = Teastaíonn ón gcóras ábhar do scáileáin a chomhroinnt le "{
$app_name }". Roghnaigh scáileán nó fuinneog le comhroinnt.
-unknown-application = Aip Anaithnid
+unknown-application = Aip anaithnid
output = Aschur
window = Fuinneog
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/xdg-desktop-portal-cosmic-1.0.0+0/i18n/id/xdg_desktop_portal_cosmic.ftl
new/xdg-desktop-portal-cosmic-1.0.8/i18n/id/xdg_desktop_portal_cosmic.ftl
--- old/xdg-desktop-portal-cosmic-1.0.0+0/i18n/id/xdg_desktop_portal_cosmic.ftl
2025-12-10 01:04:45.000000000 +0100
+++ new/xdg-desktop-portal-cosmic-1.0.8/i18n/id/xdg_desktop_portal_cosmic.ftl
2026-02-17 17:54:40.000000000 +0100
@@ -0,0 +1,14 @@
+allow = Izinkan
+cancel = Batalkan
+capture = Ambil
+share = Bagikan
+save-to = Simpan ke
+ .clipboard = { save-to } Papan Klip
+ .pictures = { save-to } Gambar
+ .documents = { save-to } Dokumen
+choose-folder = Pilih map
+share-screen = Bagikan layar anda
+ .description = Sistem ingin membagikan konten layar Anda dengan "{
$app_name }". Pilih layar atau jendela yang ingin dibagikan.
+unknown-application = Aplikasi Tidak Diketahui
+output = Keluaran
+window = Jendela
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/xdg-desktop-portal-cosmic-1.0.0+0/i18n/kk/xdg_desktop_portal_cosmic.ftl
new/xdg-desktop-portal-cosmic-1.0.8/i18n/kk/xdg_desktop_portal_cosmic.ftl
--- old/xdg-desktop-portal-cosmic-1.0.0+0/i18n/kk/xdg_desktop_portal_cosmic.ftl
1970-01-01 01:00:00.000000000 +0100
+++ new/xdg-desktop-portal-cosmic-1.0.8/i18n/kk/xdg_desktop_portal_cosmic.ftl
2026-02-17 17:54:40.000000000 +0100
@@ -0,0 +1,14 @@
+cancel = Бас тарту
+output = Шығару
+allow = Рұқсат ету
+capture = Түсіру
+share = Бөлісу
+save-to = Сақтау орны
+ .clipboard = { save-to } Алмасу буфері
+ .pictures = { save-to } Суреттер
+ .documents = { save-to } Құжаттар
+choose-folder = Буманы таңдау
+share-screen = Экранды бөлісу
+ .description = Жүйе экраныңыздың мазмұнын "{ $app_name }" бағдарламасымен
бөліскісі келеді. Бөлісу үшін экранды немесе терезені таңдаңыз.
+unknown-application = Белгісіз қолданба
+window = Терезе
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/xdg-desktop-portal-cosmic-1.0.0+0/i18n/ko/xdg_desktop_portal_cosmic.ftl
new/xdg-desktop-portal-cosmic-1.0.8/i18n/ko/xdg_desktop_portal_cosmic.ftl
--- old/xdg-desktop-portal-cosmic-1.0.0+0/i18n/ko/xdg_desktop_portal_cosmic.ftl
2025-12-10 01:04:45.000000000 +0100
+++ new/xdg-desktop-portal-cosmic-1.0.8/i18n/ko/xdg_desktop_portal_cosmic.ftl
2026-02-17 17:54:40.000000000 +0100
@@ -0,0 +1,14 @@
+allow = 허용
+share = 공유
+output = 출력
+capture = 캡처
+window = 창
+share-screen = 화면 공유
+ .description = 시스템이 "{ $app_name }" 앱에 화면 내용을 공유하려고 합니다. 공유할 화면 또는 창을
선택하세요.
+unknown-application = 알 수 없는 앱
+choose-folder = 폴더 선택
+save-to = 저장
+ .clipboard = 클립보드에 { save-to }
+ .pictures = 사진에 { save-to }
+ .documents = 문서에 { save-to }
+cancel = 취소
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/xdg-desktop-portal-cosmic-1.0.0+0/i18n/lt/xdg_desktop_portal_cosmic.ftl
new/xdg-desktop-portal-cosmic-1.0.8/i18n/lt/xdg_desktop_portal_cosmic.ftl
--- old/xdg-desktop-portal-cosmic-1.0.0+0/i18n/lt/xdg_desktop_portal_cosmic.ftl
2025-12-10 01:04:45.000000000 +0100
+++ new/xdg-desktop-portal-cosmic-1.0.8/i18n/lt/xdg_desktop_portal_cosmic.ftl
2026-02-17 17:54:40.000000000 +0100
@@ -0,0 +1,14 @@
+allow = Leisti
+output = Išvestis
+cancel = Atšaukti
+capture = Užfiksuoti
+share = Dalintis
+save-to = Išsaugoti į
+ .clipboard = { save-to } Iškarpinę
+ .pictures = { save-to } Nuotraukų aplankalą
+ .documents = { save-to } Dokumentų aplanką
+choose-folder = Pasirinkti aplanką
+share-screen = Leisti dalintis ekranu
+ .description = Sistema nori dalintis jūsų ekrano vaizdu su „{ $app_name }“
aplikacija. Pasirinkite ekraną ar langą, kuriuo norite dalintis.
+unknown-application = Nežinoma Aplikacija
+window = Langas
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/xdg-desktop-portal-cosmic-1.0.0+0/i18n/nl/xdg_desktop_portal_cosmic.ftl
new/xdg-desktop-portal-cosmic-1.0.8/i18n/nl/xdg_desktop_portal_cosmic.ftl
--- old/xdg-desktop-portal-cosmic-1.0.0+0/i18n/nl/xdg_desktop_portal_cosmic.ftl
2025-12-10 01:04:45.000000000 +0100
+++ new/xdg-desktop-portal-cosmic-1.0.8/i18n/nl/xdg_desktop_portal_cosmic.ftl
2026-02-17 17:54:40.000000000 +0100
@@ -1,14 +1,14 @@
allow = Toestaan
-cancel = Annuleer
+cancel = Annuleren
capture = Opnemen
share = Delen
-save-to = Opslaan als
- .clipboard = Naar klembord opslaan
- .pictures = Opslaan in Afbeeldingen
- .documents = Opslaan in Documenten
+save-to = Opslaan naar
+ .clipboard = { save-to } Klembord
+ .pictures = { save-to } Afbeeldingen
+ .documents = { save-to } Documenten
choose-folder = Map selecteren
share-screen = Scherm delen
- .description = Het systeem wil de inhoud van uw scherm delen met "{
$app_name }". Selecteer en schem of venster dat u wilt delen.
-unknown-application = Onbekende applicatie
+ .description = Het systeem wil de inhoud van uw scherm delen met "{
$app_name }". Selecteer een schem of venster dat u wilt delen.
+unknown-application = Onbekende Applicatie
output = Uitvoer
window = Venster
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/xdg-desktop-portal-cosmic-1.0.0+0/i18n/uk/xdg_desktop_portal_cosmic.ftl
new/xdg-desktop-portal-cosmic-1.0.8/i18n/uk/xdg_desktop_portal_cosmic.ftl
--- old/xdg-desktop-portal-cosmic-1.0.0+0/i18n/uk/xdg_desktop_portal_cosmic.ftl
2025-12-10 01:04:45.000000000 +0100
+++ new/xdg-desktop-portal-cosmic-1.0.8/i18n/uk/xdg_desktop_portal_cosmic.ftl
2026-02-17 17:54:40.000000000 +0100
@@ -1,14 +1,14 @@
allow = Дозволити
cancel = Скасувати
-capture = Захоплення екрана
-save-to = Зберегти у
+capture = Захопити
+save-to = Зберегти в
.clipboard = { save-to } буфер обміну
- .pictures = { save-to } Зображення
- .documents = { save-to } Документи
-choose-folder = Вибрати теку
-share = Поділитися
+ .pictures = { save-to } «Зображення»
+ .documents = { save-to } «Документи»
+choose-folder = Обрати теку
+share = Ширити
share-screen = Поділитися екраном
- .description = Система запитує дозвіл на демонстарцію екрана через "{
$app_name }". Оберіть екран або вікно, яким ви бажаєте поділитися.
+ .description = Система запитує дозвіл на демонстрацію екрана через «{
$app_name }». Оберіть екран або вікно для показу.
unknown-application = Невідомий застосунок
output = Вивід
window = Вікно
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/xdg-desktop-portal-cosmic-1.0.0+0/i18n/zh-CN/xdg_desktop_portal_cosmic.ftl
new/xdg-desktop-portal-cosmic-1.0.8/i18n/zh-CN/xdg_desktop_portal_cosmic.ftl
---
old/xdg-desktop-portal-cosmic-1.0.0+0/i18n/zh-CN/xdg_desktop_portal_cosmic.ftl
2025-12-10 01:04:45.000000000 +0100
+++
new/xdg-desktop-portal-cosmic-1.0.8/i18n/zh-CN/xdg_desktop_portal_cosmic.ftl
2026-02-17 17:54:40.000000000 +0100
@@ -1,14 +1,14 @@
allow = 允许
cancel = 取消
capture = 捕获
-share = 分享
+share = 共享
save-to = 保存到
- .clipboard = { save-to }剪贴板
- .pictures = { save-to }图片
- .documents = { save-to }文档
+ .clipboard = { save-to } 剪切板
+ .pictures = { save-to } 图片
+ .documents = { save-to } 文档
choose-folder = 选择文件夹
-share-screen = 分享屏幕
- .description = 系统想要将你的屏幕内容分享给 "{ $app_name }" ,请选择一个屏幕或窗口来分享。
+share-screen = 共享屏幕
+ .description = 系统想要将您的屏幕内容共享给 "{ $app_name }" ,请选择一个屏幕或窗口来共享。
unknown-application = 未知应用程序
output = 输出
window = 窗口
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/xdg-desktop-portal-cosmic-1.0.0+0/src/access.rs
new/xdg-desktop-portal-cosmic-1.0.8/src/access.rs
--- old/xdg-desktop-portal-cosmic-1.0.0+0/src/access.rs 2025-12-10
01:04:45.000000000 +0100
+++ new/xdg-desktop-portal-cosmic-1.0.8/src/access.rs 2026-02-17
17:54:40.000000000 +0100
@@ -230,7 +230,7 @@
.icon(icon)
.secondary_action(cancel_button)
.primary_action(allow_button),
- |key| match key {
+ |key, _| match key {
Key::Named(Named::Enter) => Some(Msg::Allow),
Key::Named(Named::Escape) => Some(Msg::Cancel),
_ => None,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/xdg-desktop-portal-cosmic-1.0.0+0/src/app.rs
new/xdg-desktop-portal-cosmic-1.0.8/src/app.rs
--- old/xdg-desktop-portal-cosmic-1.0.0+0/src/app.rs 2025-12-10
01:04:45.000000000 +0100
+++ new/xdg-desktop-portal-cosmic-1.0.8/src/app.rs 2026-02-17
17:54:40.000000000 +0100
@@ -168,6 +168,10 @@
self.tx = Some(tx);
Task::none()
}
+ subscription::Event::NameLost => {
+ log::warn!("'{}' name on bus lost. Exiting.",
crate::DBUS_NAME);
+ cosmic::iced::exit()
+ }
},
Msg::Screenshot(m) => screenshot::update_msg(self,
m).map(cosmic::Action::App),
Msg::Screencast(m) => screencast_dialog::update_msg(self,
m).map(cosmic::Action::App),
@@ -293,11 +297,12 @@
let old = self.core.system_is_dark();
let new = new_theme.is_dark;
if new != old
- && let Some(tx) = self.tx.clone() {
- tokio::spawn(async move {
- _ = tx.send(subscription::Event::IsDark(new)).await;
- });
- }
+ && let Some(tx) = self.tx.clone()
+ {
+ tokio::spawn(async move {
+ _ = tx.send(subscription::Event::IsDark(new)).await;
+ });
+ }
Task::none()
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/xdg-desktop-portal-cosmic-1.0.0+0/src/screencast.rs
new/xdg-desktop-portal-cosmic-1.0.8/src/screencast.rs
--- old/xdg-desktop-portal-cosmic-1.0.0+0/src/screencast.rs 2025-12-10
01:04:45.000000000 +0100
+++ new/xdg-desktop-portal-cosmic-1.0.8/src/screencast.rs 2026-02-17
17:54:40.000000000 +0100
@@ -124,10 +124,20 @@
persist_mode: Option<u32>,
}
+#[derive(Clone, zvariant::SerializeDict, zvariant::Type)]
+#[zvariant(signature = "a{sv}")]
+pub struct StreamProps {
+ position: Option<(i32, i32)>,
+ size: (i32, i32),
+ source_type: u32,
+ // TODO: Add when remote desktop portal is implemented
+ mapping_id: Option<String>,
+}
+
#[derive(zvariant::SerializeDict, zvariant::Type)]
#[zvariant(signature = "a{sv}")]
struct StartResult {
- streams: Vec<(u32, HashMap<String, zvariant::OwnedValue>)>,
+ streams: Vec<(u32, StreamProps)>,
persist_mode: Option<u32>,
restore_data: Option<RestoreData>,
}
@@ -282,17 +292,49 @@
// Use `FuturesOrdered` so streams are in consistent order
let mut res_futures = FuturesOrdered::new();
for output in &capture_sources.outputs {
+ let info = self.wayland_helper.output_info(output);
+ let (position, size) = if let Some(info) = info {
+ (info.logical_position, info.logical_size.unwrap_or((0,
0)))
+ } else {
+ (Some((0, 0)), (0, 0))
+ };
res_futures.push_back(ScreencastThread::new(
self.wayland_helper.clone(),
CaptureSource::Output(output.clone()),
overlay_cursor,
+ StreamProps {
+ position,
+ size,
+ source_type: SOURCE_TYPE_MONITOR,
+ mapping_id: None,
+ },
));
}
+ let toplevel_infos = self.wayland_helper.toplevels();
for foreign_toplevel in &capture_sources.toplevels {
+ let info = toplevel_infos
+ .iter()
+ .find(|info| info.foreign_toplevel == *foreign_toplevel);
+ let size = if let Some(info) = info {
+ // Use size on output with greatest area
+ // XXX: No way to get size of whole toplevel?
+ info.geometry
+ .values()
+ .max_by_key(|info| info.width * info.height)
+ .map_or((0, 0), |info| (info.width, info.height))
+ } else {
+ (0, 0)
+ };
res_futures.push_back(ScreencastThread::new(
self.wayland_helper.clone(),
CaptureSource::Toplevel(foreign_toplevel.clone()),
overlay_cursor,
+ StreamProps {
+ position: None,
+ size: size,
+ source_type: SOURCE_TYPE_WINDOW,
+ mapping_id: None,
+ },
));
}
@@ -326,7 +368,7 @@
let streams = screencast_threads
.iter()
- .map(|thread| (thread.node_id(), HashMap::new()))
+ .map(|thread| (thread.node_id(), thread.stream_props()))
.collect();
interface.get_mut().await.screencast_threads = screencast_threads;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/xdg-desktop-portal-cosmic-1.0.0+0/src/screencast_dialog.rs
new/xdg-desktop-portal-cosmic-1.0.8/src/screencast_dialog.rs
--- old/xdg-desktop-portal-cosmic-1.0.0+0/src/screencast_dialog.rs
2025-12-10 01:04:45.000000000 +0100
+++ new/xdg-desktop-portal-cosmic-1.0.8/src/screencast_dialog.rs
2026-02-17 17:54:40.000000000 +0100
@@ -106,9 +106,10 @@
let mut entries = Vec::new();
for p in fde::Iter::new(fde::default_paths()) {
if let Ok(data) = tokio::fs::read_to_string(&p).await
- && let Ok(entry) = DesktopEntry::from_str(&p, &data,
Some(locales)) {
- entries.push(entry.to_owned());
- }
+ && let Ok(entry) = DesktopEntry::from_str(&p, &data, Some(locales))
+ {
+ entries.push(entry.to_owned());
+ }
}
entries
}
@@ -423,7 +424,8 @@
let label = &toplevel_info.title;
let is_selected = args
.capture_sources
- .toplevels.contains(&toplevel_info.foreign_toplevel);
+ .toplevels
+ .contains(&toplevel_info.foreign_toplevel);
list = list.add(toplevel_button(
label,
is_selected,
@@ -455,7 +457,7 @@
.secondary_action(cancel_button)
.primary_action(share_button)
.control(control),
- |key| match key {
+ |key, _| match key {
Key::Named(Named::Enter) => Some(Msg::Share),
Key::Named(Named::Escape) => Some(Msg::Cancel),
_ => None,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/xdg-desktop-portal-cosmic-1.0.0+0/src/screencast_thread.rs
new/xdg-desktop-portal-cosmic-1.0.8/src/screencast_thread.rs
--- old/xdg-desktop-portal-cosmic-1.0.0+0/src/screencast_thread.rs
2025-12-10 01:04:45.000000000 +0100
+++ new/xdg-desktop-portal-cosmic-1.0.8/src/screencast_thread.rs
2026-02-17 17:54:40.000000000 +0100
@@ -24,6 +24,7 @@
use crate::{
buffer,
+ screencast::StreamProps,
wayland::{CaptureSource, DmabufHelper, Session, WaylandHelper},
};
@@ -57,6 +58,7 @@
}
pub struct ScreencastThread {
+ stream_props: StreamProps,
node_id: u32,
thread_stop_tx: pipewire::channel::Sender<()>,
}
@@ -66,6 +68,7 @@
wayland_helper: WaylandHelper,
capture_source: CaptureSource,
overlay_cursor: bool,
+ stream_props: StreamProps,
) -> anyhow::Result<Self> {
let (tx, rx) = oneshot::channel();
let (thread_stop_tx, thread_stop_rx) =
pipewire::channel::channel::<()>();
@@ -83,12 +86,17 @@
}
});
Ok(Self {
+ stream_props,
// XXX can second unwrap fail?
node_id: rx.await.unwrap()?.await.unwrap()?,
thread_stop_tx,
})
}
+ pub fn stream_props(&self) -> StreamProps {
+ self.stream_props.clone()
+ }
+
pub fn node_id(&self) -> u32 {
self.node_id
}
@@ -387,7 +395,7 @@
);
data.type_ = spa_sys::SPA_DATA_MemFd;
- data.flags = 0;
+ data.flags = spa_sys::SPA_DATA_FLAG_READABLE |
spa_sys::SPA_DATA_FLAG_MAPPABLE;
data.fd = fd.into_raw_fd() as _;
data.data = std::ptr::null_mut();
data.maxsize = self.width() * self.height() * 4;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/xdg-desktop-portal-cosmic-1.0.0+0/src/screenshot.rs
new/xdg-desktop-portal-cosmic-1.0.8/src/screenshot.rs
--- old/xdg-desktop-portal-cosmic-1.0.0+0/src/screenshot.rs 2025-12-10
01:04:45.000000000 +0100
+++ new/xdg-desktop-portal-cosmic-1.0.8/src/screenshot.rs 2026-02-17
17:54:40.000000000 +0100
@@ -17,7 +17,11 @@
use rustix::fd::AsFd;
use std::borrow::Cow;
use std::num::NonZeroU32;
-use std::{collections::HashMap, io, path::PathBuf};
+use std::{
+ collections::HashMap,
+ io,
+ path::{Path, PathBuf},
+};
use tokio::sync::mpsc::Sender;
use wayland_client::protocol::wl_output::WlOutput;
@@ -215,13 +219,17 @@
Ok(map)
}
- pub fn save_rgba(img: &RgbaImage, path: &PathBuf) -> anyhow::Result<()> {
- let mut file = std::fs::File::create(path)?;
- Ok(write_png(&mut file, img)?)
- }
+ pub fn save_rgba(img: &RgbaImage, path: Option<&Path>) ->
anyhow::Result<Vec<u8>> {
+ // Write to the buffer first since the image data will always be
copied to the clipboard.
+ // This skips encoding the PNG twice.
+ let mut buffer = Vec::new();
+ write_png(&mut buffer, img)?;
+
+ if let Some(path) = path {
+ std::fs::write(path, &buffer)?;
+ }
- pub fn save_rgba_to_buffer(img: &RgbaImage, buffer: &mut Vec<u8>) ->
anyhow::Result<()> {
- Ok(write_png(buffer, img)?)
+ Ok(buffer)
}
pub fn get_img_path(location: ImageSaveLocation) -> Option<PathBuf> {
@@ -353,6 +361,7 @@
#[derive(Debug, Clone)]
pub enum Msg {
Capture,
+ CaptureWithLocation(ImageSaveLocation),
Cancel,
Choice(Choice),
OutputChanged(WlOutput),
@@ -481,7 +490,17 @@
}
config::screenshot::Choice::Output(_) =>
Choice::Output(first_output.into()),
config::screenshot::Choice::Rectangle => {
- Choice::Rectangle(Rect::default(), DragState::default())
+ // Use saved rectangle from config if available
+ let rect = config
+ .last_rectangle
+ .map(|r| Rect {
+ left: r.left,
+ top: r.top,
+ right: r.right,
+ bottom: r.bottom,
+ })
+ .unwrap_or_default();
+ Choice::Rectangle(rect, DragState::default())
}
config::screenshot::Choice::Window =>
Choice::Window(first_output.into(), None),
};
@@ -579,10 +598,32 @@
theme.spacing,
i as u128,
),
- |key| match key {
- Key::Named(Named::Enter) => Some(Msg::Capture),
- Key::Named(Named::Escape) => Some(Msg::Cancel),
- _ => None,
+ |key, modifiers| {
+ if modifiers.control() {
+ match key {
+ Key::Named(Named::Copy) => {
+ return
Some(Msg::CaptureWithLocation(ImageSaveLocation::Clipboard));
+ }
+ Key::Named(Named::Save) => {
+ return
Some(Msg::CaptureWithLocation(ImageSaveLocation::Pictures));
+ }
+ Key::Character(ref value) => {
+ let value = value.as_str();
+ if value.eq_ignore_ascii_case("c") {
+ return
Some(Msg::CaptureWithLocation(ImageSaveLocation::Clipboard));
+ } else if value.eq_ignore_ascii_case("s") {
+ return
Some(Msg::CaptureWithLocation(ImageSaveLocation::Pictures));
+ }
+ }
+ _ => {}
+ }
+ }
+
+ match key {
+ Key::Named(Named::Enter) => Some(Msg::Capture),
+ Key::Named(Named::Escape) => Some(Msg::Cancel),
+ _ => None,
+ }
},
)
.into()
@@ -615,19 +656,13 @@
match choice {
Choice::Output(name) => {
if let Some(img) = images.remove(&name) {
- if let Some(ref image_path) = image_path {
- if let Err(err) = Screenshot::save_rgba(&img.rgba,
image_path) {
+ if let Ok(buffer) = Screenshot::save_rgba(&img.rgba,
image_path.as_deref())
+ .inspect_err(|err| {
log::error!("Failed to capture screenshot:
{:?}", err);
- };
- } else {
- let mut buffer = Vec::new();
- if let Err(e) =
Screenshot::save_rgba_to_buffer(&img.rgba, &mut buffer)
- {
- log::error!("Failed to save screenshot to
buffer: {:?}", e);
success = false;
- } else {
-
cmds.push(clipboard::write_data(ScreenshotBytes::new(buffer)))
- };
+ })
+ {
+
cmds.push(clipboard::write_data(ScreenshotBytes::new(buffer)));
}
} else {
log::error!("Failed to find output {}", name);
@@ -659,18 +694,13 @@
.collect::<Vec<_>>();
let img = combined_image(r, frames);
- if let Some(ref image_path) = image_path {
- if let Err(err) = Screenshot::save_rgba(&img,
image_path) {
- success = false;
- }
- } else {
- let mut buffer = Vec::new();
- if let Err(e) =
Screenshot::save_rgba_to_buffer(&img, &mut buffer) {
- log::error!("Failed to save screenshot to
buffer: {:?}", e);
+ if let Ok(buffer) = Screenshot::save_rgba(&img,
image_path.as_deref())
+ .inspect_err(|err| {
+ log::error!("Failed to capture screenshot:
{:?}", err);
success = false;
- } else {
-
cmds.push(clipboard::write_data(ScreenshotBytes::new(buffer)))
- };
+ })
+ {
+
cmds.push(clipboard::write_data(ScreenshotBytes::new(buffer)));
}
} else {
success = false;
@@ -682,20 +712,13 @@
.get(&output)
.and_then(|imgs| imgs.get(window_i))
{
- if let Some(ref image_path) = image_path {
- if let Err(err) = Screenshot::save_rgba(&img.rgba,
image_path) {
+ if let Ok(buffer) = Screenshot::save_rgba(&img.rgba,
image_path.as_deref())
+ .inspect_err(|err| {
log::error!("Failed to capture screenshot:
{:?}", err);
success = false;
- }
- } else {
- let mut buffer = Vec::new();
- if let Err(e) =
Screenshot::save_rgba_to_buffer(&img.rgba, &mut buffer)
- {
- log::error!("Failed to save screenshot to
buffer: {:?}", e);
- success = false;
- } else {
-
cmds.push(clipboard::write_data(ScreenshotBytes::new(buffer)))
- };
+ })
+ {
+
cmds.push(clipboard::write_data(ScreenshotBytes::new(buffer)));
}
} else {
success = false;
@@ -725,6 +748,15 @@
});
cosmic::Task::batch(cmds)
}
+ Msg::CaptureWithLocation(location) => {
+ if let Some(args) = portal.screenshot_args.as_mut() {
+ args.location = location;
+ } else {
+ log::error!("Failed to find screenshot Args for
CaptureWithLocation message.");
+ return cosmic::Task::none();
+ }
+ update_msg(portal, Msg::Capture)
+ }
Msg::Cancel => {
let cmds = portal.outputs.iter().map(|o|
destroy_layer_surface(o.id));
let Some(args) = portal.screenshot_args.take() else {
@@ -742,20 +774,36 @@
}
Msg::Choice(c) => {
let choice = (&c).into();
+ // Only save config when drag is finished to avoid disk writes on
every mouse motion
+ let should_save_config = !matches!(&c, Choice::Rectangle(_, s) if
*s != DragState::None);
+ let last_rect = if let Choice::Rectangle(r, _) = &c {
+ portal.prev_rectangle = Some(*r);
+ Some(config::screenshot::Rect {
+ left: r.left,
+ top: r.top,
+ right: r.right,
+ bottom: r.bottom,
+ })
+ } else {
+ portal.config.screenshot.last_rectangle
+ };
+
if let Some(args) = portal.screenshot_args.as_mut() {
args.choice = c;
- if let Choice::Rectangle(r, s) = &args.choice {
- portal.prev_rectangle = Some(*r);
- }
} else {
log::error!("Failed to find screenshot Args for Choice
message.");
}
- cosmic::task::message(crate::app::Msg::ConfigSetScreenshot(
- config::screenshot::Screenshot {
- choice,
- ..portal.config.screenshot
- },
- ))
+ if should_save_config {
+ cosmic::task::message(crate::app::Msg::ConfigSetScreenshot(
+ config::screenshot::Screenshot {
+ choice,
+ last_rectangle: last_rect,
+ ..portal.config.screenshot
+ },
+ ))
+ } else {
+ cosmic::Task::none()
+ }
}
Msg::OutputChanged(wl_output) => {
if let (Some(args), Some(o)) = (
@@ -803,6 +851,7 @@
config::screenshot::Screenshot {
save_location: loc,
choice: (&mut portal.config.screenshot.choice).into(),
+ last_rectangle:
portal.config.screenshot.last_rectangle,
},
))
} else {
@@ -854,7 +903,7 @@
let source = bg_state.wallpapers.iter().find(|s| s.0 == o.name);
o.bg_source = Some(source.cloned().map(|s| s.1).unwrap_or_else(|| {
cosmic_bg_config::Source::Path(
-
"/usr/share/backgrounds/pop/kate-hazen-COSMIC-desktop-wallpaper.png".into(),
+
"/usr/share/backgrounds/cosmic/orion_nebula_nasa_heic0601a.jpg".into(),
)
}));
}
@@ -862,7 +911,7 @@
log::error!("Failed to get bg config state");
for o in &mut portal.outputs {
o.bg_source = Some(cosmic_bg_config::Source::Path(
-
"/usr/share/backgrounds/pop/kate-hazen-COSMIC-desktop-wallpaper.png".into(),
+
"/usr/share/backgrounds/cosmic/orion_nebula_nasa_heic0601a.jpg".into(),
));
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/xdg-desktop-portal-cosmic-1.0.0+0/src/subscription.rs
new/xdg-desktop-portal-cosmic-1.0.8/src/subscription.rs
--- old/xdg-desktop-portal-cosmic-1.0.0+0/src/subscription.rs 2025-12-10
01:04:45.000000000 +0100
+++ new/xdg-desktop-portal-cosmic-1.0.8/src/subscription.rs 2026-02-17
17:54:40.000000000 +0100
@@ -3,9 +3,9 @@
use std::any::TypeId;
use cosmic::{cosmic_theme::palette::Srgba, iced::Subscription};
-use futures::{SinkExt, future};
+use futures::{SinkExt, StreamExt, future};
use tokio::sync::mpsc::Receiver;
-use zbus::{Connection, zvariant};
+use zbus::{Connection, fdo, zvariant};
use crate::{
ACCENT_COLOR_KEY, APPEARANCE_NAMESPACE, COLOR_SCHEME_KEY, CONTRAST_KEY,
ColorScheme, Contrast,
@@ -25,6 +25,7 @@
HighContrast(bool),
Config(config::Config),
Init(tokio::sync::mpsc::Sender<Event>),
+ NameLost,
}
pub enum State {
@@ -75,7 +76,6 @@
let (tx, rx) = tokio::sync::mpsc::channel(10);
let connection = zbus::connection::Builder::session()?
- .name(DBUS_NAME)?
.serve_at(DBUS_PATH, Access::new(wayland_helper.clone(),
tx.clone()))?
.serve_at(DBUS_PATH, FileChooser::new(tx.clone()))?
.serve_at(
@@ -89,6 +89,16 @@
.serve_at(DBUS_PATH, Settings::new())?
.build()
.await?;
+
+ // Create name lost stream before requesting name
+ let dbus = fdo::DBusProxy::new(&connection).await?;
+ tokio::spawn(name_lost_task(
+ dbus.receive_name_lost().await?,
+ output.clone(),
+ ));
+
+ connection.request_name(DBUS_NAME).await?;
+
_ = output.send(Event::Init(tx)).await;
*state = State::Waiting(connection, rx);
}
@@ -181,9 +191,24 @@
}
}
Event::Init(_) => {}
+ Event::NameLost => {}
}
}
}
};
Ok(())
}
+
+async fn name_lost_task(
+ mut name_lost_stream: fdo::NameLostStream,
+ mut output: futures::channel::mpsc::Sender<Event>,
+) {
+ while let Some(name_lost) = name_lost_stream.next().await {
+ let Ok(args) = name_lost.args() else {
+ return;
+ };
+ if args.name == DBUS_NAME {
+ let _ = output.send(Event::NameLost).await;
+ }
+ }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/xdg-desktop-portal-cosmic-1.0.0+0/src/wayland/mod.rs
new/xdg-desktop-portal-cosmic-1.0.8/src/wayland/mod.rs
--- old/xdg-desktop-portal-cosmic-1.0.0+0/src/wayland/mod.rs 2025-12-10
01:04:45.000000000 +0100
+++ new/xdg-desktop-portal-cosmic-1.0.8/src/wayland/mod.rs 2026-02-17
17:54:40.000000000 +0100
@@ -91,7 +91,7 @@
capturer: Capturer,
wl_shm: wl_shm::WlShm,
dmabuf: Mutex<Option<DmabufHelper>>,
- zwp_dmabuf: ZwpLinuxDmabufV1,
+ zwp_dmabuf: Option<ZwpLinuxDmabufV1>,
}
// TODO seperate state object from what is passed to threads
@@ -237,7 +237,7 @@
let registry_state = RegistryState::new(&globals);
let screencopy_state = ScreencopyState::new(&globals, &qh);
let shm_state = Shm::bind(&globals, &qh).unwrap();
- let zwp_dmabuf = globals.bind(&qh, 4..=4,
sctk::globals::GlobalData).unwrap();
+ let zwp_dmabuf = globals.bind(&qh, 4..=4,
sctk::globals::GlobalData).ok();
let wayland_helper = WaylandHelper {
inner: Arc::new(WaylandHelperInner {
conn,
@@ -458,10 +458,10 @@
) -> wl_buffer::WlBuffer {
// TODO ensure dmabuf is valid format with right number of planes?
// - params.add can raise protocol error
- let params = self
- .inner
- .zwp_dmabuf
- .create_params(&self.inner.qh, sctk::globals::GlobalData);
+ let zwp_dmabuf = self.inner.zwp_dmabuf.as_ref().unwrap_or_else(|| {
+ panic!("zwp_linux_dmabuf_v1 not available on this compositor");
+ });
+ let params = zwp_dmabuf.create_params(&self.inner.qh,
sctk::globals::GlobalData);
let modifier = u64::from(dmabuf.modifier);
let modifier_hi = (modifier >> 32) as u32;
let modifier_lo = (modifier & 0xffffffff) as u32;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/xdg-desktop-portal-cosmic-1.0.0+0/src/widget/keyboard_wrapper.rs
new/xdg-desktop-portal-cosmic-1.0.8/src/widget/keyboard_wrapper.rs
--- old/xdg-desktop-portal-cosmic-1.0.0+0/src/widget/keyboard_wrapper.rs
2025-12-10 01:04:45.000000000 +0100
+++ new/xdg-desktop-portal-cosmic-1.0.8/src/widget/keyboard_wrapper.rs
2026-02-17 17:54:40.000000000 +0100
@@ -8,14 +8,14 @@
#[allow(missing_debug_implementations)]
pub struct KeyboardWrapper<'a, Message> {
content: Element<'a, Message, cosmic::Theme, cosmic::Renderer>,
- handler: fn(keyboard::Key) -> Option<Message>,
+ handler: fn(keyboard::Key, keyboard::Modifiers) -> Option<Message>,
}
impl<'a, Message> KeyboardWrapper<'a, Message> {
/// Creates a [`KeyboardWrapper`] with the given content.
pub fn new(
content: impl Into<Element<'a, Message, cosmic::Theme,
cosmic::Renderer>>,
- handler: fn(keyboard::Key) -> Option<Message>,
+ handler: fn(keyboard::Key, keyboard::Modifiers) -> Option<Message>,
) -> Self {
KeyboardWrapper {
content: content.into(),
@@ -88,8 +88,8 @@
}
match event {
- Event::Keyboard(keyboard::Event::KeyPressed { key, .. }) => {
- if let Some(message) = (self.handler)(key) {
+ Event::Keyboard(keyboard::Event::KeyPressed { key, modifiers, ..
}) => {
+ if let Some(message) = (self.handler)(key, modifiers) {
shell.publish(message.clone());
event::Status::Captured
} else {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/xdg-desktop-portal-cosmic-1.0.0+0/src/widget/screenshot.rs
new/xdg-desktop-portal-cosmic-1.0.8/src/widget/screenshot.rs
--- old/xdg-desktop-portal-cosmic-1.0.0+0/src/widget/screenshot.rs
2025-12-10 01:04:45.000000000 +0100
+++ new/xdg-desktop-portal-cosmic-1.0.8/src/widget/screenshot.rs
2026-02-17 17:54:40.000000000 +0100
@@ -194,7 +194,7 @@
.into()
}
None => image::Image::new(image::Handle::from_path(
-
"/usr/share/backgrounds/pop/kate-hazen-COSMIC-desktop-wallpaper.png",
+
"/usr/share/backgrounds/cosmic/orion_nebula_nasa_heic0601a.jpg",
))
.content_fit(ContentFit::Cover)
.width(Length::Fill)
++++++ xdg-desktop-portal-cosmic.obsinfo ++++++
--- /var/tmp/diff_new_pack.hnsp0i/_old 2026-03-10 17:49:16.045527186 +0100
+++ /var/tmp/diff_new_pack.hnsp0i/_new 2026-03-10 17:49:16.057527681 +0100
@@ -1,5 +1,5 @@
name: xdg-desktop-portal-cosmic
-version: 1.0.0+0
-mtime: 1765325085
-commit: 28fe74badef0e4931dae7220319836bc51c34d37
+version: 1.0.8
+mtime: 1771347280
+commit: 1fe63055bca84d09f3d4ce70b50069554875e4d2