diff --git a/musicdb-client/src/gui_playback.rs b/musicdb-client/src/gui_playback.rs index f396466..bfb290c 100755 --- a/musicdb-client/src/gui_playback.rs +++ b/musicdb-client/src/gui_playback.rs @@ -153,17 +153,17 @@ impl GuiElemTrait for CurrentSong { // redraw if self.config.redraw { self.config.redraw = false; - if let Some(song) = new_song { - let status_bar_text = info - .gui_config - .status_bar_text - .gen(&info.database, info.database.get_song(&song)); - self.children[0] - .try_as_mut::() - .unwrap() - .content = status_bar_text; + self.children[0] + .try_as_mut::() + .unwrap() + .content = if let Some(song) = new_song { self.text_updated = Some(Instant::now()); - } + info.gui_config + .status_bar_text + .gen(&info.database, info.database.get_song(&song)) + } else { + vec![] + }; } } if let Some(updated) = &self.text_updated { diff --git a/musicdb-client/src/gui_screen.rs b/musicdb-client/src/gui_screen.rs index 2c297f2..0c273f3 100755 --- a/musicdb-client/src/gui_screen.rs +++ b/musicdb-client/src/gui_screen.rs @@ -1,7 +1,13 @@ use std::time::Instant; -use musicdb_lib::data::queue::QueueContent; -use speedy2d::{color::Color, dimen::Vec2, shape::Rectangle, Graphics2D}; +use musicdb_lib::{data::queue::QueueContent, server::Command}; +use speedy2d::{ + color::Color, + dimen::Vec2, + shape::Rectangle, + window::{KeyScancode, VirtualKeyCode}, + Graphics2D, +}; use crate::{ gui::{morph_rect, DrawInfo, GuiAction, GuiElem, GuiElemCfg, GuiElemTrait}, @@ -83,7 +89,7 @@ impl GuiScreen { scroll_sensitivity_pages: f64, ) -> Self { Self { - config: config.w_keyboard_watch().w_mouse(), + config: config.w_keyboard_watch().w_mouse().w_keyboard_focus(), children: vec![ GuiElem::new(notif_overlay), GuiElem::new(StatusBar::new( @@ -320,6 +326,25 @@ impl GuiElemTrait for GuiScreen { .get_timeout_val(); } } + fn key_focus( + &mut self, + modifiers: speedy2d::window::ModifiersState, + down: bool, + key: Option, + scan: speedy2d::window::KeyScancode, + ) -> Vec { + if down && matches!(key, Some(VirtualKeyCode::Space)) { + vec![GuiAction::Build(Box::new(|db| { + vec![GuiAction::SendToServer(if db.playing { + Command::Pause + } else { + Command::Resume + })] + }))] + } else { + vec![] + } + } } #[derive(Clone)]