Fix bug #6, release 0.8.0-beta.1

timeout_old
Tassilo Horn 3 years ago
parent 0d5288f845
commit 637cbff935
  1. 2
      Cargo.lock
  2. 2
      Cargo.toml
  3. 38
      src/cmds.rs
  4. 7
      src/con.rs

2
Cargo.lock generated

@ -357,7 +357,7 @@ dependencies = [
[[package]]
name = "swayr"
version = "0.8.0-beta.0"
version = "0.8.0-beta.1"
dependencies = [
"clap",
"directories",

@ -1,6 +1,6 @@
[package]
name = "swayr"
version = "0.8.0-beta.0"
version = "0.8.0-beta.1"
description = "A LRU window-switcher (and more) for the sway window manager"
homepage = "https://sr.ht/~tsdh/swayr/"
repository = "https://git.sr.ht/~tsdh/swayr"

@ -181,13 +181,17 @@ pub fn exec_swayr_cmd(args: ExecSwayrCmdArgs) {
Direction::Forward,
windows,
Some(&*props.read().unwrap()),
Box::new(|w: &con::Window| w.is_child_of_tiled_container()),
Box::new(|w: &con::Window| {
!w.is_floating() && w.is_child_of_tiled_container()
}),
),
SwayrCommand::PrevTiledWindow { windows } => focus_window_in_direction(
Direction::Backward,
windows,
Some(&*props.read().unwrap()),
Box::new(|w: &con::Window| w.is_child_of_tiled_container()),
Box::new(|w: &con::Window| {
!w.is_floating() && w.is_child_of_tiled_container()
}),
),
SwayrCommand::NextTabbedOrStackedWindow { windows } => {
focus_window_in_direction(
@ -195,7 +199,8 @@ pub fn exec_swayr_cmd(args: ExecSwayrCmdArgs) {
windows,
Some(&*props.read().unwrap()),
Box::new(|w: &con::Window| {
w.is_child_of_tabbed_or_stacked_container()
!w.is_floating()
&& w.is_child_of_tabbed_or_stacked_container()
}),
)
}
@ -205,7 +210,8 @@ pub fn exec_swayr_cmd(args: ExecSwayrCmdArgs) {
windows,
Some(&*props.read().unwrap()),
Box::new(|w: &con::Window| {
w.is_child_of_tabbed_or_stacked_container()
!w.is_floating()
&& w.is_child_of_tabbed_or_stacked_container()
}),
)
}
@ -387,7 +393,10 @@ pub fn focus_window_in_direction(
}
};
let windows = con::get_windows(root, false, extra_props);
let windows: Vec<con::Window> = con::get_windows(root, false, extra_props)
.into_iter()
.filter(|w| pred(w))
.collect();
if windows.len() < 2 {
return;
@ -409,7 +418,7 @@ pub fn focus_window_in_direction(
loop {
let win = iter.next().unwrap();
if is_focused_window(win) {
let win = iter.find(|w| pred(w)).unwrap();
let win = iter.next().unwrap();
focus_window_by_id(win.get_id());
return;
}
@ -435,10 +444,19 @@ pub fn focus_similar_window_in_direction(
extra_props,
if current_window.is_floating() {
Box::new(|w| w.is_floating())
} else if current_window.is_child_of_tabbed_or_stacked_container() {
Box::new(|w| w.is_child_of_tabbed_or_stacked_container())
} else if current_window.is_child_of_tiled_container() {
Box::new(|w| w.is_child_of_tiled_container())
} else if !current_window.is_floating()
&& current_window.is_child_of_tabbed_or_stacked_container()
{
Box::new(|w| {
!w.is_floating()
&& w.is_child_of_tabbed_or_stacked_container()
})
} else if !current_window.is_floating()
&& current_window.is_child_of_tiled_container()
{
Box::new(|w| {
!w.is_floating() && w.is_child_of_tiled_container()
})
} else {
Box::new(always_true)
},

@ -160,8 +160,11 @@ impl Window<'_> {
pub fn get_parent(&self) -> &s::Node {
NodeIter::new(self.workspace)
.find(|n| n.nodes.contains(self.node))
.expect("No parent node of a window!")
.find(|n| {
n.nodes.contains(self.node)
|| n.floating_nodes.contains(self.node)
})
.unwrap_or_else(|| panic!("Window {:?} has no parent node!", self))
}
pub fn is_child_of_tiled_container(&self) -> bool {

Loading…
Cancel
Save