diff --git a/Cargo.lock b/Cargo.lock index bd12c8c8..71163af2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -347,6 +347,7 @@ dependencies = [ "komorebi-core", "lazy_static", "nanoid", + "paste", "serde", "serde_json", "strum", @@ -392,9 +393,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.98" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "320cfe77175da3a483efed4bc0adc1968ca050b098ce4f2f1c13a56626128790" +checksum = "a7f823d141fe0a24df1e23b4af4e3c7ba9e5966ec514ea068c93024aa7deb765" [[package]] name = "log" @@ -525,6 +526,12 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2386b4ebe91c2f7f51082d4cefa145d030e33a1842a96b12e4885cc3c01f7a55" +[[package]] +name = "paste" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acbf547ad0c65e31259204bd90935776d1c693cec2f4ff7abb7a1bbbd40dfe58" + [[package]] name = "pin-project-lite" version = "0.2.7" diff --git a/komorebi/Cargo.lock b/komorebi/Cargo.lock deleted file mode 100644 index cb740607..00000000 --- a/komorebi/Cargo.lock +++ /dev/null @@ -1,555 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "addr2line" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e61f2b7f93d2c7d2b08263acaa4a363b3e276806c68af6134c44f523bf1aacd" -dependencies = [ - "gimli", -] - -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - -[[package]] -name = "ansi_term" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" -dependencies = [ - "winapi", -] - -[[package]] -name = "autocfg" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" - -[[package]] -name = "backtrace" -version = "0.3.61" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7a905d892734eea339e896738c14b9afce22b5318f64b951e70bf3844419b01" -dependencies = [ - "addr2line", - "cc", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", -] - -[[package]] -name = "bindings" -version = "0.1.0" -dependencies = [ - "windows", -] - -[[package]] -name = "bitflags" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" - -[[package]] -name = "cc" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e70cc2f62c6ce1868963827bd677764c62d07c3d9a3e1fb1177ee1a9ab199eb2" - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "chrono" -version = "0.4.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" -dependencies = [ - "libc", - "num-integer", - "num-traits", - "winapi", -] - -[[package]] -name = "color-eyre" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f1885697ee8a177096d42f158922251a41973117f6d8a234cee94b9509157b7" -dependencies = [ - "backtrace", - "color-spantrace", - "eyre", - "indenter", - "once_cell", - "owo-colors", - "tracing-error", -] - -[[package]] -name = "color-spantrace" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6eee477a4a8a72f4addd4de416eb56d54bc307b284d6601bafdee1f4ea462d1" -dependencies = [ - "once_cell", - "owo-colors", - "tracing-core", - "tracing-error", -] - -[[package]] -name = "const-sha1" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb58b6451e8c2a812ad979ed1d83378caa5e927eef2622017a45f251457c2c9d" - -[[package]] -name = "crossbeam-channel" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ed27e177f16d65f0f0c22a213e17c696ace5dd64b14258b52f9417ccb52db4" -dependencies = [ - "cfg-if", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d82cfc11ce7f2c3faef78d8a684447b40d503d9681acebed6cb728d45940c4db" -dependencies = [ - "cfg-if", - "lazy_static", -] - -[[package]] -name = "eyre" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "221239d1d5ea86bf5d6f91c9d6bc3646ffe471b08ff9b0f91c44f115ac969d2b" -dependencies = [ - "indenter", - "once_cell", -] - -[[package]] -name = "gimli" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0a01e0497841a3b2db4f8afa483cce65f7e96a3498bd6c541734792aeac8fe7" - -[[package]] -name = "heck" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" -dependencies = [ - "unicode-segmentation", -] - -[[package]] -name = "indenter" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" - -[[package]] -name = "itoa" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736" - -[[package]] -name = "komorebi" -version = "0.1.0" -dependencies = [ - "bindings", - "bitflags", - "color-eyre", - "crossbeam-channel", - "crossbeam-utils", - "lazy_static", - "strum", - "tracing", - "tracing-subscriber", -] - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - -[[package]] -name = "libc" -version = "0.2.98" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "320cfe77175da3a483efed4bc0adc1968ca050b098ce4f2f1c13a56626128790" - -[[package]] -name = "log" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "matchers" -version = "0.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f099785f7595cc4b4553a174ce30dd7589ef93391ff414dbb67f62392b9e0ce1" -dependencies = [ - "regex-automata", -] - -[[package]] -name = "memchr" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b16bd47d9e329435e309c58469fe0791c2d0d1ba96ec0954152a5ae2b04387dc" - -[[package]] -name = "miniz_oxide" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b" -dependencies = [ - "adler", - "autocfg", -] - -[[package]] -name = "num-integer" -version = "0.1.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" -dependencies = [ - "autocfg", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" -dependencies = [ - "autocfg", -] - -[[package]] -name = "object" -version = "0.26.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c55827317fb4c08822499848a14237d2874d6f139828893017237e7ab93eb386" -dependencies = [ - "memchr", -] - -[[package]] -name = "once_cell" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56" - -[[package]] -name = "owo-colors" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2386b4ebe91c2f7f51082d4cefa145d030e33a1842a96b12e4885cc3c01f7a55" - -[[package]] -name = "pin-project-lite" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d31d11c69a6b52a174b42bdc0c30e5e11670f90788b2c471c31c1d17d449443" - -[[package]] -name = "proc-macro2" -version = "1.0.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c7ed8b8c7b886ea3ed7dde405212185f423ab44682667c8c6dd14aa1d9f6612" -dependencies = [ - "unicode-xid", -] - -[[package]] -name = "quote" -version = "1.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "regex" -version = "1.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461" -dependencies = [ - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.6.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" - -[[package]] -name = "rustc-demangle" -version = "0.1.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dead70b0b5e03e9c814bcb6b01e03e68f7c57a80aa48c72ec92152ab3e818d49" - -[[package]] -name = "ryu" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" - -[[package]] -name = "serde" -version = "1.0.126" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec7505abeacaec74ae4778d9d9328fe5a5d04253220a85c4ee022239fc996d03" - -[[package]] -name = "serde_json" -version = "1.0.64" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "799e97dc9fdae36a5c8b8f2cae9ce2ee9fdce2058c57a93e6099d919fd982f79" -dependencies = [ - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "sharded-slab" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79c719719ee05df97490f80a45acfc99e5a30ce98a1e4fb67aee422745ae14e3" -dependencies = [ - "lazy_static", -] - -[[package]] -name = "smallvec" -version = "1.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e" - -[[package]] -name = "strum" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aaf86bbcfd1fa9670b7a129f64fc0c9fcbbfe4f1bc4210e9e98fe71ffc12cde2" -dependencies = [ - "strum_macros", -] - -[[package]] -name = "strum_macros" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d06aaeeee809dbc59eb4556183dd927df67db1540de5be8d3ec0b6636358a5ec" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "syn" -version = "1.0.74" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1873d832550d4588c3dbc20f01361ab00bfe741048f71e3fecf145a7cc18b29c" -dependencies = [ - "proc-macro2", - "quote", - "unicode-xid", -] - -[[package]] -name = "thread_local" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8018d24e04c95ac8790716a5987d0fec4f8b27249ffa0f7d33f1369bdfb88cbd" -dependencies = [ - "once_cell", -] - -[[package]] -name = "tracing" -version = "0.1.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09adeb8c97449311ccd28a427f96fb563e7fd31aabf994189879d9da2394b89d" -dependencies = [ - "cfg-if", - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c42e6fa53307c8a17e4ccd4dc81cf5ec38db9209f59b222210375b54ee40d1e2" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tracing-core" -version = "0.1.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9ff14f98b1a4b289c6248a023c1c2fa1491062964e9fed67ab29c4e4da4a052" -dependencies = [ - "lazy_static", -] - -[[package]] -name = "tracing-error" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4d7c0b83d4a500748fa5879461652b361edf5c9d51ede2a2ac03875ca185e24" -dependencies = [ - "tracing", - "tracing-subscriber", -] - -[[package]] -name = "tracing-log" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6923477a48e41c1951f1999ef8bb5a3023eb723ceadafe78ffb65dc366761e3" -dependencies = [ - "lazy_static", - "log", - "tracing-core", -] - -[[package]] -name = "tracing-serde" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb65ea441fbb84f9f6748fd496cf7f63ec9af5bca94dd86456978d055e8eb28b" -dependencies = [ - "serde", - "tracing-core", -] - -[[package]] -name = "tracing-subscriber" -version = "0.2.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab69019741fca4d98be3c62d2b75254528b5432233fd8a4d2739fec20278de48" -dependencies = [ - "ansi_term", - "chrono", - "lazy_static", - "matchers", - "regex", - "serde", - "serde_json", - "sharded-slab", - "smallvec", - "thread_local", - "tracing", - "tracing-core", - "tracing-log", - "tracing-serde", -] - -[[package]] -name = "unicode-segmentation" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8895849a949e7845e06bd6dc1aa51731a103c42707010a5b591c0038fb73385b" - -[[package]] -name = "unicode-xid" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "windows" -version = "0.17.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f1c7f11b289e450f78d55dd9dc09ae91c6ae8faed980bbf3e3a4c8f166ac259" -dependencies = [ - "const-sha1", - "windows_gen", - "windows_macros", -] - -[[package]] -name = "windows_gen" -version = "0.17.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57f5facfb04bc84b5fcd27018266d90ce272e11f8b91745dfdd47282e8e0607e" - -[[package]] -name = "windows_macros" -version = "0.17.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c32753c378262520a4fa70c2e4389f4649e751faab2a887090567cff192d299" -dependencies = [ - "syn", - "windows_gen", -] diff --git a/komorebi/Cargo.toml b/komorebi/Cargo.toml index 1e3198bd..4c9d8309 100644 --- a/komorebi/Cargo.toml +++ b/komorebi/Cargo.toml @@ -18,6 +18,7 @@ dirs = "3" eyre = "0.6.5" lazy_static = "1.4.0" nanoid = "0.4.0" +paste = "1.0" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" strum = { version = "0.21", features = ["derive"] } diff --git a/komorebi/src/container.rs b/komorebi/src/container.rs index 5fdee413..9300e5a5 100644 --- a/komorebi/src/container.rs +++ b/komorebi/src/container.rs @@ -13,6 +13,8 @@ pub struct Container { windows: Ring, } +impl_ring_elements!(Container, Window); + impl Default for Container { fn default() -> Self { Self { @@ -87,36 +89,12 @@ impl Container { self.focus_window(self.windows().len() - 1); } - pub fn focused_window(&self) -> Option<&Window> { - self.windows.focused() - } - - pub const fn focused_window_idx(&self) -> usize { - self.windows.focused_idx() - } - - pub fn focused_window_mut(&mut self) -> Option<&mut Window> { - self.windows.focused_mut() - } - #[tracing::instrument(skip(self))] pub fn focus_window(&mut self, idx: usize) { tracing::info!("focusing window"); self.windows.focus(idx); } - pub const fn windows(&self) -> &VecDeque { - self.windows.elements() - } - - pub fn windows_mut(&mut self) -> &mut VecDeque { - self.windows.elements_mut() - } - - pub fn visible_window_mut(&mut self) -> Option<&mut Window> { - self.focused_window_mut() - } - pub const fn id(&self) -> &String { &self.id } diff --git a/komorebi/src/main.rs b/komorebi/src/main.rs index 0acf888e..dc7d4946 100644 --- a/komorebi/src/main.rs +++ b/komorebi/src/main.rs @@ -19,11 +19,13 @@ use crate::process_event::listen_for_events; use crate::window_manager_event::WindowManagerEvent; use crate::windows_api::WindowsApi; +#[macro_use] +mod ring; + mod container; mod monitor; mod process_command; mod process_event; -mod ring; mod set_window_position; mod styles; mod window; diff --git a/komorebi/src/monitor.rs b/komorebi/src/monitor.rs index 10a3012b..7915db0e 100644 --- a/komorebi/src/monitor.rs +++ b/komorebi/src/monitor.rs @@ -21,6 +21,8 @@ pub struct Monitor { workspace_names: HashMap, } +impl_ring_elements!(Monitor, Workspace); + pub fn new(id: isize, monitor_size: Rect, work_area_size: Rect) -> Monitor { Monitor { id, @@ -92,18 +94,6 @@ impl Monitor { Ok(()) } - pub fn focused_workspace(&self) -> Option<&Workspace> { - self.workspaces.focused() - } - - pub const fn focused_workspace_idx(&self) -> usize { - self.workspaces.focused_idx() - } - - pub fn focused_workspace_mut(&mut self) -> Option<&mut Workspace> { - self.workspaces.focused_mut() - } - #[tracing::instrument(skip(self))] pub fn focus_workspace(&mut self, idx: usize) -> Result<()> { tracing::info!("focusing workspace"); @@ -142,14 +132,6 @@ impl Monitor { Ok(()) } - pub const fn workspaces(&self) -> &VecDeque { - self.workspaces.elements() - } - - pub fn workspaces_mut(&mut self) -> &mut VecDeque { - self.workspaces.elements_mut() - } - pub fn workspace_names_mut(&mut self) -> &mut HashMap { &mut self.workspace_names } diff --git a/komorebi/src/ring.rs b/komorebi/src/ring.rs index 2e2536e8..d732ec0b 100644 --- a/komorebi/src/ring.rs +++ b/komorebi/src/ring.rs @@ -46,3 +46,31 @@ impl Ring { self.elements.swap(i, j); } } + +macro_rules! impl_ring_elements { + ($name:ty, $element:ident) => { + paste::paste! { + impl $name { + pub const fn [<$element:lower s>](&self) -> &VecDeque<$element> { + self.[<$element:lower s>].elements() + } + + pub fn [<$element:lower s_mut>](&mut self) -> &mut VecDeque<$element> { + self.[<$element:lower s>].elements_mut() + } + + pub fn [](&self) -> Option<&$element> { + self.[<$element:lower s>].focused() + } + + pub const fn [](&self) -> usize { + self.[<$element:lower s>].focused_idx() + } + + pub fn [](&mut self) -> Option<&mut $element> { + self.[<$element:lower s>].focused_mut() + } + } + } + }; +} diff --git a/komorebi/src/window_manager.rs b/komorebi/src/window_manager.rs index 7cc49db9..f7c8b607 100644 --- a/komorebi/src/window_manager.rs +++ b/komorebi/src/window_manager.rs @@ -34,6 +34,8 @@ pub struct WindowManager { pub is_paused: bool, } +impl_ring_elements!(WindowManager, Monitor); + #[tracing::instrument] pub fn new(incoming: Arc>>) -> Result { let home = dirs::home_dir().context("there is no home directory")?; @@ -622,26 +624,6 @@ impl WindowManager { } impl WindowManager { - pub const fn monitors(&self) -> &VecDeque { - self.monitors.elements() - } - - pub fn monitors_mut(&mut self) -> &mut VecDeque { - self.monitors.elements_mut() - } - - pub fn focused_monitor(&self) -> Option<&Monitor> { - self.monitors.focused() - } - - pub const fn focused_monitor_idx(&self) -> usize { - self.monitors.focused_idx() - } - - pub fn focused_monitor_mut(&mut self) -> Option<&mut Monitor> { - self.monitors.focused_mut() - } - pub fn focused_monitor_work_area(&self) -> Result { Ok(*self .focused_monitor() diff --git a/komorebi/src/workspace.rs b/komorebi/src/workspace.rs index 86c089cc..95f3742f 100644 --- a/komorebi/src/workspace.rs +++ b/komorebi/src/workspace.rs @@ -32,6 +32,8 @@ pub struct Workspace { resize_dimensions: Vec>, } +impl_ring_elements!(Workspace, Container); + impl Default for Workspace { fn default() -> Self { Self { @@ -63,7 +65,7 @@ impl Workspace { let idx = self.focused_container_idx(); let mut to_focus = None; for (i, container) in self.containers_mut().iter_mut().enumerate() { - if let Some(window) = container.visible_window_mut() { + if let Some(window) = container.focused_window_mut() { window.restore(); if idx == i { @@ -506,18 +508,6 @@ impl Workspace { self.monocle_restore_idx } - pub fn focused_container(&self) -> Option<&Container> { - self.containers.focused() - } - - pub const fn focused_container_idx(&self) -> usize { - self.containers.focused_idx() - } - - pub fn focused_container_mut(&mut self) -> Option<&mut Container> { - self.containers.focused_mut() - } - #[tracing::instrument(skip(self))] pub fn focus_container(&mut self, idx: usize) { tracing::info!("focusing container"); @@ -525,14 +515,6 @@ impl Workspace { self.containers.focus(idx); } - pub const fn containers(&self) -> &VecDeque { - self.containers.elements() - } - - pub fn containers_mut(&mut self) -> &mut VecDeque { - self.containers.elements_mut() - } - pub fn swap_containers(&mut self, i: usize, j: usize) { self.containers.swap(i, j); self.focus_container(j); @@ -571,7 +553,7 @@ impl Workspace { pub fn visible_windows_mut(&mut self) -> Vec> { let mut vec = vec![]; for container in self.containers_mut() { - vec.push(container.visible_window_mut()); + vec.push(container.focused_window_mut()); } vec