fix: playback icons on panel should use applet icon button

This commit is contained in:
Ashley Wulber 2024-03-07 20:47:40 -05:00 committed by Jeremy Soller
parent cd296207a7
commit 0505524eae

View file

@ -58,6 +58,11 @@ pub fn main() -> cosmic::iced::Result {
static SHOW_MEDIA_CONTROLS: Lazy<id::Toggler> = Lazy::new(id::Toggler::unique); static SHOW_MEDIA_CONTROLS: Lazy<id::Toggler> = Lazy::new(id::Toggler::unique);
const GO_BACK: &str = "media-skip-backward-symbolic";
const GO_NEXT: &str = "media-skip-forward-symbolic";
const PAUSE: &str = "media-playback-pause-symbolic";
const PLAY: &str = "media-playback-start-symbolic";
#[derive(Default)] #[derive(Default)]
struct Audio { struct Audio {
core: cosmic::app::Core, core: cosmic::app::Core,
@ -159,15 +164,34 @@ impl Audio {
fn playback_buttons(&self) -> Option<Element<Message>> { fn playback_buttons(&self) -> Option<Element<Message>> {
if self.player_status.is_some() && self.config.show_media_controls_in_top_panel { if self.player_status.is_some() && self.config.show_media_controls_in_top_panel {
let mut elements = Vec::with_capacity(3); let mut elements = Vec::with_capacity(3);
let icon_size = self.core.applet.suggested_size().0; if self
if let Some(go_prev) = self.go_previous(icon_size) { .player_status
elements.push(go_prev); .as_ref()
.map(|s| s.can_go_previous)
.unwrap_or_default()
{
elements.push(self.core.applet.icon_button(GO_BACK).into())
} }
if let Some(play_pause) = self.play_pause(icon_size) { if let Some(play) = self.is_play() {
elements.push(play_pause); elements.push(
self.core
.applet
.icon_button(if play { PLAY } else { PAUSE })
.on_press(if play {
Message::MprisRequest(MprisRequest::Play)
} else {
Message::MprisRequest(MprisRequest::Pause)
})
.into(),
);
} }
if let Some(go_next) = self.go_next(icon_size) { if self
elements.push(go_next); .player_status
.as_ref()
.map(|s| s.can_go_next)
.unwrap_or_default()
{
elements.push(self.core.applet.icon_button(GO_NEXT).into())
} }
Some(match self.core.applet.anchor { Some(match self.core.applet.anchor {
@ -187,15 +211,11 @@ impl Audio {
self.player_status.as_ref().and_then(|s| { self.player_status.as_ref().and_then(|s| {
if s.can_go_previous { if s.can_go_previous {
Some( Some(
button::icon( button::icon(icon::from_name(GO_BACK).size(icon_size).symbolic(true))
icon::from_name("media-skip-backward-symbolic") .extra_small()
.size(icon_size) .style(cosmic::theme::Button::AppletIcon)
.symbolic(true), .on_press(Message::MprisRequest(MprisRequest::Previous))
) .into(),
.extra_small()
.style(cosmic::theme::Button::AppletIcon)
.on_press(Message::MprisRequest(MprisRequest::Previous))
.into(),
) )
} else { } else {
None None
@ -207,15 +227,11 @@ impl Audio {
self.player_status.as_ref().and_then(|s| { self.player_status.as_ref().and_then(|s| {
if s.can_go_next { if s.can_go_next {
Some( Some(
button::icon( button::icon(icon::from_name(GO_NEXT).size(icon_size).symbolic(true))
icon::from_name("media-skip-forward-symbolic") .extra_small()
.size(icon_size) .style(cosmic::theme::Button::AppletIcon)
.symbolic(true), .on_press(Message::MprisRequest(MprisRequest::Next))
) .into(),
.extra_small()
.style(cosmic::theme::Button::AppletIcon)
.on_press(Message::MprisRequest(MprisRequest::Next))
.into(),
) )
} else { } else {
None None
@ -223,21 +239,11 @@ impl Audio {
}) })
} }
fn play_pause(&self, icon_size: u16) -> Option<Element<Message>> { fn is_play(&self) -> Option<bool> {
self.player_status.as_ref().and_then(|s| match s.status { self.player_status.as_ref().and_then(|s| match s.status {
PlaybackStatus::Playing => { PlaybackStatus::Playing => {
if s.can_pause { if s.can_pause {
Some( Some(false)
button::icon(
icon::from_name("media-playback-pause-symbolic")
.size(icon_size)
.symbolic(true),
)
.style(cosmic::theme::Button::AppletIcon)
.on_press(Message::MprisRequest(MprisRequest::Pause))
.extra_small()
.into(),
)
} else { } else {
None None
} }
@ -245,17 +251,7 @@ impl Audio {
PlaybackStatus::Paused | PlaybackStatus::Stopped => { PlaybackStatus::Paused | PlaybackStatus::Stopped => {
if s.can_play { if s.can_play {
Some( Some(true)
button::icon(
icon::from_name("media-playback-start-symbolic")
.size(32)
.symbolic(true),
)
.style(cosmic::theme::Button::AppletIcon)
.extra_small()
.on_press(Message::MprisRequest(MprisRequest::Play))
.into(),
)
} else { } else {
None None
} }
@ -731,8 +727,22 @@ impl cosmic::Application for Audio {
if let Some(go_prev) = self.go_previous(32) { if let Some(go_prev) = self.go_previous(32) {
elements.push(go_prev); elements.push(go_prev);
} }
if let Some(play_pause) = self.play_pause(32) { if let Some(play) = self.is_play() {
elements.push(play_pause); elements.push(
button::icon(
icon::from_name(if play { PLAY } else { PAUSE })
.size(32)
.symbolic(true),
)
.extra_small()
.style(cosmic::theme::Button::AppletIcon)
.on_press(if play {
Message::MprisRequest(MprisRequest::Play)
} else {
Message::MprisRequest(MprisRequest::Pause)
})
.into(),
);
} }
if let Some(go_next) = self.go_next(32) { if let Some(go_next) = self.go_next(32) {
elements.push(go_next); elements.push(go_next);