rendered paste bodyIndex: src/Core/Banshee.Base/GnomeMMKeys.cs
===================================================================
--- src/Core/Banshee.Base/GnomeMMKeys.cs (Revision 3480)
+++ src/Core/Banshee.Base/GnomeMMKeys.cs (Arbeitskopie)
@@ -37,17 +37,27 @@
public class GnomeMMKeys : IDisposable
{
private const string BusName = "org.gnome.SettingsDaemon";
- private const string ObjectPath = "/org/gnome/SettingsDaemon";
+ private const string oldObjectPath = "/org/gnome/SettingsDaemon";
+ private const string ObjectPath = "/org/gnome/SettingsDaemon/MediaKeys";
private delegate void MediaPlayerKeyPressedHandler(string application, string key);
[Interface("org.gnome.SettingsDaemon")]
+ private interface ISettingsDaemonOld
+ {
+ void GrabMediaPlayerKeys(string application, uint time);
+ void ReleaseMediaPlayerKeys(string application);
+ event MediaPlayerKeyPressedHandler MediaPlayerKeyPressed;
+ }
+
+ [Interface("org.gnome.SettingsDaemon.MediaKeys")]
private interface ISettingsDaemon
{
void GrabMediaPlayerKeys(string application, uint time);
void ReleaseMediaPlayerKeys(string application);
event MediaPlayerKeyPressedHandler MediaPlayerKeyPressed;
}
+
private static GnomeMMKeys instance;
@@ -69,14 +79,21 @@
private const string app_name = "Banshee";
- private ISettingsDaemon settings_daemon;
+ private object settings_daemon;
public GnomeMMKeys()
{
- settings_daemon = Bus.Session.GetObject<ISettingsDaemon>(BusName, new ObjectPath(ObjectPath));;
-
- settings_daemon.GrabMediaPlayerKeys(app_name, 0);
- settings_daemon.MediaPlayerKeyPressed += OnMediaPlayerKeyPressed;
+ try {
+ ISettingsDaemon sd = Bus.Session.GetObject<ISettingsDaemon>(BusName, new ObjectPath(ObjectPath));
+ sd.GrabMediaPlayerKeys(app_name, 0);
+ sd.MediaPlayerKeyPressed += OnMediaPlayerKeyPressed;
+ settings_daemon = sd;
+ } catch {
+ ISettingsDaemonOld sd = Bus.Session.GetObject<ISettingsDaemonOld>(BusName, new ObjectPath(oldObjectPath));
+ sd.GrabMediaPlayerKeys(app_name, 0);
+ sd.MediaPlayerKeyPressed += OnMediaPlayerKeyPressed;
+ settings_daemon = sd;
+ }
Globals.ShutdownRequested += OnShutdownRequested;
@@ -110,9 +127,17 @@
return;
}
- settings_daemon.MediaPlayerKeyPressed -= OnMediaPlayerKeyPressed;
- settings_daemon.ReleaseMediaPlayerKeys(app_name);
- settings_daemon = null;
+ if(settings_daemon is ISettingsDaemon) {
+ ISettingsDaemon sd = (ISettingsDaemon) settings_daemon;
+ sd.MediaPlayerKeyPressed -= OnMediaPlayerKeyPressed;
+ sd.ReleaseMediaPlayerKeys(app_name);
+ settings_daemon = null;
+ } else {
+ ISettingsDaemonOld sd = (ISettingsDaemonOld) settings_daemon;
+ sd.MediaPlayerKeyPressed -= OnMediaPlayerKeyPressed;
+ sd.ReleaseMediaPlayerKeys(app_name);
+ settings_daemon = null;
+ }
}
private void OnMediaPlayerKeyPressed(string application, string key)
@@ -140,7 +165,10 @@
private void OnFocusInEvent(object o, FocusInEventArgs args)
{
if(settings_daemon != null) {
- settings_daemon.GrabMediaPlayerKeys(app_name, 0);
+ if(settings_daemon is ISettingsDaemon)
+ ((ISettingsDaemon) settings_daemon).GrabMediaPlayerKeys(app_name, 0);
+ else
+ ((ISettingsDaemonOld) settings_daemon).GrabMediaPlayerKeys(app_name, 0);
}
}
}