Merge pull request 'feature_window-border' (#3) from feature_window-border into main

Reviewed-on: https://desktop-host/git/janis/wm/pulls/3
This commit is contained in:
janis 2022-05-08 13:12:56 +02:00
commit 590af3a06c
2 changed files with 30 additions and 17 deletions

View file

@ -442,11 +442,12 @@ impl ClientState {
.unwrap_or(false) .unwrap_or(false)
} }
/// returns `true` if window layout changed
pub fn toggle_fullscreen<K>(&mut self, key: &K) -> bool pub fn toggle_fullscreen<K>(&mut self, key: &K) -> bool
where where
K: ClientKey, K: ClientKey,
{ {
if self.inner_toggle_fullscreen(key) { if let Some(_new_fullscreen_state) = self.inner_toggle_fullscreen(key) {
self.arrange_virtual_screen(); self.arrange_virtual_screen();
true true
} else { } else {
@ -454,24 +455,22 @@ impl ClientState {
} }
} }
fn inner_toggle_fullscreen<K>(&mut self, key: &K) -> bool fn inner_toggle_fullscreen<K>(&mut self, key: &K) -> Option<bool>
where where
K: ClientKey, K: ClientKey,
{ {
let fullscreen_size = self.screen_size let fullscreen_size = self.screen_size;
- Size::new(self.border_size * 2, self.border_size * 2);
match self.get_mut(key).into_option() { self.get_mut(key).into_option().map(|client| {
Some(client) => {
if client.toggle_fullscreen() { if client.toggle_fullscreen() {
client.size = fullscreen_size; client.size = fullscreen_size;
client.position = Point::zero(); client.position = Point::zero();
}
true true
} else {
false
} }
None => false, })
}
} }
/** /**
@ -760,10 +759,7 @@ impl ClientState {
border: i32, border: i32,
) -> (Size<i32>, Point<i32>) { ) -> (Size<i32>, Point<i32>) {
if fullscreen { if fullscreen {
let size = Size::new( let size = Size::new(screen_size.width, screen_size.height);
screen_size.width - border * 2,
screen_size.height - border * 2,
);
let pos = Point::new(0, 0); let pos = Point::new(0, 0);
(size, pos) (size, pos)
} else { } else {

View file

@ -37,6 +37,7 @@ pub struct WMConfig {
inactive_window_border_color: String, inactive_window_border_color: String,
#[serde(default = "WMConfig::default_terminal")] #[serde(default = "WMConfig::default_terminal")]
terminal_command: (String, Vec<String>), terminal_command: (String, Vec<String>),
border_width: Option<i32>,
} }
impl WMConfig { impl WMConfig {
@ -65,6 +66,7 @@ impl Default for WMConfig {
inactive_window_border_color: inactive_window_border_color:
Self::default_inactive_window_border_color(), Self::default_inactive_window_border_color(),
terminal_command: Self::default_terminal(), terminal_command: Self::default_terminal(),
border_width: Some(1),
} }
} }
} }
@ -145,7 +147,7 @@ where
let clients = ClientState::new() let clients = ClientState::new()
.with_virtualscreens(config.num_virtualscreens) .with_virtualscreens(config.num_virtualscreens)
.with_gap(config.gap.unwrap_or(1)) .with_gap(config.gap.unwrap_or(1))
.with_border(1) .with_border(config.border_width.unwrap_or(1))
.with_screen_size(backend.screen_size()); .with_screen_size(backend.screen_size());
Self { Self {
@ -480,6 +482,21 @@ where
self.clients.toggle_fullscreen(&window) 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(); self.arrange_clients();
} }
} }