Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package gnome-remote-desktop for 
openSUSE:Factory checked in at 2021-11-05 22:58:41
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gnome-remote-desktop (Old)
 and      /work/SRC/openSUSE:Factory/.gnome-remote-desktop.new.1890 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "gnome-remote-desktop"

Fri Nov  5 22:58:41 2021 rev:6 rq:929586 version:41.1

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/gnome-remote-desktop/gnome-remote-desktop.changes    
    2021-09-29 20:20:00.199083209 +0200
+++ 
/work/SRC/openSUSE:Factory/.gnome-remote-desktop.new.1890/gnome-remote-desktop.changes
      2021-11-05 22:58:59.784295619 +0100
@@ -1,0 +2,18 @@
+Sat Oct 30 14:40:59 UTC 2021 - bjorn....@gmail.com
+
+- Update to version 41.1:
+  + vnc-pipewire-stream: Take frame data from pending frame, when
+    needed
+  + rdp-pipewire-stream: Take frame data from pending frame, when
+    needed
+  + rdp/rdpgfx: Unref surface serial after looking up surface
+    context
+  + rdp-graphics-pipeline: Fix small style issue
+  + rdp-fuse-clipboard:
+    - Fix potential race when accessing FuseFile path
+    - Fix small style issue
+  + clipboard-rdp: Always check return value of ConvertFromUnicode
+  + session-rdp: Only signal GCond, when all encode jobs are
+    complete
+
+-------------------------------------------------------------------

Old:
----
  gnome-remote-desktop-41.0.obscpio

New:
----
  _servicedata
  gnome-remote-desktop-41.1.obscpio

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

Other differences:
------------------
++++++ gnome-remote-desktop.spec ++++++
--- /var/tmp/diff_new_pack.if4jY2/_old  2021-11-05 22:59:00.400295998 +0100
+++ /var/tmp/diff_new_pack.if4jY2/_new  2021-11-05 22:59:00.404296000 +0100
@@ -21,7 +21,7 @@
 %define freerdp_version 2.2.0
 
 Name:           gnome-remote-desktop
-Version:        41.0
+Version:        41.1
 Release:        0
 Summary:        GNOME Remote Desktop screen sharing service
 License:        GPL-2.0-or-later

++++++ _service ++++++
--- /var/tmp/diff_new_pack.if4jY2/_old  2021-11-05 22:59:00.428296015 +0100
+++ /var/tmp/diff_new_pack.if4jY2/_new  2021-11-05 22:59:00.432296018 +0100
@@ -2,7 +2,7 @@
   <service name="obs_scm" mode="disabled">
     <param 
name="url">https://gitlab.gnome.org/GNOME/gnome-remote-desktop.git</param>
     <param name="scm">git</param>
-    <param name="revision">refs/tags/41.0</param>
+    <param name="revision">refs/tags/41.1</param>
     <param name="versionformat">@PARENT_TAG@</param>
     <param name="changesgenerate">enable</param>
   </service>

++++++ _servicedata ++++++
<servicedata>
<service name="tar_scm">
                <param 
name="url">https://gitlab.gnome.org/GNOME/gnome-remote-desktop.git</param>
              <param 
name="changesrevision">f895c2b28b3341af54cb2ce24ce76af8f3e1513d</param></service></servicedata>++++++
 gnome-remote-desktop-41.0.obscpio -> gnome-remote-desktop-41.1.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-remote-desktop-41.0/meson.build 
new/gnome-remote-desktop-41.1/meson.build
--- old/gnome-remote-desktop-41.0/meson.build   2021-09-19 16:03:51.000000000 
+0200
+++ new/gnome-remote-desktop-41.1/meson.build   2021-10-30 16:37:19.000000000 
+0200
@@ -1,5 +1,5 @@
 project('gnome-remote-desktop', 'c',
-        version: '41.0',
+        version: '41.1',
         meson_version: '>= 0.47.0',
         default_options: ['warning_level=1',
                           'buildtype=debugoptimized'])
@@ -19,7 +19,7 @@
 gio_dep = dependency('gio-2.0')
 gio_unix_dep = dependency('gio-unix-2.0')
 pipewire_dep = dependency('libpipewire-0.3', version: '>= 0.3.0')
-systemd_dep = dependency('systemd')
+systemd_dep = dependency('systemd', required: get_option('systemd'))
 libsecret_dep = dependency('libsecret-1')
 libnotify_dep = dependency('libnotify')
 
@@ -80,12 +80,14 @@
 configinc = include_directories('.')
 
 servicedir = get_option('systemd_user_unit_dir')
-if servicedir == ''
-  servicedir = systemd_dep.get_pkgconfig_variable('systemduserunitdir')
-endif
+if systemd_dep.found()
+  if servicedir == ''
+    servicedir = systemd_dep.get_pkgconfig_variable('systemduserunitdir')
+  endif
 
-if servicedir == ''
-  error('Couldn\'t determine systemd user unit service directory')
+  if servicedir == ''
+    error('Couldn\'t determine systemd user unit service directory')
+  endif
 endif
 
 top_srcdir = meson.current_source_dir()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-remote-desktop-41.0/meson_options.txt 
new/gnome-remote-desktop-41.1/meson_options.txt
--- old/gnome-remote-desktop-41.0/meson_options.txt     2021-09-19 
16:03:51.000000000 +0200
+++ new/gnome-remote-desktop-41.1/meson_options.txt     2021-10-30 
16:37:19.000000000 +0200
@@ -13,6 +13,11 @@
        value: true,
        description: 'Build with support for hardware acceleration using NVENC 
and CUDA')
 
+option('systemd',
+       type: 'boolean',
+       value: true,
+       description: 'Enable systemd support')
+
 option('systemd_user_unit_dir',
        type: 'string',
        value: '',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-remote-desktop-41.0/po/LINGUAS 
new/gnome-remote-desktop-41.1/po/LINGUAS
--- old/gnome-remote-desktop-41.0/po/LINGUAS    2021-09-19 16:03:51.000000000 
+0200
+++ new/gnome-remote-desktop-41.1/po/LINGUAS    2021-10-30 16:37:19.000000000 
+0200
@@ -1,5 +1,6 @@
 # please keep this list sorted alphabetically
 #
+bg
 ca
 cs
 de
@@ -28,6 +29,7 @@
 ru
 sk
 sl
+sr
 sv
 tr
 uk
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-remote-desktop-41.0/po/bg.po 
new/gnome-remote-desktop-41.1/po/bg.po
--- old/gnome-remote-desktop-41.0/po/bg.po      1970-01-01 01:00:00.000000000 
+0100
+++ new/gnome-remote-desktop-41.1/po/bg.po      2021-10-30 16:37:19.000000000 
+0200
@@ -0,0 +1,102 @@
+# Bulgarian translation of gnome-remote-desktop po-file.
+# Copyright (C) 2021 Alexander Shopov.
+# This file is distributed under the same license as the gnome-remote-desktop 
package.
+# Alexander Shopov <a...@kambanaria.org>, 2012, 2015, 2016, 2017.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-remote-desktop master\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-remote-desktop/";
+"issues\n"
+"POT-Creation-Date: 2021-10-03 17:07+0000\n"
+"PO-Revision-Date: 2021-10-04 09:59+0200\n"
+"Last-Translator: Alexander Shopov <a...@kambanaria.org>\n"
+"Language-Team: Bulgarian <d...@fsa-bg.org>\n"
+"Language: bg\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: src/grd-daemon.c:365
+msgid "GNOME Remote Desktop"
+msgstr "???????????????????? ?????????????? ?????????? ???? GNOME"
+
+#: src/grd-prompt.c:124
+#, c-format
+msgid "Do you want to share your desktop?"
+msgstr "???????????? ???? ???? ?????????????????? ?????????????????? 
???????????"
+
+#: src/grd-prompt.c:125
+#, c-format
+msgid ""
+"A user on the computer '%s' is trying to remotely view or control your "
+"desktop."
+msgstr ""
+"???????????????????? ???? ?????????????????? ???%s??? ???? ???????????? ???? 
?????????????????? ???????????????????? ?????????????????? ???? "
+"??????????."
+
+#: src/grd-prompt.c:131
+msgid "Refuse"
+msgstr "??????????????????"
+
+#: src/grd-prompt.c:136
+msgid "Accept"
+msgstr "????????????????"
+
+#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:7
+msgid "Path to the certificate file"
+msgstr "?????? ?????? ?????????? ?????? ????????????????????"
+
+#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:8
+#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:16
+msgid ""
+"In order to be able to use RDP with TLS Security, both the private key file "
+"and the certificate file need to be provided to the RDP server."
+msgstr ""
+"???? ???? ???????????????? RDP ?????? ???????????? TLS, ???????????? ???? 
???????????????????????? ???? ?????????????? ???? RDP "
+"?????????? ?????????????? ????????, ???????? ?? ??????????????????????."
+
+#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:15
+msgid "Path to the private key file"
+msgstr "?????? ?????? ?????????? ?? ?????????????? ????????"
+
+#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:23
+#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:33
+msgid "Only allow remote connections to view the screen content"
+msgstr ""
+"?????????????????????? ???????? ???? ???????????????????????? ???????????? 
???? ???????????? ???????????????????????? ???? ????????????"
+
+#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:24
+msgid ""
+"When view-only is true, remote RDP connections cannot manipulate input "
+"devices (e.g. mouse and keyboard)."
+msgstr ""
+"???????????? ?? ????????????????, ???????????????????????? ???????????? ???? 
RDP ???? ???????????????????? ???????????????? "
+"???????????????????? (???????? ?????????? ?? ????????????????????)."
+
+#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:34
+msgid ""
+"When view-only is true, remote VNC connections cannot manipulate input "
+"devices (e.g. mouse and keyboard)."
+msgstr ""
+"???????????? ?? ????????????????, ???????????????????????? ???????????? ???? 
VNC ???? ???????????????????? ???????????????? "
+"???????????????????? (???????? ?????????? ?? ????????????????????)."
+
+#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:41
+msgid "Method used to authenticate VNC connections"
+msgstr "?????????? ???? ?????????????????????????? ???? ???????????????? ???? 
VNC"
+
+#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:42
+msgid ""
+"The VNC authentication method describes how a remote connection is "
+"authenticated. It can currently be done in two different ways: * prompt - by "
+"prompting the user for each new connection, requiring a person with physical "
+"access to the workstation to explicitly approve the new connection. * "
+"password - by requiring the remote client to provide a known password"
+msgstr ""
+"?????????????? ???? ?????????????????????????? ???? VNC ???????????? ?????? 
???? ???? ???? ?????????????? ?????? ???????????????????????? "
+"???? ????????????. ?? ?????????????? ?????? ?????? ????????????: ??? 
???????????? ??? ???????????????????????? ???????? ?????????????? "
+"?????????? ?????? ?????????? ???????? ????????????, ?????????? 
?????????????????? ?????????? ?? ?????????????????? ???????????? ???? "
+"???????????????? ???? ???????????? ????????????????; ??? ???????????? ??? 
???????????????????????? ???????????????????? ???????????? ???? ???? "
+"???????????????????????? ???????? ?????????????????????????? 
?????????????????? ????????????"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-remote-desktop-41.0/po/ca.po 
new/gnome-remote-desktop-41.1/po/ca.po
--- old/gnome-remote-desktop-41.0/po/ca.po      2021-09-19 16:03:51.000000000 
+0200
+++ new/gnome-remote-desktop-41.1/po/ca.po      2021-10-30 16:37:19.000000000 
+0200
@@ -62,7 +62,7 @@
 #: src/org.gnome.desktop.remote-desktop.gschema.xml.in:33
 msgid "Only allow remote connections to view the screen content"
 msgstr ""
-"Permet nom??s a les connexions remotes per veure el contingut de la pantalla"
+"Permet nom??s a les connexions remotes per a veure el contingut de la 
pantalla"
 
 #: src/org.gnome.desktop.remote-desktop.gschema.xml.in:24
 msgid ""
@@ -92,7 +92,7 @@
 "access to the workstation to explicitly approve the new connection. * "
 "password - by requiring the remote client to provide a known password"
 msgstr ""
-"El m??tode d'autenticaci?? VNC descriu com s'ha autentica una connexi?? 
remota. "
+"El m??tode d'autenticaci?? VNC descriu com s'autentica una connexi?? remota. "
 "Actualment, es pot fer de dues maneres diferents: * ??prompt?? - demanant a "
 "l'usuari per a cada nova connexi??, requerint a una persona amb acc??s f??sic 
a "
 "l'estaci?? de treball que aprovi expl??citament la nova connexi??. * 
??password?? "
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-remote-desktop-41.0/po/he.po 
new/gnome-remote-desktop-41.1/po/he.po
--- old/gnome-remote-desktop-41.0/po/he.po      2021-09-19 16:03:51.000000000 
+0200
+++ new/gnome-remote-desktop-41.1/po/he.po      2021-10-30 16:37:19.000000000 
+0200
@@ -8,8 +8,9 @@
 "Project-Id-Version: gnome-remote-desktop master\n"
 "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-remote-desktop/";
 "issues\n"
-"POT-Creation-Date: 2021-06-18 11:30+0000\n"
-"PO-Revision-Date: 2021-06-21 20:33+0300\n"
+"POT-Creation-Date: 2021-06-24 07:32+0000\n"
+"PO-Revision-Date: 2021-09-28 23:34+0300\n"
+"Last-Translator: Yaron Shahrabani <sh.ya...@gmail.com>\n"
 "Language-Team: Hebrew <h...@li.org>\n"
 "Language: he\n"
 "MIME-Version: 1.0\n"
@@ -17,7 +18,6 @@
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : n==2 ? 1 : n>10 && n%10==0 ? "
 "2 : 3);\n"
-"Last-Translator: Yaron Shahrabani <sh.ya...@gmail.com>\n"
 "X-Generator: Poedit 3.0\n"
 
 #: src/grd-daemon.c:351
@@ -51,7 +51,7 @@
 #: src/org.gnome.desktop.remote-desktop.gschema.xml.in:8
 #: src/org.gnome.desktop.remote-desktop.gschema.xml.in:16
 msgid ""
-"In Order to be able to use RDP with TLS Security, both the private key file "
+"In order to be able to use RDP with TLS Security, both the private key file "
 "and the certificate file need to be provided to the RDP server."
 msgstr ""
 "?????? ?????????? ?????????? ????RDP ???? ?????????? TLS, ???? ???????? 
???????? ????RDP ???? ???? ???????? ?????????? "
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-remote-desktop-41.0/po/oc.po 
new/gnome-remote-desktop-41.1/po/oc.po
--- old/gnome-remote-desktop-41.0/po/oc.po      2021-09-19 16:03:51.000000000 
+0200
+++ new/gnome-remote-desktop-41.1/po/oc.po      2021-10-30 16:37:19.000000000 
+0200
@@ -8,14 +8,14 @@
 "Project-Id-Version: gnome-remote-desktop master\n"
 "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-remote-desktop/";
 "issues\n"
-"POT-Creation-Date: 2021-07-16 05:29+0000\n"
-"PO-Revision-Date: 2021-07-22 19:48+0200\n"
+"POT-Creation-Date: 2021-07-22 17:48+0000\n"
+"PO-Revision-Date: 2021-10-03 19:06+0200\n"
+"Last-Translator: Quentin PAG??S\n"
 "Language-Team: Occitan <tote...@gmail.com>\n"
 "Language: oc\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Last-Translator: Quentin PAG??S\n"
 "X-Generator: Poedit 3.0\n"
 
 #: src/grd-daemon.c:351
@@ -54,6 +54,8 @@
 "In order to be able to use RDP with TLS Security, both the private key file "
 "and the certificate file need to be provided to the RDP server."
 msgstr ""
+"Per poder utilizar RDP amb la seguretat TLS, tan lo fichi??r de la clau "
+"privada que lo fichi??r de certificat devon ??sser fornits al servidor RDP."
 
 #: src/org.gnome.desktop.remote-desktop.gschema.xml.in:15
 msgid "Path to the private key file"
@@ -63,18 +65,23 @@
 #: src/org.gnome.desktop.remote-desktop.gschema.xml.in:33
 msgid "Only allow remote connections to view the screen content"
 msgstr ""
+"Sonque autorizar las connexions distantas per veire lo contengut de l???ecran"
 
 #: src/org.gnome.desktop.remote-desktop.gschema.xml.in:24
 msgid ""
 "When view-only is true, remote RDP connections cannot manipulate input "
 "devices (e.g. mouse and keyboard)."
 msgstr ""
+"Se view-only es definit a ??true??, las connexion distantas RDP p??don pas "
+"manipular las entradas dels aparelhs (ex la mirga e lo clavi??r)."
 
 #: src/org.gnome.desktop.remote-desktop.gschema.xml.in:34
 msgid ""
 "When view-only is true, remote VNC connections cannot manipulate input "
 "devices (e.g. mouse and keyboard)."
 msgstr ""
+"Se view-only es definit a ??true??, las connexion distantas VNC p??don pas "
+"manipular las entradas dels aparelhs (ex la mirga e lo clavi??r)."
 
 #: src/org.gnome.desktop.remote-desktop.gschema.xml.in:41
 msgid "Method used to authenticate VNC connections"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-remote-desktop-41.0/po/sr.po 
new/gnome-remote-desktop-41.1/po/sr.po
--- old/gnome-remote-desktop-41.0/po/sr.po      1970-01-01 01:00:00.000000000 
+0100
+++ new/gnome-remote-desktop-41.1/po/sr.po      2021-10-30 16:37:19.000000000 
+0200
@@ -0,0 +1,103 @@
+# Serbian translation for gnome-remote-desktop.
+# Copyright (C) 2021 gnome-remote-desktop's COPYRIGHT HOLDER
+# This file is distributed under the same license as the gnome-remote-desktop 
package.
+# ?????????? ???????????? <marko.m.kos...@gmail.com>, 2021.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-remote-desktop master\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-remote-desktop/";
+"issues\n"
+"POT-Creation-Date: 2021-09-28 20:35+0000\n"
+"PO-Revision-Date: 2021-10-02 09:29+0200\n"
+"Language-Team: Serbian <gnome...@googlegroups.com>\n"
+"Language: sr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=n==1? 3 : n%10==1 && n%100!=11 ? 0 : n"
+"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"Last-Translator: ?????????? ??. ???????????? <marko.m.kos...@gmail.com>\n"
+"X-Generator: Poedit 3.0\n"
+
+#: src/grd-daemon.c:365
+msgid "GNOME Remote Desktop"
+msgstr "?????????????? ?????????????? ??????????"
+
+#: src/grd-prompt.c:124
+#, c-format
+msgid "Do you want to share your desktop?"
+msgstr "???? ???? ???????????? ???????????????? ?????????????? ?????????? 
?????????????"
+
+#: src/grd-prompt.c:125
+#, c-format
+msgid ""
+"A user on the computer '%s' is trying to remotely view or control your "
+"desktop."
+msgstr ""
+"???????????????? ???? ???????????????? ???%s??? ???????? ???? ?????????????? 
???????????????? ?? ?????????????? ?????????? ???????????? "
+"??????????????????."
+
+#: src/grd-prompt.c:131
+msgid "Refuse"
+msgstr "??????????"
+
+#: src/grd-prompt.c:136
+msgid "Accept"
+msgstr "????????????????"
+
+#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:7
+msgid "Path to the certificate file"
+msgstr "???????????? ???? ???????????????? ??????????????????????"
+
+#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:8
+#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:16
+msgid ""
+"In order to be able to use RDP with TLS Security, both the private key file "
+"and the certificate file need to be provided to the RDP server."
+msgstr ""
+"???? ?????????? ?????????????????? ?????? ???? ?????? ??????????????????????, 
???????????? ???????? ???????????????? ?????????????????? "
+"?????????? ?? ???????????????? ?????????????????????? ?????? ??????????????."
+
+#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:15
+msgid "Path to the private key file"
+msgstr "???????????? ???? ???????????????? ?????????????????? ??????????"
+
+#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:23
+#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:33
+msgid "Only allow remote connections to view the screen content"
+msgstr "???????? ?????????????? ???????????????? ???????????? 
???????????????????? ???????????????? ????????????"
+
+#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:24
+msgid ""
+"When view-only is true, remote RDP connections cannot manipulate input "
+"devices (e.g. mouse and keyboard)."
+msgstr ""
+"???????? ???? ???????? ?????????????? ??????????????????, ?????????????? 
?????? ???????? ???? ???????? ?????????????????? ???????????? "
+"?????????????? (??????.: ???????? ?? ??????????????????)."
+
+#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:34
+msgid ""
+"When view-only is true, remote VNC connections cannot manipulate input "
+"devices (e.g. mouse and keyboard)."
+msgstr ""
+"???????? ???? ???????? ?????????????? ??????????????????, ?????????????? 
?????? ???????? ???? ???????? ?????????????????? ???????????? "
+"?????????????? (??????.: ???????? ?? ??????????????????)."
+
+#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:41
+msgid "Method used to authenticate VNC connections"
+msgstr "?????????? ?????????????? ???????????????????? ?????? ????????"
+
+#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:42
+msgid ""
+"The VNC authentication method describes how a remote connection is "
+"authenticated. It can currently be done in two different ways: * prompt - by "
+"prompting the user for each new connection, requiring a person with physical "
+"access to the workstation to explicitly approve the new connection. * "
+"password - by requiring the remote client to provide a known password"
+msgstr ""
+"?????????? ?????????????? ???????????????????? ?????? ???????? ?????????????? 
???????? ???? ?????????????? ???????? "
+"??????????????????????????. ???????????????? ???? ???? ???????? 
?????????????? ???? ?????? ????????????: * prompt - ???????? "
+"?????????????????? ???? ?????????? ???????? ????????, ?????????????? 
?????????? ???? ???????????????? ?????????????????? ???????????? "
+"?????????????? ???? ???? ???? ?????????? ???????? ???????? 
?????????????????????? ????????????????. * password - ?????????????? "
+"???? ???????????????? ???????????????? ???? ?????????????? ?????????????????? 
??????????????"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-remote-desktop-41.0/src/grd-clipboard-rdp.c 
new/gnome-remote-desktop-41.1/src/grd-clipboard-rdp.c
--- old/gnome-remote-desktop-41.0/src/grd-clipboard-rdp.c       2021-09-19 
16:03:51.000000000 +0200
+++ new/gnome-remote-desktop-41.1/src/grd-clipboard-rdp.c       2021-10-30 
16:37:19.000000000 +0200
@@ -565,7 +565,7 @@
   FILEDESCRIPTORW *files = NULL;
   FILEDESCRIPTORW *file;
   uint32_t n_files = 0;
-  char *clip_data_dir_name;
+  g_autofree char *clip_data_dir_name = NULL;
   char *filename = NULL;
   char *escaped_name;
   char *file_uri;
@@ -576,6 +576,7 @@
     g_strdup_printf ("%u", clip_data_id) :
     g_strdup_printf ("%lu", GRD_RDP_FUSE_CLIPBOARD_NO_CLIP_DATA_ID);
 
+  *dst_size = 0;
   dst_data = g_array_new (TRUE, TRUE, sizeof (char));
 
   cliprdr_parse_file_list (src_data, src_size, &files, &n_files);
@@ -583,8 +584,13 @@
     {
       file = &files[i];
 
-      ConvertFromUnicode (CP_UTF8, 0, file->cFileName, -1, &filename, 0, NULL,
-                          NULL);
+      if (ConvertFromUnicode (CP_UTF8, 0, file->cFileName, -1, &filename,
+                              0, NULL, NULL) <= 0)
+        {
+          g_array_free (dst_data, TRUE);
+          g_free (files);
+          return NULL;
+        }
       if (strchr (filename, '\\'))
         {
           g_free (filename);
@@ -607,7 +613,6 @@
   *dst_size = dst_data->len;
 
   g_free (files);
-  g_free (clip_data_dir_name);
 
   return (uint8_t *) g_array_free (dst_data, FALSE);
 }
@@ -699,7 +704,7 @@
       FILEDESCRIPTORW *file;
       uint32_t n_files = 0;
       gboolean result;
-      char *clip_data_dir_name;
+      g_autofree char *clip_data_dir_name = NULL;
       char *filename = NULL;
       char *escaped_name;
       char *full_filepath;
@@ -742,8 +747,15 @@
         {
           file = &files[i];
 
-          ConvertFromUnicode (CP_UTF8, 0, file->cFileName, -1, &filename,
-                              0, NULL, NULL);
+          if (ConvertFromUnicode (CP_UTF8, 0, file->cFileName, -1, &filename,
+                                  0, NULL, NULL) <= 0)
+            {
+              g_array_free (data_nautilus, TRUE);
+              grd_rdp_fuse_clipboard_clear_no_cdi_selection 
(rdp_fuse_clipboard);
+              g_free (files);
+              g_free (dst_data);
+              return NULL;
+            }
           if (strchr (filename, '\\'))
             {
               g_free (filename);
@@ -798,7 +810,6 @@
                            GUINT_TO_POINTER (second_mime_type),
                            format_data);
 
-      g_free (clip_data_dir_name);
       g_free (files);
     }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-remote-desktop-41.0/src/grd-daemon.c 
new/gnome-remote-desktop-41.1/src/grd-daemon.c
--- old/gnome-remote-desktop-41.0/src/grd-daemon.c      2021-09-19 
16:03:51.000000000 +0200
+++ new/gnome-remote-desktop-41.1/src/grd-daemon.c      2021-10-30 
16:37:19.000000000 +0200
@@ -68,18 +68,19 @@
 }
 
 #ifdef HAVE_RDP
-static void
+static gboolean
 init_rdp_server (GrdDaemon *daemon)
 {
   GrdSettings *settings = grd_context_get_settings (daemon->context);
   g_autoptr (GError) error = NULL;
+  gboolean result = FALSE;
 
   daemon->rdp_server = NULL;
   if (!g_access (grd_settings_get_rdp_server_cert (settings), F_OK) &&
       !g_access (grd_settings_get_rdp_server_key (settings), F_OK))
     {
       daemon->rdp_server = grd_rdp_server_new (daemon->context);
-      if (!grd_rdp_server_start (daemon->rdp_server, &error))
+      if (!(result = grd_rdp_server_start (daemon->rdp_server, &error)))
         g_warning ("Failed to initialize RDP server: %s\n", error->message);
       else
         g_message ("Initialized RDP server");
@@ -88,36 +89,49 @@
     {
       g_message ("Didn't initialize RDP server: not configured");
     }
+
+  return result;
 }
 #endif /* HAVE_RDP */
 
 #ifdef HAVE_VNC
-static void
+static gboolean
 init_vnc_server (GrdDaemon *daemon)
 {
   g_autoptr (GError) error = NULL;
+  gboolean result;
 
   daemon->vnc_server = grd_vnc_server_new (daemon->context);
-  if (!grd_vnc_server_start (daemon->vnc_server, &error))
+  if (!(result = grd_vnc_server_start (daemon->vnc_server, &error)))
     g_warning ("Failed to initialize VNC server: %s\n", error->message);
   else
     g_message ("Initialized VNC server");
+
+  return result;
 }
 #endif /* HAVE_VNC */
 
 static void
 maybe_enable_services (GrdDaemon *daemon)
 {
+  gboolean has_one_backend = FALSE;
+
   if (!is_daemon_ready (daemon))
     return;
 
 #ifdef HAVE_RDP
-  init_rdp_server (daemon);
+  has_one_backend = init_rdp_server (daemon) || has_one_backend;
 #endif
 
 #ifdef HAVE_VNC
-  init_vnc_server (daemon);
+  has_one_backend = init_vnc_server (daemon) || has_one_backend;
 #endif
+
+  if (!has_one_backend)
+    {
+      g_warning ("No backend initialized successfully. Exiting");
+      g_application_release (G_APPLICATION (daemon));
+    }
 }
 
 static void
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-remote-desktop-41.0/src/grd-rdp-event-queue.c 
new/gnome-remote-desktop-41.1/src/grd-rdp-event-queue.c
--- old/gnome-remote-desktop-41.0/src/grd-rdp-event-queue.c     2021-09-19 
16:03:51.000000000 +0200
+++ new/gnome-remote-desktop-41.1/src/grd-rdp-event-queue.c     2021-10-30 
16:37:19.000000000 +0200
@@ -356,7 +356,7 @@
   flush_source = g_source_new (&flush_source_funcs, sizeof (GSource));
   g_source_set_callback (flush_source, flush_rdp_events, rdp_event_queue, 
NULL);
   g_source_set_ready_time (flush_source, -1);
-  g_source_attach (flush_source, g_main_context_get_thread_default ());
+  g_source_attach (flush_source, NULL);
   rdp_event_queue->flush_source = flush_source;
 
   return rdp_event_queue;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnome-remote-desktop-41.0/src/grd-rdp-fuse-clipboard.c 
new/gnome-remote-desktop-41.1/src/grd-rdp-fuse-clipboard.c
--- old/gnome-remote-desktop-41.0/src/grd-rdp-fuse-clipboard.c  2021-09-19 
16:03:51.000000000 +0200
+++ new/gnome-remote-desktop-41.1/src/grd-rdp-fuse-clipboard.c  2021-10-30 
16:37:19.000000000 +0200
@@ -1083,6 +1083,7 @@
 {
   GrdRdpFuseClipboard *rdp_fuse_clipboard = fuse_req_userdata (fuse_req);
   FuseFile *fuse_file;
+  g_autofree char *filename_with_root = NULL;
 
   g_mutex_lock (&rdp_fuse_clipboard->filesystem_mutex);
   if (!(fuse_file = get_fuse_file_by_ino (rdp_fuse_clipboard, fuse_ino)))
@@ -1097,6 +1098,8 @@
       fuse_reply_err (fuse_req, EISDIR);
       return;
     }
+
+  filename_with_root = g_strdup (fuse_file->filename_with_root);
   g_mutex_unlock (&rdp_fuse_clipboard->filesystem_mutex);
 
   if ((file_info->flags & O_ACCMODE) != O_RDONLY)
@@ -1108,7 +1111,7 @@
   /* Using direct_io also increases FUSE_MAX_PAGES_PER_REQ */
   file_info->direct_io = 1;
 
-  g_debug ("[FUSE Clipboard] Opening file \"%s\"", 
fuse_file->filename_with_root);
+  g_debug ("[FUSE Clipboard] Opening file \"%s\"", filename_with_root);
   fuse_reply_open (fuse_req, file_info);
 }
 
@@ -1157,6 +1160,7 @@
 {
   GrdRdpFuseClipboard *rdp_fuse_clipboard = fuse_req_userdata (fuse_req);
   FuseFile *fuse_file;
+  g_autofree char *filename_with_root = NULL;
 
   g_mutex_lock (&rdp_fuse_clipboard->filesystem_mutex);
   if (!(fuse_file = get_fuse_file_by_ino (rdp_fuse_clipboard, fuse_ino)))
@@ -1171,6 +1175,8 @@
       fuse_reply_err (fuse_req, ENOTDIR);
       return;
     }
+
+  filename_with_root = g_strdup (fuse_file->filename_with_root);
   g_mutex_unlock (&rdp_fuse_clipboard->filesystem_mutex);
 
   if ((file_info->flags & O_ACCMODE) != O_RDONLY)
@@ -1179,8 +1185,7 @@
       return;
     }
 
-  g_debug ("[FUSE Clipboard] Opening directory \"%s\"",
-           fuse_file->filename_with_root);
+  g_debug ("[FUSE Clipboard] Opening directory \"%s\"", filename_with_root);
   fuse_reply_open (fuse_req, file_info);
 }
 
@@ -1377,8 +1382,10 @@
   GrdRdpFuseClipboard *rdp_fuse_clipboard = GRD_RDP_FUSE_CLIPBOARD (object);
 
   if (rdp_fuse_clipboard->timeout_reset_source)
-    g_source_destroy (rdp_fuse_clipboard->timeout_reset_source);
-  g_clear_pointer (&rdp_fuse_clipboard->timeout_reset_source, g_source_unref);
+    {
+      g_source_destroy (rdp_fuse_clipboard->timeout_reset_source);
+      g_clear_pointer (&rdp_fuse_clipboard->timeout_reset_source, 
g_source_unref);
+    }
 
   if (rdp_fuse_clipboard->fuse_thread)
     {
@@ -1533,7 +1540,7 @@
   g_source_set_callback (timeout_reset_source, reset_clip_data_entry_timeouts,
                          rdp_fuse_clipboard, NULL);
   g_source_set_ready_time (timeout_reset_source, -1);
-  g_source_attach (timeout_reset_source, g_main_context_get_thread_default ());
+  g_source_attach (timeout_reset_source, NULL);
   rdp_fuse_clipboard->timeout_reset_source = timeout_reset_source;
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-remote-desktop-41.0/src/grd-rdp-gfx-surface.c 
new/gnome-remote-desktop-41.1/src/grd-rdp-gfx-surface.c
--- old/gnome-remote-desktop-41.0/src/grd-rdp-gfx-surface.c     2021-09-19 
16:03:51.000000000 +0200
+++ new/gnome-remote-desktop-41.1/src/grd-rdp-gfx-surface.c     2021-10-30 
16:37:19.000000000 +0200
@@ -331,6 +331,7 @@
 GrdRdpGfxSurface *
 grd_rdp_gfx_surface_new (GrdRdpGraphicsPipeline *graphics_pipeline,
                          GrdSessionRdp          *session_rdp,
+                         GMainContext           *pipeline_context,
                          GrdRdpSurface          *rdp_surface,
                          uint16_t                surface_id,
                          uint32_t                serial)
@@ -356,7 +357,7 @@
   g_source_set_callback (gfx_surface->pending_encode_source,
                          maybe_encode_pending_frame, gfx_surface, NULL);
   g_source_set_ready_time (gfx_surface->pending_encode_source, -1);
-  g_source_attach (gfx_surface->pending_encode_source, NULL);
+  g_source_attach (gfx_surface->pending_encode_source, pipeline_context);
 
   return gfx_surface;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-remote-desktop-41.0/src/grd-rdp-gfx-surface.h 
new/gnome-remote-desktop-41.1/src/grd-rdp-gfx-surface.h
--- old/gnome-remote-desktop-41.0/src/grd-rdp-gfx-surface.h     2021-09-19 
16:03:51.000000000 +0200
+++ new/gnome-remote-desktop-41.1/src/grd-rdp-gfx-surface.h     2021-10-30 
16:37:19.000000000 +0200
@@ -31,6 +31,7 @@
 
 GrdRdpGfxSurface *grd_rdp_gfx_surface_new (GrdRdpGraphicsPipeline 
*graphics_pipeline,
                                            GrdSessionRdp          *session_rdp,
+                                           GMainContext           
*pipeline_context,
                                            GrdRdpSurface          *rdp_surface,
                                            uint16_t                surface_id,
                                            uint32_t                serial);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnome-remote-desktop-41.0/src/grd-rdp-graphics-pipeline.c 
new/gnome-remote-desktop-41.1/src/grd-rdp-graphics-pipeline.c
--- old/gnome-remote-desktop-41.0/src/grd-rdp-graphics-pipeline.c       
2021-09-19 16:03:51.000000000 +0200
+++ new/gnome-remote-desktop-41.1/src/grd-rdp-graphics-pipeline.c       
2021-10-30 16:37:19.000000000 +0200
@@ -26,11 +26,12 @@
 #include "grd-rdp-frame-info.h"
 #include "grd-rdp-gfx-surface.h"
 #include "grd-rdp-network-autodetection.h"
+#include "grd-rdp-surface.h"
+#include "grd-session-rdp.h"
+
 #ifdef HAVE_NVENC
 #include "grd-rdp-nvenc.h"
 #endif /* HAVE_NVENC */
-#include "grd-rdp-surface.h"
-#include "grd-session-rdp.h"
 
 #define ENC_TIMES_CHECK_INTERVAL_MS 1000
 #define MAX_TRACKED_ENC_FRAMES 1000
@@ -71,6 +72,7 @@
   uint32_t initial_version;
 
   GrdSessionRdp *session_rdp;
+  GMainContext *pipeline_context;
   GrdRdpNetworkAutodetection *network_autodetection;
   wStream *encode_stream;
   RFX_CONTEXT *rfx_context;
@@ -879,7 +881,8 @@
     g_timeout_source_new (ENC_TIMES_CHECK_INTERVAL_MS);
   g_source_set_callback (graphics_pipeline->rtt_pause_source, 
maybe_slow_down_rtts,
                          graphics_pipeline, NULL);
-  g_source_attach (graphics_pipeline->rtt_pause_source, NULL);
+  g_source_attach (graphics_pipeline->rtt_pause_source,
+                   graphics_pipeline->pipeline_context);
 }
 
 void
@@ -910,8 +913,8 @@
   if (!rdp_surface->gfx_surface)
     {
       rdp_surface->gfx_surface = grd_rdp_gfx_surface_new (
-        graphics_pipeline, session_rdp, rdp_surface,
-        get_next_free_surface_id (graphics_pipeline),
+        graphics_pipeline, session_rdp, graphics_pipeline->pipeline_context,
+        rdp_surface, get_next_free_surface_id (graphics_pipeline),
         get_next_free_serial (graphics_pipeline));
       map_surface_to_output (graphics_pipeline, rdp_surface->gfx_surface);
     }
@@ -1133,8 +1136,6 @@
       uint32_t surface_serial;
 
       surface_serial = GPOINTER_TO_UINT (value);
-      surface_serial_unref (graphics_pipeline, surface_serial);
-
       if (!g_hash_table_lookup_extended 
(graphics_pipeline->serial_surface_table,
                                          GUINT_TO_POINTER (surface_serial),
                                          NULL, (gpointer *) &surface_context))
@@ -1146,6 +1147,8 @@
                                          frame_acknowledge->frameId,
                                          g_get_monotonic_time ());
         }
+
+      surface_serial_unref (graphics_pipeline, surface_serial);
     }
 
   if (frame_acknowledge->queueDepth == SUSPEND_FRAME_ACKNOWLEDGEMENT)
@@ -1203,6 +1206,7 @@
 
 GrdRdpGraphicsPipeline *
 grd_rdp_graphics_pipeline_new (GrdSessionRdp              *session_rdp,
+                               GMainContext               *pipeline_context,
                                HANDLE                      vcm,
                                HANDLE                      stop_event,
                                rdpContext                 *rdp_context,
@@ -1221,6 +1225,7 @@
   graphics_pipeline->rdpgfx_context = rdpgfx_context;
   graphics_pipeline->stop_event = stop_event;
   graphics_pipeline->session_rdp = session_rdp;
+  graphics_pipeline->pipeline_context = pipeline_context;
   graphics_pipeline->network_autodetection = network_autodetection;
   graphics_pipeline->encode_stream = encode_stream;
   graphics_pipeline->rfx_context = rfx_context;
@@ -1504,7 +1509,7 @@
   g_source_set_callback (protocol_reset_source, reset_protocol,
                          graphics_pipeline, NULL);
   g_source_set_ready_time (protocol_reset_source, -1);
-  g_source_attach (protocol_reset_source, NULL);
+  g_source_attach (protocol_reset_source, graphics_pipeline->pipeline_context);
   graphics_pipeline->protocol_reset_source = protocol_reset_source;
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnome-remote-desktop-41.0/src/grd-rdp-graphics-pipeline.h 
new/gnome-remote-desktop-41.1/src/grd-rdp-graphics-pipeline.h
--- old/gnome-remote-desktop-41.0/src/grd-rdp-graphics-pipeline.h       
2021-09-19 16:03:51.000000000 +0200
+++ new/gnome-remote-desktop-41.1/src/grd-rdp-graphics-pipeline.h       
2021-10-30 16:37:19.000000000 +0200
@@ -31,6 +31,7 @@
                       GRD, RDP_GRAPHICS_PIPELINE, GObject);
 
 GrdRdpGraphicsPipeline *grd_rdp_graphics_pipeline_new (GrdSessionRdp           
   *session_rdp,
+                                                       GMainContext            
   *pipeline_context,
                                                        HANDLE                  
    vcm,
                                                        HANDLE                  
    stop_event,
                                                        rdpContext              
   *rdp_context,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-remote-desktop-41.0/src/grd-rdp-nvenc.c 
new/gnome-remote-desktop-41.1/src/grd-rdp-nvenc.c
--- old/gnome-remote-desktop-41.0/src/grd-rdp-nvenc.c   2021-09-19 
16:03:51.000000000 +0200
+++ new/gnome-remote-desktop-41.1/src/grd-rdp-nvenc.c   2021-10-30 
16:37:19.000000000 +0200
@@ -55,6 +55,21 @@
 
 G_DEFINE_TYPE (GrdRdpNvenc, grd_rdp_nvenc, G_TYPE_OBJECT);
 
+void
+grd_rdp_nvenc_push_cuda_context (GrdRdpNvenc *rdp_nvenc)
+{
+  if (rdp_nvenc->cuda_funcs->cuCtxPushCurrent (rdp_nvenc->cu_context) != 
CUDA_SUCCESS)
+    g_error ("[HWAccel.CUDA] Failed to push CUDA context");
+}
+
+void
+grd_rdp_nvenc_pop_cuda_context (GrdRdpNvenc *rdp_nvenc)
+{
+  CUcontext cu_context;
+
+  rdp_nvenc->cuda_funcs->cuCtxPopCurrent (&cu_context);
+}
+
 static uint32_t
 get_next_free_encode_session_id (GrdRdpNvenc *rdp_nvenc)
 {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-remote-desktop-41.0/src/grd-rdp-nvenc.h 
new/gnome-remote-desktop-41.1/src/grd-rdp-nvenc.h
--- old/gnome-remote-desktop-41.0/src/grd-rdp-nvenc.h   2021-09-19 
16:03:51.000000000 +0200
+++ new/gnome-remote-desktop-41.1/src/grd-rdp-nvenc.h   2021-10-30 
16:37:19.000000000 +0200
@@ -29,6 +29,10 @@
 
 GrdRdpNvenc *grd_rdp_nvenc_new (void);
 
+void grd_rdp_nvenc_push_cuda_context (GrdRdpNvenc *rdp_nvenc);
+
+void grd_rdp_nvenc_pop_cuda_context (GrdRdpNvenc *rdp_nvenc);
+
 gboolean grd_rdp_nvenc_create_encode_session (GrdRdpNvenc *rdp_nvenc,
                                               uint32_t    *encode_session_id,
                                               uint16_t     surface_width,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnome-remote-desktop-41.0/src/grd-rdp-pipewire-stream.c 
new/gnome-remote-desktop-41.1/src/grd-rdp-pipewire-stream.c
--- old/gnome-remote-desktop-41.0/src/grd-rdp-pipewire-stream.c 2021-09-19 
16:03:51.000000000 +0200
+++ new/gnome-remote-desktop-41.1/src/grd-rdp-pipewire-stream.c 2021-10-30 
16:37:19.000000000 +0200
@@ -47,6 +47,7 @@
   uint16_t width;
   uint16_t height;
 
+  gboolean has_pointer_data;
   uint8_t *pointer_bitmap;
   uint16_t pointer_hotspot_x;
   uint16_t pointer_hotspot_y;
@@ -67,6 +68,7 @@
 
   struct spa_hook pipewire_core_listener;
 
+  GSource *render_source;
   GMutex frame_mutex;
   GrdRdpFrame *pending_frame;
 
@@ -82,6 +84,69 @@
                G_TYPE_OBJECT)
 
 static gboolean
+do_render (gpointer user_data)
+{
+  GrdRdpPipeWireStream *stream = GRD_RDP_PIPEWIRE_STREAM (user_data);
+  GrdRdpFrame *frame;
+
+  g_mutex_lock (&stream->frame_mutex);
+  frame = g_steal_pointer (&stream->pending_frame);
+  g_mutex_unlock (&stream->frame_mutex);
+
+  if (!frame)
+    return G_SOURCE_CONTINUE;
+
+  if (frame->data)
+    {
+      grd_session_rdp_take_buffer (stream->session_rdp, frame->data,
+                                   frame->width, frame->height);
+    }
+
+  if (frame->pointer_bitmap)
+    {
+      grd_session_rdp_update_pointer (stream->session_rdp,
+                                      frame->pointer_hotspot_x,
+                                      frame->pointer_hotspot_y,
+                                      frame->pointer_width,
+                                      frame->pointer_height,
+                                      frame->pointer_bitmap);
+    }
+  else if (frame->pointer_is_hidden)
+    {
+      grd_session_rdp_hide_pointer (stream->session_rdp);
+    }
+
+  g_free (frame);
+
+  return G_SOURCE_CONTINUE;
+}
+
+static gboolean
+render_source_dispatch (GSource     *source,
+                        GSourceFunc  callback,
+                        gpointer     user_data)
+{
+  g_source_set_ready_time (source, -1);
+
+  return callback (user_data);
+}
+
+static GSourceFuncs render_source_funcs =
+{
+  .dispatch = render_source_dispatch,
+};
+
+static void
+create_render_source (GrdRdpPipeWireStream *stream,
+                      GMainContext         *render_context)
+{
+  stream->render_source = g_source_new (&render_source_funcs, sizeof 
(GSource));
+  g_source_set_callback (stream->render_source, do_render, stream, NULL);
+  g_source_set_ready_time (stream->render_source, -1);
+  g_source_attach (stream->render_source, render_context);
+}
+
+static gboolean
 pipewire_loop_source_prepare (GSource *base,
                               int     *timeout)
 {
@@ -177,8 +242,6 @@
   GrdRdpPipeWireStream *stream = GRD_RDP_PIPEWIRE_STREAM (user_data);
   uint8_t params_buffer[1024];
   struct spa_pod_builder pod_builder;
-  int width;
-  int height;
   const struct spa_pod *params[3];
 
   if (!format || id != SPA_PARAM_Format)
@@ -188,11 +251,6 @@
 
   pod_builder = SPA_POD_BUILDER_INIT (params_buffer, sizeof (params_buffer));
 
-  width = stream->spa_format.size.width;
-  height = stream->spa_format.size.height;
-
-  grd_session_rdp_resize_framebuffer (stream->session_rdp, width, height);
-
   params[0] = spa_pod_builder_add_object (
     &pod_builder,
     SPA_TYPE_OBJECT_ParamBuffers, SPA_PARAM_Buffers,
@@ -219,49 +277,6 @@
                            params, G_N_ELEMENTS (params));
 }
 
-static int
-do_render (struct spa_loop *loop,
-           bool             async,
-           uint32_t         seq,
-           const void      *data,
-           size_t           size,
-           void            *user_data)
-{
-  GrdRdpPipeWireStream *stream = GRD_RDP_PIPEWIRE_STREAM (user_data);
-  GrdRdpFrame *frame;
-
-  g_mutex_lock (&stream->frame_mutex);
-  frame = g_steal_pointer (&stream->pending_frame);
-  g_mutex_unlock (&stream->frame_mutex);
-
-  if (!frame)
-    return 0;
-
-  if (frame->data)
-    {
-      grd_session_rdp_take_buffer (stream->session_rdp, frame->data,
-                                   frame->width, frame->height);
-    }
-
-  if (frame->pointer_bitmap)
-    {
-      grd_session_rdp_update_pointer (stream->session_rdp,
-                                      frame->pointer_hotspot_x,
-                                      frame->pointer_hotspot_y,
-                                      frame->pointer_width,
-                                      frame->pointer_height,
-                                      frame->pointer_bitmap);
-    }
-  else if (frame->pointer_is_hidden)
-    {
-      grd_session_rdp_hide_pointer (stream->session_rdp);
-    }
-
-  g_free (frame);
-
-  return 0;
-}
-
 static GrdRdpFrame *
 process_buffer (GrdRdpPipeWireStream *stream,
                 struct spa_buffer    *buffer)
@@ -379,10 +394,12 @@
           frame->pointer_hotspot_y = spa_meta_cursor->hotspot.y;
           frame->pointer_width = spa_meta_bitmap->size.width;
           frame->pointer_height = spa_meta_bitmap->size.height;
+          frame->has_pointer_data = TRUE;
         }
       else if (spa_meta_bitmap)
         {
           frame->pointer_is_hidden = TRUE;
+          frame->has_pointer_data = TRUE;
         }
     }
 
@@ -390,11 +407,33 @@
 }
 
 static void
+take_frame_data_from (GrdRdpFrame *src_frame,
+                      GrdRdpFrame *dst_frame)
+{
+  dst_frame->data = g_steal_pointer (&src_frame->data);
+  dst_frame->width = src_frame->width;
+  dst_frame->height = src_frame->height;
+}
+
+static void
+take_pointer_data_from (GrdRdpFrame *src_frame,
+                        GrdRdpFrame *dst_frame)
+{
+  g_assert (!dst_frame->pointer_bitmap);
+  dst_frame->pointer_bitmap = g_steal_pointer (&src_frame->pointer_bitmap);
+
+  dst_frame->pointer_hotspot_x = src_frame->pointer_hotspot_x;
+  dst_frame->pointer_hotspot_y = src_frame->pointer_hotspot_y;
+  dst_frame->pointer_width = src_frame->pointer_width;
+  dst_frame->pointer_height = src_frame->pointer_height;
+  dst_frame->pointer_is_hidden = src_frame->pointer_is_hidden;
+  dst_frame->has_pointer_data = TRUE;
+}
+
+static void
 on_stream_process (void *user_data)
 {
   GrdRdpPipeWireStream *stream = GRD_RDP_PIPEWIRE_STREAM (user_data);
-  GrdPipeWireSource *pipewire_source =
-    (GrdPipeWireSource *) stream->pipewire_source;
   struct pw_buffer *next_buffer;
   struct pw_buffer *buffer = NULL;
   GrdRdpFrame *frame;
@@ -417,6 +456,11 @@
   g_mutex_lock (&stream->frame_mutex);
   if (stream->pending_frame)
     {
+      if (!frame->data && stream->pending_frame->data)
+        take_frame_data_from (stream->pending_frame, frame);
+      if (!frame->has_pointer_data && stream->pending_frame->has_pointer_data)
+        take_pointer_data_from (stream->pending_frame, frame);
+
       g_free (stream->pending_frame->data);
       g_free (stream->pending_frame->pointer_bitmap);
       g_clear_pointer (&stream->pending_frame, g_free);
@@ -426,9 +470,7 @@
 
   pw_stream_queue_buffer (stream->pipewire_stream, buffer);
 
-  pw_loop_invoke (pipewire_source->pipewire_loop, do_render,
-                  SPA_ID_INVALID, NULL, 0,
-                  false, stream);
+  g_source_set_ready_time (stream->render_source, 0);
 }
 
 static const struct pw_stream_events stream_events = {
@@ -523,6 +565,7 @@
 
 GrdRdpPipeWireStream *
 grd_rdp_pipewire_stream_new (GrdSessionRdp  *session_rdp,
+                             GMainContext   *render_context,
                              uint32_t        src_node_id,
                              uint32_t        refresh_rate,
                              GError        **error)
@@ -536,6 +579,8 @@
   stream->session_rdp = session_rdp;
   stream->src_node_id = src_node_id;
 
+  create_render_source (stream, render_context);
+
   pipewire_source = create_pipewire_source ();
   if (!pipewire_source)
     {
@@ -593,6 +638,19 @@
       g_clear_pointer (&stream->pipewire_source, g_source_unref);
     }
 
+  if (stream->render_source)
+    {
+      g_source_destroy (stream->render_source);
+      g_clear_pointer (&stream->render_source, g_source_unref);
+    }
+
+  if (stream->pending_frame)
+    {
+      g_free (stream->pending_frame->data);
+      g_free (stream->pending_frame->pointer_bitmap);
+      g_clear_pointer (&stream->pending_frame, g_free);
+    }
+
   G_OBJECT_CLASS (grd_rdp_pipewire_stream_parent_class)->finalize (object);
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnome-remote-desktop-41.0/src/grd-rdp-pipewire-stream.h 
new/gnome-remote-desktop-41.1/src/grd-rdp-pipewire-stream.h
--- old/gnome-remote-desktop-41.0/src/grd-rdp-pipewire-stream.h 2021-09-19 
16:03:51.000000000 +0200
+++ new/gnome-remote-desktop-41.1/src/grd-rdp-pipewire-stream.h 2021-10-30 
16:37:19.000000000 +0200
@@ -31,6 +31,7 @@
                       GObject)
 
 GrdRdpPipeWireStream *grd_rdp_pipewire_stream_new (GrdSessionRdp  *session_rdp,
+                                                   GMainContext   
*render_context,
                                                    uint32_t        src_node_id,
                                                    uint32_t        
refresh_rate,
                                                    GError        **error);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-remote-desktop-41.0/src/grd-session-rdp.c 
new/gnome-remote-desktop-41.1/src/grd-session-rdp.c
--- old/gnome-remote-desktop-41.0/src/grd-session-rdp.c 2021-09-19 
16:03:51.000000000 +0200
+++ new/gnome-remote-desktop-41.1/src/grd-session-rdp.c 2021-10-30 
16:37:19.000000000 +0200
@@ -42,6 +42,10 @@
 #include "grd-settings.h"
 #include "grd-stream.h"
 
+#ifdef HAVE_NVENC
+#include "grd-rdp-nvenc.h"
+#endif /* HAVE_NVENC */
+
 #define DISCRETE_SCROLL_STEP 10.0
 
 typedef enum _RdpPeerFlag
@@ -124,6 +128,9 @@
   HANDLE start_event;
   HANDLE stop_event;
 
+  GThread *graphics_thread;
+  GMainContext *graphics_context;
+
   GrdRdpSurface *rdp_surface;
   Pointer *last_pointer;
   GHashTable *pointer_cache;
@@ -143,10 +150,11 @@
 
 #ifdef HAVE_NVENC
   GrdRdpNvenc *rdp_nvenc;
-#endif /*HAVE_NVENC*/
+#endif /* HAVE_NVENC */
 
   GSource *pending_encode_source;
 
+  GMutex close_session_mutex;
   unsigned int close_session_idle_id;
 
   GrdRdpPipeWireStream *pipewire_stream;
@@ -214,10 +222,10 @@
   g_source_set_ready_time (session_rdp->pending_encode_source, 0);
 }
 
-void
-grd_session_rdp_resize_framebuffer (GrdSessionRdp *session_rdp,
-                                    uint32_t       width,
-                                    uint32_t       height)
+static void
+maybe_resize_graphics_output_buffer (GrdSessionRdp *session_rdp,
+                                     uint32_t       width,
+                                     uint32_t       height)
 {
   freerdp_peer *peer = session_rdp->peer;
   rdpSettings *rdp_settings = peer->settings;
@@ -247,6 +255,7 @@
   cairo_region_t *region;
 
   g_clear_pointer (&rdp_surface->pending_frame, g_free);
+  maybe_resize_graphics_output_buffer (session_rdp, width, height);
 
   if (is_rdp_peer_flag_set (session_rdp, RDP_PEER_ALL_SURFACES_INVALID))
     {
@@ -564,11 +573,16 @@
 static void
 maybe_queue_close_session_idle (GrdSessionRdp *session_rdp)
 {
+  g_mutex_lock (&session_rdp->close_session_mutex);
   if (session_rdp->close_session_idle_id)
-    return;
+    {
+      g_mutex_unlock (&session_rdp->close_session_mutex);
+      return;
+    }
 
   session_rdp->close_session_idle_id =
     g_idle_add (close_session_idle, session_rdp);
+  g_mutex_unlock (&session_rdp->close_session_mutex);
 
   SetEvent (session_rdp->stop_event);
 }
@@ -788,7 +802,9 @@
 
   g_mutex_lock (thread_pool_context->pending_jobs_mutex);
   --thread_pool_context->pending_job_count;
-  g_cond_signal (thread_pool_context->pending_jobs_cond);
+
+  if (!thread_pool_context->pending_job_count)
+    g_cond_signal (thread_pool_context->pending_jobs_cond);
   g_mutex_unlock (thread_pool_context->pending_jobs_mutex);
 }
 
@@ -962,7 +978,9 @@
 
   g_mutex_lock (thread_pool_context->pending_jobs_mutex);
   --thread_pool_context->pending_job_count;
-  g_cond_signal (thread_pool_context->pending_jobs_cond);
+
+  if (!thread_pool_context->pending_job_count)
+    g_cond_signal (thread_pool_context->pending_jobs_cond);
   g_mutex_unlock (thread_pool_context->pending_jobs_mutex);
 }
 
@@ -1603,7 +1621,8 @@
   rdp_settings->PointerCacheSize = MIN (rdp_settings->PointerCacheSize, 100);
 
   session_rdp->rdp_surface = g_malloc0 (sizeof (GrdRdpSurface));
-  session_rdp->rdp_surface->refresh_rate = 30;
+  session_rdp->rdp_surface->refresh_rate = 
rdp_settings->SupportGraphicsPipeline ? 60
+                                                                               
  : 30;
 
   if (rdp_settings->SupportGraphicsPipeline &&
       !rdp_settings->NetworkAutoDetect)
@@ -1625,6 +1644,7 @@
 
       rdp_peer_context->graphics_pipeline =
         grd_rdp_graphics_pipeline_new (session_rdp,
+                                       session_rdp->graphics_context,
                                        rdp_peer_context->vcm,
                                        session_rdp->stop_event,
                                        peer->context,
@@ -1899,6 +1919,27 @@
   return NULL;
 }
 
+static gpointer
+graphics_thread_func (gpointer data)
+{
+  GrdSessionRdp *session_rdp = data;
+
+#ifdef HAVE_NVENC
+  if (session_rdp->rdp_nvenc)
+    grd_rdp_nvenc_push_cuda_context (session_rdp->rdp_nvenc);
+#endif /* HAVE_NVENC */
+
+  while (WaitForSingleObject (session_rdp->stop_event, 0) == WAIT_TIMEOUT)
+    g_main_context_iteration (session_rdp->graphics_context, TRUE);
+
+#ifdef HAVE_NVENC
+  if (session_rdp->rdp_nvenc)
+    grd_rdp_nvenc_pop_cuda_context (session_rdp->rdp_nvenc);
+#endif /* HAVE_NVENC */
+
+  return NULL;
+}
+
 GrdSessionRdp *
 grd_session_rdp_new (GrdRdpServer      *rdp_server,
                      GSocketConnection *connection,
@@ -1938,24 +1979,13 @@
 #ifdef HAVE_NVENC
   session_rdp->rdp_nvenc = rdp_nvenc;
 #endif /* HAVE_NVENC */
-  session_rdp->start_event = CreateEvent (NULL, TRUE, FALSE, NULL);
-  session_rdp->stop_event = CreateEvent (NULL, TRUE, FALSE, NULL);
 
   session_rdp->socket_thread = g_thread_new ("RDP socket thread",
                                              socket_thread_func,
                                              session_rdp);
-  if (!session_rdp->socket_thread)
-    {
-      g_warning ("Failed to create socket thread");
-
-      g_clear_pointer (&session_rdp->stop_event, CloseHandle);
-      g_clear_pointer (&session_rdp->start_event, CloseHandle);
-      g_object_unref (connection);
-      g_free (password);
-      g_free (username);
-
-      return NULL;
-    }
+  session_rdp->graphics_thread = g_thread_new ("RDP graphics thread",
+                                               graphics_thread_func,
+                                               session_rdp);
 
   init_rdp_session (session_rdp, username, password);
 
@@ -2006,6 +2036,15 @@
         rdp_peer_context->network_autodetection);
     }
 
+  if (session_rdp->graphics_thread)
+    {
+      g_assert (session_rdp->graphics_context);
+      g_assert (WaitForSingleObject (session_rdp->stop_event, 0) != 
WAIT_TIMEOUT);
+
+      g_main_context_wakeup (session_rdp->graphics_context);
+      g_clear_pointer (&session_rdp->graphics_thread, g_thread_join);
+    }
+
   g_clear_object (&session_rdp->pipewire_stream);
 
   g_clear_object (&rdp_peer_context->clipboard_rdp);
@@ -2042,9 +2081,6 @@
                                clear_pointer_bitmap,
                                NULL);
 
-  g_clear_pointer (&session_rdp->stop_event, CloseHandle);
-  g_clear_pointer (&session_rdp->start_event, CloseHandle);
-
   g_clear_handle_id (&session_rdp->close_session_idle_id, g_source_remove);
 }
 
@@ -2086,6 +2122,7 @@
                               GrdStream  *stream)
 {
   GrdSessionRdp *session_rdp = GRD_SESSION_RDP (session);
+  GMainContext *graphics_context = session_rdp->graphics_context;
   uint32_t pipewire_node_id;
   uint16_t refresh_rate;
   g_autoptr (GError) error = NULL;
@@ -2093,6 +2130,7 @@
   pipewire_node_id = grd_stream_get_pipewire_node_id (stream);
   refresh_rate = session_rdp->rdp_surface->refresh_rate;
   session_rdp->pipewire_stream = grd_rdp_pipewire_stream_new (session_rdp,
+                                                              graphics_context,
                                                               pipewire_node_id,
                                                               refresh_rate,
                                                               &error);
@@ -2138,10 +2176,16 @@
       g_clear_pointer (&session_rdp->pending_encode_source, g_source_unref);
     }
 
+  g_assert (!session_rdp->graphics_thread);
+  g_clear_pointer (&session_rdp->graphics_context, g_main_context_unref);
+
   g_clear_pointer (&session_rdp->pressed_unicode_keys, g_hash_table_unref);
   g_clear_pointer (&session_rdp->pressed_keys, g_hash_table_unref);
   g_clear_pointer (&session_rdp->pointer_cache, g_hash_table_unref);
 
+  g_clear_pointer (&session_rdp->stop_event, CloseHandle);
+  g_clear_pointer (&session_rdp->start_event, CloseHandle);
+
   G_OBJECT_CLASS (grd_session_rdp_parent_class)->dispose (object);
 }
 
@@ -2201,6 +2245,9 @@
 static void
 grd_session_rdp_init (GrdSessionRdp *session_rdp)
 {
+  session_rdp->start_event = CreateEvent (NULL, TRUE, FALSE, NULL);
+  session_rdp->stop_event = CreateEvent (NULL, TRUE, FALSE, NULL);
+
   session_rdp->pointer_cache = g_hash_table_new (NULL, 
are_pointer_bitmaps_equal);
   session_rdp->pressed_keys = g_hash_table_new (NULL, NULL);
   session_rdp->pressed_unicode_keys = g_hash_table_new (NULL, NULL);
@@ -2208,15 +2255,19 @@
   g_cond_init (&session_rdp->pending_jobs_cond);
   g_mutex_init (&session_rdp->pending_jobs_mutex);
   g_mutex_init (&session_rdp->rdp_flags_mutex);
+  g_mutex_init (&session_rdp->close_session_mutex);
 
   session_rdp->rdp_event_queue = grd_rdp_event_queue_new (session_rdp);
 
+  session_rdp->graphics_context = g_main_context_new ();
+
   session_rdp->pending_encode_source = g_source_new 
(&pending_encode_source_funcs,
                                                      sizeof (GSource));
   g_source_set_callback (session_rdp->pending_encode_source,
                          encode_pending_frames, session_rdp, NULL);
   g_source_set_ready_time (session_rdp->pending_encode_source, -1);
-  g_source_attach (session_rdp->pending_encode_source, NULL);
+  g_source_attach (session_rdp->pending_encode_source,
+                   session_rdp->graphics_context);
 }
 
 static void
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-remote-desktop-41.0/src/grd-session-rdp.h 
new/gnome-remote-desktop-41.1/src/grd-session-rdp.h
--- old/gnome-remote-desktop-41.0/src/grd-session-rdp.h 2021-09-19 
16:03:51.000000000 +0200
+++ new/gnome-remote-desktop-41.1/src/grd-session-rdp.h 2021-10-30 
16:37:19.000000000 +0200
@@ -49,10 +49,6 @@
 int grd_session_rdp_get_stride_for_width (GrdSessionRdp *session_rdp,
                                           int            width);
 
-void grd_session_rdp_resize_framebuffer (GrdSessionRdp *session_rdp,
-                                         uint32_t       width,
-                                         uint32_t       height);
-
 void grd_session_rdp_take_buffer (GrdSessionRdp *session_rdp,
                                   void          *data,
                                   uint16_t       width,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnome-remote-desktop-41.0/src/grd-vnc-pipewire-stream.c 
new/gnome-remote-desktop-41.1/src/grd-vnc-pipewire-stream.c
--- old/gnome-remote-desktop-41.0/src/grd-vnc-pipewire-stream.c 2021-09-19 
16:03:51.000000000 +0200
+++ new/gnome-remote-desktop-41.1/src/grd-vnc-pipewire-stream.c 2021-10-30 
16:37:19.000000000 +0200
@@ -427,6 +427,17 @@
   g_mutex_lock (&stream->frame_mutex);
   if (stream->pending_frame)
     {
+      if (!frame->data && stream->pending_frame->data)
+        frame->data = g_steal_pointer (&stream->pending_frame->data);
+      if (!frame->rfb_cursor && stream->pending_frame->rfb_cursor)
+        frame->rfb_cursor = g_steal_pointer 
(&stream->pending_frame->rfb_cursor);
+      if (!frame->cursor_moved && stream->pending_frame->cursor_moved)
+        {
+          frame->cursor_x = stream->pending_frame->cursor_x;
+          frame->cursor_y = stream->pending_frame->cursor_y;
+          frame->cursor_moved = TRUE;
+        }
+
       g_free (stream->pending_frame->data);
       g_clear_pointer (&stream->pending_frame, g_free);
     }

++++++ gnome-remote-desktop.obsinfo ++++++
--- /var/tmp/diff_new_pack.if4jY2/_old  2021-11-05 22:59:00.592296116 +0100
+++ /var/tmp/diff_new_pack.if4jY2/_new  2021-11-05 22:59:00.592296116 +0100
@@ -1,5 +1,5 @@
 name: gnome-remote-desktop
-version: 41.0
-mtime: 1632060231
-commit: 240489f399df798228128c4c2cf29afba1208481
+version: 41.1
+mtime: 1635604639
+commit: f895c2b28b3341af54cb2ce24ce76af8f3e1513d
 

Reply via email to