From 98404ce604fededb060840d8a00a4f98a6aa754e Mon Sep 17 00:00:00 2001 From: Michael Aaron Murphy Date: Tue, 12 Mar 2024 07:39:38 +0100 Subject: [PATCH] feat(wallpaper): update slideshow preview in realtime --- app/src/app.rs | 9 +++++++-- app/src/pages/desktop/wallpaper/mod.rs | 8 ++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/app/src/app.rs b/app/src/app.rs index 40cd54b..c19753f 100644 --- a/app/src/app.rs +++ b/app/src/app.rs @@ -12,7 +12,7 @@ use crate::pages::desktop::{ }, }; use crate::pages::input::{self, keyboard}; -use crate::pages::{display, sound, system, time}; +use crate::pages::{self, display, sound, system, time}; use crate::subscription::desktop_files; use crate::widget::{page_title, search_header}; use crate::PageCommands; @@ -21,7 +21,7 @@ use cosmic::iced::Subscription; use cosmic::widget::{button, row, text_input}; use cosmic::{ app::{Command, Core}, - cosmic_config::config_subscription, + cosmic_config::{config_state_subscription, config_subscription}, iced::{ self, event::{self, wayland, PlatformSpecific}, @@ -228,6 +228,11 @@ impl cosmic::Application for SettingsApp { Message::PanelConfig(update.config) }), + config_state_subscription(0, cosmic_bg_config::NAME.into(), 1).map(|update| { + Message::PageMessage(pages::Message::DesktopWallpaper( + pages::desktop::wallpaper::Message::UpdateState(update.config), + )) + }), ]) } diff --git a/app/src/pages/desktop/wallpaper/mod.rs b/app/src/pages/desktop/wallpaper/mod.rs index e3ca821..a938c7b 100644 --- a/app/src/pages/desktop/wallpaper/mod.rs +++ b/app/src/pages/desktop/wallpaper/mod.rs @@ -115,6 +115,8 @@ pub enum Message { Select(DefaultKey), /// Changes the slideshow parameter. Slideshow(bool), + /// State change from cosmic-bg + UpdateState(cosmic_bg_config::state::State), } impl From for crate::app::Message { @@ -615,6 +617,12 @@ impl Page { #[allow(clippy::too_many_lines)] pub fn update(&mut self, message: Message) -> Command { match message { + Message::UpdateState(_state) => { + if let Choice::Slideshow = self.selection.active { + self.cache_display_image(); + } + } + Message::DragColorDialog => { return cosmic::iced_sctk::commands::window::start_drag_window(self.color_dialog) }