aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLars Uebernickel <lars.uebernickel@canonical.com>2013-10-30 16:49:25 +0000
committerTarmac <Unknown>2013-10-30 16:49:25 +0000
commit76d71b5213c0fffb212af68bf1cbe39924a06cd1 (patch)
tree29e74c3aee915cc5c5956b305026abc3ee65b0c3 /src
parentb9660509ac4306924e8d9cccb1728a8a459475a2 (diff)
parent9fb9f5077869c6e30d305ec7cb21d0129567e10e (diff)
downloadayatana-indicator-sound-76d71b5213c0fffb212af68bf1cbe39924a06cd1.tar.gz
ayatana-indicator-sound-76d71b5213c0fffb212af68bf1cbe39924a06cd1.tar.bz2
ayatana-indicator-sound-76d71b5213c0fffb212af68bf1cbe39924a06cd1.zip
Call Raise() when a media player is already running
Before, it was repeatedly launching the player. This patch also make the menu item insensitive if the player can't be raised. Fixes: https://bugs.launchpad.net/bugs/710824. Approved by Charles Kerr, PS Jenkins bot.
Diffstat (limited to 'src')
-rw-r--r--src/CMakeLists.txt2
-rw-r--r--src/media-player-list.vala2
-rw-r--r--src/media-player.vala33
-rw-r--r--src/service.vala6
4 files changed, 31 insertions, 12 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 572befd..c11ec51 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -32,6 +32,7 @@ vala_add(indicator-sound-service
volume-control
media-player
media-player-list
+ mpris2-interfaces
)
vala_add(indicator-sound-service
main.vala
@@ -62,6 +63,7 @@ vala_add(indicator-sound-service
sound-menu.vala
DEPENDS
media-player
+ mpris2-interfaces
)
vala_finish(indicator-sound-service
diff --git a/src/media-player-list.vala b/src/media-player-list.vala
index 62badc2..75c7bb4 100644
--- a/src/media-player-list.vala
+++ b/src/media-player-list.vala
@@ -118,7 +118,7 @@ public class MediaPlayerList {
var player = this.insert (mpris2_root.DesktopEntry);
if (player != null)
- player.attach (name);
+ player.attach (mpris2_root, name);
}
catch (Error e) {
warning ("unable to create mpris proxy for '%s': %s", name, e.message);
diff --git a/src/media-player.vala b/src/media-player.vala
index 7326708..bdcea35 100644
--- a/src/media-player.vala
+++ b/src/media-player.vala
@@ -84,6 +84,12 @@ public class MediaPlayer: Object {
get; set;
}
+ public bool can_raise {
+ get {
+ return this.root != null ? this.root.CanRaise : true;
+ }
+ }
+
public signal void playlists_changed ();
/**
@@ -94,9 +100,12 @@ public class MediaPlayer: Object {
*
* This method does not block. If it is successful, "is-running" will be set to %TRUE.
*/
- public void attach (string dbus_name) {
+ public void attach (MprisRoot root, string dbus_name) {
return_if_fail (this._dbus_name == null && this.proxy == null);
+ this.root = root;
+ this.notify_property ("can-raise");
+
this._dbus_name = dbus_name;
Bus.get_proxy.begin<MprisPlayer> (BusType.SESSION, dbus_name, "/org/mpris/MediaPlayer2",
DBusProxyFlags.GET_INVALIDATED_PROPERTIES, null, got_proxy);
@@ -110,29 +119,34 @@ public class MediaPlayer: Object {
* See also: attach()
*/
public void detach () {
+ this.root = null;
this.proxy = null;
this._dbus_name = null;
this.notify_property ("is-running");
+ this.notify_property ("can-raise");
this.state = "Paused";
this.current_track = null;
}
/**
- * Launch the associated media player.
+ * Activate the associated media player.
*
* Note: this will _not_ call attach(), because it doesn't know on which dbus-name the player will appear.
* Use attach() to attach this object to a running instance of the player.
*/
- public void launch () {
+ public void activate () {
try {
- this.appinfo.launch (null, null);
+ if (this.proxy == null) {
+ this.appinfo.launch (null, null);
+ this.state = "Launching";
+ }
+ else if (this.root != null && this.root.CanRaise) {
+ this.root.Raise ();
+ }
}
catch (Error e) {
- warning ("unable to launch %s: %s", appinfo.get_name (), e.message);
+ warning ("unable to activate %s: %s", appinfo.get_name (), e.message);
}
-
- if (this.proxy == null)
- this.state = "Launching";
}
/**
@@ -144,7 +158,7 @@ public class MediaPlayer: Object {
}
else if (this.state != "Launching") {
this.play_when_attached = true;
- this.launch ();
+ this.activate ();
}
}
@@ -188,6 +202,7 @@ public class MediaPlayer: Object {
MprisPlaylists ?playlists_proxy;
string _dbus_name;
bool play_when_attached = false;
+ MprisRoot root;
PlaylistDetails[] playlists = null;
void got_proxy (Object? obj, AsyncResult res) {
diff --git a/src/service.vala b/src/service.vala
index 7dc6824..14d4893 100644
--- a/src/service.vala
+++ b/src/service.vala
@@ -266,8 +266,10 @@ public class IndicatorSound.Service {
bool update_player_actions () {
foreach (var player in this.players) {
SimpleAction? action = this.actions.lookup_action (player.id) as SimpleAction;
- if (action != null)
+ if (action != null) {
action.set_state (this.action_state_for_player (player));
+ action.set_enabled (player.can_raise);
+ }
}
this.player_action_update_id = 0;
@@ -290,7 +292,7 @@ public class IndicatorSound.Service {
this.menus.@foreach ( (profile, menu) => menu.add_player (player));
SimpleAction action = new SimpleAction.stateful (player.id, null, this.action_state_for_player (player));
- action.activate.connect ( () => { player.launch (); });
+ action.activate.connect ( () => { player.activate (); });
this.actions.add_action (action);
var play_action = new SimpleAction.stateful ("play." + player.id, null, player.state);