diff options
author | Lars Uebernickel <lars.uebernickel@canonical.com> | 2013-10-01 14:11:04 +0200 |
---|---|---|
committer | Lars Uebernickel <lars.uebernickel@canonical.com> | 2013-10-01 14:11:04 +0200 |
commit | d31be181a2c69c167bb61dbb9f1007f346920ac8 (patch) | |
tree | 09f9e431b65cce5cae145151b7c2dc6d38e7f0a6 /src | |
parent | 4600123677c7897e76eb8b666c2b3211ebcd19d4 (diff) | |
download | ayatana-indicator-sound-d31be181a2c69c167bb61dbb9f1007f346920ac8.tar.gz ayatana-indicator-sound-d31be181a2c69c167bb61dbb9f1007f346920ac8.tar.bz2 ayatana-indicator-sound-d31be181a2c69c167bb61dbb9f1007f346920ac8.zip |
Show synchronous notification when changing the volume by scrolling over the indicator
Diffstat (limited to 'src')
-rw-r--r-- | src/CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/main.vala | 2 | ||||
-rw-r--r-- | src/service.vala | 30 |
3 files changed, 33 insertions, 0 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index a61fb72..572befd 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -14,6 +14,7 @@ vala_init(indicator-sound-service libxml-2.0 libpulse libpulse-mainloop-glib + libnotify OPTIONS --ccode --thread diff --git a/src/main.vala b/src/main.vala index 97f311f..4da9e58 100644 --- a/src/main.vala +++ b/src/main.vala @@ -7,6 +7,8 @@ static int main (string[] args) { Intl.setlocale (LocaleCategory.ALL, ""); Intl.bindtextdomain (Config.GETTEXT_PACKAGE, Config.GNOMELOCALEDIR); + Notify.init ("indicator-sound"); + var service = new IndicatorSound.Service (); return service.run (); } diff --git a/src/service.vala b/src/service.vala index 9041097..0d028ac 100644 --- a/src/service.vala +++ b/src/service.vala @@ -45,6 +45,14 @@ public class IndicatorSound.Service { this.settings.changed["interested-media-players"].connect ( () => { this.players.sync (settings.get_strv ("interested-media-players")); }); + + if (settings.get_boolean ("show-notify-osd-on-scroll")) { + unowned List<string> caps = Notify.get_server_caps (); + if (caps.find_custom ("x-canonical-private-synchronous", strcmp) != null) { + this.notification = new Notify.Notification ("indicator-sound", "", ""); + this.notification.set_hint_string ("x-canonical-private-synchronous", "indicator-sound"); + } + } } public int run () { @@ -76,6 +84,7 @@ public class IndicatorSound.Service { VolumeControl volume_control; MediaPlayerList players; uint player_action_update_id; + Notify.Notification notification; void activate_scroll_action (SimpleAction action, Variant? param) { const double volume_step_percentage = 0.06; @@ -83,6 +92,27 @@ public class IndicatorSound.Service { double v = this.volume_control.get_volume () + volume_step_percentage * delta; this.volume_control.set_volume (v.clamp (0.0, 1.0)); + + if (this.notification != null) { + string icon; + if (v <= 0.0) + icon = "notification-audio-volume-off"; + else if (v <= 0.3) + icon = "notification-audio-volume-low"; + else if (v <= 0.7) + icon = "notification-audio-volume-medium"; + else + icon = "notification-audio-volume-high"; + + this.notification.update ("indicator-sound", "", icon); + this.notification.set_hint_int32 ("value", ((int32) (100 * v)).clamp (-1, 101)); + try { + this.notification.show (); + } + catch (Error e) { + warning ("unable to show notification: %s", e.message); + } + } } void activate_desktop_settings (SimpleAction action, Variant? param) { |