diff --git a/src/view/components/info_bar.rs b/src/view/components/info_bar.rs index 20d9162..803365b 100644 --- a/src/view/components/info_bar.rs +++ b/src/view/components/info_bar.rs @@ -1,6 +1,6 @@ use gtk4 as gtk; -use std::{cell::RefCell, collections::VecDeque, sync::LazyLock}; +use std::{collections::VecDeque, sync::LazyLock}; use gtk::{ builders::{BoxBuilder, ButtonBuilder, LabelBuilder}, @@ -29,7 +29,9 @@ pub struct InfoBarBuilder { button: ButtonBuilder, } -static mut TIMERS_QUEUE: VecDeque> = VecDeque::new(); +// TODO: Develop a method to safely mutate static. +// Not necessary. +static mut TASKS_QUEUE: VecDeque> = VecDeque::new(); // // Singleton pattern implementation @@ -43,8 +45,8 @@ static INFO_BAR_INSTANCE: LazyLock = LazyLock::new(|| InfoBar { }); impl InfoBar { - pub fn get_instance() -> Self { - INFO_BAR_INSTANCE.clone() + pub fn get_instance() -> &'static Self { + &INFO_BAR_INSTANCE } pub fn set_text_label(&self, text_label: Option<&str>) { @@ -64,7 +66,9 @@ impl InfoBar { } pub fn show_infobar(&self, duration_secs: u64) { - INFO_BAR_INSTANCE.set_reveal_child(true); + if !INFO_BAR_INSTANCE.instance.reveals_child() { + INFO_BAR_INSTANCE.set_reveal_child(true); + } let callback = spawn(async move { sleep(Duration::from_secs(duration_secs)).await; @@ -72,11 +76,11 @@ impl InfoBar { }); unsafe { - if !TIMERS_QUEUE.is_empty() { - TIMERS_QUEUE.pop_back().unwrap().abort(); + if !TASKS_QUEUE.is_empty() { + TASKS_QUEUE.pop_back().unwrap().abort(); } - TIMERS_QUEUE.push_back(callback); + TASKS_QUEUE.push_back(callback); } } }