fix(appearance): set color from pickers only when needed

This commit is contained in:
Michael Aaron Murphy 2025-08-12 19:33:32 +02:00
parent 077ad931cc
commit 20fc48a8d7
No known key found for this signature in database
GPG key ID: B2732D4240C9212C
3 changed files with 34 additions and 26 deletions

View file

@ -148,26 +148,34 @@ impl Content {
pub fn update_color( pub fn update_color(
&mut self, &mut self,
tasks: &mut Vec<Task<app::Message>>,
message: ColorPickerUpdate, message: ColorPickerUpdate,
context_view: &ContextView, context_view: &ContextView,
) -> Task<app::Message> { ) -> bool {
let mut tasks = Vec::new(); let mut needs_update = false;
tasks.push(match message { match message {
ColorPickerUpdate::AppliedColor | ColorPickerUpdate::Reset => { ColorPickerUpdate::ActionFinished => {
self.context_view = None; needs_update = true;
cosmic::task::message(crate::pages::Message::CloseContextDrawer)
} }
ColorPickerUpdate::ActionFinished => Task::none(), ColorPickerUpdate::AppliedColor | ColorPickerUpdate::Reset => {
needs_update = true;
self.context_view = None;
tasks.push(cosmic::task::message(
crate::pages::Message::CloseContextDrawer,
));
}
ColorPickerUpdate::Cancel => { ColorPickerUpdate::Cancel => {
self.context_view = None; self.context_view = None;
cosmic::task::message(crate::pages::Message::CloseContextDrawer) tasks.push(cosmic::task::message(
crate::pages::Message::CloseContextDrawer,
));
} }
_ => Task::none(), _ => (),
}); }
tasks.push(match *context_view { tasks.push(match *context_view {
ContextView::CustomAccent => self.custom_accent.update(message), ContextView::CustomAccent => self.custom_accent.update(message),
@ -176,10 +184,10 @@ impl Content {
ContextView::InterfaceText => self.interface_text.update(message), ContextView::InterfaceText => self.interface_text.update(message),
ContextView::ControlComponent => self.control_component.update(message), ContextView::ControlComponent => self.control_component.update(message),
ContextView::AccentWindowHint => self.accent_window_hint.update(message), ContextView::AccentWindowHint => self.accent_window_hint.update(message),
_ => Task::none(), _ => return needs_update,
}); });
cosmic::Task::batch(tasks) needs_update
} }
pub fn update_icon( pub fn update_icon(

View file

@ -248,10 +248,11 @@ impl Page {
Message::DrawerColor(u) => { Message::DrawerColor(u) => {
if let Some(context_view) = self.context_view.as_ref() { if let Some(context_view) = self.context_view.as_ref() {
tasks.push(self.drawer.update_color(u, context_view)); if self.drawer.update_color(&mut tasks, u, context_view) {
theme_staged = self theme_staged = self
.theme_manager .theme_manager
.set_color(self.drawer.current_color(context_view), context_view); .set_color(self.drawer.current_color(context_view), context_view);
}
} }
} }
@ -298,10 +299,11 @@ impl Page {
Message::Left => {} Message::Left => {}
Message::PaletteAccent(c) => { Message::PaletteAccent(c) => {
theme_staged = self theme_staged = dbg!(
.theme_manager self.theme_manager
.selected_customizer_mut() .selected_customizer_mut()
.set_accent(Some(c).map(Srgb::from)); .set_accent(Some(c).map(Srgb::from))
);
} }
Message::Reset => { Message::Reset => {

View file

@ -187,13 +187,11 @@ fn accent_color_palette<'a>(
) -> impl Into<Element<'a, Message>> { ) -> impl Into<Element<'a, Message>> {
let Spacing { space_xxs, .. } = cosmic::theme::spacing(); let Spacing { space_xxs, .. } = cosmic::theme::spacing();
let descriptions = &section.descriptions; let descriptions = &section.descriptions;
let palette = &page.theme_manager.builder().palette.as_ref();
let accent = page.theme_manager.accent_palette().as_ref().unwrap(); let accent = page.theme_manager.accent_palette().as_ref().unwrap();
let cur_accent = page let cur_accent = page.theme_manager.builder().accent.map_or_else(
.theme_manager || page.theme_manager.builder().palette.as_ref().accent_blue,
.builder() Srgba::from,
.accent );
.map_or(palette.accent_blue, Srgba::from);
let mut accent_palette_row = cosmic::widget::row::with_capacity(accent.len()); let mut accent_palette_row = cosmic::widget::row::with_capacity(accent.len());
for &color in accent { for &color in accent {