Hello community, here is the log from the commit of package xpra for openSUSE:Factory checked in at 2020-01-29 13:18:34 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/xpra (Old) and /work/SRC/openSUSE:Factory/.xpra.new.26092 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "xpra" Wed Jan 29 13:18:34 2020 rev:13 rq:767986 version:3.0.5 Changes: -------- --- /work/SRC/openSUSE:Factory/xpra/xpra.changes 2019-12-23 22:49:17.122108439 +0100 +++ /work/SRC/openSUSE:Factory/.xpra.new.26092/xpra.changes 2020-01-29 13:19:08.746193310 +0100 @@ -1,0 +2,30 @@ +Tue Jan 28 10:20:29 UTC 2020 - Luigi Baldoni <[email protected]> + +- Update to version 3.0.5 + * fix fake Xinerama errors with unicode monitor names + * fix av-sync backport for python2 servers + * fix errors when the dbus submodule is not installed + * fix RFB server key handling + * fix exit code for unsupported sockets + * fix tray title with openssh and plink SSH backends + * fix 'xpra upgrade' + * fix focus problems with OR windows + * fix wrong client info shown in 'xpra top' + * fix 'xpra top' error that scrambled the output, flickering + * fix X11 keyboard query against secondary screens + * skip trying to load X11 components on non-X11 platforms + * allow F11 through to the browser to make it easier to go + fullscreen + * prevent sshfp dns errors from causing ssh connection failures + * obscure passwords from log files + * remove duplicated attribute from xpra info + * remove unused loggers + * expose av-sync and webcam client capabilities + * better wayland mode detection + * add more missing files to MANIFEST + * add v4l2 codec files to clean target + * add logging to gtk display cleanup + +- Refreshed xpra-paths.patch to update systemctl location + +------------------------------------------------------------------- Old: ---- xpra-3.0.4.tar.xz New: ---- xpra-3.0.5.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ xpra.spec ++++++ --- /var/tmp/diff_new_pack.bAT49P/_old 2020-01-29 13:19:10.190194048 +0100 +++ /var/tmp/diff_new_pack.bAT49P/_new 2020-01-29 13:19:10.190194048 +0100 @@ -1,7 +1,7 @@ # # spec file for package xpra # -# Copyright (c) 2019 SUSE LLC +# Copyright (c) 2020 SUSE LLC # Copyright (c) 2012-2013 Pascal Bleser <[email protected]> # # All modifications and additions to the file contributed by third parties @@ -19,7 +19,7 @@ %global __requires_exclude ^typelib\\(GtkosxApplication\\)|typelib\\(GdkGLExt\\)|typelib\\(GtkGLExt\\).*$ Name: xpra -Version: 3.0.4 +Version: 3.0.5 Release: 0 Summary: Remote display server for applications and desktops License: GPL-2.0-or-later AND BSD-3-Clause AND LGPL-3.0-or-later AND MIT ++++++ xpra-3.0.4.tar.xz -> xpra-3.0.5.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.4/MANIFEST.in new/xpra-3.0.5/MANIFEST.in --- old/xpra-3.0.4/MANIFEST.in 2019-12-17 09:37:58.000000000 +0100 +++ new/xpra-3.0.5/MANIFEST.in 2019-12-26 20:48:04.000000000 +0100 @@ -13,8 +13,9 @@ include xpra/codecs/cuda_common/*.cu include xpra/codecs/v4l2/video.h include xpra/codecs/dec_avcodec2/register_compat.* -include udev/rules.d/71-xpra-virtual-pointer.rules recursive-include html5 * +recursive-include content-categories * +recursive-include content-type * recursive-include http-headers * recursive-include man * recursive-include patches * @@ -22,6 +23,7 @@ recursive-include xdg * recursive-include cups * recursive-include dbus * +recursive-include udev * recursive-include icons * recursive-include scripts * recursive-include selinux * diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.4/NEWS new/xpra-3.0.5/NEWS --- old/xpra-3.0.4/NEWS 2019-12-23 17:11:42.000000000 +0100 +++ new/xpra-3.0.5/NEWS 2020-01-08 12:52:06.000000000 +0100 @@ -1,3 +1,31 @@ +v3.0.5 (2020-01-07) +====================== + -- fix missing undecorated opengl windows on win32 with GTK3 (correct fix) + -- fix fake Xinerama errors with unicode monitor names + -- fix av-sync backport for python2 servers + -- fix errors when the dbus submodule is not installed + -- fix RFB server key handling + -- fix exit code for unsupported sockets + -- fix tray title with openssh and plink SSH backends + -- fix crashes on win32 shadow exit + -- fix 'xpra upgrade' + -- fix focus problems with OR windows + -- fix wrong client info shown in 'xpra top' + -- fix 'xpra top' error that scrambled the output, flickering + -- fix X11 keyboard query against secondary screens + -- skip trying to load X11 components on non-X11 platforms + -- allow F11 through to the browser to make it easier to go fullscreen + -- prevent sshfp dns errors from causing ssh connection failures + -- obscure passwords from log files + -- remove duplicated attribute from xpra info + -- remove unused loggers + -- expose av-sync and webcam client capabilities + -- better wayland mode detection + -- add more missing files to MANIFEST + -- add v4l2 codec files to clean target + -- add logging to gtk display cleanup + + v3.0.4 (2019-12-19) ====================== -- fix missing undecorated windows on win32 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.4/cups/xpraforwarder new/xpra-3.0.5/cups/xpraforwarder --- old/xpra-3.0.4/cups/xpraforwarder 2019-12-17 09:37:58.000000000 +0100 +++ new/xpra-3.0.5/cups/xpraforwarder 2019-12-27 13:18:18.000000000 +0100 @@ -42,7 +42,7 @@ from urllib.parse import urlparse, parse_qs -__version__ = "3.0.4" +__version__ = "3.0.5" #Writes a syslog entry (msg) at the default facility: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.4/html5/js/Client.js new/xpra-3.0.5/html5/js/Client.js --- old/xpra-3.0.4/html5/js/Client.js 2019-11-18 16:50:49.000000000 +0100 +++ new/xpra-3.0.5/html5/js/Client.js 2019-12-29 17:24:22.000000000 +0100 @@ -846,6 +846,10 @@ var kc; for(var keycode in CHARCODE_TO_NAME) { kc = parseInt(keycode); + } + if (keyname=="F11") { + this.debug("keyboard", "allowing default handler for", keyname); + allow_default = true; keycodes.push([kc, CHARCODE_TO_NAME[keycode], kc, 0, 0]); } //show("keycodes="+keycodes.toSource()); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.4/html5/js/Utilities.js new/xpra-3.0.5/html5/js/Utilities.js --- old/xpra-3.0.4/html5/js/Utilities.js 2019-12-17 09:37:58.000000000 +0100 +++ new/xpra-3.0.5/html5/js/Utilities.js 2019-12-27 13:18:18.000000000 +0100 @@ -10,7 +10,7 @@ 'use strict'; var Utilities = { - VERSION : "3.0.4", + VERSION : "3.0.5", exc : function() { console.error.apply(console, arguments); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.4/setup.py new/xpra-3.0.5/setup.py --- old/xpra-3.0.4/setup.py 2019-11-26 16:58:06.000000000 +0100 +++ new/xpra-3.0.5/setup.py 2019-12-26 20:48:04.000000000 +0100 @@ -936,6 +936,7 @@ "xpra/codecs/jpeg/decoder.c", "xpra/codecs/enc_ffmpeg/encoder.c", "xpra/codecs/v4l2/pusher.c", + "xpra/codecs/v4l2/constants.pxi", "xpra/codecs/libav_common/av_log.c", "xpra/codecs/webp/encode.c", "xpra/codecs/webp/decode.c", @@ -963,7 +964,7 @@ ] for x in CLEAN_FILES: p, ext = os.path.splitext(x) - if ext in (".c", ".cpp"): + if ext in (".c", ".cpp", ".pxi"): #clean the Cython annotated html files: CLEAN_FILES.append(p+".html") if WIN32: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.4/svn-info new/xpra-3.0.5/svn-info --- old/xpra-3.0.4/svn-info 2019-12-23 17:11:46.000000000 +0100 +++ new/xpra-3.0.5/svn-info 2020-01-08 12:52:13.000000000 +0100 @@ -4,10 +4,10 @@ Relative URL: ^/tags/v3.0.x/src Repository Root: file:///var/svn/repos/Xpra Repository UUID: 3bb7dfac-3a0b-4e04-842a-767bc560f471 -Revision: 24778 +Revision: 24930 Node Kind: directory Schedule: normal -Last Changed Author: totaamwin32 -Last Changed Rev: 24778 -Last Changed Date: 2019-12-19 17:32:30 +0000 (Thu, 19 Dec 2019) +Last Changed Author: antoine +Last Changed Rev: 24930 +Last Changed Date: 2020-01-08 09:46:48 +0000 (Wed, 08 Jan 2020) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.4/svn-version new/xpra-3.0.5/svn-version --- old/xpra-3.0.4/svn-version 2019-12-23 17:11:46.000000000 +0100 +++ new/xpra-3.0.5/svn-version 2020-01-08 12:52:13.000000000 +0100 @@ -1 +1 @@ -24778 +24930 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.4/win32/xpra.iss new/xpra-3.0.5/win32/xpra.iss --- old/xpra-3.0.4/win32/xpra.iss 2019-12-17 09:37:58.000000000 +0100 +++ new/xpra-3.0.5/win32/xpra.iss 2019-12-27 13:18:18.000000000 +0100 @@ -1,9 +1,9 @@ [Setup] AppName=Xpra AppId=Xpra_is1 -AppVersion=3.0.4 -AppVerName=Xpra 3.0.4 -UninstallDisplayName=Xpra 3.0.4 +AppVersion=3.0.5 +AppVerName=Xpra 3.0.5 +UninstallDisplayName=Xpra 3.0.5 AppPublisher=xpra.org AppPublisherURL=http:;xpra.org/ DefaultDirName={pf}\Xpra @@ -16,7 +16,7 @@ Compression=lzma2/max SolidCompression=yes AllowUNCPath=false -VersionInfoVersion=3.0.4 +VersionInfoVersion=3.0.5 VersionInfoCompany=xpra.org VersionInfoDescription=multi-platform screen and application forwarding system WizardImageFile=win32\xpra-logo.bmp diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.4/xpra/__init__.py new/xpra-3.0.5/xpra/__init__.py --- old/xpra-3.0.4/xpra/__init__.py 2019-12-23 17:11:49.000000000 +0100 +++ new/xpra-3.0.5/xpra/__init__.py 2020-01-08 12:52:17.000000000 +0100 @@ -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__ = "3.0.4" +__version__ = "3.0.5" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.4/xpra/client/gtk_base/gtk_client_base.py new/xpra-3.0.5/xpra/client/gtk_base/gtk_client_base.py --- old/xpra-3.0.4/xpra/client/gtk_base/gtk_client_base.py 2019-12-17 09:37:58.000000000 +0100 +++ new/xpra-3.0.5/xpra/client/gtk_base/gtk_client_base.py 2020-01-08 12:52:06.000000000 +0100 @@ -1101,12 +1101,12 @@ return (self.ClientWindowClass,) if metadata.boolget("has-alpha", False): return (self.ClientWindowClass,) + if not metadata.boolget("decorations", True): + return (self.ClientWindowClass,) if OSX and not PYTHON3: #GTK2 on OSX doesn't do alpha: if metadata.boolget("has-alpha", False): return (self.ClientWindowClass,) - if not metadata.boolget("decorations", True): - return (self.ClientWindowClass,) return (self.GLClientWindowClass, self.ClientWindowClass) def toggle_opengl(self, *_args): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.4/xpra/client/gtk_base/gtk_client_window_base.py new/xpra-3.0.5/xpra/client/gtk_base/gtk_client_window_base.py --- old/xpra-3.0.4/xpra/client/gtk_base/gtk_client_window_base.py 2019-12-23 17:11:42.000000000 +0100 +++ new/xpra-3.0.5/xpra/client/gtk_base/gtk_client_window_base.py 2020-01-08 12:52:06.000000000 +0100 @@ -1831,8 +1831,10 @@ sx, sy, sw, sh = cx(x), cy(y), cx(w), cy(h) packet = ["configure-window", self._id, sx, sy, sw, sh, props, self._resize_counter, state, skip_geometry] if self._client.window_configure_pointer: - #window id is redundant (now that we removed an OSX focus workaround) - packet.append(self._id) + pwid = self._id + if self.is_OR(): + pwid = -1 + packet.append(pwid) packet.append(self._client.get_mouse_position()) packet.append(self._client.get_current_modifiers()) geomlog("%s", packet) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.4/xpra/client/gtk_base/pass_dialog.py new/xpra-3.0.5/xpra/client/gtk_base/pass_dialog.py --- old/xpra-3.0.4/xpra/client/gtk_base/pass_dialog.py 2019-12-10 12:20:42.000000000 +0100 +++ new/xpra-3.0.5/xpra/client/gtk_base/pass_dialog.py 2019-12-29 17:24:22.000000000 +0100 @@ -102,7 +102,7 @@ self.window.show_all() def show(): force_focus() - self.present() + self.window.present() self.password_input.grab_focus() glib.idle_add(show) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.4/xpra/client/mixins/audio.py new/xpra-3.0.5/xpra/client/mixins/audio.py --- old/xpra-3.0.4/xpra/client/mixins/audio.py 2019-12-23 17:11:42.000000000 +0100 +++ new/xpra-3.0.5/xpra/client/mixins/audio.py 2020-01-08 12:52:06.000000000 +0100 @@ -163,6 +163,8 @@ return caps def get_avsync_capabilities(self): + if not self.av_sync: + return {} return { "" : self.av_sync, "delay.default" : max(0, DEFAULT_AV_SYNC_DELAY + AV_SYNC_DELTA), diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.4/xpra/client/mixins/tray.py new/xpra-3.0.5/xpra/client/mixins/tray.py --- old/xpra-3.0.4/xpra/client/mixins/tray.py 2019-09-24 15:53:59.000000000 +0200 +++ new/xpra-3.0.5/xpra/client/mixins/tray.py 2019-12-29 17:24:22.000000000 +0100 @@ -131,7 +131,8 @@ if p: conn = getattr(p, "_conn", None) if conn: - t.append(bytestostr(conn.target)) + cinfo = conn.get_info() + t.append(cinfo.get("endpoint", bytestostr(conn.target))) if not t: t.insert(0, u"Xpra") v = u"\n".join(t) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.4/xpra/client/mixins/webcam.py new/xpra-3.0.5/xpra/client/mixins/webcam.py --- old/xpra-3.0.4/xpra/client/mixins/webcam.py 2019-09-24 15:53:59.000000000 +0200 +++ new/xpra-3.0.5/xpra/client/mixins/webcam.py 2020-01-08 12:52:06.000000000 +0100 @@ -81,6 +81,10 @@ self.webcam_forwarding = False log("webcam forwarding: %s", self.webcam_forwarding) + def get_caps(self): + if not self.webcam_forwarding: + return {} + return {"webcam" : True} def parse_server_capabilities(self): c = self.server_capabilities diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.4/xpra/client/top_client.py new/xpra-3.0.5/xpra/client/top_client.py --- old/xpra-3.0.4/xpra/client/top_client.py 2019-11-18 16:50:49.000000000 +0100 +++ new/xpra-3.0.5/xpra/client/top_client.py 2020-01-08 12:52:06.000000000 +0100 @@ -31,6 +31,7 @@ self.stdscr = curses.initscr() self.stdscr.keypad(True) self.stdscr.nodelay(True) + self.stdscr.clear() curses.noecho() curses.cbreak() curses.start_color() @@ -51,7 +52,7 @@ curses.endwin() def update_screen(self): - self.stdscr.clear() + self.stdscr.erase() try: self.do_update_screen() finally: @@ -131,8 +132,17 @@ return hpos = 6 - for client_no in range(nclients): - ci = self.get_client_info(client_no) + client_info = self.dictget("client") + client_no = 0 + while True: + ci = client_info.dictget(client_no) + if not ci: + break + client_no +=1 + ci = typedict(ci) + if not ci.boolget("windows", True): + continue + ci = self.get_client_info(ci) l = len(ci) if hpos+2+l>height: if hpos<height: @@ -179,12 +189,10 @@ parts = parts[1:] return d - def get_client_info(self, client_no): - client_info = self.dictget("client") - ci = typedict(client_info.dictget(client_no)) + def get_client_info(self, ci): #version info: ctype = ci.strget("type", "unknown") - title = "%s client version %s-r%s" % (ctype, ci.strget("version"), ci.intget("revision")) + title = "%s client version %s-r%s" % (ctype, ci.strget("version"), ci.strget("revision")) #batch delay: b_info = typedict(ci.dictget("batch", {})) bi_info = typedict(b_info.dictget("delay", {})) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.4/xpra/client/ui_client_base.py new/xpra-3.0.5/xpra/client/ui_client_base.py --- old/xpra-3.0.4/xpra/client/ui_client_base.py 2019-10-20 14:13:42.000000000 +0200 +++ new/xpra-3.0.5/xpra/client/ui_client_base.py 2020-01-08 12:52:06.000000000 +0100 @@ -15,7 +15,7 @@ from xpra.version_util import full_version_str from xpra.net import compression, packet_encoding from xpra.child_reaper import reaper_cleanup -from xpra.os_util import platform_name, bytestostr, strtobytes, BITS, is_Wayland +from xpra.os_util import platform_name, bytestostr, strtobytes, BITS, POSIX, is_Wayland from xpra.util import ( std, envbool, envint, typedict, updict, repr_ellipsized, XPRA_AUDIO_NOTIFICATION_ID, XPRA_DISCONNECT_NOTIFICATION_ID, @@ -339,7 +339,7 @@ caps["session-type"] = get_session_type() #don't try to find the server uuid if this platform cannot run servers.. #(doing so causes lockups on win32 and startup errors on osx) - if MMAP_SUPPORTED and not is_Wayland(): + if MMAP_SUPPORTED and POSIX and not is_Wayland(): #we may be running inside another server! try: from xpra.server.server_uuid import get_uuid diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.4/xpra/net/sshfp.py new/xpra-3.0.5/xpra/net/sshfp.py --- old/xpra-3.0.4/xpra/net/sshfp.py 2019-09-24 15:54:00.000000000 +0200 +++ new/xpra-3.0.5/xpra/net/sshfp.py 2019-12-29 17:24:22.000000000 +0100 @@ -26,7 +26,11 @@ } def check_host_key(hostname, key): - return do_check_host_key(hostname, key.get_name(), key.asbytes()) + try: + return do_check_host_key(hostname, key.get_name(), key.asbytes()) + except Exception as e: + log("check_host_key(%r, %r)", hostname, key, exc_info=True) + return "error checking sshfp record: %s" % e def do_check_host_key(hostname, keytype, keydata): resolver = Resolver() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.4/xpra/os_util.py new/xpra-3.0.5/xpra/os_util.py --- old/xpra-3.0.4/xpra/os_util.py 2019-09-24 18:26:26.000000000 +0200 +++ new/xpra-3.0.5/xpra/os_util.py 2020-01-01 15:09:30.000000000 +0100 @@ -264,7 +264,10 @@ return True def is_Wayland(): - return os.environ.get("GDK_BACKEND", "")!="x11" and ( + backend = os.environ.get("GDK_BACKEND", "") + if backend=="wayland": + return True + return backend!="x11" and ( os.environ.get("WAYLAND_DISPLAY") or os.environ.get("XDG_SESSION_TYPE")=="wayland" ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.4/xpra/platform/win32/win32_NotifyIcon.py new/xpra-3.0.5/xpra/platform/win32/win32_NotifyIcon.py --- old/xpra-3.0.4/xpra/platform/win32/win32_NotifyIcon.py 2019-09-24 15:54:00.000000000 +0200 +++ new/xpra-3.0.5/xpra/platform/win32/win32_NotifyIcon.py 2020-01-08 12:52:06.000000000 +0100 @@ -461,7 +461,12 @@ def NotifyIconWndProc(hwnd, msg, wParam, lParam): instance = win32NotifyIcon.instances.get(hwnd) fn = message_map.get(msg) - log("NotifyIconWndProc%s instance=%s, message(%i)=%s", (int(hwnd), int(msg), int(wParam), int(lParam)), instance, msg, fn) + def i(v): + try: + return int(v) + except: + return v + log("NotifyIconWndProc%s instance=%s, message(%i)=%s", (i(hwnd), i(msg), i(wParam), i(lParam)), instance, msg, fn) #log("potential matching win32 constants for message: %s", [x for x in dir(win32con) if getattr(win32con, x)==msg]) if instance and fn: return fn(instance, hwnd, msg, wParam, lParam) or 0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.4/xpra/platform/xposix/gui.py new/xpra-3.0.5/xpra/platform/xposix/gui.py --- old/xpra-3.0.4/xpra/platform/xposix/gui.py 2019-12-12 11:44:56.000000000 +0100 +++ new/xpra-3.0.5/xpra/platform/xposix/gui.py 2020-01-01 15:09:30.000000000 +0100 @@ -74,7 +74,7 @@ def get_wm_name(): wm_name = os.environ.get("XDG_CURRENT_DESKTOP", "") - if os.environ.get("XDG_SESSION_TYPE")=="wayland": + if os.environ.get("XDG_SESSION_TYPE")=="wayland" or os.environ.get("GDK_BACKEND")=="wayland": wm_name = "wayland" elif is_X11(): try: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.4/xpra/scripts/main.py new/xpra-3.0.5/xpra/scripts/main.py --- old/xpra-3.0.4/xpra/scripts/main.py 2019-12-12 11:44:57.000000000 +0100 +++ new/xpra-3.0.5/xpra/scripts/main.py 2019-12-29 17:24:22.000000000 +0100 @@ -1164,7 +1164,7 @@ if dtype == "unix-domain": if not hasattr(socket, "AF_UNIX"): - raise InitException("unix domain sockets are not available on this operating system") + raise InitExit(EXIT_UNSUPPORTED, "unix domain sockets are not available on this operating system") sock = socket.socket(socket.AF_UNIX) sock.settimeout(SOCKET_TIMEOUT) def sockpathfail_cb(msg): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.4/xpra/scripts/server.py new/xpra-3.0.5/xpra/scripts/server.py --- old/xpra-3.0.4/xpra/scripts/server.py 2019-11-18 16:50:50.000000000 +0100 +++ new/xpra-3.0.5/xpra/scripts/server.py 2020-01-01 15:09:30.000000000 +0100 @@ -753,10 +753,14 @@ if not shadowing and POSIX and not OSX and not clobber: no_gtk() assert starting or starting_desktop or proxying - from xpra.server.dbus.dbus_start import start_dbus - dbus_pid, dbus_env = start_dbus(opts.dbus_launch) - if dbus_env: - os.environ.update(dbus_env) + try: + from xpra.server.dbus.dbus_start import start_dbus + except ImportError as e: + log("dbus components are not installed: %s", e) + else: + dbus_pid, dbus_env = start_dbus(opts.dbus_launch) + if dbus_env: + os.environ.update(dbus_env) display = None if not proxying: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.4/xpra/server/auth/sys_auth_base.py new/xpra-3.0.5/xpra/server/auth/sys_auth_base.py --- old/xpra-3.0.4/xpra/server/auth/sys_auth_base.py 2019-10-20 14:13:42.000000000 +0200 +++ new/xpra-3.0.5/xpra/server/auth/sys_auth_base.py 2019-12-29 17:24:22.000000000 +0100 @@ -7,7 +7,7 @@ from collections import deque from xpra.platform.dotxpra import DotXpra -from xpra.util import envint +from xpra.util import envint, obsc from xpra.net.digest import get_salt, choose_digest, verify_digest, gendigest from xpra.os_util import hexstr, POSIX from xpra.log import Logger @@ -136,7 +136,7 @@ salt = self.get_response_salt(client_salt) password = gendigest("xor", challenge_response, salt) log("authenticate_check(%s, %s) xor(%s)=%s", - repr(challenge_response), repr(client_salt), repr(salt), repr(password)) + obsc(repr(challenge_response)), repr(client_salt), repr(salt), repr(password)) #warning: enabling logging here would log the actual system password! #log.info("authenticate(%s, %s) password=%s (%s)", # hexstr(challenge_response), hexstr(client_salt), password, hexstr(password)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.4/xpra/server/gtk_server_base.py new/xpra-3.0.5/xpra/server/gtk_server_base.py --- old/xpra-3.0.4/xpra/server/gtk_server_base.py 2019-09-24 15:54:01.000000000 +0200 +++ new/xpra-3.0.5/xpra/server/gtk_server_base.py 2020-01-01 15:09:30.000000000 +0100 @@ -10,7 +10,7 @@ import os.path from xpra.util import flatten_dict, envbool -from xpra.os_util import monotonic_time, register_SIGUSR_signals +from xpra.os_util import monotonic_time, register_SIGUSR_signals, WIN32 from xpra.gtk_common.gobject_compat import ( import_gdk, import_glib, is_gtk3, register_os_signals, @@ -90,13 +90,19 @@ #bug 2328: python3 shadow server segfault on Ubuntu 16.04 from xpra.os_util import getUbuntuVersion, is_Ubuntu, PYTHON2 safe_close = PYTHON2 or self.session_type!="shadow" or not is_Ubuntu() or getUbuntuVersion()>(16, 4) + if WIN32: + safe_close = False close = envbool("XPRA_CLOSE_GTK_DISPLAY", safe_close) + log("close_gtk_display() safe_close=%s, close=%s, gdk_mod=%s", + safe_close, close, gdk_mod) if close and gdk_mod: if is_gtk3(): displays = gdk.DisplayManager.get().list_displays() else: displays = gdk.display_manager_get().list_displays() + log("close_gtk_display() displays=%s", displays) for d in displays: + log("close_gtk_display() closing %s", d) d.close() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.4/xpra/server/rfb/rfb_server.py new/xpra-3.0.5/xpra/server/rfb/rfb_server.py --- old/xpra-3.0.4/xpra/server/rfb/rfb_server.py 2019-09-24 15:54:01.000000000 +0200 +++ new/xpra-3.0.5/xpra/server/rfb/rfb_server.py 2019-12-29 17:24:22.000000000 +0100 @@ -157,10 +157,10 @@ return modifiers = [] keyval = 0 - keycode = source.keyboard_config.get_keycode(0, keyname, modifiers) + keycode = source.keyboard_config.get_keycode(0, keyname, pressed, modifiers) log("rfb keycode(%s)=%s", keyname, keycode) if keycode: - is_mod = source.is_modifier(keyname, keycode) + is_mod = source.keyboard_config.is_modifier(keycode) self._handle_key(wid, bool(pressed), keyname, keyval, keycode, modifiers, is_mod, True) def _process_rfb_SetEncodings(self, _proto, packet): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.4/xpra/server/source/audio_mixin.py new/xpra-3.0.5/xpra/server/source/audio_mixin.py --- old/xpra-3.0.4/xpra/server/source/audio_mixin.py 2019-12-23 17:11:42.000000000 +0100 +++ new/xpra-3.0.5/xpra/server/source/audio_mixin.py 2019-12-26 20:48:04.000000000 +0100 @@ -8,7 +8,7 @@ from xpra.net.compression import Compressed from xpra.server.source.stub_source_mixin import StubSourceMixin -from xpra.os_util import get_machine_id, get_user_uuid, bytestostr, POSIX +from xpra.os_util import get_machine_id, get_user_uuid, bytestostr, POSIX, PYTHON3 from xpra.util import csv, envbool, flatten_dict, typedict, XPRA_AUDIO_NOTIFICATION_ID from xpra.log import Logger @@ -266,8 +266,11 @@ update_av_sync() #pylint: disable=not-callable #run it again after 10 seconds, #by that point the source info will actually be populated: - from gi.repository import GLib - GLib.timeout_add(10*1000, update_av_sync) + if PYTHON3: + from gi.repository import GLib as glib + else: + import glib + glib.timeout_add(10*1000, update_av_sync) def new_sound_buffer(self, sound_source, data, metadata, packet_metadata=None): log("new_sound_buffer(%s, %s, %s, %s) info=%s", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.4/xpra/server/source/client_connection.py new/xpra-3.0.5/xpra/server/source/client_connection.py --- old/xpra-3.0.4/xpra/server/source/client_connection.py 2019-09-24 15:54:01.000000000 +0200 +++ new/xpra-3.0.5/xpra/server/source/client_connection.py 2020-01-08 12:52:06.000000000 +0100 @@ -65,13 +65,8 @@ log = Logger("server") elog = Logger("encoding") -keylog = Logger("keyboard") -mouselog = Logger("mouse") -timeoutlog = Logger("timeout") proxylog = Logger("proxy") -statslog = Logger("stats") notifylog = Logger("notify") -netlog = Logger("network") bandwidthlog = Logger("bandwidth") log("ClientConnectionClass%s", CC_BASES) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.4/xpra/server/window/window_source.py new/xpra-3.0.5/xpra/server/window/window_source.py --- old/xpra-3.0.4/xpra/server/window/window_source.py 2019-12-23 17:11:42.000000000 +0100 +++ new/xpra-3.0.5/xpra/server/window/window_source.py 2020-01-01 15:09:30.000000000 +0100 @@ -485,7 +485,6 @@ "idle" : self.is_idle, "dimensions" : self.window_dimensions, "suspended" : self.suspended or False, - "content" : self.content_type, "bandwidth-limit" : self.bandwidth_limit, "av-sync" : { "enabled" : self.av_sync, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.4/xpra/src_info.py new/xpra-3.0.5/xpra/src_info.py --- old/xpra-3.0.4/xpra/src_info.py 2019-12-23 17:11:46.000000000 +0100 +++ new/xpra-3.0.5/xpra/src_info.py 2020-01-08 12:52:13.000000000 +0100 @@ -1,2 +1,2 @@ LOCAL_MODIFICATIONS=0 -REVISION=24778 +REVISION=24930 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.4/xpra/x11/bindings/keyboard_bindings.pyx new/xpra-3.0.5/xpra/x11/bindings/keyboard_bindings.pyx --- old/xpra-3.0.4/xpra/x11/bindings/keyboard_bindings.pyx 2019-09-24 15:54:01.000000000 +0200 +++ new/xpra-3.0.5/xpra/x11/bindings/keyboard_bindings.pyx 2020-01-08 12:52:07.000000000 +0100 @@ -438,12 +438,11 @@ if r==0 or tmp==NULL: #if the display points to a specific screen (ie: DISPLAY=:20.1) #we may have to connect to the first screen to get the properties: - nohost = self.display_name.split(":")[-1] - if nohost.find(".")>0: - display_name = self.display_name[:self.display_name.rfind(".")] - log("getXkbProperties retrying on '%s'", display_name) - dn = strtobytes(display_name) - display = XOpenDisplay(dn) + nohost = self.display_name.split(b":")[-1] + if nohost.find(b".")>0: + display_name = self.display_name[:self.display_name.rfind(b".")] + log("getXkbProperties retrying on '%s'", bytestostr(display_name)) + display = XOpenDisplay(display_name) if display: r = XkbRF_GetNamesProp(display, &tmp, &vd) if r==0 or tmp==NULL: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.4/xpra/x11/fakeXinerama.py new/xpra-3.0.5/xpra/x11/fakeXinerama.py --- old/xpra-3.0.4/xpra/x11/fakeXinerama.py 2019-09-24 15:54:02.000000000 +0200 +++ new/xpra-3.0.5/xpra/x11/fakeXinerama.py 2019-12-26 21:19:44.000000000 +0100 @@ -104,7 +104,7 @@ for filename in fakeXinerama_config_files: try: with open(filename, 'wb') as f: - f.write(strtobytes(contents)) + f.write(contents.encode("utf8")) except Exception as e: log("writing to '%s'", filename, exc_info=True) log.warn("Error writing fake xinerama file '%s':", filename) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.4/xpra/x11/gtk_x11/selection.py new/xpra-3.0.5/xpra/x11/gtk_x11/selection.py --- old/xpra-3.0.4/xpra/x11/gtk_x11/selection.py 2019-09-24 15:54:02.000000000 +0200 +++ new/xpra-3.0.5/xpra/x11/gtk_x11/selection.py 2020-01-01 15:09:30.000000000 +0100 @@ -25,7 +25,7 @@ add_event_receiver, #@UnresolvedImport remove_event_receiver, #@UnresolvedImport ) -from xpra.gtk_common.gobject_compat import import_gtk, import_gobject +from xpra.gtk_common.gobject_compat import import_gtk, import_gobject, is_gtk3 from xpra.log import Logger log = Logger("x11", "util") @@ -77,7 +77,13 @@ if when is self.IF_UNOWNED and old_owner != XNone: raise AlreadyOwned - set_clipboard_data(self.clipboard, "VERSION") + if is_gtk3(): + set_clipboard_data(self.clipboard, "VERSION") + else: + self.clipboard.set_with_data([("VERSION", 0, 0)], + self._get, + self._clear, + None) # Having acquired the selection, we have to announce our existence # (ICCCM 2.8, still). The details here probably don't matter too @@ -133,6 +139,24 @@ log("...they did.") window = get_pywindow(self.clipboard, self._xwindow) window.set_title("Xpra-ManagerSelection") + if is_gtk3(): + #we can't use set_with_data(..), + #so we have to listen for owner-change: + self.clipboard.connect("owner-change", self._owner_change) + + def _owner_change(self, clipboard, event): + log("owner_change(%s, %s)", clipboard, event) + if str(event.selection)!=self.atom: + #log("_owner_change(..) not our selection: %s vs %s", event.selection, self.atom) + return + if event.owner: + owner = event.owner.get_xid() + if owner==self._xwindow: + log("_owner_change(..) we still own %s", event.selection) + return + if self._xwindow: + self._xwindow = None + self.emit("selection-lost") def do_xpra_destroy_event(self, event): remove_event_receiver(event.window, self) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.4/xpra/x11/server.py new/xpra-3.0.5/xpra/x11/server.py --- old/xpra-3.0.4/xpra/x11/server.py 2019-09-24 15:54:02.000000000 +0200 +++ new/xpra-3.0.5/xpra/x11/server.py 2020-01-01 15:09:30.000000000 +0100 @@ -992,6 +992,11 @@ pwid = packet[10] pointer = packet[11] modifiers = packet[12] + if pwid==wid and window.is_OR(): + #some clients may send the OR window wid + #this causes focus issues (see #1999) + pwid = -1 + mouselog("configure pointer data: %s", (pwid, pointer, modifiers)) if self._process_mouse_common(proto, pwid, pointer): #only update modifiers if the window is in focus: if self._has_focus==wid: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.4/xpra/x11/x11_server_base.py new/xpra-3.0.5/xpra/x11/x11_server_base.py --- old/xpra-3.0.4/xpra/x11/x11_server_base.py 2019-11-30 13:36:58.000000000 +0100 +++ new/xpra-3.0.5/xpra/x11/x11_server_base.py 2020-01-01 15:09:30.000000000 +0100 @@ -111,6 +111,14 @@ def init_dbus(self, dbus_pid, dbus_env): + try: + from xpra.server.dbus import dbus_start + assert dbus_start + except ImportError as e: + log("init_dbus(%s, %s)", dbus_pid, dbus_env, exc_info=True) + log.warn("Warning: cannot initialize dbus") + log.warn(" %s", e) + return from xpra.server.dbus.dbus_start import ( get_saved_dbus_pid, get_saved_dbus_env, save_dbus_pid, save_dbus_env, ++++++ xpra-paths.patch ++++++ --- /var/tmp/diff_new_pack.bAT49P/_old 2020-01-29 13:19:11.098194512 +0100 +++ /var/tmp/diff_new_pack.bAT49P/_new 2020-01-29 13:19:11.098194512 +0100 @@ -1,8 +1,8 @@ -Index: xpra-3.0-rc3/setup.py +Index: xpra-3.0.5/setup.py =================================================================== ---- xpra-3.0-rc3.orig/setup.py -+++ xpra-3.0-rc3/setup.py -@@ -1501,7 +1501,7 @@ else: +--- xpra-3.0.5.orig/setup.py ++++ xpra-3.0.5/setup.py +@@ -1502,7 +1502,7 @@ else: add_data_files("%s/man1" % man_path, ["man/xpra.1", "man/xpra_launcher.1"]) add_data_files("share/applications", glob.glob("xdg/*.desktop")) add_data_files("share/mime/packages", ["xdg/application-x-xpraconfig.xml"]) @@ -11,7 +11,7 @@ add_data_files("share/appdata", ["xdg/xpra.appdata.xml"]) #here, we override build and install so we can -@@ -1574,7 +1574,7 @@ else: +@@ -1575,10 +1575,10 @@ else: if pam_ENABLED: copytodir("etc/pam.d/xpra", "/etc/pam.d") @@ -19,8 +19,12 @@ + systemd_dir = "__UNITDIR__" if service_ENABLED: #Linux init service: - if os.path.exists("/bin/systemctl"): -@@ -1585,7 +1585,9 @@ else: +- if os.path.exists("/bin/systemctl"): ++ if os.path.exists("/usr/bin/systemctl"): + if sd_listen_ENABLED: + copytodir("service/xpra.service", systemd_dir) + else: +@@ -1586,7 +1586,9 @@ else: else: copytodir("service/xpra", "/etc/init.d") if os.path.exists("/etc/sysconfig"): @@ -31,7 +35,7 @@ elif os.path.exists("/etc/default"): copytodir("etc/sysconfig/xpra", "/etc/default") if sd_listen_ENABLED: -@@ -1703,7 +1705,6 @@ if scripts_ENABLED: +@@ -1704,7 +1706,6 @@ if scripts_ENABLED: toggle_modules(WIN32, "xpra/scripts/win32_proxy_service") if data_ENABLED:
