From f4c1f8832a3269ea36614f6d8967adf6c30ba3be Mon Sep 17 00:00:00 2001 From: DaPigGuy Date: Thu, 18 Jul 2024 23:34:34 -0700 Subject: [PATCH] progress_icon: Immediately redraw on accent color change --- src/widgets/progress_icon.rs | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/widgets/progress_icon.rs b/src/widgets/progress_icon.rs index ecbce7f..0f9e877 100644 --- a/src/widgets/progress_icon.rs +++ b/src/widgets/progress_icon.rs @@ -1,7 +1,7 @@ use gtk::{gdk, glib, graphene, gsk, prelude::*, subclass::prelude::*}; pub(crate) mod imp { - use std::cell::Cell; + use std::cell::{Cell, RefCell}; use super::*; @@ -11,6 +11,7 @@ pub(crate) mod imp { #[property(get, set = Self::set_progress, minimum = 0.0, maximum = 1.0, default = 0.0, explicit_notify)] pub progress: Cell, + pub signal_id: RefCell>, } #[glib::object_subclass] @@ -24,7 +25,24 @@ pub(crate) mod imp { impl ObjectImpl for ProgressIcon { fn constructed(&self) { self.parent_constructed(); - self.obj().set_valign(gtk::Align::Center); + let obj = self.obj(); + + obj.set_valign(gtk::Align::Center); + + let signal_id = adw::StyleManager::default().connect_accent_color_notify(glib::clone!( + #[weak(rename_to = progress_icon)] + obj, + move |_| { + progress_icon.queue_draw(); + } + )); + self.signal_id.replace(Some(signal_id)); + } + + fn dispose(&self) { + if let Some(signal_id) = self.signal_id.take() { + adw::StyleManager::default().disconnect(signal_id); + } } }