Do

Merge lp:~raof/do/devicekit-power-compat into lp:do

Proposed by Chris Halse Rogers
Status: Merged
Merged at revision: not available
Proposed branch: lp:~raof/do/devicekit-power-compat
Merge into: lp:do
Diff against target: None lines
To merge this branch: bzr merge lp:~raof/do/devicekit-power-compat
Reviewer Review Type Date Requested Status
Do Core Team Pending
Review via email: mp+7787@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Chris Halse Rogers (raof) wrote :

This branch adds support for the DeviceKit.Power interface. In Karmic this is where the on-battery data is exported; gnome-power-manager no longer exports this on org.freedesktop.PowerManager.

The code first checks for an org.freedesktop.PowerManager with a GetOnBattery method, then falls back on DeviceKit.Power. If both these fail, GetOnBatteryPower will always return false.

lp:~raof/do/devicekit-power-compat updated
1254. By Chris Halse Rogers

[SystemServices] Reverse DeviceKit.Power detection logic.

We now use org.freedesktop.DeviceKit.Power if it exists, then fall back on org.freedesktop.PowerManager.
This makes for cleaner code.

1255. By Chris Halse Rogers

[SystemServices] Fix camelCasing for method variables

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'Do.Platform.Linux/src/Do.Platform/Do.Platform.Linux/SystemService.cs'
--- Do.Platform.Linux/src/Do.Platform/Do.Platform.Linux/SystemService.cs 2009-05-19 04:37:27 +0000
+++ Do.Platform.Linux/src/Do.Platform/Do.Platform.Linux/SystemService.cs 2009-06-23 03:44:20 +0000
@@ -37,6 +37,8 @@
37 37
38 const string PowerManagementName = "org.freedesktop.PowerManagement";38 const string PowerManagementName = "org.freedesktop.PowerManagement";
39 const string PowerManagementPath = "/org/freedesktop/PowerManagement";39 const string PowerManagementPath = "/org/freedesktop/PowerManagement";
40 const string DeviceKitPowerName = "org.freedesktop.DeviceKit.Power";
41 const string DeviceKitPowerPath = "/org/freedesktop/DeviceKit/Power";
40 const string AutoStartKey = "Hidden";42 const string AutoStartKey = "Hidden";
41 43
42 [Interface(PowerManagementName)]44 [Interface(PowerManagementName)]
@@ -46,16 +48,44 @@
46 event BoolDelegate OnBatteryChanged;48 event BoolDelegate OnBatteryChanged;
47 }49 }
48 50
51 [Interface(DeviceKitPowerName)]
52 interface IDeviceKitPower : org.freedesktop.DBus.Properties
53 {
54 event Action OnChanged;
55 }
56
57 bool on_battery;
58
49 IPowerManagement power;59 IPowerManagement power;
60 IDeviceKitPower devicekit;
50 DesktopItem autostartfile;61 DesktopItem autostartfile;
51 62
52 public void Initialize ()63 public void Initialize ()
53 {64 {
65 // Set a sane default value for on_battery. Thus, if we don't find a working power manager
66 // we assume we're not on battery.
67 on_battery = false;
54 try {68 try {
55 BusG.Init ();69 BusG.Init ();
56 if (Bus.Session.NameHasOwner (PowerManagementName)) {70 if (Bus.Session.NameHasOwner (PowerManagementName)) {
57 power = Bus.Session.GetObject<IPowerManagement> (PowerManagementName, new ObjectPath (PowerManagementPath));71 power = Bus.Session.GetObject<IPowerManagement> (PowerManagementName, new ObjectPath (PowerManagementPath));
58 power.OnBatteryChanged += PowerOnBatteryChanged;72 power.OnBatteryChanged += PowerOnBatteryChanged;
73 // Annoying hack to determine whether or not org.freedesktop.PowerManagement actually has
74 // the onbattery property. To do this right, I'd grab the grab the Introspect data, run it through
75 // an XmlDocument, and parse out the methods available. Try-Catch will do for now.
76 try {
77 on_battery = power.GetOnBattery ();
78 } catch (Exception e) {
79 power = null;
80 Log<SystemService>.Debug ("org.freedesktop.PowerManagement does not have OnBattery property.");
81 Log<SystemService>.Debug ("Trying DeviceKit-Power instead.");
82 if (Bus.System.NameHasOwner (DeviceKitPowerName)) {
83 devicekit = Bus.System.GetObject<IDeviceKitPower> (DeviceKitPowerName, new ObjectPath (DeviceKitPowerPath));
84 devicekit.OnChanged += DeviceKitOnChanged;
85 on_battery = (bool) devicekit.Get (DeviceKitPowerName, "on-battery");
86 Log<SystemService>.Debug ("DeviceKit.Power detected.");
87 }
88 }
59 }89 }
60 } catch (Exception e) {90 } catch (Exception e) {
61 Log<SystemService>.Error ("Could not initialize dbus: {0}", e.Message);91 Log<SystemService>.Error ("Could not initialize dbus: {0}", e.Message);
@@ -65,22 +95,22 @@
6595
66 void PowerOnBatteryChanged (bool val)96 void PowerOnBatteryChanged (bool val)
67 {97 {
98 on_battery = val;
68 OnOnBatteryChanged ();99 OnOnBatteryChanged ();
69 }100 }
70 101
102 void DeviceKitOnChanged ()
103 {
104 bool new_state = (bool) devicekit.Get (DeviceKitPowerName, "on-battery");
105 if (on_battery != new_state) {
106 on_battery = new_state;
107 OnOnBatteryChanged ();
108 }
109 }
110
71 public override bool GetOnBatteryPower ()111 public override bool GetOnBatteryPower ()
72 {112 {
73 try {113 return on_battery;
74 if (power == null && !Bus.Session.NameHasOwner (PowerManagementName))
75 return false;
76 if (power == null)
77 power = Bus.Session.GetObject<IPowerManagement> (PowerManagementName, new ObjectPath (PowerManagementPath));
78 return power.GetOnBattery ();
79 } catch (Exception e) {
80 Log<SystemService>.Error ("Could not GetOnBattery: {0}", e.Message);
81 Log<SystemService>.Debug (e.StackTrace);
82 }
83 return false;
84 }114 }
85115
86 public override void EnsureSingleApplicationInstance ()116 public override void EnsureSingleApplicationInstance ()