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
 

Reply via email to