Selecting slide in preview keeps the internal state correct
Some checks failed
/ test (push) Has been cancelled

This commit is contained in:
Chris Cochrun 2025-12-08 15:27:51 -06:00
parent 1cd34f5019
commit 2b40a7abcc
2 changed files with 31 additions and 3 deletions

View file

@ -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)
}

View file

@ -59,6 +59,7 @@ pub(crate) enum Action {
Task(Task<Message>),
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,
));