From e8c64f46d9a8e79afb13874813fa6a739025d28c Mon Sep 17 00:00:00 2001 From: MaxVerevkin Date: Tue, 31 Jan 2023 23:39:16 +0200 Subject: abstract over tag and layout name provider --- src/wm_info_provider.rs | 58 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 src/wm_info_provider.rs (limited to 'src/wm_info_provider.rs') diff --git a/src/wm_info_provider.rs b/src/wm_info_provider.rs new file mode 100644 index 0000000..b7854b1 --- /dev/null +++ b/src/wm_info_provider.rs @@ -0,0 +1,58 @@ +mod river; + +use std::any::Any; + +use wayrs_client::connection::Connection; +use wayrs_client::global::*; + +use crate::protocol::*; +use crate::state::State; + +pub type WmInfoCallback = fn(&mut Connection, &mut State, WlOutput, WmInfo); + +pub trait WmInfoProvider { + fn as_any(&mut self) -> &mut dyn Any; + + fn new_outut(&mut self, conn: &mut Connection, output: WlOutput); + + fn output_removed(&mut self, conn: &mut Connection, output: WlOutput); + + fn left_click_on_tag( + &mut self, + conn: &mut Connection, + output: WlOutput, + seat: WlSeat, + tag: &str, + ); + + fn middle_click_on_tag( + &mut self, + conn: &mut Connection, + output: WlOutput, + seat: WlSeat, + tag: &str, + ); +} + +#[derive(Default)] +pub struct WmInfo { + pub layout_name: Option, + pub tags: Vec, +} + +pub struct Tag { + pub name: String, + pub is_focused: bool, + pub is_active: bool, + pub is_urgent: bool, +} + +pub fn bind_wayland( + conn: &mut Connection, + globals: &Globals, + callback: WmInfoCallback, +) -> Option> { + // TODO: add more providers + let river = river::RiverInfoProvider::bind(conn, globals, callback)?; + Some(Box::new(river)) +} -- cgit v1.3.1