Hello community,

here is the log from the commit of package xpra for openSUSE:Factory checked in 
at 2019-04-28 20:14:19
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/xpra (Old)
 and      /work/SRC/openSUSE:Factory/.xpra.new.5536 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "xpra"

Sun Apr 28 20:14:19 2019 rev:5 rq:698572 version:2.5.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/xpra/xpra.changes        2019-04-04 
15:26:55.638886974 +0200
+++ /work/SRC/openSUSE:Factory/.xpra.new.5536/xpra.changes      2019-04-28 
20:14:20.806385167 +0200
@@ -1,0 +2,45 @@
+Fri Apr 26 22:18:38 UTC 2019 - Luigi Baldoni <aloi...@gmx.com>
+
+- Update to version 2.5.1
+  * fix sending of icons as premultipled ARGB
+  * fix compatibility with old versions of python-pillow
+  * fix scroll encoding code flow (should be impossible to hit)
+  * fix handling of info requests with Python3 servers
+  * fix missing option for lock argument in man page
+  * fix ssh errors handling authentication failures
+  * fix ssh server connections and support 'none' authentication
+  * fix start new command menu
+  * fix appindicator failures when we fail to locate the default
+    icon
+  * fix command line tools usage under cygwin and terminal
+    emulators
+  * fix pointer position on multi-monitor shadow servers
+  * fix system tray forwarding with python3 servers
+  * fix window icons forwarding (MS Windows and MacOS mostly)
+  * fix detection of splash window types
+  * fix server startup errors when X11 root properties are
+    invalid
+  * fix shadow server startup failures on MacOS
+  * fix system tray errors during shadow server startup on MacOS
+  * fix printing errors with python3 builds and rencode packet
+    encoder
+  * fix parsing of printer options
+  * fix dispatching of printer jobs to clients with python3
+    servers
+  * fix parsing of key symbol definitions with python3 servers
+  * fix compatibility with older versions of GTK3
+  * fix proxy video encoders initialization
+  * fix 'missing encodings' server error with python3
+  * fix spurious clipboard warning when clipboard is disabled
+  * disable modal windows by default (was enabled by default
+    since v2.3)
+  * workaround buggy system trays
+  * try harder to prevent hash collisions in scroll encoding
+  * skip risky opengl probing when the initial check failed
+  * prevent file conflicts with older packages
+  * don't use appindicator with Fedora Gnome
+  * minor packaging fixes (dates)
+  * remove spurious ssh dnssec check logging
+  * bump version in cups backend
+
+-------------------------------------------------------------------

Old:
----
  xpra-2.5.tar.xz

New:
----
  xpra-2.5.1.tar.xz

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

Other differences:
------------------
++++++ xpra.spec ++++++
--- /var/tmp/diff_new_pack.DIDoOt/_old  2019-04-28 20:14:21.430384780 +0200
+++ /var/tmp/diff_new_pack.DIDoOt/_new  2019-04-28 20:14:21.434384778 +0200
@@ -23,7 +23,7 @@
 %endif
 %global __requires_exclude 
^typelib\\(GtkosxApplication\\)|typelib\\(GdkGLExt\\)|typelib\\(GtkGLExt\\).*$
 Name:           xpra
-Version:        2.5
+Version:        2.5.1
 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-2.5.tar.xz -> xpra-2.5.1.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xpra-2.5/NEWS new/xpra-2.5.1/NEWS
--- old/xpra-2.5/NEWS   2019-03-20 05:43:43.000000000 +0100
+++ new/xpra-2.5.1/NEWS 2019-04-16 06:57:10.000000000 +0200
@@ -1,3 +1,43 @@
+v2.5.1 (2019-04-15)
+======================
+       -- fix sending of icons as premultipled ARGB
+       -- fix compatibility with old versions of python-pillow
+       -- fix scroll encoding code flow (should be impossible to hit)
+       -- fix handling of info requests with Python3 servers
+       -- fix missing option for lock argument in man page
+       -- fix ssh errors handling authentication failures
+       -- fix ssh server connections and support 'none' authentication
+       -- fix start new command menu
+       -- fix appindicator failures when we fail to locate the default icon
+       -- fix command line tools usage under cygwin and terminal emulators
+       -- fix pointer position on multi-monitor shadow servers
+       -- fix system tray forwarding with python3 servers
+       -- fix window icons forwarding (MS Windows and MacOS mostly)
+       -- fix detection of splash window types
+       -- fix server startup errors when X11 root properties are invalid
+       -- fix shadow server startup failures on MacOS
+       -- fix system tray errors during shadow server startup on MacOS
+       -- fix printing errors with python3 builds and rencode packet encoder
+       -- fix parsing of printer options
+       -- fix dispatching of printer jobs to clients with python3 servers
+       -- fix parsing of key symbol definitions with python3 servers
+       -- fix compatibility with older versions of GTK3
+       -- fix proxy video encoders initialization
+       -- fix 'missing encodings' server error with python3
+       -- fix spurious clipboard warning when clipboard is disabled
+       -- disable modal windows by default (was enabled by default since v2.3)
+       -- workaround buggy system trays
+       -- try harder to prevent hash collisions in scroll encoding
+       -- skip risky opengl probing when the initial check failed
+       -- prevent file conflicts with older packages
+       -- don't use appindicator with Fedora Gnome
+       -- minor packaging fixes (dates)
+       -- remove spurious ssh dnssec check logging
+       -- bump version in cups backend
+       -- DEB package still recommends the python2 builds
+       -- don't bundle openssh on MS Windows
+
+
 v2.5 (2019-03-19)
 ======================
        -- Python 3 port mostly complete, including packaging for Debian
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xpra-2.5/cups/xpraforwarder 
new/xpra-2.5.1/cups/xpraforwarder
--- old/xpra-2.5/cups/xpraforwarder     2019-03-20 05:43:43.000000000 +0100
+++ new/xpra-2.5.1/cups/xpraforwarder   2019-04-10 04:48:02.000000000 +0200
@@ -42,7 +42,7 @@
        from urllib.parse import urlparse, parse_qs
 
 
-__version__ = "2.3"
+__version__ = "2.5"
 
 
 #Writes a syslog entry (msg) at the default facility:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xpra-2.5/html5/js/Utilities.js 
new/xpra-2.5.1/html5/js/Utilities.js
--- old/xpra-2.5/html5/js/Utilities.js  2019-03-20 05:43:44.000000000 +0100
+++ new/xpra-2.5.1/html5/js/Utilities.js        2019-04-01 16:58:59.000000000 
+0200
@@ -10,7 +10,7 @@
 'use strict';
 
 var Utilities = {
-       VERSION : "2.5",
+       VERSION : "2.5.1",
 
        exc : function() {
                console.error.apply(console, arguments);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xpra-2.5/man/xpra.1 new/xpra-2.5.1/man/xpra.1
--- old/xpra-2.5/man/xpra.1     2019-03-20 05:43:45.000000000 +0100
+++ new/xpra-2.5.1/man/xpra.1   2019-03-28 13:13:12.000000000 +0100
@@ -1276,7 +1276,7 @@
 to decide if they are willing to share the session.
 When used client-side, the default value \fIauto\fP evaluates to \fIno\fP.
 .TP
-\fB--lock\fP=\fIyes\fP|\fIno\fP|\fIno\fP
+\fB--lock\fP=\fIyes\fP|\fIno\fP|\fIauto\fP
 Locking allows a client to refuse to hand over the session to a new client.
 The session may still be shared with multiple clients (see the \fIsharing\fP 
option),
 but otherwise the server will reject new clients.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xpra-2.5/svn-info new/xpra-2.5.1/svn-info
--- old/xpra-2.5/svn-info       2019-03-20 05:44:42.000000000 +0100
+++ new/xpra-2.5.1/svn-info     2019-04-16 06:57:14.000000000 +0200
@@ -1,13 +1,13 @@
 Path: .
-Working Copy Root Path: /opt/Downloads/Xpra
-URL: svn+ssh://xpra.org/var/svn/repos/Xpra/tags/v2.5.x/src
+Working Copy Root Path: /home/antoine/workspace-shifter/Xpra
+URL: file:///var/svn/repos/Xpra/tags/v2.5.x/src
 Relative URL: ^/tags/v2.5.x/src
-Repository Root: svn+ssh://xpra.org/var/svn/repos/Xpra
+Repository Root: file:///var/svn/repos/Xpra
 Repository UUID: 3bb7dfac-3a0b-4e04-842a-767bc560f471
-Revision: 22144
+Revision: 22432
 Node Kind: directory
 Schedule: normal
 Last Changed Author: antoine
-Last Changed Rev: 22134
-Last Changed Date: 2019-03-19 22:04:52 +0700 (Tue, 19 Mar 2019)
+Last Changed Rev: 22432
+Last Changed Date: 2019-04-16 05:13:59 +0100 (Tue, 16 Apr 2019)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xpra-2.5/svn-version new/xpra-2.5.1/svn-version
--- old/xpra-2.5/svn-version    2019-03-20 05:44:42.000000000 +0100
+++ new/xpra-2.5.1/svn-version  2019-04-16 06:57:14.000000000 +0200
@@ -1 +1 @@
-22144
+22432
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xpra-2.5/win32/MINGW_BUILD.sh 
new/xpra-2.5.1/win32/MINGW_BUILD.sh
--- old/xpra-2.5/win32/MINGW_BUILD.sh   2019-03-20 05:43:48.000000000 +0100
+++ new/xpra-2.5.1/win32/MINGW_BUILD.sh 2019-04-12 17:27:57.000000000 +0200
@@ -18,7 +18,7 @@
 DO_MSI=${DO_MSI:-0}
 DO_SIGN=${DO_SIGN:-1}
 BUNDLE_PUTTY=${BUNDLE_PUTTY:-1}
-BUNDLE_OPENSSH=${BUNDLE_OPENSSH:-1}
+BUNDLE_OPENSSH=${BUNDLE_OPENSSH:-0}
 BUNDLE_OPENSSL=${BUNDLE_OPENSSL:-1}
 ZIP_MODULES=${ZIP_MODULES:-1}
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xpra-2.5/win32/xpra.iss new/xpra-2.5.1/win32/xpra.iss
--- old/xpra-2.5/win32/xpra.iss 2019-03-20 05:43:49.000000000 +0100
+++ new/xpra-2.5.1/win32/xpra.iss       2019-04-16 06:57:10.000000000 +0200
@@ -1,22 +1,22 @@
 [Setup]
 AppName=Xpra
 AppId=Xpra_is1
-AppVersion=2.5
-AppVerName=Xpra 2.5
-UninstallDisplayName=Xpra 2.5
+AppVersion=2.5.1
+AppVerName=Xpra 2.5.1
+UninstallDisplayName=Xpra 2.5.1
 AppPublisher=xpra.org
-AppPublisherURL=http://xpra.org/
+AppPublisherURL=http:;xpra.org/
 DefaultDirName={pf}\Xpra
 DefaultGroupName=Xpra
 DisableProgramGroupPage=true
 OutputDir=dist
 OutputBaseFilename=Xpra_Setup
-//Compression=none
-//Compression=lzma2/fast
+;Compression=none
+;Compression=lzma2/fast
 Compression=lzma2/max
 SolidCompression=yes
 AllowUNCPath=false
-VersionInfoVersion=2.5
+VersionInfoVersion=2.5.1
 VersionInfoCompany=xpra.org
 VersionInfoDescription=multi-platform screen and application forwarding system
 WizardImageFile=win32\xpra-logo.bmp
@@ -121,7 +121,7 @@
   begin
       nMsgBoxResult := MsgBox('Xpra is already running, you must stop it to 
proceed.', mbInformation, MB_RETRYCANCEL);
   end;
-  // if Cancel is pressed
+  //if Cancel is pressed
   if nMsgBoxResult = IDCANCEL then
   begin
     Result := False;
@@ -137,7 +137,7 @@
   begin
       nMsgBoxResult := MsgBox('Xpra is still running, you must stop it to be 
able to uninstall everything.', mbInformation, MB_RETRYCANCEL);
   end;
-  // if Cancel is pressed
+  //if Cancel is pressed
   if nMsgBoxResult = IDCANCEL then
   begin
     Result := False;
@@ -157,7 +157,7 @@
     openssl := ExpandConstant('{app}\OpenSSL.exe');
     Exec(openssl, args, '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
   end;
-  // move old config file:
+  //move old config file:
   config := ExpandConstant('{app}\xpra.conf');
   saved_config := ExpandConstant('{app}\etc\xpra.conf.bak');
   if (FileExists(config)) then
@@ -203,10 +203,10 @@
   sUnInstallString: String;
   iResultCode: Integer;
 begin
-// Return Values:
-// 1 - uninstall string is empty
-// 2 - error executing the UnInstallString
-// 3 - successfully executed the UnInstallString
+  // Return Values:
+  // 1 - uninstall string is empty
+  // 2 - error executing the UnInstallString
+  // 3 - successfully executed the UnInstallString
 
   // default return value
   Result := 0;
@@ -232,4 +232,4 @@
       UnInstallOldVersion();
     end;
   end;
-end;
\ No newline at end of file
+end;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xpra-2.5/xpra/__init__.py 
new/xpra-2.5.1/xpra/__init__.py
--- old/xpra-2.5/xpra/__init__.py       2019-03-20 05:44:42.000000000 +0100
+++ new/xpra-2.5.1/xpra/__init__.py     2019-04-16 06:57:17.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__ = "2.5"
+__version__ = "2.5.1"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xpra-2.5/xpra/client/client_tray.py 
new/xpra-2.5.1/xpra/client/client_tray.py
--- old/xpra-2.5/xpra/client/client_tray.py     2019-03-20 05:43:49.000000000 
+0100
+++ new/xpra-2.5.1/xpra/client/client_tray.py   2019-04-10 04:48:03.000000000 
+0200
@@ -37,6 +37,8 @@
         self._backing = None
         self.new_backing(w, h)
         self.idle_add(self.reconfigure)
+        #things may have settled by now
+        self.timeout_add(1000, self.send_configure)
 
     def set_alpha(self):
         #nothing to do,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xpra-2.5/xpra/client/gtk_base/gtk_client_base.py 
new/xpra-2.5.1/xpra/client/gtk_base/gtk_client_base.py
--- old/xpra-2.5/xpra/client/gtk_base/gtk_client_base.py        2019-03-20 
05:43:49.000000000 +0100
+++ new/xpra-2.5.1/xpra/client/gtk_base/gtk_client_base.py      2019-03-28 
13:13:12.000000000 +0100
@@ -968,8 +968,10 @@
         parts = enable_opengl.split(":", 1)
         enable_option = parts[0]            #ie: "on"
         opengllog("init_opengl: enable_option=%s", enable_option)
-        if enable_option=="probe-failed":
-            msg = "probe failed: %s" % csv(parts[1:])
+        if enable_option in ("probe-failed", "probe-error"):
+            msg = enable_option.replace("-", " ")
+            if len(parts)>1:
+                msg += ": %s" % csv(parts[1:])
             self.opengl_props["info"] = "disabled, %s" % msg
             self.opengl_setup_failure(body=msg)
             return
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/xpra-2.5/xpra/client/gtk_base/gtk_client_window_base.py 
new/xpra-2.5.1/xpra/client/gtk_base/gtk_client_window_base.py
--- old/xpra-2.5/xpra/client/gtk_base/gtk_client_window_base.py 2019-03-20 
05:43:49.000000000 +0100
+++ new/xpra-2.5.1/xpra/client/gtk_base/gtk_client_window_base.py       
2019-04-10 04:48:03.000000000 +0200
@@ -138,7 +138,7 @@
                     #"DIALOG",
                     #"MENU",
                     #"TOOLBAR",
-                    #"SPLASHSCREEN",
+                    #"SPLASH",
                     #"UTILITY",
                     #"DOCK",
                     #"DESKTOP",
@@ -154,6 +154,7 @@
                     #"DIALOG",
                     "MENU",
                     #"TOOLBAR",
+                    "SPLASH",
                     "SPLASHSCREEN",
                     "UTILITY",
                     "DOCK",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xpra-2.5/xpra/client/gtk_base/start_new_command.py 
new/xpra-2.5.1/xpra/client/gtk_base/start_new_command.py
--- old/xpra-2.5/xpra/client/gtk_base/start_new_command.py      2019-03-20 
05:43:49.000000000 +0100
+++ new/xpra-2.5.1/xpra/client/gtk_base/start_new_command.py    2019-04-10 
04:48:03.000000000 +0200
@@ -122,7 +122,7 @@
     def category_changed(self, *args):
         category = self.category_combo.get_active_text().encode("utf-8")
         log("category_changed(%s) category=%s", args, category)
-        entries = self.xdg_menu.get(category)
+        entries = self.xdg_menu.get(category, {}).get("Entries", {})
         self.command_combo.get_model().clear()
         for name in entries.keys():
             self.command_combo.append_text(name.decode("utf-8"))
@@ -174,7 +174,7 @@
         if self.xdg_menu:
             category = self.category_combo.get_active_text()
             log("category=%s", category)
-            entries = self.xdg_menu.get(category.encode("utf-8"))
+            entries = self.xdg_menu.get(category.encode("utf-8"), 
{}).get("Entries", {})
             if entries:
                 command_name = self.command_combo.get_active_text()
                 command_props = entries.get(command_name.encode("utf-8"))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xpra-2.5/xpra/codecs/argb/argb.pyx 
new/xpra-2.5.1/xpra/codecs/argb/argb.pyx
--- old/xpra-2.5/xpra/codecs/argb/argb.pyx      2019-03-20 05:43:49.000000000 
+0100
+++ new/xpra-2.5.1/xpra/codecs/argb/argb.pyx    2019-04-10 04:48:03.000000000 
+0200
@@ -293,7 +293,7 @@
     cdef unsigned int argb                      #@DuplicateSignature
     assert argb_len>0 and argb_len % 4 == 0, "invalid buffer size: %s is not a 
multiple of 4" % argb_len
     cdef MemBuf output_buf = getbuf(argb_len)
-    cdef unsigned char* argb_out = <unsigned char*> output_buf.get_mem()
+    cdef unsigned int* argb_out = <unsigned int*> output_buf.get_mem()
     cdef int i                                  #@DuplicateSignature
     for 0 <= i < argb_len / 4:
         argb = buf[i]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xpra-2.5/xpra/codecs/pillow/__init__.py 
new/xpra-2.5.1/xpra/codecs/pillow/__init__.py
--- old/xpra-2.5/xpra/codecs/pillow/__init__.py 2019-03-20 05:43:50.000000000 
+0100
+++ new/xpra-2.5.1/xpra/codecs/pillow/__init__.py       2019-03-20 
14:37:17.000000000 +0100
@@ -26,7 +26,10 @@
 import PIL                      #@UnresolvedImport
 from PIL import Image           #@UnresolvedImport
 assert PIL is not None and Image is not None
-PIL_VERSION = PIL.__version__
+try:
+    PIL_VERSION = PIL.__version__
+except AttributeError:
+    PIL_VERSION = PIL.PILLOW_VERSION
 if hasattr(Image, "DEBUG"):
     #for older versions (pre 3.0), use Image.DEBUG flag:
     Image.DEBUG = int(PIL_DEBUG)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xpra-2.5/xpra/gtk_common/gtk_util.py 
new/xpra-2.5.1/xpra/gtk_common/gtk_util.py
--- old/xpra-2.5/xpra/gtk_common/gtk_util.py    2019-03-20 05:43:50.000000000 
+0100
+++ new/xpra-2.5.1/xpra/gtk_common/gtk_util.py  2019-04-12 17:27:57.000000000 
+0200
@@ -108,6 +108,11 @@
     def is_realized(widget):
         return widget.get_realized()
 
+    def x11_foreign_new(xid):
+        from gi.repository import GdkX11
+        display = display_get_default()
+        return GdkX11.X11Window.foreign_new_for_display(display, xid)
+
     def GDKWindow(parent=None, width=1, height=1, 
window_type=gdk.WindowType.TOPLEVEL,
                   event_mask=0, wclass=gdk.WindowWindowClass.INPUT_OUTPUT, 
title=None,
                   x=None, y=None, override_redirect=False, visual=None, 
**kwargs):
@@ -365,12 +370,9 @@
         widget.drag_get_data(context, atom, time)
 
     from gi.repository.Gtk import Clipboard     #@UnresolvedImport
-    CLIPBOARD_SELECTION = {}
-    #gtk2: uses strings:
-    for x in ("PRIMARY", "SECONDARY", "CLIPBOARD"):
-        CLIPBOARD_SELECTION[x] = getattr(gdk, "SELECTION_%s" % bytestostr(x))
     def GetClipboard(selection):
-        atom = CLIPBOARD_SELECTION.get(selection) or 
gdk.Atom.intern(bytestostr(selection), False)
+        sstr = bytestostr(selection)
+        atom = getattr(gdk, "SELECTION_%s" % sstr, None) or 
gdk.Atom.intern(sstr, False)
         return Clipboard.get(atom)
     def clipboard_request_contents(clipboard, target, unpack):
         target_atom = gdk.Atom.intern(bytestostr(target), False)
@@ -450,6 +452,9 @@
     def get_pixbuf_from_data(rgb_data, has_alpha, w, h, rowstride):
         return gdk.pixbuf_new_from_data(rgb_data, gdk.COLORSPACE_RGB, 
has_alpha, 8, w, h, rowstride)
 
+    def x11_foreign_new(xid):
+        return gdk.window_foreign_new_for_display(xid)
+
     def GDKWindow(parent=None, width=1, height=1, 
window_type=gdk.WINDOW_TOPLEVEL,
                   event_mask=0, wclass=gdk.INPUT_OUTPUT, title=None, x=-1, 
y=-1, **kwargs):
         return gdk.Window(parent, width, height, window_type, event_mask, 
wclass, title, x, y, **kwargs)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xpra-2.5/xpra/net/file_transfer.py 
new/xpra-2.5.1/xpra/net/file_transfer.py
--- old/xpra-2.5/xpra/net/file_transfer.py      2019-03-20 05:43:50.000000000 
+0100
+++ new/xpra-2.5.1/xpra/net/file_transfer.py    2019-04-10 04:48:03.000000000 
+0200
@@ -437,7 +437,7 @@
             delfile()
             return
         try:
-            job_options = options.get("options")
+            job_options = options.dictget("options")
             job_options["copies"] = copies
             job = print_files(printer, [filename], title, job_options)
         except Exception as e:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xpra-2.5/xpra/net/ssh.py 
new/xpra-2.5.1/xpra/net/ssh.py
--- old/xpra-2.5/xpra/net/ssh.py        2019-03-20 05:43:51.000000000 +0100
+++ new/xpra-2.5.1/xpra/net/ssh.py      2019-04-10 04:48:03.000000000 +0200
@@ -371,7 +371,7 @@
                         log("verifyhostkeydns failed", exc_info=True)
                         log.warn("Warning: cannot check SSHFP DNS records")
                         log.warn(" %s", e)
-            log.info("dnscheck=%s", dnscheck)
+            log("dnscheck=%s", dnscheck)
             def adddnscheckinfo(q):
                 if dnscheck is not True:
                     if dnscheck:
@@ -522,7 +522,7 @@
         except SSHException as e:
             log("auth_password(..)", exc_info=True)
             log.info("SSH password authentication failed:")
-            log.info(" %s", e.message)
+            log.info(" %s", getattr(e, "message", e))
 
     def auth_interactive():
         log("trying interactive authentication")
@@ -544,7 +544,7 @@
         except SSHException as e:
             log("auth_interactive(..)", exc_info=True)
             log.info("SSH password authentication failed:")
-            log.info(" %s", e.message)
+            log.info(" %s", getattr(e, "message", e))
 
     banner = transport.get_banner()
     if banner:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xpra-2.5/xpra/platform/pycups_printing.py 
new/xpra-2.5.1/xpra/platform/pycups_printing.py
--- old/xpra-2.5/xpra/platform/pycups_printing.py       2019-03-20 
05:43:51.000000000 +0100
+++ new/xpra-2.5.1/xpra/platform/pycups_printing.py     2019-04-10 
04:48:03.000000000 +0200
@@ -13,7 +13,7 @@
 from threading import Lock
 import cups
 
-from xpra.os_util import OSX, PYTHON3
+from xpra.os_util import OSX, PYTHON3, bytestostr
 from xpra.util import engs, envint, envbool, parse_simple_dict
 from xpra.log import Logger
 
@@ -422,8 +422,9 @@
         raise Exception("invalid printer: '%s'" % printer)
     log("pycups.print_files%s", (printer, filenames, title, options))
     actual_options = DEFAULT_CUPS_OPTIONS.copy()
-    used_options = dict((str(k),str(v)) for k,v in options.items() if str(k) 
in CUPS_OPTIONS_WHITELIST)
-    unused_options = dict((str(k),str(v)) for k,v in options.items() if str(k) 
not in CUPS_OPTIONS_WHITELIST)
+    s = bytestostr
+    used_options = dict((s(k),s(v)) for k,v in options.items() if s(k) in 
CUPS_OPTIONS_WHITELIST)
+    unused_options = dict((s(k),s(v)) for k,v in options.items() if s(k) not 
in CUPS_OPTIONS_WHITELIST)
     log("used options=%s", used_options)
     log("unused options=%s", unused_options)
     actual_options.update(used_options)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xpra-2.5/xpra/platform/win32/__init__.py 
new/xpra-2.5.1/xpra/platform/win32/__init__.py
--- old/xpra-2.5/xpra/platform/win32/__init__.py        2019-03-20 
05:43:51.000000000 +0100
+++ new/xpra-2.5.1/xpra/platform/win32/__init__.py      2019-04-10 
04:48:03.000000000 +0200
@@ -262,8 +262,9 @@
         #(which usually does not popup a new shell window)
         _wait_for_input = False
         return
-    if os.environ.get("MSYSCON") or os.environ.get("CYGWIN"):
-        #msys environment doesn't popup a new shell window
+    if os.environ.get("TERM", "")=="xterm":
+        #msys, cygwin and git bash environments don't popup a new shell window
+        #and they all set TERM=xterm
         _wait_for_input = False
         return
     try:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xpra-2.5/xpra/platform/xposix/appindicator_tray.py 
new/xpra-2.5.1/xpra/platform/xposix/appindicator_tray.py
--- old/xpra-2.5/xpra/platform/xposix/appindicator_tray.py      2019-03-20 
05:43:51.000000000 +0100
+++ new/xpra-2.5.1/xpra/platform/xposix/appindicator_tray.py    2019-04-10 
04:48:03.000000000 +0200
@@ -45,7 +45,7 @@
 
     def __init__(self, *args, **kwargs):
         TrayBase.__init__(self, *args, **kwargs)
-        filename = get_icon_filename(self.default_icon_filename)
+        filename = get_icon_filename(self.default_icon_filename) or "xpra.png"
         self._has_icon = False
         self.tmp_filename = None
         self.tray_widget = Indicator(self.tooltip, filename, 
APPLICATION_STATUS)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xpra-2.5/xpra/platform/xposix/gui.py 
new/xpra-2.5.1/xpra/platform/xposix/gui.py
--- old/xpra-2.5/xpra/platform/xposix/gui.py    2019-03-20 05:43:51.000000000 
+0100
+++ new/xpra-2.5.1/xpra/platform/xposix/gui.py  2019-04-10 04:48:03.000000000 
+0200
@@ -11,7 +11,7 @@
 from xpra.os_util import bytestostr, hexstr
 from xpra.util import iround, envbool, envint, csv
 from xpra.gtk_common.gtk_util import get_xwindow
-from xpra.os_util import is_unity, is_gnome, is_kde, is_X11, is_Wayland
+from xpra.os_util import is_unity, is_gnome, is_kde, is_Fedora, is_X11, 
is_Wayland
 from xpra.log import Logger
 
 log = Logger("posix")
@@ -37,7 +37,7 @@
 GTK_MENUS = envbool("XPRA_GTK_MENUS", False)
 RANDR_DPI = envbool("XPRA_RANDR_DPI", True)
 XSETTINGS_DPI = envbool("XPRA_XSETTINGS_DPI", True)
-USE_NATIVE_TRAY = envbool("XPRA_USE_NATIVE_TRAY", is_unity() or is_gnome() or 
is_kde())
+USE_NATIVE_TRAY = envbool("XPRA_USE_NATIVE_TRAY", is_unity() or (is_gnome() 
and not is_Fedora()) or is_kde())
 XINPUT_WHEEL_DIV = envint("XPRA_XINPUT_WHEEL_DIV", 15)
 DBUS_SCREENSAVER = envbool("XPRA_DBUS_SCREENSAVER", False)
 
@@ -49,14 +49,7 @@
 
 
 def get_native_system_tray_classes():
-    c = []
-    if USE_NATIVE_TRAY:
-        try:
-            from xpra.platform.xposix.appindicator_tray import AppindicatorTray
-            c.append(AppindicatorTray)
-        except (ImportError, ValueError):
-            traylog("cannot load appindicator tray: %s", exc_info=True)
-    return c
+    return []
 
 def get_wm_name():
     wm_name = os.environ.get("XDG_CURRENT_DESKTOP", "")
@@ -78,14 +71,21 @@
 
 def get_native_tray_classes():
     #could restrict to only DEs that have a broken system tray like "GNOME 
Shell"?
+    c = []
+    if USE_NATIVE_TRAY:
+        try:
+            from xpra.platform.xposix.appindicator_tray import AppindicatorTray
+            c.append(AppindicatorTray)
+        except (ImportError, ValueError):
+            traylog("cannot load appindicator tray", exc_info=True)
     if has_gtk_menu_support():  #and wm_name=="GNOME Shell":
         try:
             from xpra.platform.xposix.gtkmenu_tray import GTKMenuTray
             traylog("using GTKMenuTray for '%s' window manager", get_wm_name() 
or "unknown")
-            return [GTKMenuTray]
+            c.append(GTKMenuTray)
         except Exception as e:
             traylog("cannot load gtk menu tray: %s", e)
-    return get_native_system_tray_classes()
+    return c
 
 
 def get_native_notifier_classes():
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xpra-2.5/xpra/rectangle.pyx 
new/xpra-2.5.1/xpra/rectangle.pyx
--- old/xpra-2.5/xpra/rectangle.pyx     2019-03-20 05:43:51.000000000 +0100
+++ new/xpra-2.5.1/xpra/rectangle.pyx   2019-03-28 13:13:12.000000000 +0100
@@ -33,7 +33,7 @@
         self.y = y
         self.width = w
         self.height = h
-        self.hash = (self.x+self.y)<<16 + (self.width + self.height)
+        self.hash = 
(self.x&0xffff)<<48+(self.y&0xffff)<<32+(self.width&0xffff)<<16+(self.height&0xffff)
 
     def __hash__(self):
         return self.hash
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xpra-2.5/xpra/scripts/config.py 
new/xpra-2.5.1/xpra/scripts/config.py
--- old/xpra-2.5/xpra/scripts/config.py 2019-03-20 05:43:51.000000000 +0100
+++ new/xpra-2.5.1/xpra/scripts/config.py       2019-04-16 06:57:10.000000000 
+0200
@@ -990,7 +990,7 @@
                     "desktop-fullscreen": False,
                     "global-menus"      : True,
                     "forward-xdg-open"  : True,
-                    "modal-windows"     : True,
+                    "modal-windows"     : False,
                     "bandwidth-detection" : True,
                     "ssh-upgrade"       : True,
                     "pulseaudio-configure-commands"  : [" ".join(x) for x in 
DEFAULT_PULSEAUDIO_CONFIGURE_COMMANDS],
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xpra-2.5/xpra/scripts/main.py 
new/xpra-2.5.1/xpra/scripts/main.py
--- old/xpra-2.5/xpra/scripts/main.py   2019-03-20 05:43:51.000000000 +0100
+++ new/xpra-2.5.1/xpra/scripts/main.py 2019-03-28 13:13:12.000000000 +0100
@@ -1762,7 +1762,7 @@
         log("run_glprobe() backends=%s", backends)
         opengl_props, gl_client_window_module = 
get_gl_client_window_module(backends, force_enable)
         log("run_glprobe() opengl_props=%s, gl_client_window_module=%s", 
opengl_props, gl_client_window_module)
-        if gl_client_window_module and opengl_props.get("safe", False):
+        if gl_client_window_module and (opengl_props.get("safe", False) or 
force_enable):
             gl_client_window_class = gl_client_window_module.GLClientWindow
             pixel_depth = int(opts.pixel_depth)
             log("run_glprobe() gl_client_window_class=%s, pixel_depth=%s", 
gl_client_window_class, pixel_depth)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xpra-2.5/xpra/scripts/server.py 
new/xpra-2.5.1/xpra/scripts/server.py
--- old/xpra-2.5/xpra/scripts/server.py 2019-03-20 05:43:51.000000000 +0100
+++ new/xpra-2.5.1/xpra/scripts/server.py       2019-04-10 04:48:03.000000000 
+0200
@@ -70,7 +70,10 @@
 def _root_prop_get(prop_name, ptype="u32"):
     from xpra.gtk_common.gtk_util import get_default_root_window
     from xpra.x11.gtk_x11.prop import prop_get
-    return prop_get(get_default_root_window(), prop_name, ptype)
+    try:
+        return prop_get(get_default_root_window(), prop_name, ptype)
+    except Exception:
+        return None
 
 def _save_int(prop_name, pid):
     _root_prop_set(prop_name, "u32", pid)
@@ -1051,19 +1054,20 @@
 
     display = None
     if not proxying:
-        no_gtk()
-        if POSIX and not OSX and (starting or starting_desktop or shadowing):
-            #check that we can access the X11 display:
-            from xpra.x11.vfb_util import verify_display_ready
-            if not verify_display_ready(xvfb, display_name, shadowing):
-                return 1
-            if not PYTHON3:
-                from xpra.x11.gtk2.gdk_display_util import verify_gdk_display  
     #@UnusedImport
-            else:
-                from xpra.x11.gtk3.gdk_display_util import verify_gdk_display  
     #@Reimport
-            display = verify_gdk_display(display_name)
-            if not display:
-                return 1
+        if POSIX and not OSX:
+            no_gtk()
+            if starting or starting_desktop or shadowing:
+                #check that we can access the X11 display:
+                from xpra.x11.vfb_util import verify_display_ready
+                if not verify_display_ready(xvfb, display_name, shadowing):
+                    return 1
+                if not PYTHON3:
+                    from xpra.x11.gtk2.gdk_display_util import 
verify_gdk_display       #@UnusedImport
+                else:
+                    from xpra.x11.gtk3.gdk_display_util import 
verify_gdk_display       #@Reimport
+                display = verify_gdk_display(display_name)
+                if not display:
+                    return 1
         #on win32, this ensures that we get the correct screen size to shadow:
         from xpra.platform.gui import init as gui_init
         gui_init()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xpra-2.5/xpra/server/mixins/fileprint_server.py 
new/xpra-2.5.1/xpra/server/mixins/fileprint_server.py
--- old/xpra-2.5/xpra/server/mixins/fileprint_server.py 2019-03-20 
05:43:52.000000000 +0100
+++ new/xpra-2.5.1/xpra/server/mixins/fileprint_server.py       2019-04-10 
04:48:03.000000000 +0200
@@ -138,7 +138,7 @@
         if len(packet)>=4:
             mimetype = packet[3]
         if len(packet)>=5:
-            source_uuid = packet[4]
+            source_uuid = bytestostr(packet[4])
         if len(packet)>=6:
             title = packet[5]
         if len(packet)>=7:
@@ -152,7 +152,7 @@
             printlog.error("Error: invalid mimetype in print packet:")
             printlog.error(" %s", repr_ellipsized(mimetype))
             return
-        if isinstance(print_options, dict):
+        if not isinstance(print_options, dict):
             s = bytestostr(print_options)
             print_options = {}
             for x in s.split(" "):
@@ -182,7 +182,7 @@
         printlog("will try to send to %i clients: %s", len(sources), sources)
         for ss in sources:
             if source_uuid not in ("*", ss.uuid):
-                printlog("not sending to %s (wanted uuid=%s)", ss, source_uuid)
+                printlog("not sending to %s (uuid=%s, wanted uuid=%s)", ss, 
ss.uuid, source_uuid)
                 continue
             if not ss.printing:
                 if source_uuid!='*':
@@ -197,7 +197,7 @@
             if printer not in ss.printers:
                 printlog.warn("Warning: client %s does not have a '%s' 
printer", ss.uuid, printer)
                 continue
-            printlog("'%s' sent to %s for printing on '%s'", title or 
filename, ss, printer)
+            printlog("'%s' sent to %s for printing on '%s'", bytestostr(title 
or filename), ss, printer)
             if ss.send_file(filename, mimetype, file_data, len(file_data), 
True, True, options):
                 sent += 1
         #warn if not sent:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xpra-2.5/xpra/server/proxy/proxy_instance_process.py 
new/xpra-2.5.1/xpra/server/proxy/proxy_instance_process.py
--- old/xpra-2.5/xpra/server/proxy/proxy_instance_process.py    2019-03-20 
05:43:52.000000000 +0100
+++ new/xpra-2.5.1/xpra/server/proxy/proxy_instance_process.py  2019-04-16 
06:57:10.000000000 +0200
@@ -323,7 +323,7 @@
 
         enclog("encoder types found: %s", tuple(encoder_types))
         #remove duplicates and use preferred order:
-        order = PREFERRED_ENCODER_ORDER[:]
+        order = list(PREFERRED_ENCODER_ORDER)
         for x in tuple(encoder_types):
             if x not in order:
                 order.append(x)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xpra-2.5/xpra/server/server_base.py 
new/xpra-2.5.1/xpra/server/server_base.py
--- old/xpra-2.5/xpra/server/server_base.py     2019-03-20 05:43:52.000000000 
+0100
+++ new/xpra-2.5.1/xpra/server/server_base.py   2019-03-28 13:13:12.000000000 
+0100
@@ -503,7 +503,7 @@
         #if len(packet>=2):
         #    uuid = packet[1]
         if len(packet)>=4:
-            categories = packet[3]
+            categories = tuple(bytestostr(x) for x in packet[3])
         def info_callback(_proto, info):
             assert proto==_proto
             if categories:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xpra-2.5/xpra/server/server_core.py 
new/xpra-2.5.1/xpra/server/server_core.py
--- old/xpra-2.5/xpra/server/server_core.py     2019-03-20 05:43:52.000000000 
+0100
+++ new/xpra-2.5.1/xpra/server/server_core.py   2019-04-16 06:57:10.000000000 
+0200
@@ -963,6 +963,7 @@
     def handle_ssh_connection(self, conn):
         from xpra.server.ssh import make_ssh_server_connection, log as sshlog
         socktype = conn.socktype_wrapped
+        none_auth = not self.auth_classes[socktype]
         sshlog("handle_ssh_connection(%s) socktype wrapped=%s", conn, socktype)
         def ssh_password_authenticate(username, password):
             if not POSIX or getuid()!=0:
@@ -996,7 +997,7 @@
                     if not r:
                         return False
             return True
-        return make_ssh_server_connection(conn, ssh_password_authenticate)
+        return make_ssh_server_connection(conn, none_auth=none_auth, 
password_auth=ssh_password_authenticate)
 
     def try_upgrade_to_rfb(self, proto):
         self.cancel_upgrade_to_rfb_timer(proto)
@@ -1530,7 +1531,7 @@
         #skip the authentication module we have "passed" already:
         remaining_authenticators = tuple(x for x in proto.authenticators if 
not x.passed)
 
-        client_expects_challenge = c.get("challenge") is not None
+        client_expects_challenge = c.strget("challenge") is not None
         challenge_response = c.strget("challenge_response")
         client_salt = c.strget("challenge_client_salt")
         if client_expects_challenge and not remaining_authenticators:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/xpra-2.5/xpra/server/shadow/gtk_shadow_server_base.py 
new/xpra-2.5.1/xpra/server/shadow/gtk_shadow_server_base.py
--- old/xpra-2.5/xpra/server/shadow/gtk_shadow_server_base.py   2019-03-20 
05:43:52.000000000 +0100
+++ new/xpra-2.5.1/xpra/server/shadow/gtk_shadow_server_base.py 2019-04-10 
04:48:03.000000000 +0200
@@ -155,13 +155,17 @@
             return None
         pointer = super(GTKShadowServerBase, self)._adjust_pointer(proto, wid, 
opointer)
         #the window may be at an offset (multi-window for multi-monitor):
-        wx, wy, ww, wh = window.geometry
+        wx, wy, ww, wh = window.get_geometry()
         #or maybe the pointer is off-screen:
         x, y = pointer[:2]
         if x<0 or x>=ww or y<0 or y>=wh:
             self.suspend_cursor(proto)
             return None
         self.restore_cursor(proto)
+        #note: with x11 shadow servers,
+        # X11ServerCore._get_pointer_abs_coordinates() will recalculate
+        # the absolute coordinates from the relative ones,
+        # and it should end up with the same values we calculated here
         ax = x+wx
         ay = y+wy
         return [ax, ay]+list(pointer[2:])
@@ -197,23 +201,24 @@
             tw.cleanup()
 
     def setup_tray(self):
+        if OSX:
+            return
         try:
             from xpra.gtk_common.gobject_compat import import_gtk
             gtk = import_gtk()
             from xpra.gtk_common.gtk_util import popup_menu_workaround
             #menu:
-            if not OSX:
-                label = u"Xpra Shadow Server"
-                display = os.environ.get("DISPLAY")
-                if POSIX and display:
-                    label = u"Xpra %s Shadow Server" % display
-                self.tray_menu = gtk.Menu()
-                self.tray_menu.set_title(label)
-                title_item = gtk.MenuItem()
-                title_item.set_label(label)
-                title_item.set_sensitive(False)
-                title_item.show()
-                self.tray_menu.append(title_item)
+            label = u"Xpra Shadow Server"
+            display = os.environ.get("DISPLAY")
+            if POSIX and display:
+                label = u"Xpra %s Shadow Server" % display
+            self.tray_menu = gtk.Menu()
+            self.tray_menu.set_title(label)
+            title_item = gtk.MenuItem()
+            title_item.set_label(label)
+            title_item.set_sensitive(False)
+            title_item.show()
+            self.tray_menu.append(title_item)
             from xpra.gtk_common.about import about
             self.tray_menu.append(self.traymenuitem("About Xpra", 
"information.png", None, about))
             if server_features.windows:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xpra-2.5/xpra/server/shadow/root_window_model.py 
new/xpra-2.5.1/xpra/server/shadow/root_window_model.py
--- old/xpra-2.5/xpra/server/shadow/root_window_model.py        2019-03-20 
05:43:52.000000000 +0100
+++ new/xpra-2.5.1/xpra/server/shadow/root_window_model.py      2019-04-10 
04:48:03.000000000 +0200
@@ -87,8 +87,7 @@
         return self.geometry[2:4]
 
     def get_geometry(self):
-        w, h = self.get_dimensions()
-        return (0, 0, w, h)
+        return self.geometry
 
 
     def get_property_names(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xpra-2.5/xpra/server/source/clipboard_connection.py 
new/xpra-2.5.1/xpra/server/source/clipboard_connection.py
--- old/xpra-2.5/xpra/server/source/clipboard_connection.py     2019-03-20 
05:43:52.000000000 +0100
+++ new/xpra-2.5.1/xpra/server/source/clipboard_connection.py   2019-04-16 
06:57:10.000000000 +0200
@@ -53,7 +53,7 @@
         log("client clipboard: greedy=%s, want_targets=%s, 
client_selections=%s, contents_slice_fix=%s",
             self.clipboard_greedy, self.clipboard_want_targets,
             self.clipboard_client_selections, 
self.clipboard_contents_slice_fix)
-        if not self.clipboard_contents_slice_fix:
+        if self.clipboard_enabled and not self.clipboard_contents_slice_fix:
             log.info("client clipboard does not include contents slice fix")
 
     def get_info(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xpra-2.5/xpra/server/ssh.py 
new/xpra-2.5.1/xpra/server/ssh.py
--- old/xpra-2.5/xpra/server/ssh.py     2019-03-20 05:43:52.000000000 +0100
+++ new/xpra-2.5.1/xpra/server/ssh.py   2019-04-10 04:48:03.000000000 +0200
@@ -221,9 +221,9 @@
         return False
 
 
-def make_ssh_server_connection(conn, password_auth=None):
-    log("make_ssh_server_connection(%s)", conn)
-    ssh_server = SSHServer(password_auth=password_auth)
+def make_ssh_server_connection(conn, none_auth=False, password_auth=None):
+    log("make_ssh_server_connection%s", (conn, none_auth, password_auth))
+    ssh_server = SSHServer(none_auth=none_auth, password_auth=password_auth)
     DoGSSAPIKeyExchange = False
     t = None
     def close():
@@ -314,5 +314,6 @@
         log.warn(" closing connection from %s", pretty_socket(conn.target))
         close()
         return None
-    #log("client authenticated, channel=%s", chan)
-    return SSHSocketConnection(ssh_server.proxy_channel, conn._socket, 
target="ssh client")
+    log("client authenticated, channel=%s", chan)
+    sock = conn._socket
+    return SSHSocketConnection(ssh_server.proxy_channel, sock, conn.local, 
conn.endpoint, conn.target)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xpra-2.5/xpra/server/window/window_video_source.py 
new/xpra-2.5.1/xpra/server/window/window_video_source.py
--- old/xpra-2.5/xpra/server/window/window_video_source.py      2019-03-20 
05:43:52.000000000 +0100
+++ new/xpra-2.5.1/xpra/server/window/window_video_source.py    2019-03-28 
13:13:12.000000000 +0100
@@ -1816,11 +1816,11 @@
                 csize = len(data)
                 compresslog("compress: %5.1fms for %4ix%-4i pixels at %4i,%-4i 
for wid=%-5i using %9s with ratio %5.1f%%  (%5iKB to %5iKB), sequence %5i, 
client_options=%s",
                      (monotonic_time()-substart)*1000.0, w, sh, x+0, y+sy, 
self.wid, coding, 100.0*csize/psize, psize/1024, csize/1024, 
self._damage_packet_sequence, client_options)
-                scrolllog("non-scroll encoding using %s (quality=%i, speed=%i) 
took %ims for %i rectangles",
-                          encoding, self._current_quality, 
self._current_speed, (monotonic_time()-nsstart)*1000, len(non_scroll))
-            else:
-                #we can't send the non-scroll areas, ouch!
-                flush = 0
+            scrolllog("non-scroll encoding using %s (quality=%i, speed=%i) 
took %ims for %i rectangles",
+                      encoding, self._current_quality, self._current_speed, 
(monotonic_time()-nsstart)*1000, len(non_scroll))
+        else:
+            #we can't send the non-scroll areas, ouch!
+            flush = 0
         assert flush==0
         self.last_scroll_time = monotonic_time()
         scrolllog("scroll encoding total time: %ims", 
(self.last_scroll_time-start)*1000)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xpra-2.5/xpra/server/window/windowicon_source.py 
new/xpra-2.5.1/xpra/server/window/windowicon_source.py
--- old/xpra-2.5/xpra/server/window/windowicon_source.py        2019-03-20 
05:43:52.000000000 +0100
+++ new/xpra-2.5.1/xpra/server/window/windowicon_source.py      2019-03-20 
14:37:17.000000000 +0100
@@ -10,7 +10,7 @@
 import threading
 from PIL import Image
 
-from xpra.os_util import monotonic_time, load_binary_file, 
memoryview_to_bytes, BytesIOClass
+from xpra.os_util import monotonic_time, load_binary_file, 
memoryview_to_bytes, strtobytes, BytesIOClass
 from xpra.net import compression
 from xpra.util import envbool, envint
 from xpra.log import Logger
@@ -236,7 +236,7 @@
         else:
             if image:
                 pixel_data = image.tobytes("raw", "RGBA")
-            wrapper = self.compressed_wrapper("premult_argb32", 
str(pixel_data))
+            wrapper = self.compressed_wrapper("premult_argb32", 
strtobytes(pixel_data))
         packet = ("window-icon", self.wid, w, h, wrapper.datatype, wrapper)
         log("queuing window icon update: %s", packet)
         self.queue_packet(packet, wait_for_more=True)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xpra-2.5/xpra/src_info.py 
new/xpra-2.5.1/xpra/src_info.py
--- old/xpra-2.5/xpra/src_info.py       2019-03-20 05:44:42.000000000 +0100
+++ new/xpra-2.5.1/xpra/src_info.py     2019-04-16 06:57:14.000000000 +0200
@@ -1,2 +1,2 @@
 LOCAL_MODIFICATIONS=0
-REVISION=22144
+REVISION=22432
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xpra-2.5/xpra/x11/bindings/keyboard_bindings.pyx 
new/xpra-2.5.1/xpra/x11/bindings/keyboard_bindings.pyx
--- old/xpra-2.5/xpra/x11/bindings/keyboard_bindings.pyx        2019-03-20 
05:43:52.000000000 +0100
+++ new/xpra-2.5.1/xpra/x11/bindings/keyboard_bindings.pyx      2019-04-16 
06:57:10.000000000 +0200
@@ -506,17 +506,20 @@
 
     cdef KeySym _parse_keysym(self, symbol):
         cdef KeySym keysym
-        if symbol in ["NoSymbol", "VoidSymbol"]:
-            return  NoSymbol
         s = strtobytes(symbol)
+        if s in [b"NoSymbol", b"VoidSymbol"]:
+            return  NoSymbol
         keysym = XStringToKeysym(s)
         if keysym==NoSymbol:
-            if symbol.startswith("U+"):
-                symbol = "0x"+symbol[2:]
-            if symbol.lower().startswith("0x"):
-                return int(symbol, 16)
-            if len(symbol)>0 and symbol[0] in ["0", "1", "2", "3", "4", "5", 
"6", "7", "8", "9"]:
-                return int(symbol)
+            if s.startswith(b"U+"):
+                s = b"0x"+s[2:]
+            if s.lower().startswith(b"0x"):
+                return int(s, 16)
+            if len(s)>0:
+                try:
+                    return int(s)
+                except ValueError:
+                    pass
             return NoSymbol
         return keysym
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xpra-2.5/xpra/x11/gtk_x11/tray.py 
new/xpra-2.5.1/xpra/x11/gtk_x11/tray.py
--- old/xpra-2.5/xpra/x11/gtk_x11/tray.py       2019-03-20 05:43:52.000000000 
+0100
+++ new/xpra-2.5.1/xpra/x11/gtk_x11/tray.py     2019-04-10 04:48:03.000000000 
+0200
@@ -8,7 +8,7 @@
 from xpra.x11.gtk_x11.prop import prop_set, prop_get
 from xpra.gtk_common.gobject_compat import import_gdk, import_gobject, is_gtk3
 from xpra.gtk_common.gtk_util import (
-    display_get_default, get_default_root_window, get_xwindow, GDKWindow,
+    display_get_default, get_default_root_window, get_xwindow, GDKWindow, 
x11_foreign_new,
     STRUCTURE_MASK, EXPOSURE_MASK, PROPERTY_CHANGE_MASK,
     )
 from xpra.x11.bindings.window_bindings import constants, X11WindowBindings 
#@UnresolvedImport
@@ -218,7 +218,7 @@
     def dock_tray(self, xid):
         log("dock_tray(%#x)", xid)
         root = get_default_root_window()
-        window = gdk.window_foreign_new(xid)
+        window = x11_foreign_new(xid)
         if window is None:
             log.warn("could not find gdk window for tray window %#x", xid)
             return



Reply via email to