From 226273f6607ae83b17c06e0e094ace64ed7a4f7c Mon Sep 17 00:00:00 2001 From: Kirill Chibisov Date: Fri, 14 Jun 2024 21:40:41 +0300 Subject: Handle KDE decorations in Mapped::has_ssd This fixes an issue with default CSD border being drawn for SSD rendering firefox, because only xdg decorations were checked. --- src/window/mapped.rs | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) (limited to 'src/window') diff --git a/src/window/mapped.rs b/src/window/mapped.rs index 6db13ad9..ae5204ea 100644 --- a/src/window/mapped.rs +++ b/src/window/mapped.rs @@ -17,6 +17,7 @@ use smithay::wayland::compositor::{remove_pre_commit_hook, with_states, HookId}; use smithay::wayland::shell::xdg::{SurfaceCachedState, ToplevelSurface}; use super::{ResolvedWindowRules, WindowRef}; +use crate::handlers::KdeDecorationsModeState; use crate::layout::{ InteractiveResizeData, LayoutElement, LayoutElementRenderElement, LayoutElementRenderSnapshot, }; @@ -422,8 +423,21 @@ impl LayoutElement for Mapped { } fn has_ssd(&self) -> bool { - self.toplevel().current_state().decoration_mode - == Some(zxdg_toplevel_decoration_v1::Mode::ServerSide) + let toplevel = self.toplevel(); + let mode = toplevel.current_state().decoration_mode; + + match mode { + Some(zxdg_toplevel_decoration_v1::Mode::ServerSide) => true, + // Check KDE decorations when XDG are not in use. + None => with_states(toplevel.wl_surface(), |states| { + states + .data_map + .get::() + .map(KdeDecorationsModeState::is_server) + == Some(true) + }), + _ => false, + } } fn output_enter(&self, output: &Output) { -- cgit