From 9de9a6abaa35389eaa9fa0c6278336e444f45317 Mon Sep 17 00:00:00 2001 From: "Ospald, Julian" Date: Tue, 4 Jul 2017 16:54:16 +0200 Subject: [PATCH] Lalala --- Cargo.toml | 1 + src/alsa_pn.rs | 82 ++++++------ src/app_state.rs | 57 +++++---- src/audio.rs | 207 +++++++++++++++--------------- src/main.rs | 2 +- src/ui_entry.rs | 11 +- src/ui_popup_menu.rs | 28 ++--- src/ui_popup_window.rs | 115 ++++++++--------- src/ui_prefs_dialog.rs | 54 +++++--- src/ui_tray_icon.rs | 277 ++++++++++++++++++++++++++++++----------- 10 files changed, 488 insertions(+), 346 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index d2f5e167e..240203028 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,6 +9,7 @@ alsa-sys = "^0.1.1" libc = "^0.2.23" gdk-sys = { git = "https://github.com/gtk-rs/sys" } gdk-pixbuf = { git = "https://github.com/gtk-rs/gdk-pixbuf.git" } +gdk-pixbuf-sys = { git = "https://github.com/gtk-rs/sys" } gtk-sys = { git = "https://github.com/gtk-rs/sys" } glib = { git = "https://github.com/gtk-rs/glib.git" } glib-sys = { git = "https://github.com/gtk-rs/sys" } diff --git a/src/alsa_pn.rs b/src/alsa_pn.rs index 46139767e..6c2965772 100644 --- a/src/alsa_pn.rs +++ b/src/alsa_pn.rs @@ -38,10 +38,11 @@ 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)?, @@ -52,26 +53,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); @@ -84,9 +85,7 @@ 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); } @@ -115,7 +114,9 @@ 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(()); } @@ -142,9 +143,10 @@ 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,10 +203,11 @@ 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) }; @@ -223,14 +226,15 @@ extern "C" fn watch_cb(chan: *mut glib_sys::GIOChannel, 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 => { @@ -324,9 +328,7 @@ pub fn get_selem_names(mixer: &Mixer) -> Vec { pub fn get_selem_by_name(mixer: &Mixer, name: String) -> Result { for selem in get_selems(mixer) { - let n = selem.get_id() - .get_name() - .map(|y| String::from(y))?; + let n = selem.get_id().get_name().map(|y| String::from(y))?; if n == name { return Ok(selem); diff --git a/src/app_state.rs b/src/app_state.rs index 83c7dcc7f..0f4981e5d 100644 --- a/src/app_state.rs +++ b/src/app_state.rs @@ -14,15 +14,17 @@ 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!( + "../data/ui/popup-window.glade" + )); + let builder_popup_menu = gtk::Builder::new_from_string( + include_str!("../data/ui/popup-menu.glade"), + ); return AppS { - gui: Gui::new(builder_popup_window, builder_popup_menu), - audio: Audio::new(None, Some(String::from("Master"))) - .unwrap(), - }; + gui: Gui::new(builder_popup_window, builder_popup_menu), + audio: Audio::new(None, Some(String::from("Master"))).unwrap(), + }; } } @@ -36,28 +38,33 @@ pub struct Gui { impl Gui { - pub fn new(builder_popup_window: gtk::Builder, - builder_popup_menu: gtk::Builder) - -> Gui { + pub fn new( + builder_popup_window: gtk::Builder, + builder_popup_menu: gtk::Builder, + ) -> Gui { return Gui { - status_icon: gtk::StatusIcon::new(), - popup_window: PopupWindow::new(builder_popup_window), - popup_menu: PopupMenu::new(builder_popup_menu), - }; + status_icon: gtk::StatusIcon::new(), + popup_window: PopupWindow::new(builder_popup_window), + popup_menu: PopupMenu::new(builder_popup_menu), + }; } } -create_builder_item!(PopupWindow, - popup_window: gtk::Window, - vol_scale_adj: gtk::Adjustment, - vol_scale: gtk::Scale, - mute_check: gtk::CheckButton); +create_builder_item!( + PopupWindow, + popup_window: gtk::Window, + vol_scale_adj: gtk::Adjustment, + vol_scale: gtk::Scale, + mute_check: gtk::CheckButton +); -create_builder_item!(PopupMenu, - menu_window: gtk::Window, - menubar: gtk::MenuBar, - menu: gtk::Menu, - about_item: gtk::MenuItem, - prefs_item: gtk::MenuItem); +create_builder_item!( + PopupMenu, + menu_window: gtk::Window, + menubar: gtk::MenuBar, + menu: gtk::Menu, + about_item: gtk::MenuItem, + prefs_item: gtk::MenuItem +); diff --git a/src/audio.rs b/src/audio.rs index 8eae24038..a960d0fbe 100644 --- a/src/audio.rs +++ b/src/audio.rs @@ -72,9 +72,10 @@ pub struct Audio { impl Audio { - pub fn new(card_name: Option, - elem_name: Option) - -> Result