diff options
| author | MaxVerevkin <maxxverrr@gmail.com> | 2023-06-01 13:23:26 +0300 |
|---|---|---|
| committer | MaxVerevkin <maxxverrr@gmail.com> | 2023-06-01 13:23:26 +0300 |
| commit | 84b8dfe8cd190de33221f465a7059be6a30769f5 (patch) | |
| tree | ab7b9e7b537858a5aa6376be6b8355c723f0fdec /src/wm_info_provider/river.rs | |
| parent | f11240cb1e30e494be840d2ecef8504dd8cea7ff (diff) | |
| download | i3bar-mango-84b8dfe8cd190de33221f465a7059be6a30769f5.tar.gz | |
small changes
Diffstat (limited to 'src/wm_info_provider/river.rs')
| -rw-r--r-- | src/wm_info_provider/river.rs | 53 |
1 files changed, 15 insertions, 38 deletions
diff --git a/src/wm_info_provider/river.rs b/src/wm_info_provider/river.rs index b432da4..c7740a3 100644 --- a/src/wm_info_provider/river.rs +++ b/src/wm_info_provider/river.rs @@ -1,14 +1,13 @@ -use std::any::Any; use std::ffi::CString; use wayrs_client::connection::Connection; -use wayrs_client::global::*; +use wayrs_client::{cstr, global::*}; use super::*; use crate::protocol::*; use crate::state::State; -pub(super) struct RiverInfoProvider { +pub struct RiverInfoProvider { status_manager: ZriverStatusManagerV1, control: ZriverControlV1, output_statuses: Vec<OutputStatus>, @@ -25,7 +24,7 @@ struct OutputStatus { } impl RiverInfoProvider { - pub(super) fn bind( + pub fn bind( conn: &mut Connection<State>, globals: &Globals, callback: WmInfoCallback, @@ -39,12 +38,8 @@ impl RiverInfoProvider { } } -impl WmInfoProvider for RiverInfoProvider { - fn as_any(&mut self) -> &mut dyn Any { - self - } - - fn new_outut(&mut self, conn: &mut Connection<State>, output: WlOutput) { +impl RiverInfoProvider { + pub fn new_output(&mut self, conn: &mut Connection<State>, output: WlOutput) { let status = self.status_manager .get_river_output_status_with_cb(conn, output, output_status_cb); @@ -58,7 +53,7 @@ impl WmInfoProvider for RiverInfoProvider { }); } - fn output_removed(&mut self, conn: &mut Connection<State>, output: WlOutput) { + pub fn output_removed(&mut self, conn: &mut Connection<State>, output: WlOutput) { let index = self .output_statuses .iter() @@ -68,32 +63,21 @@ impl WmInfoProvider for RiverInfoProvider { output_status.status.destroy(conn); } - fn left_click_on_tag( + pub fn click_on_tag( &mut self, conn: &mut Connection<State>, _: WlOutput, seat: WlSeat, tag: &str, + btn: PointerBtn, ) { let tag: u32 = tag.parse().unwrap(); - self.control - .add_argument(conn, CString::new("set-focused-tags").unwrap()); - self.control - .add_argument(conn, CString::new((1u32 << (tag - 1)).to_string()).unwrap()); - self.control - .run_command_with_cb(conn, seat, river_command_cb); - } - - fn right_click_on_tag( - &mut self, - conn: &mut Connection<State>, - _: WlOutput, - seat: WlSeat, - tag: &str, - ) { - let tag: u32 = tag.parse().unwrap(); - self.control - .add_argument(conn, CString::new("toggle-focused-tags").unwrap()); + let cmd = match btn { + PointerBtn::Left => cstr!("set-focused-tags"), + PointerBtn::Right => cstr!("toggle-focused-tags"), + _ => return, + }; + self.control.add_argument(conn, cmd.to_owned()); self.control .add_argument(conn, CString::new((1u32 << (tag - 1)).to_string()).unwrap()); self.control @@ -107,14 +91,7 @@ fn output_status_cb( output_status: ZriverOutputStatusV1, event: zriver_output_status_v1::Event, ) { - let river: &mut RiverInfoProvider = state - .shared_state - .wm_info_provider - .as_mut() - .unwrap() - .as_any() - .downcast_mut() - .unwrap(); + let WmInfoProvider::River(river) = &mut state.shared_state.wm_info_provider else { unreachable!() }; let status = river .output_statuses |
