From a5bfb1e27ddd1aaa56476762ad5847edffc15b63 Mon Sep 17 00:00:00 2001 From: Julian Ospald Date: Fri, 7 Jul 2017 22:10:45 +0200 Subject: [PATCH] Oops --- src/alsa_card.rs | 86 ++++++------ src/app_state.rs | 29 ++-- src/audio.rs | 217 +++++++++++++++-------------- src/prefs.rs | 65 +++++---- src/support_alsa.rs | 4 +- src/support_cmd.rs | 26 ++++ src/support_ui.rs | 25 ++-- src/ui_entry.rs | 21 ++- src/ui_popup_menu.rs | 73 ++++++---- src/ui_popup_window.rs | 130 ++++++++++-------- src/ui_prefs_dialog.rs | 302 +++++++++++++++++------------------------ src/ui_tray_icon.rs | 144 ++++++++------------ 12 files changed, 559 insertions(+), 563 deletions(-) create mode 100644 src/support_cmd.rs diff --git a/src/alsa_card.rs b/src/alsa_card.rs index 612331f3c..65e6113c4 100644 --- a/src/alsa_card.rs +++ b/src/alsa_card.rs @@ -36,14 +36,19 @@ pub struct AlsaCard { impl AlsaCard { - pub fn new( - card_name: Option, - elem_name: Option, - cb: Rc, - ) -> Result> { + pub fn new(card_name: Option, + elem_name: Option, + cb: Rc) + -> Result> { let card = { match card_name { - Some(name) => get_alsa_card_by_name(name)?, + Some(name) => { + if name == "(default)" { + get_default_alsa_card() + } else { + get_alsa_card_by_name(name)? + } + }, None => get_default_alsa_card(), } }; @@ -51,26 +56,26 @@ impl AlsaCard { let vec_pollfd = PollDescriptors::get(&mixer)?; - let selem_id = get_selem_by_name( - &mixer, - elem_name.unwrap_or(String::from("Master")), - ).unwrap() - .get_id(); + let selem_id = + get_selem_by_name(&mixer, + elem_name.unwrap_or(String::from("Master"))) + .unwrap() + .get_id(); let acard = Box::new(AlsaCard { - _cannot_construct: (), - card: card, - mixer: mixer, - selem_id: selem_id, - watch_ids: Cell::new(vec![]), - cb: cb, - }); + _cannot_construct: (), + card: card, + mixer: mixer, + selem_id: selem_id, + watch_ids: Cell::new(vec![]), + cb: cb, + }); /* TODO: callback is registered here, which must be unregistered * when the card is destroyed!! * poll descriptors must be unwatched too */ - let watch_ids = - AlsaCard::watch_poll_descriptors(vec_pollfd, acard.as_ref()); + let watch_ids = AlsaCard::watch_poll_descriptors(vec_pollfd, + acard.as_ref()); acard.watch_ids.set(watch_ids); return Ok(acard); @@ -83,7 +88,9 @@ impl AlsaCard { pub fn chan_name(&self) -> Result { - let n = self.selem_id.get_name().map(|y| String::from(y))?; + let n = self.selem_id + .get_name() + .map(|y| String::from(y))?; return Ok(n); } @@ -112,9 +119,7 @@ impl AlsaCard { } let range = selem.get_playback_volume_range(); - selem.set_playback_volume_all( - percent_to_vol(new_vol, range), - )?; + selem.set_playback_volume_all(percent_to_vol(new_vol, range))?; return Ok(()); } @@ -141,10 +146,9 @@ impl AlsaCard { } - fn watch_poll_descriptors( - polls: Vec, - acard: &AlsaCard, - ) -> Vec { + fn watch_poll_descriptors(polls: Vec, + acard: &AlsaCard) + -> Vec { let mut watch_ids: Vec = vec![]; let acard_ptr = unsafe { mem::transmute::<&AlsaCard, glib_sys::gpointer>(acard) }; @@ -201,11 +205,10 @@ impl Drop for AlsaCard { } -extern "C" fn watch_cb( - chan: *mut glib_sys::GIOChannel, - cond: glib_sys::GIOCondition, - data: glib_sys::gpointer, -) -> glib_sys::gboolean { +extern "C" fn watch_cb(chan: *mut glib_sys::GIOChannel, + cond: glib_sys::GIOCondition, + data: glib_sys::gpointer) + -> glib_sys::gboolean { let acard = unsafe { mem::transmute::(data) }; @@ -224,15 +227,14 @@ extern "C" fn watch_cb( let mut buf: Vec = vec![0; 256]; while sread > 0 { - let stat: glib_sys::GIOStatus = unsafe { - glib_sys::g_io_channel_read_chars( - chan, - buf.as_mut_ptr() as *mut u8, - 256, - &mut sread as *mut size_t, - ptr::null_mut(), - ) - }; + let stat: glib_sys::GIOStatus = + unsafe { + glib_sys::g_io_channel_read_chars(chan, + buf.as_mut_ptr() as *mut u8, + 256, + &mut sread as *mut size_t, + ptr::null_mut()) + }; match stat { glib_sys::G_IO_STATUS_AGAIN => { diff --git a/src/app_state.rs b/src/app_state.rs index ff1d37ffd..74aac0a6f 100644 --- a/src/app_state.rs +++ b/src/app_state.rs @@ -23,22 +23,20 @@ pub struct AppS { impl AppS { pub fn new() -> AppS { - let builder_popup_window = gtk::Builder::new_from_string(include_str!( - "../data/ui/popup-window.glade" - )); - let builder_popup_menu = gtk::Builder::new_from_string( - include_str!("../data/ui/popup-menu.glade"), - ); + let builder_popup_window = + gtk::Builder::new_from_string(include_str!(concat!(env!("CARGO_MANIFEST_DIR"), "/data/ui/popup-window.glade"))); + let builder_popup_menu = gtk::Builder::new_from_string(include_str!(concat!(env!("CARGO_MANIFEST_DIR"), "/data/ui/popup-menu.glade"))); let prefs = RefCell::new(Prefs::new().unwrap()); let gui = Gui::new(builder_popup_window, builder_popup_menu, &prefs.borrow()); return AppS { - _cant_construct: (), - gui: gui, - audio: Audio::new(None, Some(String::from("Master"))).unwrap(), - prefs: prefs, - }; + _cant_construct: (), + gui: gui, + audio: Audio::new(None, Some(String::from("Master"))) + .unwrap(), + prefs: prefs, + }; } @@ -46,11 +44,9 @@ impl AppS { pub fn update_tray_icon(&self) -> Result<()> { debug!("Update tray icon!"); - return self.gui.tray_icon.update_all( - &self.prefs.borrow(), - &self.audio, - None, - ); + return self.gui.tray_icon.update_all(&self.prefs.borrow(), + &self.audio, + None); } pub fn update_popup_window(&self) -> Result<()> { @@ -61,5 +57,4 @@ impl AppS { pub fn show_preferences(&self) { // show_prefs_dialog(self); } - } diff --git a/src/audio.rs b/src/audio.rs index f5c3a8ad9..d2c992d4c 100644 --- a/src/audio.rs +++ b/src/audio.rs @@ -73,10 +73,9 @@ pub struct Audio { impl Audio { - pub fn new( - card_name: Option, - elem_name: Option, - ) -> Result