diff --git a/xpra/client/gtk3/window_base.py b/xpra/client/gtk3/window_base.py index 0d01345155..2fd162cf37 100644 --- a/xpra/client/gtk3/window_base.py +++ b/xpra/client/gtk3/window_base.py @@ -1390,8 +1390,11 @@ def set_opaque_region(self, rectangles=()): # noinspection PyArgumentList r = Region() for rect in rectangles: - rect = RectangleInt(*self.srect(*rect)) - r.union(Region(rect)) + # "opaque-region", aka "_NET_WM_OPAQUE_REGION" is meant to use unsigned values + # but some applications use 0xffffffff, so we have to validate it: + rvalues = tuple((int(v) if v < 2**32 else -1) for v in rect) + rectint = RectangleInt(*self.srect(*rvalues)) + r.union(Region(rectint)) def do_set_region(): log("set_opaque_region(%s)", r) diff --git a/xpra/x11/models/core.py b/xpra/x11/models/core.py index 7eca7fe434..aeb6dbbe3b 100644 --- a/xpra/x11/models/core.py +++ b/xpra/x11/models/core.py @@ -694,7 +694,8 @@ def _handle_opaque_region_change(self) -> None: v: Sequence[int] = tuple(self.prop_get("_NET_WM_OPAQUE_REGION", ["u32"]) or []) if OPAQUE_REGION and len(v) % 4 == 0: while v: - rectangles.append(v[:4]) + rvalues = tuple((coord if coord < 2 ** 32 else -1) for coord in v[:4]) + rectangles.append(rvalues) v = v[4:] metalog("_NET_WM_OPAQUE_REGION(%s)=%s (OPAQUE_REGION=%s)", v, rectangles, OPAQUE_REGION) self._updateprop("opaque-region", tuple(rectangles))