Wayland compositor (wlroots)
git clone https://git.lucas.co/cce-compositor.git
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; } }