~tsdh/swayr

637cbff935decb1dd962aaa8873e9b31d15f1c73 — Tassilo Horn a month ago 0d5288f v0.8.0-beta.1
Fix bug #6, release 0.8.0-beta.1
4 files changed, 35 insertions(+), 14 deletions(-)

M Cargo.lock
M Cargo.toml
M src/cmds.rs
M src/con.rs
M Cargo.lock => Cargo.lock +1 -1
@@ 357,7 357,7 @@ dependencies = [

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

M Cargo.toml => Cargo.toml +1 -1
@@ 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"

M src/cmds.rs => src/cmds.rs +28 -10
@@ 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)
            },

M src/con.rs => src/con.rs +5 -2
@@ 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 {