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:


Reply via email to