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]] [[package]]
name = "swayr" name = "swayr"
version = "0.8.0-beta.0" version = "0.8.0-beta.1"
dependencies = [ dependencies = [
"clap", "clap",
"directories", "directories",

@ -1,6 +1,6 @@
[package] [package]
name = "swayr" 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" description = "A LRU window-switcher (and more) for the sway window manager"
homepage = "https://sr.ht/~tsdh/swayr/" homepage = "https://sr.ht/~tsdh/swayr/"
repository = "https://git.sr.ht/~tsdh/swayr" repository = "https://git.sr.ht/~tsdh/swayr"

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

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

Loading…
Cancel
Save