From 6db73151f7ccba71a1717e7531edc6eda2ae8f7d Mon Sep 17 00:00:00 2001 From: alex-ds13 <145657253+alex-ds13@users.noreply.github.com> Date: Wed, 26 Mar 2025 18:13:06 +0000 Subject: [PATCH] fix(wm): remove border width/offset when disabled This commit makes sure the border's width and offset is removed when you disable the borders. If you want to still have that size on your gaps when borders are disabled then you should add it to the `default_container_padding` or to the per-monitor or per-workspace `container_padding`. --- docs/common-workflows/remove-gaps.md | 6 +-- komorebi/src/monitor.rs | 64 +++++++++++++++++++++------- komorebi/src/static_config.rs | 5 +-- komorebi/src/workspace.rs | 23 ++++------ 4 files changed, 58 insertions(+), 40 deletions(-) diff --git a/docs/common-workflows/remove-gaps.md b/docs/common-workflows/remove-gaps.md index 2169377f..2870363b 100644 --- a/docs/common-workflows/remove-gaps.md +++ b/docs/common-workflows/remove-gaps.md @@ -8,12 +8,8 @@ configuration file. ```json { "default_workspace_padding": 0, - "default_container_padding": 0, - "border_width": 0, - "border_offset": -1 + "default_container_padding": -1, } ``` -A restart of `komorebi` is required after changing these settings. - [![Watch the tutorial video](https://img.youtube.com/vi/6QYLao953XE/hqdefault.jpg)](https://www.youtube.com/watch?v=6QYLao953XE) diff --git a/komorebi/src/monitor.rs b/komorebi/src/monitor.rs index 8e4aa9c9..a5824d70 100644 --- a/komorebi/src/monitor.rs +++ b/komorebi/src/monitor.rs @@ -12,11 +12,15 @@ use getset::Setters; use serde::Deserialize; use serde::Serialize; +use crate::border_manager::BORDER_ENABLED; +use crate::border_manager::BORDER_OFFSET; +use crate::border_manager::BORDER_WIDTH; use crate::core::Rect; use crate::container::Container; use crate::ring::Ring; use crate::workspace::Workspace; +use crate::workspace::WorkspaceGlobals; use crate::workspace::WorkspaceLayer; use crate::DefaultLayout; use crate::Layout; @@ -203,18 +207,32 @@ impl Monitor { let workspace_padding = self .workspace_padding() .or(Some(DEFAULT_WORKSPACE_PADDING.load(Ordering::SeqCst))); + let (border_width, border_offset) = { + let border_enabled = BORDER_ENABLED.load(Ordering::SeqCst); + if border_enabled { + let border_width = BORDER_WIDTH.load(Ordering::SeqCst); + let border_offset = BORDER_OFFSET.load(Ordering::SeqCst); + (border_width, border_offset) + } else { + (0, 0) + } + }; let work_area = *self.work_area_size(); - let offset = self.work_area_offset.or(offset); + let work_area_offset = self.work_area_offset.or(offset); let window_based_work_area_offset = self.window_based_work_area_offset(); - let limit = self.window_based_work_area_offset_limit(); + let window_based_work_area_offset_limit = self.window_based_work_area_offset_limit(); for workspace in self.workspaces_mut() { - workspace.globals_mut().container_padding = container_padding; - workspace.globals_mut().workspace_padding = workspace_padding; - workspace.globals_mut().work_area = work_area; - workspace.globals_mut().work_area_offset = offset; - workspace.globals_mut().window_based_work_area_offset = window_based_work_area_offset; - workspace.globals_mut().window_based_work_area_offset_limit = limit; + workspace.globals = WorkspaceGlobals { + container_padding, + workspace_padding, + border_width, + border_offset, + work_area, + work_area_offset, + window_based_work_area_offset, + window_based_work_area_offset_limit, + } } } @@ -226,18 +244,32 @@ impl Monitor { let workspace_padding = self .workspace_padding() .or(Some(DEFAULT_WORKSPACE_PADDING.load(Ordering::SeqCst))); + let (border_width, border_offset) = { + let border_enabled = BORDER_ENABLED.load(Ordering::SeqCst); + if border_enabled { + let border_width = BORDER_WIDTH.load(Ordering::SeqCst); + let border_offset = BORDER_OFFSET.load(Ordering::SeqCst); + (border_width, border_offset) + } else { + (0, 0) + } + }; let work_area = *self.work_area_size(); - let offset = self.work_area_offset.or(offset); + let work_area_offset = self.work_area_offset.or(offset); let window_based_work_area_offset = self.window_based_work_area_offset(); - let limit = self.window_based_work_area_offset_limit(); + let window_based_work_area_offset_limit = self.window_based_work_area_offset_limit(); if let Some(workspace) = self.workspaces_mut().get_mut(workspace_idx) { - workspace.globals_mut().container_padding = container_padding; - workspace.globals_mut().workspace_padding = workspace_padding; - workspace.globals_mut().work_area = work_area; - workspace.globals_mut().work_area_offset = offset; - workspace.globals_mut().window_based_work_area_offset = window_based_work_area_offset; - workspace.globals_mut().window_based_work_area_offset_limit = limit; + workspace.globals = WorkspaceGlobals { + container_padding, + workspace_padding, + border_width, + border_offset, + work_area, + work_area_offset, + window_based_work_area_offset, + window_based_work_area_offset_limit, + } } } diff --git a/komorebi/src/static_config.rs b/komorebi/src/static_config.rs index 9947e50b..06dca748 100644 --- a/komorebi/src/static_config.rs +++ b/komorebi/src/static_config.rs @@ -966,10 +966,7 @@ impl StaticConfig { border_manager::BORDER_WIDTH.store(self.border_width.unwrap_or(8), Ordering::SeqCst); border_manager::BORDER_OFFSET.store(self.border_offset.unwrap_or(-1), Ordering::SeqCst); - - if let Some(enabled) = &self.border { - border_manager::BORDER_ENABLED.store(*enabled, Ordering::SeqCst); - } + border_manager::BORDER_ENABLED.store(self.border.unwrap_or(true), Ordering::SeqCst); if let Some(colours) = &self.border_colours { if let Some(single) = colours.single { diff --git a/komorebi/src/workspace.rs b/komorebi/src/workspace.rs index cf2d25a1..9fca6ec0 100644 --- a/komorebi/src/workspace.rs +++ b/komorebi/src/workspace.rs @@ -8,8 +8,6 @@ use std::num::NonZeroUsize; use std::sync::atomic::Ordering; use crate::border_manager; -use crate::border_manager::BORDER_OFFSET; -use crate::border_manager::BORDER_WIDTH; use crate::container::Container; use crate::core::Axis; use crate::core::CustomLayout; @@ -188,6 +186,8 @@ pub enum WorkspaceWindowLocation { pub struct WorkspaceGlobals { pub container_padding: Option, pub workspace_padding: Option, + pub border_width: i32, + pub border_offset: i32, pub work_area: Rect, pub work_area_offset: Option, pub window_based_work_area_offset: Option, @@ -488,6 +488,8 @@ impl Workspace { .workspace_padding() .or(self.globals().workspace_padding) .unwrap_or_default(); + let border_width = self.globals().border_width; + let border_offset = self.globals().border_offset; let work_area = self.globals().work_area; let work_area_offset = self.globals().work_area_offset; let window_based_work_area_offset = self.globals().window_based_work_area_offset; @@ -560,12 +562,8 @@ impl Workspace { if let Some(container) = self.monocle_container_mut() { if let Some(window) = container.focused_window_mut() { adjusted_work_area.add_padding(container_padding); - { - let border_offset = BORDER_OFFSET.load(Ordering::SeqCst); - adjusted_work_area.add_padding(border_offset); - let width = BORDER_WIDTH.load(Ordering::SeqCst); - adjusted_work_area.add_padding(width); - } + adjusted_work_area.add_padding(border_offset); + adjusted_work_area.add_padding(border_width); window.set_position(&adjusted_work_area, true)?; }; } else if let Some(window) = self.maximized_window_mut() { @@ -593,13 +591,8 @@ impl Workspace { let window_count = container.windows().len(); if let Some(layout) = layouts.get_mut(i) { - { - let border_offset = BORDER_OFFSET.load(Ordering::SeqCst); - layout.add_padding(border_offset); - - let width = BORDER_WIDTH.load(Ordering::SeqCst); - layout.add_padding(width); - } + layout.add_padding(border_offset); + layout.add_padding(border_width); if stackbar_manager::should_have_stackbar(window_count) { let tab_height = STACKBAR_TAB_HEIGHT.load(Ordering::SeqCst);