From c04a975edfd4b2a355380a3cd7463edee7fceeea Mon Sep 17 00:00:00 2001 From: Julian Ospald Date: Mon, 10 Jul 2017 21:27:57 +0200 Subject: [PATCH] Update --- src/app_state.rs | 22 +++++++++++++++++++++- src/ui_popup_window.rs | 16 +++++++++++++--- src/ui_prefs_dialog.rs | 13 ++++--------- 3 files changed, 38 insertions(+), 13 deletions(-) diff --git a/src/app_state.rs b/src/app_state.rs index eb8baeb4a..1d5800f28 100644 --- a/src/app_state.rs +++ b/src/app_state.rs @@ -1,8 +1,9 @@ -use audio::Audio; +use audio::{Audio, AudioUser}; use errors::*; use gtk; use prefs::*; use std::cell::RefCell; +use support_audio::*; use ui_entry::Gui; #[cfg(feature = "notify")] @@ -72,4 +73,23 @@ impl AppS { debug!("Update PopupWindow!"); return self.gui.popup_window.update(&self.audio); } + + #[cfg(feature = "notify")] + pub fn update_notify(&self) -> Result<()> { + return self.notif.reload(&self.prefs.borrow()); + } + + #[cfg(not(feature = "notify"))] + pub fn update_notify(&self) -> Result<()> { + return Ok(()); + } + + pub fn update_audio(&self, user: AudioUser) -> Result<()> { + return audio_reload(&self.audio, &self.prefs.borrow(), user); + } + + pub fn update_config(&self) -> Result<()> { + let prefs = self.prefs.borrow_mut(); + return prefs.store_config(); + } } diff --git a/src/ui_popup_window.rs b/src/ui_popup_window.rs index 0aab8743a..64c52edb5 100644 --- a/src/ui_popup_window.rs +++ b/src/ui_popup_window.rs @@ -24,6 +24,7 @@ pub struct PopupWindow { pub mute_check: gtk::CheckButton, pub mixer_button: gtk::Button, pub toggle_signal: Cell, + pub changed_signal: Cell, } impl PopupWindow { @@ -36,6 +37,7 @@ impl PopupWindow { mute_check: builder.get_object("mute_check").unwrap(), mixer_button: builder.get_object("mixer_button").unwrap(), toggle_signal: Cell::new(0), + changed_signal: Cell::new(0), }; } @@ -148,9 +150,14 @@ pub fn init_popup_window(appstate: Rc) { .gui .popup_window .vol_scale_adj; - vol_scale_adj.connect_value_changed( + let changed_signal = vol_scale_adj.connect_value_changed( move |_| on_vol_scale_value_changed(&_appstate), ); + + appstate.gui + .popup_window + .changed_signal + .set(changed_signal); } /* popup_window.connect_event */ @@ -181,10 +188,13 @@ pub fn init_popup_window(appstate: Rc) { fn on_popup_window_show(appstate: &AppS) { + let popup_window = &appstate.gui.popup_window; appstate.gui.popup_window.set_vol_increment(&appstate.prefs.borrow()); + glib::signal_handler_block(&popup_window.vol_scale_adj, popup_window.changed_signal.get()); try_w!(appstate.gui.popup_window.update(&appstate.audio)); - appstate.gui - .popup_window + glib::signal_handler_unblock(&popup_window.vol_scale_adj, + popup_window.changed_signal.get()); + popup_window .vol_scale .grab_focus(); try_w!(grab_devices(&appstate.gui.popup_window.popup_window)); diff --git a/src/ui_prefs_dialog.rs b/src/ui_prefs_dialog.rs index 3b3fcfee5..6c757a96e 100644 --- a/src/ui_prefs_dialog.rs +++ b/src/ui_prefs_dialog.rs @@ -335,17 +335,12 @@ fn init_prefs_dialog(appstate: &Rc) { if response_id == ResponseType::Ok.into() || response_id == ResponseType::Apply.into() { - // TODO: update popup, tray_icon, hotkeys, notification and audio - #[cfg(feature = "notify")] - try_w!(apps.notif.reload(&apps.prefs.borrow())); + // TODO: update hotkeys + try_w!(apps.update_notify()); try_w!(apps.update_tray_icon()); try_w!(apps.update_popup_window()); - { - let prefs = apps.prefs.borrow(); - try_w!(audio_reload(&apps.audio, &prefs, AudioUser::PrefsWindow)); - } - let prefs = apps.prefs.borrow_mut(); - try_w!(prefs.store_config()); + try_w!(apps.update_audio(AudioUser::PrefsWindow)); + try_w!(apps.update_config()); } });