--- GNOME-Session/src/PowerManagement.cs +++ GNOME-Session/src/PowerManagement.cs @@ -44,10 +44,19 @@ void Suspend (); } + [Interface (UPowerName)] + interface IUPower + { + void Hibernate (); + void Suspend (); + } + const string DeviceKitPowerName = "org.freedesktop.DeviceKit.Power"; const string DeviceKitPowerPath = "/org/freedesktop/DeviceKit/Power"; const string PowerManagementName = "org.freedesktop.PowerManagement"; const string PowerManagementPath = "/org/freedesktop/PowerManagement"; + const string UPowerName = "org.freedesktop.UPower"; + const string UPowerPath = "/org/freedesktop/UPower"; static PowerManagement () { @@ -67,6 +76,8 @@ return Bus.System.GetObject (DeviceKitPowerName, new ObjectPath (DeviceKitPowerPath)); } else if (Bus.Session.NameHasOwner (PowerManagementName)) { return Bus.Session.GetObject (PowerManagementName, new ObjectPath (PowerManagementPath)); + } else if (Bus.Session.NameHasOwner (UPowerName)) { + return Bus.Session.GetObject (UPowerName, new ObjectPath (UPowerPath)); } } catch (Exception e) { Log.Error ("Could not get PowerManagement bus object: {0}", e.Message); @@ -86,6 +97,9 @@ (instance as IDeviceKitPower).Hibernate (); } else if (instance is IPowerManagement) { (instance as IPowerManagement).Hibernate (); + } else if (instance is IUPower) { + ScreenSaver.Lock (); + (instance as IUPower).Hibernate (); } } catch (Exception e) { Log.Error ("Could not hibernate: {0}", e.Message); @@ -102,6 +116,9 @@ (instance as IDeviceKitPower).Suspend (); } else if (instance is IPowerManagement) { (instance as IPowerManagement).Suspend (); + } else if (instance is IUPower) { + ScreenSaver.Lock (); + (instance as IUPower).Suspend (); } } catch (Exception e) { Log.Error ("Could not suspend: {0}", e.Message);