Hello community, here is the log from the commit of package xpra for openSUSE:Factory checked in at 2019-11-21 12:59:10 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/xpra (Old) and /work/SRC/openSUSE:Factory/.xpra.new.26869 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "xpra" Thu Nov 21 12:59:10 2019 rev:10 rq:749997 version:3.0.2 Changes: -------- --- /work/SRC/openSUSE:Factory/xpra/xpra.changes 2019-11-04 17:15:21.632835085 +0100 +++ /work/SRC/openSUSE:Factory/.xpra.new.26869/xpra.changes 2019-11-21 12:59:19.910515592 +0100 @@ -1,0 +2,35 @@ +Wed Nov 20 19:48:11 UTC 2019 - Luigi Baldoni <[email protected]> + +- Update to version 3.0.2 + * fix clipboard synchronization issue with MS Windows clients + properly + * fix Pillow 6.x compatibility with MS Windows packaging + * fix null bytes in X11 error text properly + * fix Python 3 servers wrongly re-sending the 'screen' + attribute + * fix remote logging failures with some message formats + * fix lost screen updates + * fix GTK scaling causing window geometry issues + * fix HTML5 clipboard data sent from polling events + * fix CUDA device logging with multiple devices + * fix 32-bit build errors on xxhash + * fix RPM jpeg and libyuv dependencies + * fix OpenGL window not refreshing with Python 3 + * fix OpenGL context held for too long + * fix SSH connection errors when 'port' is specified in the + ssh config + * fix faac and faad2 security issues in MS Windows and MacOS + builds + * fix window size hints misapplied with GTK3 on MS Windows and + Wayland + * disable OpenGL acceleration on old Intel chipsets + * disable OpenGL acceleration with GTK3 builds on MS Windows + (for now, pending bug) + * show python interpreter version on about dialog + * re-instante ancient popup window workaround (was disabled by + mistake) + * don't use av-synchronization for text and picture content + types + * workaround Fedora packaging causing gratuitious conflicts + +------------------------------------------------------------------- Old: ---- xpra-3.0.1.tar.xz New: ---- xpra-3.0.2.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ xpra.spec ++++++ --- /var/tmp/diff_new_pack.eQyBGG/_old 2019-11-21 12:59:20.642515367 +0100 +++ /var/tmp/diff_new_pack.eQyBGG/_new 2019-11-21 12:59:20.642515367 +0100 @@ -1,7 +1,7 @@ # # spec file for package xpra # -# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2019 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.1 +Version: 3.0.2 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.1.tar.xz -> xpra-3.0.2.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.1/NEWS new/xpra-3.0.2/NEWS --- old/xpra-3.0.1/NEWS 2019-10-22 14:15:46.000000000 +0200 +++ new/xpra-3.0.2/NEWS 2019-11-05 18:31:07.000000000 +0100 @@ -1,4 +1,30 @@ -v3.0.1 (2019-10-22) +v3.0.2 (2019-11-05) +====================== + -- fix clipboard synchronization issue with MS Windows clients properly + -- fix Pillow 6.x compatibility with MS Windows packaging + -- fix null bytes in X11 error text properly + -- fix Python 3 servers wrongly re-sending the 'screen' attribute + -- fix remote logging failures with some message formats + -- fix lost screen updates + -- fix GTK scaling causing window geometry issues + -- fix HTML5 clipboard data sent from polling events + -- fix CUDA device logging with multiple devices + -- fix 32-bit build errors on xxhash + -- fix RPM jpeg and libyuv dependencies + -- fix OpenGL window not refreshing with Python 3 + -- fix OpenGL context held for too long + -- fix SSH connection errors when 'port' is specified in the ssh config + -- fix faac and faad2 security issues in MS Windows and MacOS builds + -- fix window size hints misapplied with GTK3 on MS Windows and Wayland + -- disable OpenGL acceleration on old Intel chipsets + -- disable OpenGL acceleration with GTK3 builds on MS Windows (for now, pending bug) + -- show python interpreter version on about dialog + -- re-instante ancient popup window workaround (was disabled by mistake) + -- don't use av-synchronization for text and picture content types + -- workaround Fedora packaging causing gratuitious conflicts + + +v3.0.1 (2019-10-23) ====================== -- fix clipboard synchronization failures with MS Windows clients -- fix window cleanup errors preventing a clean exit diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.1/cups/xpraforwarder new/xpra-3.0.2/cups/xpraforwarder --- old/xpra-3.0.1/cups/xpraforwarder 2019-10-20 14:13:41.000000000 +0200 +++ new/xpra-3.0.2/cups/xpraforwarder 2019-10-30 04:23:47.000000000 +0100 @@ -42,7 +42,7 @@ from urllib.parse import urlparse, parse_qs -__version__ = "3.0.1" +__version__ = "3.0.2" #Writes a syslog entry (msg) at the default facility: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.1/etc/xpra/conf.d/40_client.conf.in new/xpra-3.0.2/etc/xpra/conf.d/40_client.conf.in --- old/xpra-3.0.1/etc/xpra/conf.d/40_client.conf.in 2019-09-24 15:53:53.000000000 +0200 +++ new/xpra-3.0.2/etc/xpra/conf.d/40_client.conf.in 2019-11-05 18:31:07.000000000 +0100 @@ -6,7 +6,7 @@ #opengl = no #opengl = gtk, native #opengl = auto -opengl = probe +opengl = %(opengl)s # How we handle server authentication requests: #challenge-handlers=none diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.1/html5/js/Client.js new/xpra-3.0.2/html5/js/Client.js --- old/xpra-3.0.1/html5/js/Client.js 2019-09-24 15:53:54.000000000 +0200 +++ new/xpra-3.0.2/html5/js/Client.js 2019-11-05 18:31:07.000000000 +0100 @@ -1420,7 +1420,7 @@ if (clipboard_buffer!=client.clipboard_buffer) { client.debug("clipboard", "clipboard contents have changed"); client.clipboard_buffer = clipboard_buffer; - client.send_clipboard_token(); + client.send_clipboard_token(clipboard_buffer); } }, function(err) { client.debug("clipboard", "paste event failed:", err); @@ -1444,7 +1444,7 @@ if (clipboard_buffer!=this.clipboard_buffer) { this.debug("clipboard", "clipboard contents have changed"); this.clipboard_buffer = clipboard_buffer; - this.send_clipboard_token(); + this.send_clipboard_token(clipboard_buffer); } } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.1/html5/js/Utilities.js new/xpra-3.0.2/html5/js/Utilities.js --- old/xpra-3.0.1/html5/js/Utilities.js 2019-10-20 14:13:41.000000000 +0200 +++ new/xpra-3.0.2/html5/js/Utilities.js 2019-10-30 04:23:47.000000000 +0100 @@ -10,7 +10,7 @@ 'use strict'; var Utilities = { - VERSION : "3.0.1", + VERSION : "3.0.2", exc : function() { console.error.apply(console, arguments); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.1/setup.py new/xpra-3.0.2/setup.py --- old/xpra-3.0.1/setup.py 2019-10-20 14:13:42.000000000 +0200 +++ new/xpra-3.0.2/setup.py 2019-11-05 18:31:07.000000000 +0100 @@ -366,7 +366,7 @@ #Tcl/Tk "Tkconstants", "Tkinter", "tcl", #PIL bits that import TK: - "_imagingtk", "PIL._imagingtk", "ImageTk", "PIL.ImageTk", "FixTk", + "PIL._tkinter_finder", "_imagingtk", "PIL._imagingtk", "ImageTk", "PIL.ImageTk", "FixTk", #formats we don't use: "GimpGradientFile", "GimpPaletteFile", "BmpImagePlugin", "TiffImagePlugin", #not used: @@ -859,6 +859,7 @@ 'printing' : bstr(printing_ENABLED), 'dbus_control' : bstr(dbus_ENABLED), 'mmap' : bstr(True), + 'opengl' : "no" if WIN32 else "probe", } def convert_templates(subdirs): dirname = os.path.join(*(["etc", "xpra"] + subdirs)) @@ -1736,6 +1737,9 @@ if modules_ENABLED: add_packages("xpra.buffers") buffers_pkgconfig = pkgconfig(optimize=3) + if BITS==32: + #this may well be sub-optimal: + add_to_keywords(buffers_pkgconfig, "extra_compile_args", "-mfpmath=387") if cython_ENABLED: cython_add(Extension("xpra.buffers.membuf", ["xpra/buffers/membuf.pyx"]+membuffers_c, **buffers_pkgconfig)) @@ -1839,7 +1843,7 @@ toggle_packages(gtk_x11_ENABLED, "xpra.x11.gtk_x11") toggle_packages(server_ENABLED and gtk_x11_ENABLED, "xpra.x11.models") -gtk2_deprecated = WIN32 or (is_Fedora() and int(get_distribution_version_id())>=31) or getUbuntuVersion()>=(19, 10) +gtk2_deprecated = True #WIN32 or (is_Fedora() and int(get_distribution_version_id())>=31) or getUbuntuVersion()>=(19, 10) if gtk_x11_ENABLED: toggle_packages(PYTHON3, "xpra.x11.gtk3") toggle_packages(not PYTHON3, "xpra.x11.gtk2") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.1/svn-info new/xpra-3.0.2/svn-info --- old/xpra-3.0.1/svn-info 2019-10-22 21:39:21.000000000 +0200 +++ new/xpra-3.0.2/svn-info 2019-11-05 18:31:10.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: 24241 +Revision: 24387 Node Kind: directory Schedule: normal Last Changed Author: antoine -Last Changed Rev: 24239 -Last Changed Date: 2019-10-22 12:55:00 +0100 (Tue, 22 Oct 2019) +Last Changed Rev: 24387 +Last Changed Date: 2019-11-05 12:01:27 +0000 (Tue, 05 Nov 2019) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.1/svn-version new/xpra-3.0.2/svn-version --- old/xpra-3.0.1/svn-version 2019-10-22 21:39:21.000000000 +0200 +++ new/xpra-3.0.2/svn-version 2019-11-05 18:31:10.000000000 +0100 @@ -1 +1 @@ -24241 +24387 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.1/tests/xpra/test_apps/test_window_xterm_size_hints.py new/xpra-3.0.2/tests/xpra/test_apps/test_window_xterm_size_hints.py --- old/xpra-3.0.1/tests/xpra/test_apps/test_window_xterm_size_hints.py 1970-01-01 01:00:00.000000000 +0100 +++ new/xpra-3.0.2/tests/xpra/test_apps/test_window_xterm_size_hints.py 2019-11-05 18:31:07.000000000 +0100 @@ -0,0 +1,71 @@ +#!/usr/bin/env python + +import sys + +width = 400 +height = 200 + +def main(): + PY2 = sys.version_info[0]==2 + if PY2: + import gtk + w = gtk.Window(gtk.WINDOW_TOPLEVEL) + w.set_default_size(499, 316) + w.set_title("xterm size hints") + w.connect("delete_event", gtk.main_quit) + da = gtk.DrawingArea() + w.add(da) + hints = { + "min_width" : 25, + "min_height" : 17, + "base_width" : 19, + "base_height" : 4, + "width_inc" : 6, + "height_inc" : 13, + } + w.set_geometry_hints(None, **hints) + else: + import gi + gi.require_version('Gdk', '3.0') + gi.require_version('Gtk', '3.0') + from gi.repository import Gtk, Gdk + w = Gtk.Window(type=Gtk.WindowType.TOPLEVEL) + w.set_default_size(499, 316) + w.set_title("xterm size hints") + w.connect("delete_event", Gtk.main_quit) + da = gtk.DrawingArea() + w.add(da) + geom = Gdk.Geometry() + wh = Gdk.WindowHints + geom.min_width = 25 + geom.min_height = 17 + geom.base_width = 19 + geom.base_height = 4 + geom.width_inc = 6 + geom.height_inc = 13 + mask = wh.MIN_SIZE | wh.BASE_SIZE | wh.RESIZE_INC + if sys.platform.startswith("linux"): + geom.max_width = 32767 + geom.max_height = 32764 + mask |= wh.MAX_SIZE + gdk_hints = Gdk.WindowHints(mask) + w.set_geometry_hints(None, geom, gdk_hints) + gtk = Gtk + def configure_event(w, event): + #print("configure_event(%s, %s)" % (w, event)) + print("event geometry: %s" % ((event.x, event.y, event.width, event.height),)) + if PY2: + gdkwindow = w.get_window() + x, y = gdkwindow.get_origin() + else: + gdkwindow = da.get_window() + x, y = gdkwindow.get_origin()[1:] + w, h = w.get_size() + print("drawing area geometry: %s" % ((x, y, w, h),)) + w.connect("configure_event", configure_event) + w.show_all() + gtk.main() + + +if __name__ == "__main__": + main() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.1/win32/xpra.iss new/xpra-3.0.2/win32/xpra.iss --- old/xpra-3.0.1/win32/xpra.iss 2019-10-20 14:13:42.000000000 +0200 +++ new/xpra-3.0.2/win32/xpra.iss 2019-10-30 04:23:47.000000000 +0100 @@ -1,9 +1,9 @@ [Setup] AppName=Xpra AppId=Xpra_is1 -AppVersion=3.0.1 -AppVerName=Xpra 3.0.1 -UninstallDisplayName=Xpra 3.0.1 +AppVersion=3.0.2 +AppVerName=Xpra 3.0.2 +UninstallDisplayName=Xpra 3.0.2 AppPublisher=xpra.org AppPublisherURL=http:;xpra.org/ DefaultDirName={pf}\Xpra @@ -16,7 +16,7 @@ Compression=lzma2/max SolidCompression=yes AllowUNCPath=false -VersionInfoVersion=3.0.1 +VersionInfoVersion=3.0.2 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.1/xpra/__init__.py new/xpra-3.0.2/xpra/__init__.py --- old/xpra-3.0.1/xpra/__init__.py 2019-10-22 21:39:24.000000000 +0200 +++ new/xpra-3.0.2/xpra/__init__.py 2019-11-05 18:31:19.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.1" +__version__ = "3.0.2" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.1/xpra/client/gl/gl_drivers.py new/xpra-3.0.2/xpra/client/gl/gl_drivers.py --- old/xpra-3.0.1/xpra/client/gl/gl_drivers.py 2019-09-24 15:53:58.000000000 +0200 +++ new/xpra-3.0.2/xpra/client/gl/gl_drivers.py 2019-11-05 18:31:07.000000000 +0100 @@ -27,7 +27,8 @@ "renderer" : [ "Software Rasterizer", - #"Mesa DRI Intel(R) Ivybridge Desktop" + "Mesa DRI Intel(R) Ivybridge Desktop", + "Mesa DRI Intel(R) Haswell Mobile", ], "vendor" : [ #"VMware, Inc.", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.1/xpra/client/gl/gl_window_backing_base.py new/xpra-3.0.2/xpra/client/gl/gl_window_backing_base.py --- old/xpra-3.0.1/xpra/client/gl/gl_window_backing_base.py 2019-10-22 14:15:46.000000000 +0200 +++ new/xpra-3.0.2/xpra/client/gl/gl_window_backing_base.py 2019-11-05 18:31:07.000000000 +0100 @@ -53,7 +53,7 @@ from xpra.os_util import ( monotonic_time, strtobytes, hexstr, - POSIX, PYTHON2, OSX, + POSIX, PYTHON2, PYTHON3, OSX, DummyContextManager, ) from xpra.util import envint, envbool, repr_ellipsized @@ -76,7 +76,7 @@ JPEG_YUV = envbool("XPRA_JPEG_YUV", True) WEBP_YUV = envbool("XPRA_WEBP_YUV", True) FORCE_CLONE = envbool("XPRA_OPENGL_FORCE_CLONE", False) -DRAW_REFRESH = envbool("XPRA_OPENGL_DRAW_REFRESH", False) +DRAW_REFRESH = envbool("XPRA_OPENGL_DRAW_REFRESH", PYTHON3) FBO_RESIZE = envbool("XPRA_OPENGL_FBO_RESIZE", True) FBO_RESIZE_DELAY = envint("XPRA_OPENGL_FBO_RESIZE_DELAY", 50) CONTEXT_REINIT = envbool("XPRA_OPENGL_CONTEXT_REINIT", OSX) @@ -1067,10 +1067,10 @@ glBindTexture(target, 0) glDisable(target) self.paint_box(options.strget("encoding"), options.intget("delta", -1)>=0, x, y, width, height) - fire_paint_callbacks(callbacks) # Present update to screen self.present_fbo(x, y, width, height, options.intget("flush", 0)) # present_fbo has reset state already + fire_paint_callbacks(callbacks) return except GLError as e: message = "OpenGL %s paint failed: %r" % (rgb_format, e) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.1/xpra/client/gl/gtk3/gl_client_window.py new/xpra-3.0.2/xpra/client/gl/gtk3/gl_client_window.py --- old/xpra-3.0.1/xpra/client/gl/gtk3/gl_client_window.py 2019-09-24 15:53:58.000000000 +0200 +++ new/xpra-3.0.2/xpra/client/gl/gtk3/gl_client_window.py 2019-11-05 18:31:07.000000000 +0100 @@ -34,3 +34,5 @@ self.init_widget_events(widget) self.add(widget) self.drawing_area = widget + #maybe redundant?: + self.apply_geometry_hints(self.geometry_hints) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.1/xpra/client/gl/window_backend.py new/xpra-3.0.2/xpra/client/gl/window_backend.py --- old/xpra-3.0.1/xpra/client/gl/window_backend.py 2019-09-24 15:53:58.000000000 +0200 +++ new/xpra-3.0.2/xpra/client/gl/window_backend.py 2019-11-05 18:31:07.000000000 +0100 @@ -6,7 +6,7 @@ import sys -from xpra.util import typedict, AdHocStruct +from xpra.util import typedict, envint, AdHocStruct, AtomicInteger from xpra.os_util import PYTHON3, WIN32 from xpra.log import Logger @@ -47,47 +47,71 @@ log("get_gl_client_window_module(%s, %s) no match found", backends, force_enable) return {}, None -def test_gl_client_window(gl_client_window_class, max_window_size=(1024, 1024), pixel_depth=24): +def noop(*_args): + pass +def no_scaling(*args): + return args +def get_None(*_args): + return None +def no_idle_add(fn, *args, **kwargs): + fn(*args, **kwargs) +def no_timeout_add(*_args, **_kwargs): + raise Exception("timeout_add should not have been called") +def no_source_remove(*_args, **_kwargs): + raise Exception("source_remove should not have been called") + +class FakeClient(AdHocStruct): + def __init__(self): + self.sp = self.sx = self.sy = self.srect = no_scaling + self.cx = self.cy = no_scaling + self.xscale = self.yscale = 1 + self.server_window_decorations = True + self.mmap_enabled = False + self.mmap = None + self.readonly = False + self.encoding_defaults = {} + self.get_window_frame_sizes = get_None + self._focused = None + self.request_frame_extents = noop + self.server_window_states = () + self.server_window_frame_extents = False + self.server_readonly = False + self.server_pointer = False + self.window_configure_pointer = True + self.update_focus = noop + self.handle_key_action = noop + self.idle_add = no_idle_add + self.timeout_add = no_timeout_add + self.source_remove = no_source_remove + + def send(self, *args): + log("send%s", args) + def get_current_modifiers(self): + return () + def get_mouse_position(self): + return 0, 0 + def server_ok(self): + return True + def mask_to_names(self, *_args): + return () + +def test_gl_client_window(gl_client_window_class, max_window_size=(1024, 1024), pixel_depth=24, show=False): #try to render using a temporary window: draw_result = {} window = None try: - w, h = 50, 50 + x, y = -100, -100 + if show: + x, y = 100, 100 + w, h = 250, 250 from xpra.client.window_border import WindowBorder border = WindowBorder() default_cursor_data = None - noclient = AdHocStruct() - def no_idle_add(fn, *args, **kwargs): - fn(*args, **kwargs) - def no_timeout_add(*_args, **_kwargs): - raise Exception("timeout_add should not have been called") - def no_source_remove(*_args, **_kwargs): - raise Exception("source_remove should not have been called") - def no_scaling(*args): - return args - def get_None(*_args): - return None - def noop(*_args): - pass - #we have to suspend idle_add to make this synchronous - #we can do this because this method must be running in the UI thread already: - noclient.idle_add = no_idle_add - noclient.timeout_add = no_timeout_add - noclient.source_remove = no_source_remove - noclient.sp = noclient.sx = noclient.sy = noclient.srect = no_scaling - noclient.xscale = noclient.yscale = 1 - noclient.server_window_decorations = True - noclient.mmap_enabled = False - noclient.mmap = None - noclient.readonly = False - noclient.encoding_defaults = {} - noclient.get_window_frame_sizes = get_None - noclient._focused = None - noclient.request_frame_extents = noop + noclient = FakeClient() #test with alpha, but not on win32 #because we can't do alpha on win32 with opengl metadata = typedict({b"has-alpha" : not WIN32}) - window = gl_client_window_class(noclient, None, None, 2**32-1, -100, -100, w, h, w, h, + window = gl_client_window_class(noclient, None, None, 2**32-1, x, y, w, h, w, h, metadata, False, typedict({}), border, max_window_size, default_cursor_data, pixel_depth) window_backing = window._backing @@ -100,7 +124,6 @@ bpp = len(pixel_format) options = typedict({"pixel_format" : pixel_format}) stride = bpp*w - img_data = b"\0"*stride*h coding = "rgb32" widget = window_backing._backing widget.realize() @@ -111,9 +134,30 @@ "message" : message, }) log("OpenGL: testing draw on %s widget %s with %s : %s", window, widget, coding, pixel_format) - window.draw_region(0, 0, w, h, coding, img_data, stride, 1, options, [paint_callback]) + pix = AtomicInteger(0x7f) + REPAINT_DELAY = envint("XPRA_REPAINT_DELAY", 0) + def draw(): + if PYTHON3: + img_data = bytes([pix.increase() % 256]*stride*h) + else: + img_data = chr(pix.increase() % 256)*stride*h + window.draw_region(0, 0, w, h, coding, img_data, stride, 1, options, [paint_callback]) + return REPAINT_DELAY>0 #the paint code is actually synchronous here, #so we can check the present_fbo() result: + if show: + widget.show() + window.show() + from xpra.gtk_common.gobject_compat import import_gtk, import_glib + gtk = import_gtk() + glib = import_glib() + def window_close_event(*_args): + gtk.main_quit() + noclient.window_close_event = window_close_event + glib.timeout_add(REPAINT_DELAY, draw) + gtk.main() + else: + draw() if window_backing.last_present_fbo_error: return { "success" : False, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.1/xpra/client/gtk3/gtk3_client_window.py new/xpra-3.0.2/xpra/client/gtk3/gtk3_client_window.py --- old/xpra-3.0.1/xpra/client/gtk3/gtk3_client_window.py 2019-09-24 15:53:58.000000000 +0200 +++ new/xpra-3.0.2/xpra/client/gtk3/gtk3_client_window.py 2019-11-05 18:31:07.000000000 +0100 @@ -132,7 +132,7 @@ mask |= int(name_to_hint.get(k, 0)) gdk_hints = Gdk.WindowHints(mask) metalog("apply_geometry_hints(%s) geometry=%s, hints=%s", hints, geom, gdk_hints) - self.set_geometry_hints(None, geom, gdk_hints) + self.set_geometry_hints(self.drawing_area, geom, gdk_hints) def queue_draw_area(self, x, y, width, height): window = self.get_window() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.1/xpra/client/mixins/remote_logging.py new/xpra-3.0.2/xpra/client/mixins/remote_logging.py --- old/xpra-3.0.1/xpra/client/mixins/remote_logging.py 2019-09-24 15:53:59.000000000 +0200 +++ new/xpra-3.0.2/xpra/client/mixins/remote_logging.py 2019-10-28 16:04:05.000000000 +0100 @@ -69,7 +69,11 @@ return strtobytes(x) try: dtime = int(1000*(monotonic_time() - self.monotonic_start_time)) - data = self.compressed_wrapper("text", enc(msg % args), level=1) + if args: + s = msg % args + else: + s = msg + data = self.compressed_wrapper("text", enc(s), level=1) self.send("logging", level, data, dtime) exc_info = kwargs.get("exc_info") if exc_info is True: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.1/xpra/client/mixins/window_manager.py new/xpra-3.0.2/xpra/client/mixins/window_manager.py --- old/xpra-3.0.1/xpra/client/mixins/window_manager.py 2019-09-30 06:28:40.000000000 +0200 +++ new/xpra-3.0.2/xpra/client/mixins/window_manager.py 2019-10-28 16:04:05.000000000 +0100 @@ -742,7 +742,7 @@ #if possible, choosing the currently focused window (if there is one..) pid = metadata.intget("pid", 0) watcher_pid = self.assign_signal_watcher_pid(wid, pid) - if override_redirect and pid>0 and metadata.intget("transient-for", 0)>0 is None and metadata.get("role")=="popup": + if override_redirect and pid>0 and metadata.intget("transient-for", 0)>0 and metadata.strget("role")=="popup": tfor = None for twid, twin in self._id_to_window.items(): if not twin._override_redirect and twin._metadata.intget("pid", -1)==pid: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.1/xpra/codecs/cuda_common/cuda_context.py new/xpra-3.0.2/xpra/codecs/cuda_common/cuda_context.py --- old/xpra-3.0.1/xpra/codecs/cuda_common/cuda_context.py 2019-09-24 15:53:59.000000000 +0200 +++ new/xpra-3.0.2/xpra/codecs/cuda_common/cuda_context.py 2019-11-05 18:31:07.000000000 +0100 @@ -307,7 +307,7 @@ l = log if len(devices)>1: l = log.info - l("selected device %s: %s", device_id, device_info(device)) + l("selected device %s: %s", selected_device_id, device_info(selected_device)) return selected_device_id, selected_device return -1, None diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.1/xpra/net/ssh.py new/xpra-3.0.2/xpra/net/ssh.py --- old/xpra-3.0.1/xpra/net/ssh.py 2019-10-20 14:13:42.000000000 +0200 +++ new/xpra-3.0.2/xpra/net/ssh.py 2019-11-05 18:31:07.000000000 +0100 @@ -260,6 +260,10 @@ host = host_config.get("hostname", host) username = host_config.get("username", username) port = host_config.get("port", port) + try: + port = int(port) + except ValueError: + raise InitException("invalid port specified: '%s'" % port) proxycommand = host_config.get("proxycommand") keyfiles = host_config.get("identityfile") if proxycommand: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.1/xpra/platform/win32/clipboard.py new/xpra-3.0.2/xpra/platform/win32/clipboard.py --- old/xpra-3.0.1/xpra/platform/win32/clipboard.py 2019-09-27 16:50:06.000000000 +0200 +++ new/xpra-3.0.2/xpra/platform/win32/clipboard.py 2019-10-28 16:04:05.000000000 +0100 @@ -195,7 +195,7 @@ return def got_text(text): log("got_text(%s)", repr_ellipsized(bytestostr(text))) - got_contents("text/plain", 8, text) + got_contents(target, 8, text) def errback(error_text=""): log.error("Error: failed to get clipboard data") if error_text: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.1/xpra/platform/win32/gl_context.py new/xpra-3.0.2/xpra/platform/win32/gl_context.py --- old/xpra-3.0.1/xpra/platform/win32/gl_context.py 2019-09-24 15:54:00.000000000 +0200 +++ new/xpra-3.0.2/xpra/platform/win32/gl_context.py 2019-10-30 04:23:47.000000000 +0100 @@ -139,6 +139,7 @@ self.hwnd = hwnd self.pixel_format_props = {} self.hdc = GetDC(hwnd) + log("create_wgl_context(%#x) hdc=%#x", hwnd, self.hdc) flags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DEPTH_DONTCARE if self.alpha: flags |= PFD_SUPPORT_COMPOSITION diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.1/xpra/scripts/config.py new/xpra-3.0.2/xpra/scripts/config.py --- old/xpra-3.0.1/xpra/scripts/config.py 2019-09-24 15:54:00.000000000 +0200 +++ new/xpra-3.0.2/xpra/scripts/config.py 2019-11-05 18:31:07.000000000 +0100 @@ -223,9 +223,11 @@ BUILD_DATE, BUILD_TIME, BUILD_BIT, CYTHON_VERSION, COMPILER_VERSION, ) + info.insert(0, "") + einfo = "Python %i.%i" % sys.version_info[:2] if BUILD_BIT: - info.insert(0, "") - info.insert(0, BUILD_BIT) + einfo += ", "+BUILD_BIT + info.insert(0, einfo) try: from xpra.build_info import BUILT_BY, BUILT_ON info.append("built on %s by %s" % (BUILT_ON, BUILT_BY)) @@ -1005,7 +1007,7 @@ "av-sync" : True, "exit-ssh" : True, "dbus-control" : not WIN32 and not OSX, - "opengl" : "probe", + "opengl" : "no" if (WIN32 and not PYTHON2) else "probe", "mdns" : not WIN32, "swap-keys" : OSX, #only used on osx "desktop-fullscreen": False, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.1/xpra/scripts/main.py new/xpra-3.0.2/xpra/scripts/main.py --- old/xpra-3.0.1/xpra/scripts/main.py 2019-10-22 14:15:47.000000000 +0200 +++ new/xpra-3.0.2/xpra/scripts/main.py 2019-11-05 18:31:07.000000000 +0100 @@ -18,7 +18,7 @@ import traceback from xpra.platform.dotxpra import DotXpra -from xpra.util import csv, envbool, envint, repr_ellipsized, nonl, pver, DEFAULT_PORT, DEFAULT_PORTS +from xpra.util import csv, envbool, envint, unsetenv, repr_ellipsized, nonl, pver, DEFAULT_PORT, DEFAULT_PORTS from xpra.exit_codes import EXIT_SSL_FAILURE, EXIT_STR, EXIT_UNSUPPORTED from xpra.os_util import ( get_util_logger, getuid, getgid, @@ -83,6 +83,9 @@ if "XPRA_ALT_PYTHON_RETRY" in os.environ: del os.environ["XPRA_ALT_PYTHON_RETRY"] + #some environment variables cause us problems if set: + unsetenv("GDK_SCALE") + if envbool("XPRA_NOMD5", False): import hashlib def nomd5(*_args): @@ -149,7 +152,8 @@ if mode in ( "showconfig", "info", "id", "attach", "listen", "launcher", "stop", "print", "control", "list", "list-mdns", "sessions", "mdns-gui", "bug-report", - "opengl", "opengl-probe", "test-connect", + "opengl", "opengl-probe", "opengl-test", + "test-connect", "encoding", "webcam", "clipboard-test", "keyboard", "keyboard-test", "keymap", "gui-info", "network-info", "path-info", "printing-info", "version-info", "gtk-info", @@ -478,6 +482,8 @@ return run_glcheck(options) elif mode=="opengl-probe": return run_glprobe(options) + elif mode=="opengl-test": + return run_glprobe(options, True) elif mode=="encoding": from xpra.codecs import loader return loader.main() @@ -2002,18 +2008,19 @@ raise Exception("the gtk module is already loaded: %s" % gtk) -def run_glprobe(opts): - props = do_run_glcheck(opts) +def run_glprobe(opts, show=False): + props = do_run_glcheck(opts, show) if not props.get("success", False): return 3 if not props.get("safe", False): return 2 return 0 -def do_run_glcheck(opts): +def do_run_glcheck(opts, show=False): #suspend all logging: saved_level = None log = Logger("opengl") + log("do_run_glcheck(.., %s)" % show) if not is_debug_enabled("opengl") or not use_tty(): saved_level = logging.root.getEffectiveLevel() logging.root.setLevel(logging.WARN) @@ -2028,19 +2035,19 @@ backends = get_opengl_backends(opengl_str) 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) + log("do_run_glcheck() 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) 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) + log("do_run_glcheck() gl_client_window_class=%s, pixel_depth=%s", gl_client_window_class, pixel_depth) if pixel_depth not in (0, 16, 24, 30) and pixel_depth<32: pixel_depth = 0 - draw_result = test_gl_client_window(gl_client_window_class, pixel_depth=pixel_depth) + draw_result = test_gl_client_window(gl_client_window_class, pixel_depth=pixel_depth, show=show) opengl_props.update(draw_result) return opengl_props except Exception as e: if is_debug_enabled("opengl"): - log("run_glprobe(..)", exc_info=True) + log("do_run_glcheck(..)", exc_info=True) if use_tty(): sys.stderr.write("error:\n") sys.stderr.write("%s\n" % e) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.1/xpra/scripts/server.py new/xpra-3.0.2/xpra/scripts/server.py --- old/xpra-3.0.1/xpra/scripts/server.py 2019-09-24 15:54:00.000000000 +0200 +++ new/xpra-3.0.2/xpra/scripts/server.py 2019-10-28 16:04:05.000000000 +0100 @@ -23,7 +23,7 @@ get_username_for_uid, get_home_for_uid, get_shell_for_uid, getuid, setuidgid, get_hex_uuid, get_status_output, strtobytes, bytestostr, get_util_logger, osexpand, ) -from xpra.util import envbool +from xpra.util import envbool, unsetenv from xpra.platform.dotxpra import DotXpra @@ -148,12 +148,6 @@ def sanitize_env(): - def unsetenv(*varnames): - for x in varnames: - try: - del os.environ[x] - except KeyError: - pass #we don't want client apps to think these mean anything: #(if set, they belong to the desktop the server was started from) #TODO: simply whitelisting the env would be safer/better diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.1/xpra/server/window/window_source.py new/xpra-3.0.2/xpra/server/window/window_source.py --- old/xpra-3.0.1/xpra/server/window/window_source.py 2019-10-20 14:13:42.000000000 +0200 +++ new/xpra-3.0.2/xpra/server/window/window_source.py 2019-10-28 16:04:05.000000000 +0100 @@ -669,6 +669,8 @@ for k in ("workspace", "screen"): if k in properties: del properties[k] + elif strtobytes(k) in properties: + del properties[strtobytes(k)] if properties: self.do_set_client_properties(properties) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.1/xpra/server/window/window_video_source.py new/xpra-3.0.2/xpra/server/window/window_video_source.py --- old/xpra-3.0.1/xpra/server/window/window_video_source.py 2019-09-24 15:54:01.000000000 +0200 +++ new/xpra-3.0.2/xpra/server/window/window_video_source.py 2019-10-28 16:04:05.000000000 +0100 @@ -911,7 +911,9 @@ if FORCE_AV_DELAY>0: return FORCE_AV_DELAY if options.get("av-sync", False): - return -1 + return 0 + if self.content_type in ("text", "picture"): + return 0 l = len(self.encode_queue) if l>=self.encode_queue_max_size: #we must free some space! @@ -920,6 +922,7 @@ def cancel_encode_from_queue(self): #free all items in the encode queue: + self.encode_from_queue_due = 0 eqt = self.encode_from_queue_timer avsynclog("cancel_encode_from_queue() timer=%s for wid=%i", eqt, self.wid) if eqt: @@ -942,10 +945,10 @@ #must be called from the UI thread for synchronization #we ensure that the timer will fire no later than av_delay #re-scheduling it if it was due later than that - due = monotonic_time()+av_delay + due = monotonic_time()+av_delay/1000.0 if self.encode_from_queue_due==0 or due<self.encode_from_queue_due: - self.encode_from_queue_due = due self.cancel_encode_from_queue() + self.encode_from_queue_due = due self.encode_from_queue_timer = self.timeout_add(av_delay, self.timer_encode_from_queue) def timer_encode_from_queue(self): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.1/xpra/src_info.py new/xpra-3.0.2/xpra/src_info.py --- old/xpra-3.0.1/xpra/src_info.py 2019-10-22 21:39:21.000000000 +0200 +++ new/xpra-3.0.2/xpra/src_info.py 2019-11-05 18:31:10.000000000 +0100 @@ -1,2 +1,2 @@ LOCAL_MODIFICATIONS=0 -REVISION=24241 +REVISION=24387 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.1/xpra/util.py new/xpra-3.0.2/xpra/util.py --- old/xpra-3.0.1/xpra/util.py 2019-10-20 14:13:42.000000000 +0200 +++ new/xpra-3.0.2/xpra/util.py 2019-10-30 04:23:47.000000000 +0100 @@ -875,6 +875,14 @@ except Exception: return str(v) + +def unsetenv(*varnames): + for x in varnames: + try: + del os.environ[x] + except KeyError: + pass + def envint(name, d=0): try: return int(os.environ.get(name, d)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.1/xpra/x11/bindings/core_bindings.pyx new/xpra-3.0.2/xpra/x11/bindings/core_bindings.pyx --- old/xpra-3.0.1/xpra/x11/bindings/core_bindings.pyx 2019-10-20 14:13:42.000000000 +0200 +++ new/xpra-3.0.2/xpra/x11/bindings/core_bindings.pyx 2019-10-28 16:04:05.000000000 +0100 @@ -13,7 +13,7 @@ from libc.stdint cimport uintptr_t from xpra.util import dump_exc, envbool -from xpra.os_util import strtobytes, is_X11, PYTHON2 +from xpra.os_util import strtobytes, is_X11, PYTHON2, bytestostr from xpra.log import Logger log = Logger("x11", "bindings", "core") @@ -149,7 +149,7 @@ return code cdef char[128] buffer XGetErrorText(self.display, code, buffer, 128) - return str(buffer[:128]).split("\0")[0] + return bytestostr(bytes(buffer[:128]).split(b"\0")[0]) def UngrabKeyboard(self, time=CurrentTime): assert self.display!=NULL, "display is closed" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.1/xpra/x11/gtk_x11/clipboard.py new/xpra-3.0.2/xpra/x11/gtk_x11/clipboard.py --- old/xpra-3.0.1/xpra/x11/gtk_x11/clipboard.py 2019-10-22 14:15:47.000000000 +0200 +++ new/xpra-3.0.2/xpra/x11/gtk_x11/clipboard.py 2019-10-28 16:04:05.000000000 +0100 @@ -412,7 +412,7 @@ with xsync: xid = get_xwindow(requestor) if data is not None: - X11Window.XChangeProperty(xid, prop, target, dformat, data) + X11Window.XChangeProperty(xid, prop, dtype, dformat, data) else: #maybe even delete the property? #X11Window.XDeleteProperty(xid, prop)
