diff options
| author | Kirill Chibisov <contact@kchibisov.com> | 2024-06-14 21:40:41 +0300 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2024-06-19 17:42:29 +0300 |
| commit | 226273f6607ae83b17c06e0e094ace64ed7a4f7c (patch) | |
| tree | b885868061e84a55c022bf034e7ca2a2b1a15638 /src/window | |
| parent | c0ded35783f1ab4f3cc687d857ed7ee44ecb60bb (diff) | |
| download | niri-226273f6607ae83b17c06e0e094ace64ed7a4f7c.tar.gz niri-226273f6607ae83b17c06e0e094ace64ed7a4f7c.tar.bz2 niri-226273f6607ae83b17c06e0e094ace64ed7a4f7c.zip | |
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.
Diffstat (limited to 'src/window')
| -rw-r--r-- | src/window/mapped.rs | 18 |
1 files changed, 16 insertions, 2 deletions
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::<KdeDecorationsModeState>() + .map(KdeDecorationsModeState::is_server) + == Some(true) + }), + _ => false, + } } fn output_enter(&self, output: &Output) { |
