Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package xpra for openSUSE:Factory checked in at 2021-04-19 21:06:13 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/xpra (Old) and /work/SRC/openSUSE:Factory/.xpra.new.12324 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "xpra" Mon Apr 19 21:06:13 2021 rev:33 rq:886603 version:4.1.2 Changes: -------- --- /work/SRC/openSUSE:Factory/xpra/xpra.changes 2021-03-30 21:47:38.390773396 +0200 +++ /work/SRC/openSUSE:Factory/.xpra.new.12324/xpra.changes 2021-04-19 21:06:36.348083923 +0200 @@ -1,0 +2,30 @@ +Tue Apr 6 14:18:51 UTC 2021 - Luigi Baldoni <aloi...@gmx.com> + +- Update to version 4.1.2 + * fix unnecessary screen update delays + * fix screen refresh rate detection + * increase the default screen update refresh rate + * fix missing encodings with 'upgrade' and 'upgrade-desktop' + subcommands + * fix client failures due to missing socket directories + * more correct API usage of 'notify2' backend + * fix `run_scaled` script handling of multiple arguments + * fix ioctl error with nested SSH connections + * fix video region detection error + * fix sessions GUI not updating on process exit + * fix compatibility with newer versions of python-zeroconf + * fix directory listing with the builtin http server (still + disabled by default) + * fix the server's GetAll dbus property handler + * fix display-name validation check + * the 'exec-wrapper' option no longer needs to use an absolute + path + * ignore bell audio devices + * show the correct list of pressed keys, unkown modifiers + * prevent the splash screen process from consuming too much CPU + * better service configuration file location detection + * packaging script fixes, library and documentation updates +- Update xpra-html5 to 4.1.2 and uglify-js to 3.13.3 +- Refresh xpra-paths.patch + +------------------------------------------------------------------- Old: ---- uglify-js-3.13.1.tgz xpra-4.1.1.tar.xz xpra-html5-4.0.6.tar.xz New: ---- uglify-js-3.13.3.tgz xpra-4.1.2.tar.xz xpra-html5-4.1.2.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ xpra.spec ++++++ --- /var/tmp/diff_new_pack.fZMllX/_old 2021-04-19 21:06:37.012084919 +0200 +++ /var/tmp/diff_new_pack.fZMllX/_new 2021-04-19 21:06:37.016084924 +0200 @@ -17,9 +17,9 @@ # -%define xpra_ver 4.1.1 -%define html5_ver 4.0.6 -%define uglifyjs_ver 3.13.1 +%define xpra_ver 4.1.2 +%define html5_ver 4.1.2 +%define uglifyjs_ver 3.13.3 %global __requires_exclude ^typelib\\(GtkosxApplication\\)|typelib\\(GdkGLExt\\)|typelib\\(GtkGLExt\\).*$ Name: xpra Version: %{xpra_ver} @@ -139,7 +139,7 @@ -e 's|share/doc/xpra|share/doc/packages/xpra|' \ -i setup.py -sed -i '/install_html5/s/verbose=False/verbose=True/' %{name}-html5-%{html5_ver}/setup_html5.py +sed -i '/install_html5/s/verbose=False/verbose=True/' %{name}-html5-%{html5_ver}/setup.py %build python3 setup.py clean @@ -170,7 +170,7 @@ --verbose pushd %{name}-html5-%{html5_ver} -PATH=$PATH:../package/bin python3 setup_html5.py %{buildroot}%{_datadir}/%{name}/www +PATH=$PATH:../package/bin python3 setup.py install %{buildroot}%{_datadir}/%{name}/www popd rm -rf %{buildroot}%{_datadir}/xpra/cuda ++++++ uglify-js-3.13.1.tgz -> uglify-js-3.13.3.tgz ++++++ ++++ 2005 lines of diff (skipped) ++++++ xpra-4.1.1.tar.xz -> xpra-4.1.2.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/PKG-INFO new/xpra-4.1.2/PKG-INFO --- old/xpra-4.1.1/PKG-INFO 2021-03-07 15:45:11.000000000 +0100 +++ new/xpra-4.1.2/PKG-INFO 2021-04-06 15:29:10.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: xpra -Version: 4.1.1 +Version: 4.1.2 Summary: multi-platform screen and application forwarding system Home-page: https://xpra.org/ Author: Antoine Martin diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/docs/CHANGELOG.md new/xpra-4.1.2/docs/CHANGELOG.md --- old/xpra-4.1.1/docs/CHANGELOG.md 2021-03-07 15:32:44.000000000 +0100 +++ new/xpra-4.1.2/docs/CHANGELOG.md 2021-04-06 10:09:44.000000000 +0200 @@ -1,5 +1,30 @@ # Changelog +## [4.1.2] 2021-04-06 +* fix unnecessary screen update delays +* fix screen refresh rate detection +* increase the default screen update refresh rate +* fix missing encodings with 'upgrade' and 'upgrade-desktop' subcommands +* fix client failures due to missing socket directories +* fix crashes when showing notifications (ie: MacOS Big Sur) +* workaround for hidden library paths (MacOS Big Sur) +* more correct API usage of 'notify2' backend +* fix `run_scaled` script handling of multiple arguments +* fix ioctl error with nested SSH connections +* fix video region detection error +* fix sessions GUI not updating on process exit +* fix compatibility with newer versions of python-zeroconf +* fix directory listing with the builtin http server (still disabled by default) +* fix clipboard errors on MS Windows when we fail to acquire the lock +* fix the server's GetAll dbus property handler +* fix display-name validation check +* the 'exec-wrapper' option no longer needs to use an absolute path +* ignore bell audio devices +* show the correct list of pressed keys, unkown modifiers +* prevent the splash screen process from consuming too much CPU +* better service configuration file location detection +* packaging script fixes, library and documentation updates + ## [4.1.1] 2021-03-07 * ensure splash screen failures are not fatal, fix threading bug * avoid [vaapi crashes in ffmpeg encoder](https://github.com/Xpra-org/xpra/issues/3039) @@ -8,7 +33,7 @@ * laggy input handling and screen updates * long subcommand timeout * fix [plink ssh mode on MS Windows](https://github.com/Xpra-org/xpra/issues/3040) -* fix connection errors with trailing slash in display name +* fix connection errors with [trailing slash in display name](https://github.com/Xpra-org/xpra/issues/3040#issuecomment-791221370) * workaround [API breakage](https://github.com/Xpra-org/xpra/issues/3043) in newer versions of python-zeroconf * warn just once if expected GStreamer element properties are missing * map more applications to text mode ('code', 'jetbrains') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/docs/FAQ.md new/xpra-4.1.2/docs/FAQ.md --- old/xpra-4.1.1/docs/FAQ.md 2021-03-07 15:32:42.000000000 +0100 +++ new/xpra-4.1.2/docs/FAQ.md 2021-04-06 10:03:41.000000000 +0200 @@ -13,7 +13,8 @@ ### I get a GPG error: `KEYEXPIRED 1273837137` The key had expired. Try re-importing the [updated key](https://xpra.org/gpg.asc).\ On Debian you may have to delete the key (`apt-key -d`) before adding it again. - +### On Debian, I get a *Origin changed*, *this must be accepted explicitly...* when updating +Run `apt-get update --allow-releaseinfo-change`. *** @@ -88,3 +89,7 @@ These are harmless and unavoidable, see [Bug 1615700 - warning shows up after run "Xvfb :99 &"](https://bugzilla.redhat.com/show_bug.cgi?id=1615700#c1) * `gtk_window_add_accel_group: assertion 'GTK_IS_WINDOW (window)' failed` - harmless and unavoidable on MacOS * `gui.py: Warning: invalid cast from 'GtkMenuBar?' to 'GtkWindow?'` - harmless and unavoidable on MacOS +### MacOS complains about "damaged application" +``` +sudo xattr -rd com.apple.quarantine /Applications/Xpra.app +``` diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/fs/bin/add_build_info.py new/xpra-4.1.2/fs/bin/add_build_info.py --- old/xpra-4.1.1/fs/bin/add_build_info.py 2021-03-07 15:32:43.000000000 +0100 +++ new/xpra-4.1.2/fs/bin/add_build_info.py 2021-04-06 10:04:54.000000000 +0200 @@ -283,25 +283,24 @@ "REVISION" : "unknown", "LOCAL_MODIFICATIONS" : "unknown" } - proc = subprocess.Popen("git branch --show-current", stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) - out, _ = proc.communicate() branch = None - if proc.returncode==0: - branch = out.decode("utf-8").splitlines()[0] - else: - print("could not get branch information with 'git branch --show-current'") - print("trying 'git branch'") - proc = subprocess.Popen("git branch", stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) + for cmd in ( + "git branch --show-current", + #when in detached state, the one above does not work, but this one does: + "git branch --remote --verbose --no-abbrev --contains | sed -rne 's/^[^\/]*\/([^\ ]+).*$/\1/p'", + #if all else fails: + "git branch | grep '* '", + ): + proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) out, _ = proc.communicate() - if proc.returncode!=0: - print(" also failed!") - print("branch is unknown") - else: - for line in out.decode("utf-8").splitlines(): - if line.startswith("* "): - branch = line.split(" ")[1] - break - if branch: + if proc.returncode==0: + branch_out = out.decode("utf-8").splitlines() + if branch_out: + branch = branch_out[0] + break + if not branch: + print("Warning: could not get branch information") + else: props["BRANCH"] = branch #use the number of changes since the last tag: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/fs/bin/run_scaled new/xpra-4.1.2/fs/bin/run_scaled --- old/xpra-4.1.1/fs/bin/run_scaled 2021-03-07 15:32:43.000000000 +0100 +++ new/xpra-4.1.2/fs/bin/run_scaled 2021-04-06 10:03:41.000000000 +0200 @@ -86,7 +86,7 @@ xpra_argv = [ xpra_cmd, "start", - "--start-child=\"%s\"" % join(command_argv), + "--start-child=%s" % join(command_argv), "--attach=yes", "--exit-with-children=yes", "--desktop-scaling=%s" % scale, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/fs/bin/set_source_version new/xpra-4.1.2/fs/bin/set_source_version --- old/xpra-4.1.1/fs/bin/set_source_version 1970-01-01 01:00:00.000000000 +0100 +++ new/xpra-4.1.2/fs/bin/set_source_version 2021-04-06 10:04:54.000000000 +0200 @@ -0,0 +1,59 @@ +#!/bin/bash + +NEWV=$1 +AUTHOR=$2 +if [ -z "${NEWV}" ]; then + echo "usage: $0 NEW_VERSION" + exit 1 +fi +if [ -z "${AUTHOR}" ]; then + AUTHOR="Antoine Martin <anto...@xpra.org>" +fi + + +for f in "fs/lib/cups/xpraforwarder" "xpra/__init__.py"; do + sed -i'' "s/__version__ = .*/__version__ = \"$NEWV\"/" $f +done + +for k in "AppVersion" "VersionInfoVersion"; do + sed -i'' 's/$k=.*/$k=$NEWV/' "packaging/MSWindows/xpra.iss" +done +for k in "AppVerName" "UninstallDisplayName"; do + sed -i'' 's/$k=.*/$k=Xpra $NEWV/' "packaging/MSWindows/xpra.iss" +done + +#RPM / DEB build scripts: +for f in build_debs.sh build_rpms.sh; do + sed -i'' "s/^VERSION=.*/VERSION=$NEWV/" "packaging/buildah/$f" +done + +#changelogs: +head -n 2 "docs/CHANGELOG.md" > "docs/CHANGELOG.md.new" +echo "## [$NEWV] `date +%Y-%m-%d`" >> "docs/CHANGELOG.md.new" +echo "* TODO" >> "docs/CHANGELOG.md.new" +echo "" >> "docs/CHANGELOG.md.new" +tail -n +3 "docs/CHANGELOG.md" >> "docs/CHANGELOG.md.new" +mv "docs/CHANGELOG.md.new" "docs/CHANGELOG.md" + +echo "xpra ($NEWV-1) UNRELEASED; urgency=low" > "./packaging/debian/changelog.new" +echo " * TODO" >> "./packaging/debian/changelog.new" +echo "" >> "./packaging/debian/changelog.new" +echo " -- Antoine Martin <anto...@nagafix.co.uk> `date -R`" >> "./packaging/debian/changelog.new" +echo "" >> "./packaging/debian/changelog.new" +cat "./packaging/debian/changelog" >> "./packaging/debian/changelog.new" +mv "./packaging/debian/changelog.new" "./packaging/debian/changelog" + +sed -i'' "s/%define version .*/%define version $NEWV/" "./packaging/rpm/xpra.spec" +sed -i'' "/%changelog/a - TODO" "./packaging/rpm/xpra.spec" + +CHANGELOGDATE=`date '+%a %b %d %Y'` +sed -i'' "/%changelog/a \* $CHANGELOGDATE $AUTHOR $NEWV-10" "./packaging/rpm/xpra.spec" + +git commit -m "bump version" \ + xpra/__init__.py \ + packaging/rpm/xpra.spec \ + packaging/debian/changelog \ + packaging/buildah/build_rpms.sh \ + packaging/buildah/build_debs.sh \ + fs/lib/cups/xpraforwarder \ + docs/CHANGELOG.md diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/fs/etc/xpra/content-type/50_class.conf new/xpra-4.1.2/fs/etc/xpra/content-type/50_class.conf --- old/xpra-4.1.1/fs/etc/xpra/content-type/50_class.conf 2021-03-07 15:32:43.000000000 +0100 +++ new/xpra-4.1.2/fs/etc/xpra/content-type/50_class.conf 2021-04-06 10:03:41.000000000 +0200 @@ -6,6 +6,7 @@ class-instance:.*terminal.*=text class-instance:abiword=text +class-instance:atom=text class-instance:avahi-discover=text class-instance:baobab=picture class-instance:bluetooth-sendto=text diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/fs/lib/cups/xpraforwarder new/xpra-4.1.2/fs/lib/cups/xpraforwarder --- old/xpra-4.1.1/fs/lib/cups/xpraforwarder 2021-03-07 15:32:44.000000000 +0100 +++ new/xpra-4.1.2/fs/lib/cups/xpraforwarder 2021-04-06 10:04:54.000000000 +0200 @@ -38,7 +38,7 @@ from urllib.parse import urlparse, parse_qs -__version__ = "4.1.1" +__version__ = "4.1.2" #Writes a syslog entry (msg) at the default facility: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/packaging/MSWindows/MINGW_SETUP.sh new/xpra-4.1.2/packaging/MSWindows/MINGW_SETUP.sh --- old/xpra-4.1.1/packaging/MSWindows/MINGW_SETUP.sh 2021-03-07 15:32:43.000000000 +0100 +++ new/xpra-4.1.2/packaging/MSWindows/MINGW_SETUP.sh 2021-04-06 10:04:54.000000000 +0200 @@ -32,7 +32,7 @@ #media libraries (more than we actually need): $PACMAN --noconfirm -S ${XPKG}ffmpeg ${XPKG}libyuv-git ${XPKG}gst-plugins-good ${XPKG}gst-plugins-bad ${XPKG}gst-plugins-ugly #network layer libraries: -$PACMAN --noconfirm -S ${XPKG}lz4 ${XPKG}lzo2 heimdal-libs openssh sshpass libsodium qrencode +$PACMAN --noconfirm -S ${XPKG}lz4 ${XPKG}lzo2 heimdal-libs openssh sshpass ${XPKG}libsodium ${XPKG}qrencode #python GStreamer bindings: $PACMAN --noconfirm -S ${XPKG}gst-python #development tools and libs for building extra packages: @@ -42,23 +42,21 @@ done $PACMAN --noconfirm -S ${XPKG}cython -#cx_Freeze gets very confused about sqlite DLL location -#don't fight it and just symlink it where it will be found: -mkdir /mingw64/DLLs -pushd /mingw64/DLLs -ln -sf /mingw64/lib/sqlite3*/sqlite3*.dll sqlite3.dll -popd - #this needs to be converted to a PKGBUILD: -pip3 install yuicompressor browser-cookie3 qrencode - +$PACMAN --noconfirm -S ${XPKG}python-pip ${XPKG}gcc +for x in browser-cookie3 qrencode; do + pip3 install $x +done #for webcam support: #$PACMAN --noconfirm -S ${XPKG}opencv ${XPKG}hdf5 ${XPKG}tesseract-ocr echo "for printing support, install libpdfium" echo "by downloading the plain x64 pdfium binary from" echo "https://github.com/bblanchon/pdfium-binaries" -echo "and place the `pdfium.dll` in '$MINGW_PREFIX/bin'" +echo "and place the 'pdfium.dll' in '$MINGW_PREFIX/bin'" +echo +echo "for minifying the html5 client," +echo "install yuicompressor" echo echo "for generating the documentation, install pandoc" echo "https://github.com/jgm/pandoc/releases/latest" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/packaging/MacOS/jhbuild/modulesets-stable/gtk-osx-network.modules new/xpra-4.1.2/packaging/MacOS/jhbuild/modulesets-stable/gtk-osx-network.modules --- old/xpra-4.1.1/packaging/MacOS/jhbuild/modulesets-stable/gtk-osx-network.modules 2021-03-07 15:32:43.000000000 +0100 +++ new/xpra-4.1.2/packaging/MacOS/jhbuild/modulesets-stable/gtk-osx-network.modules 2021-04-06 10:03:41.000000000 +0200 @@ -39,8 +39,8 @@ <autotools id="openssl" autogen-sh="Configure" autogenargs="shared " autogen-template="%(srcdir)s/%(autogen-sh)s --prefix=%(prefix)s --openssldir=%(prefix)s/etc/ssl %(autogenargs)s" makeinstallargs="install_sw" supports-non-srcdir-builds="no"> - <branch module="openssl-1.1.1j.tar.gz" version="1.1.1j" repo="openssl" - hash="sha256:aaf2fcb575cdf6491b98ab4829abf78a3dec8402b8b81efc8f23c00d443981bf"/> + <branch module="openssl-1.1.1k.tar.gz" version="1.1.1k" repo="openssl" + hash="sha256:892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5"/> </autotools> <!-- Rudely demands TeX to build documentation --> @@ -124,9 +124,9 @@ </meson> <autotools id="libwebp" autogen-sh="configure" autogenargs="--enable-libwebpmux --enable-libwebpdecoder" supports-non-srcdir-builds="no"> - <branch module="/releases/webp/libwebp-1.1.0.tar.gz" - version="1.1.0" - hash="sha256:98a052268cc4d5ece27f76572a7f50293f439c17a98e67c4ea0c7ed6f50ef043" + <branch module="/releases/webp/libwebp-1.2.0.tar.gz" + version="1.2.0" + hash="sha256:2fc8bbde9f97f2ab403c0224fb9ca62b2e6852cbc519e91ceaa7c153ffd88a0c" repo="webm"/> <dependencies> <dep package="libjpeg"/> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/packaging/MacOS/jhbuild/xpra-python3.modules new/xpra-4.1.2/packaging/MacOS/jhbuild/xpra-python3.modules --- old/xpra-4.1.1/packaging/MacOS/jhbuild/xpra-python3.modules 2021-03-07 15:32:43.000000000 +0100 +++ new/xpra-4.1.2/packaging/MacOS/jhbuild/xpra-python3.modules 2021-04-06 10:03:41.000000000 +0200 @@ -220,9 +220,9 @@ <distutils id="python3-pillow" python3="1"> <branch repo="files.pythonhosted.org" - module="/packages/60/f0/dd2eb7911f948bf529f58f0c7931f6f6466f711bd6f1d81a69dc4edd4e2a/Pillow-8.1.2.tar.gz" - hash="sha256:b07c660e014852d98a00a91adfbe25033898a9d90a8f39beb2437d22a203fc44" - version="8.1.2"/> + module="/packages/21/23/af6bac2a601be6670064a817273d4190b79df6f74d8012926a39bc7aa77f/Pillow-8.2.0.tar.gz" + hash="sha256:a787ab10d7bb5494e5f76536ac460741788f1fbce851068d73a87ca7c35fc3e1" + version="8.2.0"/> <dependencies> <dep package="python3"/> <dep package="libwebp"/> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/packaging/MacOS/make-app.sh new/xpra-4.1.2/packaging/MacOS/make-app.sh --- old/xpra-4.1.1/packaging/MacOS/make-app.sh 2021-03-07 15:32:44.000000000 +0100 +++ new/xpra-4.1.2/packaging/MacOS/make-app.sh 2021-04-06 10:03:41.000000000 +0200 @@ -25,6 +25,7 @@ if [ ! -d "html5" ]; then echo "html5 client not found" echo " perhaps run: 'git clone https://github.com/Xpra-org/xpra-html5'" + echo " then: ln -sf xpra-html5 html5" exit 1 fi fi diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/packaging/buildah/build_all.sh new/xpra-4.1.2/packaging/buildah/build_all.sh --- old/xpra-4.1.1/packaging/buildah/build_all.sh 2021-03-07 15:32:44.000000000 +0100 +++ new/xpra-4.1.2/packaging/buildah/build_all.sh 2021-04-06 10:04:54.000000000 +0200 @@ -7,8 +7,9 @@ #go make a snapshot: pushd ../.. +rm -f dist/xpra-*.tar.xz python3 ./setup.py sdist --formats=xztar -mv dist/xpra-4.1.1.tar.xz ./packaging/buildah/pkgs/ +mv dist/xpra-*.tar.xz ./packaging/buildah/pkgs/ popd DO_DOWNLOAD="${DO_DOWNLOAD:-1}" @@ -32,6 +33,7 @@ #use a temp image: TEMP_IMAGE="$IMAGE_NAME-temp" + buildah rm "${TEMP_IMAGE}" >& /dev/null buildah rmi "${TEMP_IMAGE}" >& /dev/null buildah from --pull-never --name $TEMP_IMAGE $IMAGE_NAME if [ "$?" != "0" ]; then diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/packaging/buildah/build_debs.sh new/xpra-4.1.2/packaging/buildah/build_debs.sh --- old/xpra-4.1.1/packaging/buildah/build_debs.sh 2021-03-07 15:32:44.000000000 +0100 +++ new/xpra-4.1.2/packaging/buildah/build_debs.sh 2021-04-06 10:04:54.000000000 +0200 @@ -15,7 +15,7 @@ mkdir -p $REPO_ARCH_PATH rm xpra-build-deps* -VERSION=4.1.1 +VERSION=4.1.2 tar -Jxf pkgs/xpra-$VERSION.tar.xz pushd xpra-$VERSION ln -sf packaging/debian . diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/packaging/buildah/build_rpms.sh new/xpra-4.1.2/packaging/buildah/build_rpms.sh --- old/xpra-4.1.1/packaging/buildah/build_rpms.sh 2021-03-07 15:32:44.000000000 +0100 +++ new/xpra-4.1.2/packaging/buildah/build_rpms.sh 2021-04-06 10:04:54.000000000 +0200 @@ -10,20 +10,19 @@ ARCH=`arch` for dir in "./repo/SRPMS" "./repo/$ARCH"; do - if [ ! -d "$dir/repodata" ]; then - echo "* creating repodata in $dir" - mkdir $dir - createrepo $dir > /dev/null - fi + echo "* (re)creating repodata in $dir" + mkdir $dir 2> /dev/null + rm -fr $dir/repodata + createrepo $dir > /dev/null done #if we are going to build xpra, #make sure we expose the revision number #so the spec file can generate the expected file names #(ie: xpra-4.1-0.r29000) -XPRA_VERSION=4.1.1 -tar -Jxf pkgs/xpra-$XPRA_VERSION.tar.xz xpra-$XPRA_VERSION/xpra/src_info.py -XPRA_REVISION=`grep "REVISION=" "xpra-$XPRA_VERSION/xpra/src_info.py" | awk -F= '{print $2}'` +VERSION=4.1.2 +tar -Jxf pkgs/xpra-$VERSION.tar.xz xpra-$VERSION/xpra/src_info.py +XPRA_REVISION=`grep "REVISION=" "xpra-$VERSION/xpra/src_info.py" | awk -F= '{print $2}'` export XPRA_REVISION #read the name of the spec files we may want to build: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/packaging/buildah/setup_build_containers.sh new/xpra-4.1.2/packaging/buildah/setup_build_containers.sh --- old/xpra-4.1.1/packaging/buildah/setup_build_containers.sh 2021-03-07 15:32:44.000000000 +0100 +++ new/xpra-4.1.2/packaging/buildah/setup_build_containers.sh 2021-04-06 10:04:54.000000000 +0200 @@ -14,7 +14,7 @@ BUILDAH_DIR=`dirname $(readlink -f $0)` pushd ${BUILDAH_DIR} -RPM_DISTROS=${RPM_DISTROS:-Fedora:32 Fedora:33 CentOS:8} +RPM_DISTROS=${RPM_DISTROS:-Fedora:32 Fedora:33 Fedora:34 CentOS:8} for DISTRO in $RPM_DISTROS; do DISTRO_LOWER="${DISTRO,,}" if [[ "$DISTRO_LOWER" == "xx"* ]];then @@ -38,7 +38,7 @@ buildah run $IMAGE_NAME dnf update -y buildah run $IMAGE_NAME dnf install -y 'dnf-command(builddep)' buildah run $IMAGE_NAME dnf install -y redhat-rpm-config rpm-build rpmdevtools createrepo_c rsync - if [ "${MINIMAL}" != "0" ]; then + if [ "${MINIMAL}" == "0" ]; then buildah run $IMAGE_NAME dnf install -y gcc gcc-c++ make cmake fi echo $DISTRO | egrep -i "fedora" >& /dev/null @@ -46,12 +46,20 @@ RNUM=`echo $DISTRO | awk -F: '{print $2}'` dnf -y makecache --releasever=$RNUM --setopt=cachedir=/var/cache/dnf/$RNUM buildah run $IMAGE_NAME dnf install -y rpmspectool + if [ "${MINIMAL}" == "0" ]; then + #these are required by the xpra-html5 build: + buildah run $IMAGE_NAME dnf install -y brotli js-jquery desktop-backgrounds-compat + fi else #some of the packages we need for building are in the "PowerTools" repository: buildah run $IMAGE_NAME dnf config-manager --set-enabled powertools #no "rpmspectool" package on CentOS 8, use setuptools to install it: buildah run $IMAGE_NAME dnf install -y python3-setuptools - buildah run $IMAGE_NAME easy_install rpmspec + buildah run $IMAGE_NAME easy_install-3.6 python-rpm-spec + if [ "${MINIMAL}" == "0" ]; then + #these are required by the xpra-html5 build: + buildah run $IMAGE_NAME dnf install -y brotli centos-backgrounds centos-logos + fi fi buildah run $IMAGE_NAME rpmdev-setuptree #buildah run dnf clean all @@ -99,9 +107,11 @@ #so add as many dependencies already: #buildah run $IMAGE_NAME apt-get install -y gcc g++ debhelper devscripts buildah run $IMAGE_NAME apt-get install -y devscripts equivs lsb-release perl findutils - if [ "${MINIMAL}" != "0" ]; then + if [ "${MINIMAL}" == "0" ]; then buildah copy $IMAGE_NAME "../debian/control" "/src/control" buildah run $IMAGE_NAME mk-build-deps --install --tool='apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends --yes' /src/control + #used by the html5 client: + buildah run $IMAGE_NAME apt-get install -y uglifyjs brotli brotli libjs-jquery libjs-jquery-ui gnome-backgrounds fi buildah run $IMAGE_NAME apt-get autoremove -y #or we could do this explicitly: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/packaging/buildah/update_all.sh new/xpra-4.1.2/packaging/buildah/update_all.sh --- old/xpra-4.1.1/packaging/buildah/update_all.sh 2021-03-07 15:32:44.000000000 +0100 +++ new/xpra-4.1.2/packaging/buildah/update_all.sh 2021-04-06 10:04:54.000000000 +0200 @@ -28,6 +28,9 @@ echo $DISTRO | egrep -iv "fedora|centos" >& /dev/null RPM="$?" if [ "${RPM}" == "1" ]; then + buildah run $TEMP_IMAGE rm -fr "/src/repo/.repodata" "/src/repo/repodata" "/src/repo/x86_64" + buildah run $TEMP_IMAGE mkdir "/src/repo/x86_64" + buildah run $TEMP_IMAGE createrepo "/src/repo/x86_64/" buildah run $TEMP_IMAGE dnf update --disablerepo=xpra-local-build -y else buildah config --env DEBIAN_FRONTEND=noninteractive $IMAGE_NAME @@ -40,5 +43,5 @@ buildah run $TEMP_IMAGE apt-get autoremove -y fi buildah commit $IMAGE_NAME $TEMP_IMAGE - buildah rm "${TEMP_IMAGE}" + buildah rmi "${TEMP_IMAGE}" done diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/packaging/debian/changelog new/xpra-4.1.2/packaging/debian/changelog --- old/xpra-4.1.1/packaging/debian/changelog 2021-03-07 15:32:44.000000000 +0100 +++ new/xpra-4.1.2/packaging/debian/changelog 2021-04-06 10:10:18.000000000 +0200 @@ -1,3 +1,30 @@ +xpra (4.1.2-1) UNRELEASED; urgency=low + * fix unnecessary screen update delays + * fix screen refresh rate detection + * increase the default screen update refresh rate + * fix missing encodings with 'upgrade' and 'upgrade-desktop' subcommands + * fix client failures due to missing socket directories + * fix crashes when showing notifications (ie: MacOS Big Sur) + * workaround for hidden library paths (MacOS Big Sur) + * more correct API usage of 'notify2' backend + * fix `run_scaled` script handling of multiple arguments + * fix ioctl error with nested SSH connections + * fix video region detection error + * fix sessions GUI not updating on process exit + * fix compatibility with newer versions of python-zeroconf + * fix directory listing with the builtin http server (still disabled by default) + * fix clipboard errors on MS Windows when we fail to acquire the lock + * fix the server's GetAll dbus property handler + * fix display-name validation check + * the 'exec-wrapper' option no longer needs to use an absolute path + * ignore bell audio devices + * show the correct list of pressed keys, unkown modifiers + * prevent the splash screen process from consuming too much CPU + * better service configuration file location detection + * packaging script fixes, library and documentation updates + + -- Antoine Martin <anto...@nagafix.co.uk> Tue, 06 Apr 2021 15:10:12 +0700 + xpra (4.1.1-1) UNRELEASED; urgency=low * ensure splash screen failures are not fatal, fix threading bug * avoid vaapi crashes in ffmpeg encoder (#3039) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/packaging/debian/control new/xpra-4.1.2/packaging/debian/control --- old/xpra-4.1.1/packaging/debian/control 2021-03-07 15:32:43.000000000 +0100 +++ new/xpra-4.1.2/packaging/debian/control 2021-04-06 10:04:54.000000000 +0200 @@ -25,8 +25,8 @@ ,pandoc Standards-Version: 3.9.3 Homepage: https://xpra.org/ -Vcs-Svn: https://xpra.org/svn/Xpra/ -Vcs-Browser: https://xpra.org/trac/browser/ +Vcs-Git: https://github.com/Xpra-org/xpra +Vcs-Browser: https://github.com/Xpra-org/xpra Package: xpra diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/packaging/rpm/python3-pytools.spec new/xpra-4.1.2/packaging/rpm/python3-pytools.spec --- old/xpra-4.1.1/packaging/rpm/python3-pytools.spec 2021-03-07 15:32:43.000000000 +0100 +++ new/xpra-4.1.2/packaging/rpm/python3-pytools.spec 2021-04-06 10:03:41.000000000 +0200 @@ -1,13 +1,13 @@ %define _disable_source_fetch 0 Name: python3-pytools -Version: 2020.4.4 -Release: 2%{?dist} +Version: 2021.2.1 +Release: 1%{?dist} Summary: A collection of tools for python Group: Development/Languages License: MIT URL: http://pypi.python.org/pypi/pytools -Source0: https://files.pythonhosted.org/packages/16/ed/f4b298876b9b624150cc01830075f7cb0b9e09c1abfc46daef14811f3eed/pytools-%{version}.tar.gz +Source0: https://files.pythonhosted.org/packages/3c/fb/a059825fa8c2c79894eca8aadcb798a1e5c66c0e66999a2374f313766823/pytools-%{version}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) Provides: python3-pytools = %{version}-%{release} BuildArch: noarch @@ -60,6 +60,9 @@ %changelog +* Sun Mar 28 2021 Antoine Martin <anto...@xpra.org> - 2021.2.1-1 +- new upstream release + * Wed Feb 17 2021 Antoine Martin <anto...@xpra.org> - 2020.4.4-2 - verify source checksum diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/packaging/rpm/x264-xpra.spec new/xpra-4.1.2/packaging/rpm/x264-xpra.spec --- old/xpra-4.1.1/packaging/rpm/x264-xpra.spec 2021-03-07 15:32:44.000000000 +0100 +++ new/xpra-4.1.2/packaging/rpm/x264-xpra.spec 2021-04-06 10:04:54.000000000 +0200 @@ -13,6 +13,9 @@ AutoProv: 0 BuildRequires: nasm +BuildRequires: gcc +BuildRequires: make +BuildRequires: perl-Digest-MD5 %if 0%{?fedora}%{?el8} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/packaging/rpm/xpra.spec new/xpra-4.1.2/packaging/rpm/xpra.spec --- old/xpra-4.1.1/packaging/rpm/xpra.spec 2021-03-07 15:32:44.000000000 +0100 +++ new/xpra-4.1.2/packaging/rpm/xpra.spec 2021-04-06 10:10:02.000000000 +0200 @@ -4,7 +4,7 @@ # later version. See the file COPYING for details. %define _disable_source_fetch 0 -%define version 4.1.1 +%define version 4.1.2 %{!?__python3: %define __python3 python3} %{!?python3_sitearch: %global python3_sitearch %(%{__python3} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")} @@ -604,6 +604,31 @@ %changelog +* Tue Apr 06 2021 Antoine Martin <anto...@xpra.org> 4.1.2-10 +- fix unnecessary screen update delays +- fix screen refresh rate detection +- increase the default screen update refresh rate +- fix missing encodings with 'upgrade' and 'upgrade-desktop' subcommands +- fix client failures due to missing socket directories +- fix crashes when showing notifications (ie: MacOS Big Sur) +- workaround for hidden library paths (MacOS Big Sur) +- more correct API usage of 'notify2' backend +- fix `run_scaled` script handling of multiple arguments +- fix ioctl error with nested SSH connections +- fix video region detection error +- fix sessions GUI not updating on process exit +- fix compatibility with newer versions of python-zeroconf +- fix directory listing with the builtin http server (still disabled by default) +- fix clipboard errors on MS Windows when we fail to acquire the lock +- fix the server's GetAll dbus property handler +- fix display-name validation check +- the 'exec-wrapper' option no longer needs to use an absolute path +- ignore bell audio devices +- show the correct list of pressed keys, unkown modifiers +- prevent the splash screen process from consuming too much CPU +- better service configuration file location detection +- packaging script fixes, library and documentation updates + * Sun Mar 07 2021 Antoine Martin <anto...@xpra.org> 4.1.1-1 - ensure splash screen failures are not fatal, fix threading bug - avoid vaapi crashes in ffmpeg encoder (#3039) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/setup.py new/xpra-4.1.2/setup.py --- old/xpra-4.1.1/setup.py 2021-03-07 15:32:43.000000000 +0100 +++ new/xpra-4.1.2/setup.py 2021-04-06 10:04:54.000000000 +0200 @@ -982,10 +982,10 @@ "build/etc/xpra/xpra.conf"] + glob.glob("build/etc/xpra/conf.d/*.conf") if cuda_rebuild_ENABLED: CLEAN_FILES += [ - "xpra/codecs/cuda_common/ARGB_to_NV12.fatbin", - "xpra/codecs/cuda_common/ARGB_to_YUV444.fatbin", - "xpra/codecs/cuda_common/BGRA_to_NV12.fatbin", - "xpra/codecs/cuda_common/BGRA_to_YUV444.fatbin", + "fs/share/xpra/cuda/ARGB_to_NV12.fatbin", + "fs/share/xpra/cuda/ARGB_to_YUV444.fatbin", + "fs/share/xpra/cuda/BGRA_to_NV12.fatbin", + "fs/share/xpra/cuda/BGRA_to_YUV444.fatbin", ] for x in CLEAN_FILES: p, ext = os.path.splitext(x) @@ -1621,11 +1621,18 @@ if service_ENABLED: #Linux init service: subs = {} - if os.path.exists("/etc/sysconfig"): - copytodir("fs/etc/sysconfig/xpra", "/etc/sysconfig") - elif os.path.exists("/etc/default"): - copytodir("fs/etc/sysconfig/xpra", "/etc/default") - subs[b"/etc/sysconfig"] = b"/etc/default" + if is_RedHat() or is_CentOS() or is_Fedora(): + cdir = "/etc/sysconfig" + elif is_Debian() or is_Ubuntu(): + cdir = "/etc/default" + elif os.path.exists("/etc/sysconfig"): + cdir = "/etc/sysconfig" + else: + cdir = "/etc/default" + copytodir("fs/etc/sysconfig/xpra", cdir) + if cdir!="/etc/sysconfig": + #also replace the reference to it in the service file below + subs[b"/etc/sysconfig"] = cdir.encode() if os.path.exists("/bin/systemctl"): if sd_listen_ENABLED: copytodir("fs/lib/systemd/system/xpra.service", systemd_dir, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/xpra/__init__.py new/xpra-4.1.2/xpra/__init__.py --- old/xpra-4.1.1/xpra/__init__.py 2021-03-07 15:32:44.000000000 +0100 +++ new/xpra-4.1.2/xpra/__init__.py 2021-04-06 10:04:54.000000000 +0200 @@ -4,4 +4,4 @@ # Xpra is released under the terms of the GNU GPL v2, or, at your option, any # later version. See the file COPYING for details. -__version__ = "4.1.1" +__version__ = "4.1.2" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/xpra/build_info.py new/xpra-4.1.2/xpra/build_info.py --- old/xpra-4.1.1/xpra/build_info.py 2021-03-07 15:45:11.000000000 +0100 +++ new/xpra-4.1.2/xpra/build_info.py 2021-04-06 15:29:09.000000000 +0200 @@ -1,19 +1,19 @@ BUILD_BIT='64bit' BUILD_CPU='x86_64' -BUILD_DATE='2021-03-07' +BUILD_DATE='2021-04-06' BUILD_MACHINE='x86_64' BUILD_OS='Linux Fedora 33 ThirtyThree' -BUILD_TIME='21:45' +BUILD_TIME='20:29' BUILT_BY='antoine' -BUILT_ON='fedora' +BUILT_ON='localhost.localdomain' COMPILER_VERSION='gcc (GCC) 10.2.1 20201125 (Red Hat 10.2.1-9)' CYTHON_VERSION='0.29.21' LINKER_VERSION='GNU ld version 2.35-18.fc33' PYTHON_VERSION='3.9.2' RELEASE_BUILD=True lib_gobject_introspection='1.66.1' -lib_gtk='3.24.26' -lib_gtk_x11='3.24.26' +lib_gtk='3.24.28' +lib_gtk_x11='3.24.28' lib_nvenc='10' lib_nvfbc='6.0' lib_py3cairo='1.18.2' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/xpra/client/gtk3/gtk3_notifier.py new/xpra-4.1.2/xpra/client/gtk3/gtk3_notifier.py --- old/xpra-4.1.1/xpra/client/gtk3/gtk3_notifier.py 2021-03-07 15:32:43.000000000 +0100 +++ new/xpra-4.1.2/xpra/client/gtk3/gtk3_notifier.py 2021-04-06 10:03:41.000000000 +0200 @@ -1,5 +1,5 @@ # This file is part of Xpra. -# Copyright (C) 2011-2019 Antoine Martin <anto...@xpra.org> +# Copyright (C) 2011-2021 Antoine Martin <anto...@xpra.org> # Xpra is released under the terms of the GNU GPL v2, or, at your option, any # later version. See the file COPYING for details. @@ -30,3 +30,7 @@ def close_notify(self, nid): self.clean_notification(nid) + + def cleanup(self): + Notify.uninit() + super().cleanup() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/xpra/client/gtk3/splash_screen.py new/xpra-4.1.2/xpra/client/gtk3/splash_screen.py --- old/xpra-4.1.1/xpra/client/gtk3/splash_screen.py 2021-03-07 15:32:43.000000000 +0100 +++ new/xpra-4.1.2/xpra/client/gtk3/splash_screen.py 2021-04-06 10:03:41.000000000 +0200 @@ -11,7 +11,7 @@ from xpra import __version__ from xpra.util import envint from xpra.os_util import SIGNAMES, OSX -from xpra.exit_codes import EXIT_TIMEOUT +from xpra.exit_codes import EXIT_TIMEOUT, EXIT_CONNECTION_LOST from xpra.common import SPLASH_EXIT_DELAY from xpra.gtk_common.gtk_util import add_close_accel, get_icon_pixbuf from xpra.gtk_common.gobject_compat import install_signal_handlers @@ -132,7 +132,11 @@ log("read_stdin()") while self.exit_code is None: line = sys.stdin.readline() - GLib.idle_add(self.handle_stdin_line, line) + if not line: + self.exit() + else: + self.exit_code = EXIT_CONNECTION_LOST + GLib.idle_add(self.handle_stdin_line, line) def handle_stdin_line(self, line): parts = line.rstrip("\n\r").split(":", 1) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/xpra/client/gtk_base/gtk_client_base.py new/xpra-4.1.2/xpra/client/gtk_base/gtk_client_base.py --- old/xpra-4.1.1/xpra/client/gtk_base/gtk_client_base.py 2021-03-07 15:32:43.000000000 +0100 +++ new/xpra-4.1.2/xpra/client/gtk_base/gtk_client_base.py 2021-04-06 10:04:54.000000000 +0200 @@ -224,6 +224,22 @@ self.UI_watcher.add_fail_callback(UI_failed) + def get_vrefresh(self): + #try via GTK: + rates = {} + display = Gdk.Display.get_default() + for m in range(display.get_n_monitors()): + monitor = display.get_monitor(m) + log("monitor %i (%s) refresh-rate=%i", m, monitor.get_model(), monitor.get_refresh_rate()) + rates[m] = monitor.get_refresh_rate() + rate = -1 + if rates: + rate = iround(min(rates.values())/1000) + if rate<30 or rate>250: + rate = super().get_vrefresh() + return rate + + def get_notifier_classes(self): #subclasses may add their toolkit specific variants #by overriding this method diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/xpra/client/gtk_base/gtk_client_window_base.py new/xpra-4.1.2/xpra/client/gtk_base/gtk_client_window_base.py --- old/xpra-4.1.1/xpra/client/gtk_base/gtk_client_window_base.py 2021-03-07 15:32:43.000000000 +0100 +++ new/xpra-4.1.2/xpra/client/gtk_base/gtk_client_window_base.py 2021-04-06 10:04:54.000000000 +0200 @@ -237,6 +237,7 @@ self._current_frame_extents = None self._screen = -1 self._frozen = False + self._focus_latest = None self.window_state_timer = None self.send_iconify_timer = None self.remove_pointer_overlay_timer = None @@ -432,7 +433,6 @@ log.warn("Warning: missing gdk bindings:") log.warn(" %s", e) else: - self._focus_latest = None grablog("adding event receiver so we can get FocusIn and FocusOut events whilst grabbing the keyboard") add_event_receiver(self.get_window(), self) #other platforms should bet getting regular focus events instead: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/xpra/client/gtk_base/sessions_gui.py new/xpra-4.1.2/xpra/client/gtk_base/sessions_gui.py --- old/xpra-4.1.1/xpra/client/gtk_base/sessions_gui.py 2021-03-07 15:32:43.000000000 +0100 +++ new/xpra-4.1.2/xpra/client/gtk_base/sessions_gui.py 2021-04-06 10:04:54.000000000 +0200 @@ -370,8 +370,8 @@ self.clients_disconnecting.remove(key) elif c not in (0, None): self.warning.set_text(EXIT_STR.get(c, "exit code %s" % c).replace("_", " ")) - proc = self.clients.pop(key, None) - if proc: + client_proc = self.clients.pop(key, None) + if client_proc: def update(): self.update() self.populate() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/xpra/client/mixins/network_listener.py new/xpra-4.1.2/xpra/client/mixins/network_listener.py --- old/xpra-4.1.1/xpra/client/mixins/network_listener.py 2021-03-07 15:32:43.000000000 +0100 +++ new/xpra-4.1.2/xpra/client/mixins/network_listener.py 2021-04-06 10:03:41.000000000 +0200 @@ -16,7 +16,7 @@ from xpra.net.protocol import Protocol from xpra.exit_codes import EXIT_OK, EXIT_FAILURE from xpra.client.mixins.stub_client_mixin import StubClientMixin -from xpra.scripts.config import InitException +from xpra.scripts.config import InitException, InitExit from xpra.log import Logger log = Logger("network") @@ -50,11 +50,18 @@ opts.bind_udp = () self.sockets = create_sockets(opts, err) if opts.bind: - local_sockets = setup_local_sockets(opts.bind, + try: + local_sockets = setup_local_sockets(opts.bind, None, opts.client_socket_dirs, str(os.getpid()), True, opts.mmap_group, opts.socket_permissions) - self.sockets.update(local_sockets) + except (OSError, InitExit) as e: + log("setup_local_sockets bind=%s, client_socket_dirs=%s", + opts.bind, opts.client_socket_dirs, exc_info=True) + log.warn("Warning: failed to create the client sockets:") + log.warn(" '%s'", e) + else: + self.sockets.update(local_sockets) def run(self): self.start_listen_sockets() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/xpra/client/mixins/notifications.py new/xpra-4.1.2/xpra/client/mixins/notifications.py --- old/xpra-4.1.1/xpra/client/mixins/notifications.py 2021-03-07 15:32:43.000000000 +0100 +++ new/xpra-4.1.2/xpra/client/mixins/notifications.py 2021-04-06 10:04:54.000000000 +0200 @@ -111,17 +111,19 @@ for x in body.splitlines(): log.info(" %s", x) return - try: - from xpra.notifications.common import parse_image_path - icon_filename = get_icon_filename(icon_name) - icon = parse_image_path(icon_filename) - n.show_notify("", self.tray, nid, "Xpra", nid, "", - summary, body, actions, hints or {}, expire_timeout, icon) - except Exception as e: - log("failed to show notification", exc_info=True) - log.error("Error: cannot show notification") - log.error(" '%s'", summary) - log.error(" %s", e) + def show_notification(): + try: + from xpra.notifications.common import parse_image_path + icon_filename = get_icon_filename(icon_name) + icon = parse_image_path(icon_filename) + n.show_notify("", self.tray, nid, "Xpra", nid, "", + summary, body, actions, hints or {}, expire_timeout, icon) + except Exception as e: + log("failed to show notification", exc_info=True) + log.error("Error: cannot show notification") + log.error(" '%s'", summary) + log.error(" %s", e) + self.idle_add(show_notification) def _process_notify_show(self, packet): if not self.notifications_enabled: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/xpra/client/mixins/window_manager.py new/xpra-4.1.2/xpra/client/mixins/window_manager.py --- old/xpra-4.1.1/xpra/client/mixins/window_manager.py 2021-03-07 15:32:43.000000000 +0100 +++ new/xpra-4.1.2/xpra/client/mixins/window_manager.py 2021-04-06 10:04:54.000000000 +0200 @@ -309,7 +309,7 @@ "double_click.distance" : get_double_click_distance(), #features: "bell" : self.client_supports_bell, - "vrefresh" : get_vrefresh(), + "vrefresh" : self.get_vrefresh(), "windows" : self.windows_enabled, "auto_refresh_delay" : int(self.auto_refresh_delay*1000), #system tray forwarding: @@ -322,6 +322,9 @@ }) return caps + def get_vrefresh(self): + return get_vrefresh() + def get_window_caps(self) -> dict: return { #implemented in the gtk client: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/xpra/client/ui_client_base.py new/xpra-4.1.2/xpra/client/ui_client_base.py --- old/xpra-4.1.1/xpra/client/ui_client_base.py 2021-03-07 15:32:43.000000000 +0100 +++ new/xpra-4.1.2/xpra/client/ui_client_base.py 2021-04-06 10:04:54.000000000 +0200 @@ -219,8 +219,7 @@ if MOUSE_DELAY_AUTO: try: - from xpra.platform.gui import get_vrefresh - v = get_vrefresh() + v = self.get_vrefresh() if v<=0: #some platforms don't detect the vrefresh correctly #(ie: macos in virtualbox?), so use a sane default: @@ -230,6 +229,11 @@ except Exception: log("failed to calculate automatic delay", exc_info=True) + def get_vrefresh(self): + #this method is overriden in the GTK client + from xpra.platform.gui import get_vrefresh + return get_vrefresh() + def run(self): if self.client_extras: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/xpra/net/bytestreams.py new/xpra-4.1.2/xpra/net/bytestreams.py --- old/xpra-4.1.1/xpra/net/bytestreams.py 2021-03-07 15:32:43.000000000 +0100 +++ new/xpra-4.1.2/xpra/net/bytestreams.py 2021-04-06 10:03:41.000000000 +0200 @@ -90,7 +90,7 @@ if isinstance(s, str): return s if len(s)==2: - if s[0].find(":")>=0: + if str(s[0]).find(":")>=0: #IPv6 return "[%s]:%s" % (s[0], s[1]) return "%s:%s" % (s[0], s[1]) @@ -282,7 +282,8 @@ kmax = 5 if WIN32: sock = self.get_raw_socket() - sock.ioctl(socket.SIO_KEEPALIVE_VALS, (1, idletime*1000, interval*1000)) #@UndefinedVariable pylint: disable=no-member + if sock: + sock.ioctl(socket.SIO_KEEPALIVE_VALS, (1, idletime*1000, interval*1000)) #@UndefinedVariable pylint: disable=no-member elif OSX: TCP_KEEPALIVE = 0x10 self._setsockopt(socket.IPPROTO_TCP, TCP_KEEPALIVE, interval) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/xpra/net/mdns/zeroconf_listener.py new/xpra-4.1.2/xpra/net/mdns/zeroconf_listener.py --- old/xpra-4.1.1/xpra/net/mdns/zeroconf_listener.py 2021-03-07 15:32:43.000000000 +0100 +++ new/xpra-4.1.2/xpra/net/mdns/zeroconf_listener.py 2021-04-06 10:04:54.000000000 +0200 @@ -28,6 +28,9 @@ def __repr__(self): return "ZeroconfListener(%s)" % self.service_type + def update_service(self, zeroconf, stype, name): + log("update_service%s", (zeroconf, stype, name)) + def remove_service(self, zeroconf, stype, name): log("remove_service%s", (zeroconf, stype, name)) if self.mdns_remove: @@ -45,10 +48,15 @@ stype = info.type domain = "local" server = info.server - address = socket.inet_ntoa(info.address) + try: + addresses = info.addresses + except AttributeError: + addresses = [info.address] port = info.port props = info.properties - self.mdns_add(interface, protocol, name, stype, domain, server, address, port, props) + for address in addresses: + saddress = socket.inet_ntoa(address) + self.mdns_add(interface, protocol, name, stype, domain, server, saddress, port, props) def start(self): self.browser = ServiceBrowser(self.zeroconf, self.service_type, listener=self) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/xpra/net/mdns/zeroconf_publisher.py new/xpra-4.1.2/xpra/net/mdns/zeroconf_publisher.py --- old/xpra-4.1.1/xpra/net/mdns/zeroconf_publisher.py 2021-03-07 15:32:43.000000000 +0100 +++ new/xpra-4.1.2/xpra/net/mdns/zeroconf_publisher.py 2021-04-06 10:03:41.000000000 +0200 @@ -168,13 +168,17 @@ return new_dict def update_txt(self, txt): + if not hasattr(self.zeroconf, "update_service"): + log("no update_service with zeroconf version %s", zeroconf_version) + return props = self.txt_rec(txt) if self.args: args = list(self.args) args[6] = props self.args = tuple(args) - self.kwargs["properties"] = props - si = ServiceInfo(**self.kwargs) + else: + self.kwargs["properties"] = props + si = ServiceInfo(*self.args, **self.kwargs) try: self.zeroconf.update_service(si) self.service = si diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/xpra/notifications/dbus_notifier.py new/xpra-4.1.2/xpra/notifications/dbus_notifier.py --- old/xpra-4.1.1/xpra/notifications/dbus_notifier.py 2021-03-07 15:32:43.000000000 +0100 +++ new/xpra-4.1.2/xpra/notifications/dbus_notifier.py 2021-04-06 10:03:41.000000000 +0200 @@ -11,7 +11,8 @@ from xpra.notifications.notifier_base import NotifierBase, log try: #new recommended way of using the glib main loop: - from dbus.mainloop.glib import DBusGMainLoop + from dbus.mainloop.glib import DBusGMainLoop, threads_init + threads_init() DBusGMainLoop(set_as_default=True) except ImportError: #beware: this import has side-effects: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/xpra/notifications/pynotify_notifier.py new/xpra-4.1.2/xpra/notifications/pynotify_notifier.py --- old/xpra-4.1.1/xpra/notifications/pynotify_notifier.py 2021-03-07 15:32:43.000000000 +0100 +++ new/xpra-4.1.2/xpra/notifications/pynotify_notifier.py 2021-04-06 10:03:41.000000000 +0200 @@ -1,6 +1,6 @@ #!/usr/bin/env python # This file is part of Xpra. -# Copyright (C) 2011-2020 Antoine Martin <anto...@xpra.org> +# Copyright (C) 2011-2021 Antoine Martin <anto...@xpra.org> # Xpra is released under the terms of the GNU GPL v2, or, at your option, any # later version. See the file COPYING for details. @@ -18,7 +18,8 @@ if not self.dbus_check(dbus_id): return icon_string = self.get_icon_string(nid, app_icon, icon) - notify2.init(app_name or "Xpra") + if not notify2.is_initted(): + notify2.init(app_name or "Xpra", "glib") n = notify2.Notification(summary, body, icon_string) n.set_urgency(notify2.URGENCY_LOW) n.set_timeout(timeout) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/xpra/platform/darwin/__init__.py new/xpra-4.1.2/xpra/platform/darwin/__init__.py --- old/xpra-4.1.1/xpra/platform/darwin/__init__.py 2021-03-07 15:32:43.000000000 +0100 +++ new/xpra-4.1.2/xpra/platform/darwin/__init__.py 2021-04-06 10:03:41.000000000 +0200 @@ -1,5 +1,5 @@ # This file is part of Xpra. -# Copyright (C) 2011-2020 Antoine Martin <anto...@xpra.org> +# Copyright (C) 2011-2021 Antoine Martin <anto...@xpra.org> # Xpra is released under the terms of the GNU GPL v2, or, at your option, any # later version. See the file COPYING for details. @@ -45,3 +45,18 @@ macapp = GtkosxApplication.Application() macapp.connect("NSApplicationWillTerminate", quit_handler) return macapp + + +#workaround for Big Sur dylib cache mess: +#https://stackoverflow.com/a/65599706/428751 +def patch_find_library(): + from ctypes import util #pylint: disable=import-outside-toplevel + orig_util_find_library = util.find_library + def new_util_find_library(name): + res = orig_util_find_library(name) + if res: + return res + return '/System/Library/Frameworks/'+name+'.framework/'+name + util.find_library = new_util_find_library +if os.environ.get("XPRA_OSX_PATCH_FIND_LIBRARY", "1")=="1": + patch_find_library() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/xpra/platform/dotxpra.py new/xpra-4.1.2/xpra/platform/dotxpra.py --- old/xpra-4.1.1/xpra/platform/dotxpra.py 2021-03-07 15:32:43.000000000 +0100 +++ new/xpra-4.1.2/xpra/platform/dotxpra.py 2021-04-06 10:03:41.000000000 +0200 @@ -62,6 +62,9 @@ uid = self.uid if gid is None: gid = self.gid + parent = os.path.dirname(d) + if parent and parent!="/" and not os.path.exists(parent): + self.mksockdir(parent, mode, uid, gid) with umask_context(0): os.mkdir(d, mode) if uid!=os.getuid() or gid!=os.getgid(): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/xpra/platform/win32/clipboard.py new/xpra-4.1.2/xpra/platform/win32/clipboard.py --- old/xpra-4.1.1/xpra/platform/win32/clipboard.py 2021-03-07 15:32:43.000000000 +0100 +++ new/xpra-4.1.2/xpra/platform/win32/clipboard.py 2021-04-06 10:04:54.000000000 +0200 @@ -318,7 +318,7 @@ super().__init__(selection) def with_clipboard_lock(self, success_callback, failure_callback, retries=RETRY, delay=DELAY): - with_clipboard_lock(self.window, success_callback, failure_callback, retries=RETRY, delay=DELAY) + with_clipboard_lock(self.window, success_callback, failure_callback, retries=retries, delay=delay) def clear(self): self.with_clipboard_lock(self.empty_clipboard, self.clear_error) @@ -361,8 +361,9 @@ log("do_emit_token() formats=%s", format_names(fmts)) send_token(fmts) return True - def errback(_errmsg=None): - send_token() + def errback(errmsg=None): + #nothing we can do! + log("not sending the token since we failed to get the clipboard lock: %s", errmsg) self.with_clipboard_lock(got_clipboard_lock, errback) def get_contents(self, target, got_contents): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/xpra/scripts/config.py new/xpra-4.1.2/xpra/scripts/config.py --- old/xpra-4.1.1/xpra/scripts/config.py 2021-03-07 15:32:43.000000000 +0100 +++ new/xpra-4.1.2/xpra/scripts/config.py 2021-04-06 10:04:54.000000000 +0200 @@ -12,6 +12,7 @@ WIN32, OSX, POSIX, osexpand, getuid, getgid, get_username_for_uid, is_Debian, is_Ubuntu, is_arm, + which, ) def warn(msg): @@ -1335,11 +1336,14 @@ options.proxy_video_encoders = getlist(pvestr, "proxy video encoders", "HARDWARE_ENCODER_OPTIONS") def fixup_socketdirs(options): - if isinstance(options.socket_dirs, str): - options.socket_dirs = options.socket_dirs.split(os.path.pathsep) - else: - assert isinstance(options.socket_dirs, (list, tuple)) - options.socket_dirs = [v for x in options.socket_dirs for v in x.split(os.path.pathsep)] + for option_name in ("socket_dirs", "client_socket_dirs"): + value = getattr(options, option_name) + if isinstance(value, str): + value = value.split(os.path.pathsep) + else: + assert isinstance(options.socket_dirs, (list, tuple)) + value = [v for x in value for v in x.split(os.path.pathsep)] + setattr(options, option_name, value) def fixup_pings(options): #pings used to be a boolean, True mapped to "5" @@ -1437,6 +1441,11 @@ options.clipboard_direction = "disabled" def abs_paths(options): + ew = options.exec_wrapper + if ew and not os.path.isabs(ew): + ew = which(ew) + if ew: + options.exec_wrapper = ew #convert to absolute paths before we daemonize for k in ("clipboard-filter-file", "tcp-encryption-keyfile", "encryption-keyfile", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/xpra/scripts/main.py new/xpra-4.1.2/xpra/scripts/main.py --- old/xpra-4.1.1/xpra/scripts/main.py 2021-03-07 15:32:43.000000000 +0100 +++ new/xpra-4.1.2/xpra/scripts/main.py 2021-04-06 10:04:54.000000000 +0200 @@ -393,6 +393,7 @@ if mode in ( "start", "start-desktop", "shadow", "attach", "listen", + "upgrade", "upgrade-desktop", "request-start", "request-start-desktop", "request-shadow", ): options.encodings = validated_encodings(options.encodings) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/xpra/scripts/parsing.py new/xpra-4.1.2/xpra/scripts/parsing.py --- old/xpra-4.1.1/xpra/scripts/parsing.py 2021-03-07 15:32:43.000000000 +0100 +++ new/xpra-4.1.2/xpra/scripts/parsing.py 2021-04-06 10:03:41.000000000 +0200 @@ -1296,6 +1296,7 @@ break NEED_ENCODING_MODES = ("attach", "start", "start-desktop", "shadow", + "upgrade", "upgrade-desktop", "listen", "launcher", "bug-report", "encoding", "gui-info") fixup_options(options, skip_encodings=len(args)==0 or args[0] not in NEED_ENCODING_MODES) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/xpra/scripts/server.py new/xpra-4.1.2/xpra/scripts/server.py --- old/xpra-4.1.1/xpra/scripts/server.py 2021-03-07 15:32:43.000000000 +0100 +++ new/xpra-4.1.2/xpra/scripts/server.py 2021-04-06 10:04:54.000000000 +0200 @@ -126,6 +126,9 @@ n = display_name[1:].split(".")[0] #ie: ":0.0" -> "0" try: dno = int(n) + except (ValueError, TypeError): + raise InitException("invalid display number %r" % n) from None + else: if 0<=dno<10: warn("WARNING: low display number: %s" % dno) warn(" You are attempting to run the xpra server") @@ -133,8 +136,6 @@ warn(" This is generally not what you want.") warn(" You should probably use a higher display number") warn(" just to avoid any confusion and this warning message.") - except IOError: - pass def print_DE_warnings(): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/xpra/server/dbus/dbus_server_base.py new/xpra-4.1.2/xpra/server/dbus/dbus_server_base.py --- old/xpra-4.1.1/xpra/server/dbus/dbus_server_base.py 2021-03-07 15:32:43.000000000 +0100 +++ new/xpra-4.1.2/xpra/server/dbus/dbus_server_base.py 2021-04-06 10:03:41.000000000 +0200 @@ -54,7 +54,7 @@ @dbus.service.method(dbus.PROPERTIES_IFACE, in_signature='', out_signature='a{sv}') def GetAll(self, interface_name): if interface_name==dbus.PROPERTIES_IFACE: - v = dict((x, self.Get(x)) for x in self._properties.keys()) + v = dict((x, self.Get(interface_name, x)) for x in self._properties.keys()) else: v = {} self.log(".GetAll(%s)=%s", interface_name, v) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/xpra/server/http_handler.py new/xpra-4.1.2/xpra/server/http_handler.py --- old/xpra-4.1.1/xpra/server/http_handler.py 2021-03-07 15:32:43.000000000 +0100 +++ new/xpra-4.1.2/xpra/server/http_handler.py 2021-04-06 10:04:54.000000000 +0200 @@ -8,7 +8,7 @@ import posixpath import mimetypes from urllib.parse import unquote -from http.server import BaseHTTPRequestHandler +from http.server import BaseHTTPRequestHandler, SimpleHTTPRequestHandler from xpra.util import envbool, std, csv, AdHocStruct, repr_ellipsized from xpra.platform.paths import get_desktop_background_paths @@ -230,7 +230,7 @@ if not self.directory_listing: self.send_error(403, "Directory listing forbidden") return None - return self.list_directory(path).read() + return SimpleHTTPRequestHandler.list_directory(self, path).read() ext = os.path.splitext(path)[1] f = None try: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/xpra/server/mixins/child_command_server.py new/xpra-4.1.2/xpra/server/mixins/child_command_server.py --- old/xpra-4.1.1/xpra/server/mixins/child_command_server.py 2021-03-07 15:32:43.000000000 +0100 +++ new/xpra-4.1.2/xpra/server/mixins/child_command_server.py 2021-04-06 10:04:54.000000000 +0200 @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # This file is part of Xpra. -# Copyright (C) 2010-2020 Antoine Martin <anto...@xpra.org> +# Copyright (C) 2010-2021 Antoine Martin <anto...@xpra.org> # Copyright (C) 2008 Nathaniel Smith <n...@pobox.com> # Xpra is released under the terms of the GNU GPL v2, or, at your option, any # later version. See the file COPYING for details. @@ -327,6 +327,7 @@ env = self.get_child_env() log("start_command%s exec_wrapper=%s, exec_cwd=%s", (name, child_cmd, ignore, callback, use_wrapper, shell, kwargs), self.exec_wrapper, self.exec_cwd) + real_cmd = [] try: real_cmd = self.get_full_child_command(child_cmd, use_wrapper) log("full child command(%s, %s)=%s", child_cmd, use_wrapper, real_cmd) @@ -341,6 +342,9 @@ except (OSError, ValueError) as e: log("start_command%s", (name, child_cmd, ignore, callback, use_wrapper, shell, kwargs), exc_info=True) log.error("Error spawning child '%s':" % (child_cmd, )) + if len(real_cmd)>1: + log.error(" using command:") + log.error(" %s", " ".join("'%s'" % x for x in real_cmd)) log.error(" %s" % (e,)) return None diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/xpra/server/source/encodings_mixin.py new/xpra-4.1.2/xpra/server/source/encodings_mixin.py --- old/xpra-4.1.1/xpra/server/source/encodings_mixin.py 2021-03-07 15:32:43.000000000 +0100 +++ new/xpra-4.1.2/xpra/server/source/encodings_mixin.py 2021-04-06 10:04:54.000000000 +0200 @@ -253,7 +253,7 @@ self.vrefresh = c.intget("vrefresh", -1) #assume 50Hz: - ms_per_frame = 1000//50 + ms_per_frame = 1000//100 if 30<=self.vrefresh<=500: #looks like a valid vrefresh value, use it: ms_per_frame = 1000//self.vrefresh diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/xpra/server/window/video_subregion.py new/xpra-4.1.2/xpra/server/window/video_subregion.py --- old/xpra-4.1.1/xpra/server/window/video_subregion.py 2021-03-07 15:32:43.000000000 +0100 +++ new/xpra-4.1.2/xpra/server/window/video_subregion.py 2021-04-06 10:03:41.000000000 +0200 @@ -426,6 +426,7 @@ score = 0 incount, outcount = inoutcount(region, ignore_size) total = incount+outcount + children_boost = 0 if total==0: ipct = opct = score = 0 else: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/xpra/server/window/window_source.py new/xpra-4.1.2/xpra/server/window/window_source.py --- old/xpra-4.1.1/xpra/server/window/window_source.py 2021-03-07 15:32:43.000000000 +0100 +++ new/xpra-4.1.2/xpra/server/window/window_source.py 2021-04-06 10:04:54.000000000 +0200 @@ -1385,10 +1385,8 @@ delay = min(delay, options.get("max_delay", self.batch_config.max_delay)) delay = int(delay) elapsed = int(1000*(now-self.batch_config.last_event)) - if elapsed>delay: - #batch delay has already elapsed since we last processed a screen update, - #so we don't need to wait much longer: - delay = self.batch_config.min_delay + #discount the elapsed time since the last event: + delay = max(0, delay-elapsed) if not self.must_batch(delay): #send without batching: damagelog("do_damage%-24s wid=%s, sending now with sequence %s", @@ -1423,7 +1421,7 @@ lad = (now, delay) self.batch_config.last_delays.append(lad) self.batch_config.last_delay = lad - expire_delay = max(self.batch_config.min_delay, min(self.batch_config.expire_delay, delay)) + expire_delay = min(self.batch_config.expire_delay, delay) #weighted average with the last delays: #(so when we end up delaying a lot for some reason, # then we don't expire the next one quickly after) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/xpra/sound/gstreamer_util.py new/xpra-4.1.2/xpra/sound/gstreamer_util.py --- old/xpra-4.1.1/xpra/sound/gstreamer_util.py 2021-03-07 15:32:43.000000000 +0100 +++ new/xpra-4.1.2/xpra/sound/gstreamer_util.py 2021-04-06 10:09:07.000000000 +0200 @@ -47,7 +47,7 @@ ALLOW_SOUND_LOOP = envbool("XPRA_ALLOW_SOUND_LOOP", False) USE_DEFAULT_DEVICE = envbool("XPRA_USE_DEFAULT_DEVICE", True) IGNORED_INPUT_DEVICES = os.environ.get("XPRA_SOUND_IGNORED_INPUT_DEVICES", "bell.ogg,bell.wav").split(",") -IGNORED_OUTPUT_DEVICES = os.environ.get("XPRA_SOUND_IGNORED_OUTPUT_DEVICES", "").split(",") +IGNORED_OUTPUT_DEVICES = os.environ.get("XPRA_SOUND_IGNORED_OUTPUT_DEVICES", "bell-window-system").split(",") def force_enabled(codec_name): return os.environ.get("XPRA_SOUND_CODEC_ENABLE_%s" % codec_name.upper().replace("+", "_"), "0")=="1" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/xpra/src_info.py new/xpra-4.1.2/xpra/src_info.py --- old/xpra-4.1.1/xpra/src_info.py 2021-03-07 15:45:11.000000000 +0100 +++ new/xpra-4.1.2/xpra/src_info.py 2021-04-06 15:29:09.000000000 +0200 @@ -1,3 +1,4 @@ BRANCH='v4.1.x' -LOCAL_MODIFICATIONS='unknown' -REVISION='unknown' +COMMIT='gb75b0f2c9' +LOCAL_MODIFICATIONS=0 +REVISION=78 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/xpra/x11/bindings/keyboard_bindings.pyx new/xpra-4.1.2/xpra/x11/bindings/keyboard_bindings.pyx --- old/xpra-4.1.1/xpra/x11/bindings/keyboard_bindings.pyx 2021-03-07 15:32:43.000000000 +0100 +++ new/xpra-4.1.2/xpra/x11/bindings/keyboard_bindings.pyx 2021-04-06 10:04:54.000000000 +0200 @@ -947,7 +947,7 @@ keysyms = [] for group in (0, 1): for level in (0, 1): - keysym = XkbKeycodeToKeysym(self.display, keycode, 0, 0) + keysym = XkbKeycodeToKeysym(self.display, keycode, group, level) if keysym==NoSymbol: continue key = XKeysymToString(keysym) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/xpra/x11/bindings/randr_bindings.pyx new/xpra-4.1.2/xpra/x11/bindings/randr_bindings.pyx --- old/xpra-4.1.1/xpra/x11/bindings/randr_bindings.pyx 2021-03-07 15:32:43.000000000 +0100 +++ new/xpra-4.1.2/xpra/x11/bindings/randr_bindings.pyx 2021-04-06 10:04:54.000000000 +0200 @@ -51,12 +51,15 @@ ################################### cdef extern from "X11/extensions/randr.h": cdef unsigned int RR_Rotate_0 + ctypedef unsigned long XRRModeFlags + ctypedef unsigned short Connection + ctypedef unsigned short SubpixelOrder + ctypedef unsigned short Rotation cdef extern from "X11/extensions/Xrandr.h": ctypedef XID RRMode ctypedef XID RROutput ctypedef XID RRCrtc - ctypedef unsigned long XRRModeFlags Bool XRRQueryExtension(Display *, int *, int *) Status XRRQueryVersion(Display *, int * major, int * minor) @@ -90,6 +93,35 @@ int nmode XRRModeInfo *modes + ctypedef struct XRROutputInfo: + Time timestamp + RRCrtc crtc + char *name + int nameLen + unsigned long mm_width + unsigned long mm_height + Connection connection + SubpixelOrder subpixel_order + int ncrtc + RRCrtc *crtcs + int nclone + RROutput *clones + int nmode + int npreferred + RRMode *modes + + ctypedef struct XRRCrtcInfo: + Time timestamp + int x, y + unsigned int width, height + RRMode mode + Rotation rotation + int noutput + RROutput *outputs + Rotation rotations + int npossible + RROutput *possible + ctypedef unsigned short SizeID ctypedef struct XRRScreenConfiguration: pass @@ -106,6 +138,12 @@ XRRScreenResources *XRRGetScreenResourcesCurrent(Display *dpy, Window window) void XRRFreeScreenResources(XRRScreenResources *resources) + XRROutputInfo *XRRGetOutputInfo(Display *dpy, XRRScreenResources *resources, RROutput output) + void XRRFreeOutputInfo (XRROutputInfo *outputInfo) + + XRRCrtcInfo *XRRGetCrtcInfo(Display *dpy, XRRScreenResources *resources, RRCrtc crtc) + void XRRFreeCrtcInfo(XRRCrtcInfo *crtcInfo) + XRRModeInfo *XRRAllocModeInfo(char *name, int nameLength) RRMode XRRCreateMode(Display *dpy, Window window, XRRModeInfo *modeInfo) void XRRDestroyMode (Display *dpy, RRMode mode) @@ -321,9 +359,14 @@ XRRFreeScreenConfigInfo(config) def get_vrefresh(self): - cdef Window window #@DuplicatedSignature - window = XDefaultRootWindow(self.display) - cdef XRRScreenConfiguration *config #@DuplicatedSignature + voutputs = self.get_vrefresh_outputs() + if voutputs: + return min(voutputs.values()) + return self.get_vrefresh_display() + + def get_vrefresh_display(self): + cdef Window window = XDefaultRootWindow(self.display) + cdef XRRScreenConfiguration *config = NULL try: config = XRRGetScreenInfo(self.display, window) if config==NULL: @@ -334,6 +377,38 @@ if config!=NULL: XRRFreeScreenConfigInfo(config) + def get_vrefresh_outputs(self): + cdef Window window = XDefaultRootWindow(self.display) + cdef XRROutputInfo *output_info = NULL + cdef XRRCrtcInfo *crtc_info = NULL + cdef XRRModeInfo *mode_info = NULL + rates = {} + cdef XRRScreenResources *rsc = XRRGetScreenResourcesCurrent(self.display, window) + assert rsc!=NULL + try: + for crtc in range(rsc.ncrtc): + crtc_info = XRRGetCrtcInfo(self.display, rsc, rsc.crtcs[crtc]) + #find the mode info: + for i in range(rsc.nmode): + mode_info = &rsc.modes[i] + if mode_info.id==crtc_info.mode: + if mode_info.hTotal and mode_info.vTotal: + rate = iround(mode_info.dotClock / (mode_info.hTotal * mode_info.vTotal)) + #outputs affected: + output_names = [] + for o in range(crtc_info.noutput): + output_info = XRRGetOutputInfo(self.display, rsc, crtc_info.outputs[o]) + if output_info!=NULL: + output_names.append(output_info.name.decode("utf8")) + XRRFreeOutputInfo(output_info) + log("%s : %s", csv(output_names), rate) + rates[crtc] = rate + break + finally: + XRRFreeScreenResources(rsc) + return rates + + def set_screen_size(self, width, height): return self._set_screen_size(width, height) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-4.1.1/xpra/x11/server_keyboard_config.py new/xpra-4.1.2/xpra/x11/server_keyboard_config.py --- old/xpra-4.1.1/xpra/x11/server_keyboard_config.py 2021-03-07 15:32:43.000000000 +0100 +++ new/xpra-4.1.2/xpra/x11/server_keyboard_config.py 2021-04-06 10:04:54.000000000 +0200 @@ -613,11 +613,14 @@ failed = [] for modifier in modifiers: modifier = bytestostr(modifier) - keynames = self.keynames_for_mod.get(modifier) - if not keynames: + keynames = self.keynames_for_mod.get(modifier, None) + if keynames is None: log.error("Error: unknown modifier '%s'", modifier) log.error(" known modifiers: %s", csv(self.keynames_for_mod.keys())) continue + if not keynames: + log.warn("Warning: found no keynames for '%s'", modifier) + continue #find the keycodes that match the keynames for this modifier keycodes = [] #log.info("keynames(%s)=%s", modifier, keynames) ++++++ xpra-html5-4.0.6.tar.xz -> xpra-html5-4.1.2.tar.xz ++++++ ++++ 3738 lines of diff (skipped) ++++++ xpra-paths.patch ++++++ --- /var/tmp/diff_new_pack.fZMllX/_old 2021-04-19 21:06:38.048086472 +0200 +++ /var/tmp/diff_new_pack.fZMllX/_new 2021-04-19 21:06:38.048086472 +0200 @@ -1,7 +1,7 @@ -Index: xpra-4.1/setup.py +Index: xpra-4.1.2/setup.py =================================================================== ---- xpra-4.1.orig/setup.py -+++ xpra-4.1/setup.py +--- xpra-4.1.2.orig/setup.py ++++ xpra-4.1.2/setup.py @@ -1531,7 +1531,7 @@ else: add_data_files("%s/man1" % man_path, man_pages) add_data_files("share/applications", glob.glob("fs/share/applications/*.desktop")) @@ -11,7 +11,7 @@ add_data_files("share/metainfo", ["fs/share/metainfo/xpra.appdata.xml"]) #here, we override build and install so we can -@@ -1617,16 +1617,18 @@ else: +@@ -1617,7 +1617,7 @@ else: if pam_ENABLED: copytodir("fs/etc/pam.d/xpra", "/etc/pam.d") @@ -20,20 +20,28 @@ if service_ENABLED: #Linux init service: subs = {} - if os.path.exists("/etc/sysconfig"): -- copytodir("fs/etc/sysconfig/xpra", "/etc/sysconfig") -+ shutil.copy("fs/etc/sysconfig/xpra", "fs/etc/sysconfig/sysconfig.xpra") -+ os.chmod("fs/etc/sysconfig/sysconfig.xpra", 0o644) -+ copytodir("fs/etc/sysconfig/sysconfig.xpra", "__FILLUPDIR__") - elif os.path.exists("/etc/default"): - copytodir("fs/etc/sysconfig/xpra", "/etc/default") - subs[b"/etc/sysconfig"] = b"/etc/default" +@@ -1625,15 +1625,15 @@ else: + cdir = "/etc/sysconfig" + elif is_Debian() or is_Ubuntu(): + cdir = "/etc/default" +- elif os.path.exists("/etc/sysconfig"): +- cdir = "/etc/sysconfig" + else: +- cdir = "/etc/default" +- copytodir("fs/etc/sysconfig/xpra", cdir) ++ cdir = "__FILLUPDIR__" ++ shutil.copy("fs/etc/sysconfig/xpra", "fs/etc/sysconfig/sysconfig.xpra") ++ os.chmod("fs/etc/sysconfig/sysconfig.xpra", 0o644) ++ copytodir("fs/etc/sysconfig/sysconfig.xpra", cdir) + if cdir!="/etc/sysconfig": + #also replace the reference to it in the service file below + subs[b"/etc/sysconfig"] = cdir.encode() - if os.path.exists("/bin/systemctl"): + if os.path.exists("/usr/bin/systemctl"): if sd_listen_ENABLED: copytodir("fs/lib/systemd/system/xpra.service", systemd_dir, subs=subs) -@@ -1754,7 +1756,6 @@ if scripts_ENABLED: +@@ -1761,7 +1761,6 @@ if scripts_ENABLED: toggle_modules(WIN32, "xpra/scripts/win32_service") if data_ENABLED: