Index: 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(BusName, new ObjectPath(ObjectPath));; - - settings_daemon.GrabMediaPlayerKeys(app_name, 0); - settings_daemon.MediaPlayerKeyPressed += OnMediaPlayerKeyPressed; + try { + ISettingsDaemon sd = Bus.Session.GetObject(BusName, new ObjectPath(ObjectPath)); + sd.GrabMediaPlayerKeys(app_name, 0); + sd.MediaPlayerKeyPressed += OnMediaPlayerKeyPressed; + settings_daemon = sd; + } catch { + ISettingsDaemonOld sd = Bus.Session.GetObject(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); } } }