2017-06-29 12:55:07 +00:00
|
|
|
use app_state::*;
|
2017-06-30 23:56:32 +00:00
|
|
|
use gdk;
|
2017-07-03 07:21:51 +00:00
|
|
|
use gdk_pixbuf;
|
2017-06-30 23:56:32 +00:00
|
|
|
use gdk_sys;
|
|
|
|
use glib;
|
|
|
|
use glib_sys;
|
|
|
|
use std::mem;
|
2017-06-29 12:55:07 +00:00
|
|
|
use gtk::prelude::*;
|
2017-06-30 15:24:26 +00:00
|
|
|
use std::rc::Rc;
|
2017-06-30 23:56:32 +00:00
|
|
|
use std::cell::RefCell;
|
|
|
|
use libc;
|
|
|
|
use audio::AudioUser::*;
|
|
|
|
use errors::*;
|
2017-06-29 12:55:07 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
2017-07-03 07:21:51 +00:00
|
|
|
// struct VolMeter {
|
|
|
|
// pub red: u8,
|
|
|
|
// pub green: u8,
|
|
|
|
// pub blue: u8,
|
|
|
|
// pub x_offset_pct: i64,
|
|
|
|
// pub y_offset_pct: i64,
|
|
|
|
// /* dynamic */
|
|
|
|
// pub pixbuf: gdk_pixbuf::Pixbuf,
|
|
|
|
// pub width: i64,
|
|
|
|
// pub row: u8,
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
// impl VolMeter {
|
|
|
|
// pub fn new() -> VolMeter {
|
|
|
|
// let pixbux = Pixbuf::new();
|
|
|
|
// return VolMeter {
|
|
|
|
// red: 255,
|
|
|
|
// green: 255,
|
|
|
|
// blue: 255,
|
|
|
|
// x_offset_pct: 0,
|
|
|
|
// y_offset_pct: 0,
|
|
|
|
// pixbuf: ,
|
|
|
|
// width: ,
|
|
|
|
// row: ,
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
fn pixbuf_new_from_stock(icon_name: String, size: u32) {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-06-30 15:24:26 +00:00
|
|
|
pub fn init_tray_icon(appstate: Rc<AppS>) {
|
2017-07-01 14:55:35 +00:00
|
|
|
/* tray_icon.connect_activate */
|
2017-06-30 23:56:32 +00:00
|
|
|
{
|
|
|
|
let apps = appstate.clone();
|
|
|
|
let tray_icon = &appstate.gui.status_icon;
|
|
|
|
tray_icon.connect_activate(move |_| on_tray_icon_activate(&apps));
|
|
|
|
tray_icon.set_visible(true);
|
|
|
|
}
|
2017-07-01 14:55:35 +00:00
|
|
|
|
|
|
|
/* tray_icon.connect_scroll_event */
|
2017-06-30 23:56:32 +00:00
|
|
|
{
|
2017-07-01 14:55:35 +00:00
|
|
|
let apps = appstate.clone();
|
2017-06-30 23:56:32 +00:00
|
|
|
let tray_icon = &appstate.clone().gui.status_icon;
|
|
|
|
tray_icon.connect_scroll_event(move |_, e| {
|
2017-07-01 14:55:35 +00:00
|
|
|
on_tray_icon_scroll_event(&apps, &e)
|
|
|
|
});
|
2017-06-30 23:56:32 +00:00
|
|
|
}
|
2017-06-29 12:55:07 +00:00
|
|
|
|
2017-07-01 14:55:35 +00:00
|
|
|
/* tray_icon.connect_popup_menu */
|
|
|
|
{
|
|
|
|
let apps = appstate.clone();
|
|
|
|
let tray_icon = &appstate.clone().gui.status_icon;
|
|
|
|
tray_icon.connect_popup_menu(move |_, _, _| {
|
|
|
|
on_tray_icon_popup_menu(&apps)
|
|
|
|
});
|
|
|
|
}
|
2017-06-30 15:24:26 +00:00
|
|
|
}
|
2017-06-29 12:55:07 +00:00
|
|
|
|
|
|
|
|
2017-06-30 15:24:26 +00:00
|
|
|
fn on_tray_icon_activate(appstate: &AppS) {
|
2017-07-01 14:55:35 +00:00
|
|
|
let popup_window = &appstate.gui.popup_window.popup_window;
|
2017-06-30 15:24:26 +00:00
|
|
|
|
|
|
|
if popup_window.get_visible() {
|
|
|
|
popup_window.hide();
|
|
|
|
} else {
|
|
|
|
popup_window.show_now();
|
|
|
|
}
|
2017-06-29 12:55:07 +00:00
|
|
|
}
|
2017-06-30 23:56:32 +00:00
|
|
|
|
|
|
|
|
2017-07-01 14:55:35 +00:00
|
|
|
fn on_tray_icon_popup_menu(appstate: &AppS) {
|
|
|
|
let popup_window = &appstate.gui.popup_window.popup_window;
|
|
|
|
let popup_menu = &appstate.gui.popup_menu.menu;
|
|
|
|
|
|
|
|
popup_window.hide();
|
|
|
|
popup_menu.popup_at_pointer(None);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2017-06-30 23:56:32 +00:00
|
|
|
fn on_tray_icon_scroll_event(appstate: &AppS,
|
|
|
|
event: &gdk::EventScroll)
|
|
|
|
-> bool {
|
|
|
|
|
2017-07-01 22:03:21 +00:00
|
|
|
let audio = &appstate.audio;
|
|
|
|
|
2017-07-01 14:55:35 +00:00
|
|
|
let scroll_dir: gdk::ScrollDirection = event.get_direction();
|
2017-06-30 23:56:32 +00:00
|
|
|
match scroll_dir {
|
2017-07-01 14:55:35 +00:00
|
|
|
gdk::ScrollDirection::Up => {
|
2017-07-01 22:03:21 +00:00
|
|
|
try_wr!(appstate.audio.increase_vol(AudioUserTrayIcon), false);
|
2017-06-30 23:56:32 +00:00
|
|
|
}
|
2017-07-01 14:55:35 +00:00
|
|
|
gdk::ScrollDirection::Down => {
|
2017-07-01 22:03:21 +00:00
|
|
|
try_wr!(appstate.audio.decrease_vol(AudioUserTrayIcon), false);
|
2017-06-30 23:56:32 +00:00
|
|
|
}
|
|
|
|
_ => (),
|
|
|
|
}
|
|
|
|
|
|
|
|
return false;
|
|
|
|
}
|