diff --git a/src/clients.rs b/src/clients.rs index be4db9d..1c6d3a8 100644 --- a/src/clients.rs +++ b/src/clients.rs @@ -442,11 +442,12 @@ impl ClientState { .unwrap_or(false) } + /// returns `true` if window layout changed pub fn toggle_fullscreen(&mut self, key: &K) -> bool where K: ClientKey, { - if self.inner_toggle_fullscreen(key) { + if let Some(_new_fullscreen_state) = self.inner_toggle_fullscreen(key) { self.arrange_virtual_screen(); true } else { @@ -454,24 +455,22 @@ impl ClientState { } } - fn inner_toggle_fullscreen(&mut self, key: &K) -> bool + fn inner_toggle_fullscreen(&mut self, key: &K) -> Option where K: ClientKey, { - let fullscreen_size = self.screen_size - - Size::new(self.border_size * 2, self.border_size * 2); + let fullscreen_size = self.screen_size; - match self.get_mut(key).into_option() { - Some(client) => { - if client.toggle_fullscreen() { - client.size = fullscreen_size; - client.position = Point::zero(); - } + self.get_mut(key).into_option().map(|client| { + if client.toggle_fullscreen() { + client.size = fullscreen_size; + client.position = Point::zero(); true + } else { + false } - None => false, - } + }) } /** @@ -760,10 +759,7 @@ impl ClientState { border: i32, ) -> (Size, Point) { if fullscreen { - let size = Size::new( - screen_size.width - border * 2, - screen_size.height - border * 2, - ); + let size = Size::new(screen_size.width, screen_size.height); let pos = Point::new(0, 0); (size, pos) } else { diff --git a/src/state.rs b/src/state.rs index a73cbf3..7889159 100644 --- a/src/state.rs +++ b/src/state.rs @@ -37,6 +37,7 @@ pub struct WMConfig { inactive_window_border_color: String, #[serde(default = "WMConfig::default_terminal")] terminal_command: (String, Vec), + border_width: Option, } impl WMConfig { @@ -65,6 +66,7 @@ impl Default for WMConfig { inactive_window_border_color: Self::default_inactive_window_border_color(), terminal_command: Self::default_terminal(), + border_width: Some(1), } } } @@ -145,7 +147,7 @@ where let clients = ClientState::new() .with_virtualscreens(config.num_virtualscreens) .with_gap(config.gap.unwrap_or(1)) - .with_border(1) + .with_border(config.border_width.unwrap_or(1)) .with_screen_size(backend.screen_size()); Self { @@ -480,6 +482,21 @@ where self.clients.toggle_fullscreen(&window) } } { + if let Some(client) = + self.clients.get(&window).into_option() + { + self.backend.configure_window( + window, + None, + None, + if client.is_fullscreen() { + Some(0) + } else { + Some(self.clients.get_border()) + }, + ); + }; + self.arrange_clients(); } }