refactor: attempt to quit display background service when sender is closed
This commit is contained in:
parent
ba0fec15e0
commit
bd35742a8f
1 changed files with 16 additions and 4 deletions
|
|
@ -236,6 +236,8 @@ impl page::Page<crate::pages::Message> for Page {
|
||||||
&mut self,
|
&mut self,
|
||||||
sender: tokio::sync::mpsc::Sender<crate::pages::Message>,
|
sender: tokio::sync::mpsc::Sender<crate::pages::Message>,
|
||||||
) -> Task<crate::pages::Message> {
|
) -> Task<crate::pages::Message> {
|
||||||
|
use std::time::Duration;
|
||||||
|
|
||||||
if let Some(task) = self.background_service.take() {
|
if let Some(task) = self.background_service.take() {
|
||||||
task.abort();
|
task.abort();
|
||||||
}
|
}
|
||||||
|
|
@ -253,11 +255,21 @@ impl page::Page<crate::pages::Message> for Page {
|
||||||
};
|
};
|
||||||
|
|
||||||
while context.dispatch(&mut event_queue).await.is_ok() {
|
while context.dispatch(&mut event_queue).await.is_ok() {
|
||||||
while let Ok(message) = rx.try_recv() {
|
if sender.is_closed() {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
'outer: while let Ok(message) = rx.try_recv() {
|
||||||
if let cosmic_randr::Message::ManagerDone = message {
|
if let cosmic_randr::Message::ManagerDone = message {
|
||||||
let _ = sender
|
if matches!(
|
||||||
.send(pages::Message::Displays(Message::Refresh))
|
tokio::time::timeout(
|
||||||
.await;
|
Duration::from_secs(1),
|
||||||
|
sender.send(pages::Message::Displays(Message::Refresh))
|
||||||
|
)
|
||||||
|
.await,
|
||||||
|
Err(_) | Ok(Err(_))
|
||||||
|
) {
|
||||||
|
break 'outer;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue