Compare commits

...

2 commits

Author SHA1 Message Date
56d4057d87 some fixes 2024-11-01 13:02:27 +01:00
62c71dbd26 holy fruck there's actually a way
im sorry i ever doubted u gtkrs
2024-11-01 12:57:20 +01:00

View file

@ -2,57 +2,31 @@ mod player;
pub use player::Player; pub use player::Player;
use adw::prelude::*; use adw::prelude::*;
use async_channel::Sender;
use gtk::glib; use gtk::glib;
pub struct Mpris { pub struct Mpris {
// needs to be Send, so can't store handle to the window... window: glib::SendWeakRef<crate::ui::Window>,
raise_send: Sender<()>,
quit_send: Sender<()>,
} }
impl Mpris { impl Mpris {
pub fn new(window: &crate::ui::Window) -> Self { pub fn new(window: &crate::ui::Window) -> Self {
let (raise_send, raise_recv) = async_channel::bounded(1);
let (quit_send, quit_recv) = async_channel::bounded(1);
glib::spawn_future_local(glib::clone!(
#[weak]
window,
async move {
while let Ok(()) = raise_recv.recv().await {
window.present();
}
}
));
glib::spawn_future_local(glib::clone!(
#[weak]
window,
async move {
while let Ok(()) = quit_recv.recv().await {
window.close();
}
}
));
Self { Self {
raise_send: raise_send, window: window.downgrade().into(),
quit_send: quit_send,
} }
} }
} }
#[zbus::interface(name = "org.mpris.MediaPlayer2")] #[zbus::interface(name = "org.mpris.MediaPlayer2")]
impl Mpris { impl Mpris {
async fn raise(&self) { fn raise(&self) {
// FIXME: don't unwrap self.window.upgrade().expect("main window was finalized").present();
self.raise_send.send(()).await.unwrap()
} }
async fn quit(&self) { fn quit(&self) {
// FIXME: don't unwrap match self.window.upgrade() {
self.quit_send.send(()).await.unwrap() None => {}, // guess there's nothing to do
Some(window) => window.close(),
}
} }
#[zbus(property)] #[zbus(property)]
@ -67,7 +41,8 @@ impl Mpris {
#[zbus(property)] #[zbus(property)]
// TODO: report that if the argument is just _ the attribute panics // TODO: report that if the argument is just _ the attribute panics
async fn set_fullscreen(&self, _fullscreen: bool) -> zbus::Result<()> { // TODO: why can't this return zbus::fdo::Result??
fn set_fullscreen(&self, _fullscreen: bool) -> zbus::Result<()> {
Err(zbus::Error::Unsupported) Err(zbus::Error::Unsupported)
} }