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:
commit
590af3a06c
|
@ -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 {
|
||||||
|
|
19
src/state.rs
19
src/state.rs
|
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue