~tsdh/swayr

d7aa1d856c40641d1bbf2246c98a62f756533f5b — Tassilo Horn 19 days ago 33f85b5
Cargo format
4 files changed, 15 insertions(+), 31 deletions(-)

M swayr/src/cmds.rs
M swayr/src/daemon.rs
M swayr/src/focus.rs
M swayr/src/lib.rs
M swayr/src/cmds.rs => swayr/src/cmds.rs +1 -1
@@ 754,7 754,7 @@ fn select_and_move_focused_to(prompt: &str, choices: &[t::DisplayNode]) {
pub fn move_focused_to_workspace(fdata: &FocusData) {
    let root = ipc::get_root_node(true);
    let tree = t::get_tree(&root);
select_and_move_focused_to(
    select_and_move_focused_to(
        "Move focused container to workspace",
        &tree.get_workspaces(fdata),
    );

M swayr/src/daemon.rs => swayr/src/daemon.rs +2 -5
@@ 296,10 296,7 @@ fn focus_lock_in_handler(
    let update_focus = |fev: Option<FocusEvent>| {
        if let Some(fev) = fev {
            log::debug!("Locking-in focus on {}", fev.node_id);
            fdata.update_last_focus_tick(
                fev.node_id,
                fev.ev_focus_ctr,
            )
            fdata.update_last_focus_tick(fev.node_id, fev.ev_focus_ctr)
        }
    };



@@ 318,7 315,7 @@ fn focus_lock_in_handler(
            FocusMessage::TickUpdateActivate => {
                inhibit.clear();
                update_focus(pending_fev.take());
                continue
                continue;
            }
            FocusMessage::FocusEvent(fev) => {
                if let InhibitState::FocusInhibit = inhibit {

M swayr/src/focus.rs => swayr/src/focus.rs +11 -24
@@ 15,10 15,10 @@

//! Structure to hold window focus timestamps used by swayrd

use std::collections::HashMap;
use std::sync::mpsc;
use std::sync::Arc;
use std::sync::RwLock;
use std::collections::HashMap;

/// Data tracking most recent focus events for Sway windows/containers
#[derive(Clone)]


@@ 29,51 29,38 @@ pub struct FocusData {

impl FocusData {
    pub fn last_focus_tick(&self, id: i64) -> u64 {
        *self.focus_tick_by_id
            .read()
            .unwrap()
            .get(&id)
            .unwrap_or(&0)
        *self.focus_tick_by_id.read().unwrap().get(&id).unwrap_or(&0)
    }

    pub fn update_last_focus_tick(
        &self,
        id: i64,
        focus_val: u64,
    ) {
    pub fn update_last_focus_tick(&self, id: i64, focus_val: u64) {
        let mut write_lock = self.focus_tick_by_id.write().unwrap();
        if let Some(tick) = write_lock.get_mut(&id) {
            *tick = focus_val;
        }
        // else the node has since been closed before this focus event got locked in
    }
    
    pub fn remove_focus_data(
        &self,
        id: i64
    ) {

    pub fn remove_focus_data(&self, id: i64) {
        self.focus_tick_by_id.write().unwrap().remove(&id);
    }
    

    /// Ensures that a given node_id is present in the ExtraProps map, this
    /// later used to distinguish between the case where a container was
    /// closed (it will no longer be in the map) or 
    /// closed (it will no longer be in the map) or
    pub fn ensure_id(&self, id: i64) {
        let mut write_lock = self.focus_tick_by_id.write().unwrap();
        if write_lock.get(&id).is_none() {
            write_lock.insert(
                id,
                0,
            );
            write_lock.insert(id, 0);
        }
    }

    pub fn send(&self, fmsg: FocusMessage) {
        // todo can this be removed?
        if let FocusMessage::FocusEvent(ref fev) = fmsg { 
        if let FocusMessage::FocusEvent(ref fev) = fmsg {
            self.ensure_id(fev.node_id);
        }
        self.focus_chan.send(fmsg)
        self.focus_chan
            .send(fmsg)
            .expect("Failed to send focus event over channel");
    }
}

M swayr/src/lib.rs => swayr/src/lib.rs +1 -1
@@ 22,8 22,8 @@ pub mod client;
pub mod cmds;
pub mod config;
pub mod daemon;
pub mod focus;
pub mod layout;
pub mod shared;
pub mod tree;
pub mod util;
pub mod focus;