From 2b40a7abcc3c48955d09464cdb0f63d4d6431f3a Mon Sep 17 00:00:00 2001 From: Chris Cochrun Date: Mon, 8 Dec 2025 15:27:51 -0600 Subject: [PATCH] Selecting slide in preview keeps the internal state correct --- src/main.rs | 27 +++++++++++++++++++++++++-- src/ui/presenter.rs | 7 ++++++- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/src/main.rs b/src/main.rs index 954935f..845ed72 100644 --- a/src/main.rs +++ b/src/main.rs @@ -951,6 +951,29 @@ impl cosmic::Application for App { cosmic::Action::App(Message::Present(m)) }), presenter::Action::None => Task::none(), + presenter::Action::ChangeSlide( + item_index, + slide_index, + ) => { + self.current_item = (item_index, slide_index); + let action = self.presenter.update( + presenter::Message::ActivateSlide( + item_index, + slide_index, + ), + ); + + if let presenter::Action::Task(task) = action + { + task.map(|m| { + cosmic::Action::App(Message::Present( + m, + )) + }) + } else { + Task::none() + } + } presenter::Action::NextSlide => { let slide_index = self.current_item.1; let item_index = self.current_item.0; @@ -982,8 +1005,6 @@ impl cosmic::Application for App { Task::batch(tasks) } else { // debug!("Slides are not longer"); - self.current_item = - (item_index + 1, 0); if self .service .get(item_index + 1) @@ -1000,6 +1021,8 @@ impl cosmic::Application for App { ) })); } + self.current_item = + (item_index + 1, 0); } Task::batch(tasks) } diff --git a/src/ui/presenter.rs b/src/ui/presenter.rs index fa00c26..f54531d 100644 --- a/src/ui/presenter.rs +++ b/src/ui/presenter.rs @@ -59,6 +59,7 @@ pub(crate) enum Action { Task(Task), NextSlide, PrevSlide, + ChangeSlide(usize, usize), None, } @@ -68,6 +69,7 @@ pub(crate) enum Message { PrevSlide, SlideChange(Slide), ActivateSlide(usize, usize), + ClickSlide(usize, usize), EndVideo, StartVideo, StartAudio, @@ -215,6 +217,9 @@ impl Presenter { // self.current_slide_index - 1, // )); } + Message::ClickSlide(item_index, slide_index) => { + return Action::ChangeSlide(item_index, slide_index); + } Message::ActivateSlide(item_index, slide_index) => { debug!(slide_index, item_index); if let Some(slide) = self @@ -547,7 +552,7 @@ impl Presenter { ))) }) .on_exit(Message::HoveredSlide(None)) - .on_press(Message::ActivateSlide( + .on_press(Message::ClickSlide( item_index, slide_index, ));