diff options
| author | Max Verevkin <maxxverrr@gmail.com> | 2022-07-19 12:39:41 +0300 |
|---|---|---|
| committer | Max Verevkin <maxxverrr@gmail.com> | 2022-07-19 12:39:41 +0300 |
| commit | f78774137b146647a4024e1305c7dfbd89b39f18 (patch) | |
| tree | c515785cda3244a55212072177fab4606bff0292 | |
| parent | 2504e7207009d7fd3c1a19f15e4295b6a2579650 (diff) | |
| download | i3bar-mango-f78774137b146647a4024e1305c7dfbd89b39f18.tar.gz | |
some refactoring
| -rw-r--r-- | src/bar_state.rs | 48 | ||||
| -rw-r--r-- | src/main.rs | 26 |
2 files changed, 33 insertions, 41 deletions
diff --git a/src/bar_state.rs b/src/bar_state.rs index d144077..55705da 100644 --- a/src/bar_state.rs +++ b/src/bar_state.rs @@ -128,13 +128,12 @@ impl BarState { } } - pub fn add_surface( - &mut self, - output: &WlOutput, - output_id: u32, - surface: Attached<WlSurface>, - pool: AutoMemPool, - ) { + pub fn add_surface(&mut self, output: &WlOutput, output_id: u32, env: &Environment<Env>) { + let surface = env.create_surface(); + let pool = env + .create_auto_pool() + .expect("Failed to create a memory pool!"); + let layer_surface = self.layer_shell.get_layer_surface( &surface, Some(output), @@ -155,7 +154,7 @@ impl BarState { let bar_state: &mut BarState = data.get().unwrap(); match event { zwlr_layer_surface_v1::Event::Closed => { - bar_state.surfaces.retain(|s| s.output_id != output_id); + bar_state.remove_surface(output_id); } zwlr_layer_surface_v1::Event::Configure { serial, @@ -181,27 +180,27 @@ impl BarState { surface.commit(); let (river_output_status, tags_info) = if let Some(river_status) = &self.river_status { - let tags_info = Rc::new(RefCell::new(TagsInfo::default())); - let tags_info_handle = Rc::clone(&tags_info); let river_output_status = river_status.get_river_output_status(output); river_output_status.quick_assign(move |_, event, mut data| { let bar_state: &mut BarState = data.get().unwrap(); - match event { - zriver_output_status_v1::Event::FocusedTags { tags } => { - tags_info_handle.borrow_mut().focused = tags; - } - zriver_output_status_v1::Event::UrgentTags { tags } => { - tags_info_handle.borrow_mut().urgent = tags; - } - _ => (), - } - for s in &mut bar_state.surfaces { - if s.output_id == output_id { - s.dirty = true; + if let Some(s) = bar_state + .surfaces + .iter_mut() + .find(|s| s.output_id == output_id) + { + match event { + zriver_output_status_v1::Event::FocusedTags { tags } => { + s.tags_info.as_mut().unwrap().focused = tags; + } + zriver_output_status_v1::Event::UrgentTags { tags } => { + s.tags_info.as_mut().unwrap().urgent = tags; + } + _ => (), } + s.dirty = true; } }); - (Some(river_output_status), Some(tags_info)) + (Some(river_output_status), Some(TagsInfo::default())) } else { (None, None) }; @@ -238,7 +237,7 @@ pub struct Surface { river_output_status: Option<Main<zriver_output_status_v1::ZriverOutputStatusV1>>, river_control: Option<Attached<zriver_control_v1::ZriverControlV1>>, // tags - tags_info: Option<Rc<RefCell<TagsInfo>>>, + tags_info: Option<TagsInfo>, tags_computed: Vec<ComputedText>, // buttons tags_btns: ButtonManager, @@ -346,7 +345,6 @@ impl Surface { self.tags_computed.push(tag); } } - let tags_info = tags_info.borrow(); for (i, label) in self.tags_computed.iter().enumerate() { let state = tags_info.get_state(i); let (bg, fg) = match state { diff --git a/src/main.rs b/src/main.rs index 823a137..730edf6 100644 --- a/src/main.rs +++ b/src/main.rs @@ -12,7 +12,7 @@ use smithay_client_toolkit::{ output::{with_output_info, OutputInfo}, reexports::{ calloop, - client::protocol::{wl_output, wl_pointer}, + client::protocol::{wl_output::WlOutput, wl_pointer}, protocols::wlr::unstable::layer_shell::v1::client::zwlr_layer_shell_v1, }, seat::pointer, @@ -66,21 +66,15 @@ fn main() { let mut bar_state = BarState::new(&env); let env_handle = env.clone(); - let output_handler = - move |output: wl_output::WlOutput, info: &OutputInfo, bar_state: &mut BarState| { - if info.obsolete { - info!("Output removed"); - bar_state.remove_surface(info.id); - output.release(); - } else { - info!("Output detected"); - let surface = env_handle.create_surface(); - let pool = env_handle - .create_auto_pool() - .expect("Failed to create a memory pool!"); - bar_state.add_surface(&output, info.id, surface, pool); - } - }; + let output_handler = move |output: WlOutput, info: &OutputInfo, bar_state: &mut BarState| { + if info.obsolete { + info!("Output {} removed", info.id); + output.release(); + } else { + info!("Output {} detected", info.id); + bar_state.add_surface(&output, info.id, &env_handle); + } + }; // Process currently existing outputs for output in env.get_all_outputs() { |
