aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLars Uebernickel <lars.uebernickel@canonical.com>2013-10-01 14:11:04 +0200
committerLars Uebernickel <lars.uebernickel@canonical.com>2013-10-01 14:11:04 +0200
commitd31be181a2c69c167bb61dbb9f1007f346920ac8 (patch)
tree09f9e431b65cce5cae145151b7c2dc6d38e7f0a6 /src
parent4600123677c7897e76eb8b666c2b3211ebcd19d4 (diff)
downloadayatana-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.txt1
-rw-r--r--src/main.vala2
-rw-r--r--src/service.vala30
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) {