diff --git a/libqtile/backend/wayland/window.py b/libqtile/backend/wayland/window.py index 8f2c12a..563cc83 100644 --- a/libqtile/backend/wayland/window.py +++ b/libqtile/backend/wayland/window.py @@ -114,6 +114,7 @@ class Window(typing.Generic[S], _Base, base.Window, HasListeners): self.x = 0 self.y = 0 self._opacity: float = 1.0 + self._rounding: int = 0 self._wm_class: str | None = None self._idle_inhibitors_count: int = 0 self._urgent = False @@ -389,16 +390,43 @@ class Window(typing.Generic[S], _Base, base.Window, HasListeners): @opacity.setter def opacity(self, opacity: float) -> None: - if opacity < 1.0: + if self.container.node: + buf = SceneBuffer.from_node(self.container.node) + if buf: + buf.set_opacity(opacity) + else: + logger.warning( + f"Failed to turn node {self.container.node} into a buffer!" + ) + else: logger.warning( - "Sorry, transparency is not yet supported by the wlroots API used by " - "Qtile. Transparency can only be achieved if the client sets it." + "Sorry, opacity is not implemented for this window type." ) # wlroots' scene graph doesn't support setting the opacity of trees/nodes by # the compositor. See: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3393 # If/when that becomes supported, this warning can be removed. self._opacity = opacity + @property + def rounding(self) -> int: + return self._rounding + + @rounding.setter + def rounding(self, radii: int) -> None: + if self.container.node: + buf = SceneBuffer.from_node(self.container.node) + if buf: + buf.set_corner_radius(radii) + else: + logger.warning( + f"Failed to turn node {self.container.node} into a buffer!" + ) + else: + logger.warning( + "Sorry, rounding is not implemented for this window type." + ) + + @property def floating(self) -> bool: return self._float_state != FloatStates.NOT_FLOATING @@ -921,6 +949,7 @@ class Internal(_Base, base.Internal): self._width: int = width self._height: int = height self._opacity: float = 1.0 + self._rounding: int = 0 # Store this object on the scene node for finding the window under the pointer. self.wlr_buffer, self.surface = self._new_buffer(init=True)