git.lucas.co / cce-compositor
Wayland compositor (wlroots)
git clone https://git.lucas.co/cce-compositor.git

commit9f749ad0fefe5bc7aec178e07270d704b55c7bfe
parent3542708fcc
authorLucas Galante <[email protected]>
date2026-07-15 13:37
refactor: remove the solid desktop background mode

The desktop is always the grid now. Drops desktop_mode/'mode' and
solid_color config keys, Layout.desktop_enable_solid_color/
desktop_solid_color, the draw_grid/output-manager solid gating, and
the IPC arms. The fallback background_rect color always derives from
gap_color (a solid gap_color with the grid disabled was the same
visual anyway, minus the cells). Unknown 'mode'/'solid_color' keys in
existing configs are silently ignored by the parser.

Co-Authored-By: Claude Fable 5 <[email protected]>

 src/server/config.rs         | 41 +----------------------------------------
 src/server/output.rs         | 18 ------------------
 src/server/output_manager.rs |  3 ---
 src/server/seat.rs           |  7 ++-----
 src/server/window_manager.rs |  8 --------
 5 files changed, 3 insertions(+), 74 deletions(-)

diff --git a/src/server/config.rs b/src/server/config.rs
index 44d004f..b2ad7ae 100644
--- a/src/server/config.rs
+++ b/src/server/config.rs
@@ -57,8 +57,6 @@ pub struct Layout {
     pub desktop_cell_corner_radius: i32,
     pub desktop_cell_fade_inset: i64,
     pub desktop_grid_fade_mode: String,
-    pub desktop_enable_solid_color: bool,
-    pub desktop_solid_color: [f32; 4],
     /// Magnetic grid snap for interactive move/resize.
     pub desktop_snap: bool,
     /// Snap radius in virtual units.
@@ -130,8 +128,6 @@ impl Default for Layout {
             desktop_cell_corner_radius: 0,
             desktop_cell_fade_inset: 0,
             desktop_grid_fade_mode: "linear".to_string(),
-            desktop_enable_solid_color: false,
-            desktop_solid_color: [0.0, 0.0, 0.0, 1.0],
             desktop_snap: true,
             desktop_snap_threshold: 24.0,
             scenefx_optimized_blur: true,
@@ -289,12 +285,8 @@ pub struct SurfaceConfig {
     pub desktop_cell_corner_radius: i64,
     #[serde(default = "default_desktop_cell_fade_inset")]
     pub desktop_cell_fade_inset: i64,
-    #[serde(default = "default_desktop_mode")]
-    pub desktop_mode: String,
     #[serde(default = "default_desktop_grid_fade_mode")]
     pub desktop_grid_fade_mode: String,
-    #[serde(default = "default_desktop_solid_color")]
-    pub desktop_solid_color: String,
     #[serde(default = "default_desktop_snap")]
     pub desktop_snap: bool,
     #[serde(default = "default_desktop_snap_threshold")]
@@ -335,9 +327,7 @@ impl Default for SurfaceConfig {
             desktop_gap_width: default_desktop_gap_width(),
             desktop_cell_corner_radius: default_desktop_cell_corner_radius(),
             desktop_cell_fade_inset: default_desktop_cell_fade_inset(),
-            desktop_mode: default_desktop_mode(),
             desktop_grid_fade_mode: default_desktop_grid_fade_mode(),
-            desktop_solid_color: default_desktop_solid_color(),
             desktop_snap: default_desktop_snap(),
             desktop_snap_threshold: default_desktop_snap_threshold(),
             backplate_color: default_backplate_color(),
@@ -384,18 +374,10 @@ fn default_desktop_cell_fade_inset() -> i64 {
     0
 }
 
-fn default_desktop_mode() -> String {
-    "solid".to_string()
-}
-
 fn default_desktop_grid_fade_mode() -> String {
     "linear".to_string()
 }
 
-fn default_desktop_solid_color() -> String {
-    "#000000".to_string()
-}
-
 fn default_desktop_snap() -> bool {
     true
 }
@@ -1450,16 +1432,6 @@ fn parse_kdl_config(content: &str) -> Result<Config, String> {
                                             surface.desktop_grid_fade_mode = val.to_string();
                                         }
                                     }
-                                    "mode" => {
-                                        if let Some(val) = entry.value().as_string() {
-                                            surface.desktop_mode = val.to_string();
-                                        }
-                                    }
-                                    "solid_color" => {
-                                        if let Some(val) = entry.value().as_string() {
-                                            surface.desktop_solid_color = val.to_string();
-                                        }
-                                    }
                                     "grid_cell_size" | "desktop_grid_scale" => {
                                         if let Some(val) = entry.value().as_i64() {
                                             surface.desktop_grid_scale = val;
@@ -1582,8 +1554,6 @@ fn parse_kdl_config(content: &str) -> Result<Config, String> {
             surface.desktop_cell_corner_radius = get_child_arg_i64(node, "desktop_cell_corner_radius", default_desktop_cell_corner_radius());
             surface.desktop_cell_fade_inset = get_child_arg_i64(node, "desktop_cell_fade_inset", default_desktop_cell_fade_inset());
             surface.desktop_grid_fade_mode = get_child_arg_string(node, "grid_fade_mode", &default_desktop_grid_fade_mode());
-            surface.desktop_mode = get_child_arg_string(node, "desktop_mode", &default_desktop_mode());
-            surface.desktop_solid_color = get_child_arg_string(node, "desktop_solid_color", &default_desktop_solid_color());
             surface.desktop_snap = get_child_arg_bool(node, "desktop_snap", default_desktop_snap());
             surface.desktop_snap_threshold = get_child_arg_i64(node, "desktop_snap_threshold", default_desktop_snap_threshold());
             surface.backplate_color = get_child_arg_string(node, "backplate_color", &default_backplate_color());
@@ -1685,14 +1655,7 @@ pub fn parse_config(path: &str, state: &mut crate::window_manager::WindowManager
 
     state.layout.desktop_gap_color = config.surface.desktop_gap_color.clone();
 
-    let enable_solid = config.surface.desktop_mode == "solid";
-    let desktop_background_str = if enable_solid {
-        config.surface.desktop_solid_color.clone()
-    } else {
-        config.surface.desktop_gap_color.clone()
-    };
-
-    let background_color_val = parse_hex_color(&desktop_background_str);
+    let background_color_val = parse_hex_color(&config.surface.desktop_gap_color);
     state.layout.background_r = ((background_color_val >> 16) & 0xFF) * 0x01010101;
     state.layout.background_g = ((background_color_val >> 8) & 0xFF) * 0x01010101;
     state.layout.background_b = (background_color_val & 0xFF) * 0x01010101;
@@ -1706,8 +1669,6 @@ pub fn parse_config(path: &str, state: &mut crate::window_manager::WindowManager
     state.layout.desktop_cell_corner_radius = config.surface.desktop_cell_corner_radius as i32;
     state.layout.desktop_cell_fade_inset = config.surface.desktop_cell_fade_inset;
     state.layout.desktop_grid_fade_mode = config.surface.desktop_grid_fade_mode.clone();
-    state.layout.desktop_enable_solid_color = enable_solid;
-    state.layout.desktop_solid_color = parse_hex_color_rgba(&config.surface.desktop_solid_color);
 
     state.layout.border_font_size = 11;
     state.layout.transition_duration = config.layout.transition_duration as i32;
diff --git a/src/server/output.rs b/src/server/output.rs
index 5fc9671..5b75b2f 100644
--- a/src/server/output.rs
+++ b/src/server/output.rs
@@ -172,7 +172,6 @@ pub struct Output {
     pub last_grid_gap_color: String,
     pub last_grid_gap_color_rgba: [f32; 4],
     pub grid_is_low_res: bool,
-    pub last_grid_enable_solid_color: bool,
     pub grid_rect_pool: Vec<*mut ffi::wlr_scene_rect>,
     pub grid_force_redraw_frames: u8,
 
@@ -436,7 +435,6 @@ impl Output {
             last_grid_gap_color: String::new(),
             last_grid_gap_color_rgba: [0.0, 0.0, 0.0, 0.0],
             grid_is_low_res: false,
-            last_grid_enable_solid_color: false,
             grid_rect_pool: Vec::new(),
             grid_force_redraw_frames: 0,
             destroy: std::mem::zeroed(),
@@ -649,16 +647,6 @@ impl Output {
         }
 
         let wm = &(*self.server).wm;
-        
-        // If solid mode is active, disable the grid tree and pool to save resources.
-        if wm.layout.desktop_enable_solid_color {
-            ffi::wlr_scene_node_set_enabled(self.grid_tree as *mut ffi::wlr_scene_node, false);
-            for &rect in &self.grid_rect_pool {
-                ffi::wlr_scene_node_set_enabled(rect as *mut ffi::wlr_scene_node, false);
-            }
-            self.last_grid_enable_solid_color = true;
-            return;
-        }
 
         // Enable the grid tree.
         ffi::wlr_scene_node_set_enabled(self.grid_tree as *mut ffi::wlr_scene_node, true);
@@ -666,12 +654,6 @@ impl Output {
         // Keep the grid tree at the top of the background layer to prevent wallpaper windows from overlapping it
         ffi::wlr_scene_node_raise_to_top(self.grid_tree as *mut ffi::wlr_scene_node);
 
-        // Force redrawing if switching back from solid color mode.
-        if self.last_grid_enable_solid_color {
-            self.last_grid_enable_solid_color = false;
-            self.grid_force_redraw_frames = 3;
-        }
-
         let (viewport_w, viewport_h) = self.current.dimensions();
         let zoom = if wm.desk_zoom.is_nan() || wm.desk_zoom <= 0.0 {
             1.0
diff --git a/src/server/output_manager.rs b/src/server/output_manager.rs
index 9da7b7b..be1984a 100644
--- a/src/server/output_manager.rs
+++ b/src/server/output_manager.rs
@@ -234,9 +234,6 @@ impl OutputManager {
                                 output.sent.x,
                                 output.sent.y,
                             );
-                            if (*server).wm.layout.desktop_enable_solid_color {
-                                ffi::wlr_scene_node_set_enabled(output.grid_tree as *mut ffi::wlr_scene_node, false);
-                            }
                         }
 
                         if output.adjust_tree.is_null() {
diff --git a/src/server/seat.rs b/src/server/seat.rs
index 2f07f72..fe7c11e 100644
--- a/src/server/seat.rs
+++ b/src/server/seat.rs
@@ -1167,9 +1167,6 @@ impl Seat {
                         let virtual_dx = dx as f64 / scale;
                         let virtual_dy = dy as f64 / scale;
 
-                        let mut new_w = op.start_win_w;
-                        let mut new_h = op.start_win_h;
-                        
                         let mut vx = op.start_win_virtual_x;
                         let mut vy = op.start_win_virtual_y;
 
@@ -1193,11 +1190,11 @@ impl Seat {
                         // Must match get_active_resize_dimensions, which
                         // recomputes this for the arrange snapshot — both go
                         // through snap::resize_axis.
-                        new_w = crate::policy::snap::resize_axis(
+                        let new_w = crate::policy::snap::resize_axis(
                             op.start_win_virtual_x, op.start_win_w as f64, virtual_dx,
                             edges.left, edges.right, 50.0, &sp,
                         ) as u32;
-                        new_h = crate::policy::snap::resize_axis(
+                        let new_h = crate::policy::snap::resize_axis(
                             op.start_win_virtual_y, op.start_win_h as f64, virtual_dy,
                             edges.top, edges.bottom, 50.0, &sp,
                         ) as u32;
diff --git a/src/server/window_manager.rs b/src/server/window_manager.rs
index 835d201..01a3a7d 100644
--- a/src/server/window_manager.rs
+++ b/src/server/window_manager.rs
@@ -2676,14 +2676,6 @@ impl WindowManager {
                     "desktop_grid_fade_mode" => {
                         self.layout.desktop_grid_fade_mode = val.to_string();
                     }
-                    "desktop_enable_solid_color" => {
-                        if let Ok(v) = val.parse::<bool>() {
-                            self.layout.desktop_enable_solid_color = v;
-                        }
-                    }
-                    "desktop_solid_color" => {
-                        self.layout.desktop_solid_color = crate::config::parse_hex_color_rgba(val);
-                    }
                     "gap" => { if let Ok(v) = val.parse::<i32>() { self.layout.gap = v; } }
                     "gap_top" => { if let Ok(v) = val.parse::<i32>() { self.layout.gap_top = v; } }
                     "gap_left" => { if let Ok(v) = val.parse::<i32>() { self.layout.gap_left = v; } }