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
1=== modified file 'Do.Platform.Linux/src/Do.Platform/Do.Platform.Linux/SystemService.cs'
2--- Do.Platform.Linux/src/Do.Platform/Do.Platform.Linux/SystemService.cs 2009-05-19 04:37:27 +0000
3+++ Do.Platform.Linux/src/Do.Platform/Do.Platform.Linux/SystemService.cs 2009-06-23 03:44:20 +0000
4@@ -37,6 +37,8 @@
5
6 const string PowerManagementName = "org.freedesktop.PowerManagement";
7 const string PowerManagementPath = "/org/freedesktop/PowerManagement";
8+ const string DeviceKitPowerName = "org.freedesktop.DeviceKit.Power";
9+ const string DeviceKitPowerPath = "/org/freedesktop/DeviceKit/Power";
10 const string AutoStartKey = "Hidden";
11
12 [Interface(PowerManagementName)]
13@@ -46,16 +48,44 @@
14 event BoolDelegate OnBatteryChanged;
15 }
16
17+ [Interface(DeviceKitPowerName)]
18+ interface IDeviceKitPower : org.freedesktop.DBus.Properties
19+ {
20+ event Action OnChanged;
21+ }
22+
23+ bool on_battery;
24+
25 IPowerManagement power;
26+ IDeviceKitPower devicekit;
27 DesktopItem autostartfile;
28
29 public void Initialize ()
30 {
31+ // Set a sane default value for on_battery. Thus, if we don't find a working power manager
32+ // we assume we're not on battery.
33+ on_battery = false;
34 try {
35 BusG.Init ();
36 if (Bus.Session.NameHasOwner (PowerManagementName)) {
37 power = Bus.Session.GetObject<IPowerManagement> (PowerManagementName, new ObjectPath (PowerManagementPath));
38 power.OnBatteryChanged += PowerOnBatteryChanged;
39+ // Annoying hack to determine whether or not org.freedesktop.PowerManagement actually has
40+ // the onbattery property. To do this right, I'd grab the grab the Introspect data, run it through
41+ // an XmlDocument, and parse out the methods available. Try-Catch will do for now.
42+ try {
43+ on_battery = power.GetOnBattery ();
44+ } catch (Exception e) {
45+ power = null;
46+ Log<SystemService>.Debug ("org.freedesktop.PowerManagement does not have OnBattery property.");
47+ Log<SystemService>.Debug ("Trying DeviceKit-Power instead.");
48+ if (Bus.System.NameHasOwner (DeviceKitPowerName)) {
49+ devicekit = Bus.System.GetObject<IDeviceKitPower> (DeviceKitPowerName, new ObjectPath (DeviceKitPowerPath));
50+ devicekit.OnChanged += DeviceKitOnChanged;
51+ on_battery = (bool) devicekit.Get (DeviceKitPowerName, "on-battery");
52+ Log<SystemService>.Debug ("DeviceKit.Power detected.");
53+ }
54+ }
55 }
56 } catch (Exception e) {
57 Log<SystemService>.Error ("Could not initialize dbus: {0}", e.Message);
58@@ -65,22 +95,22 @@
59
60 void PowerOnBatteryChanged (bool val)
61 {
62+ on_battery = val;
63 OnOnBatteryChanged ();
64 }
65-
66+
67+ void DeviceKitOnChanged ()
68+ {
69+ bool new_state = (bool) devicekit.Get (DeviceKitPowerName, "on-battery");
70+ if (on_battery != new_state) {
71+ on_battery = new_state;
72+ OnOnBatteryChanged ();
73+ }
74+ }
75+
76 public override bool GetOnBatteryPower ()
77 {
78- try {
79- if (power == null && !Bus.Session.NameHasOwner (PowerManagementName))
80- return false;
81- if (power == null)
82- power = Bus.Session.GetObject<IPowerManagement> (PowerManagementName, new ObjectPath (PowerManagementPath));
83- return power.GetOnBattery ();
84- } catch (Exception e) {
85- Log<SystemService>.Error ("Could not GetOnBattery: {0}", e.Message);
86- Log<SystemService>.Debug (e.StackTrace);
87- }
88- return false;
89+ return on_battery;
90 }
91
92 public override void EnsureSingleApplicationInstance ()