[gnome-shell] power: Use UPower directly instead of gnome-settings-daemon
- From: Bastien Nocera <hadess src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] power: Use UPower directly instead of gnome-settings-daemon
- Date: Thu, 17 Oct 2013 15:40:05 +0000 (UTC)
commit 0b8c0c202e2aaa89d5adc7427c5e4e1e37f61371
Author: Bastien Nocera <hadess hadess net>
Date: Thu Oct 17 16:45:17 2013 +0200
power: Use UPower directly instead of gnome-settings-daemon
UPower master exports a display device that can be used to
compute whether to show a status icon, and what we should show.
https://bugzilla.gnome.org/show_bug.cgi?id=710273
js/ui/status/power.js | 88 ++++++++++++++++++++++++++-----------------------
1 files changed, 47 insertions(+), 41 deletions(-)
---
diff --git a/js/ui/status/power.js b/js/ui/status/power.js
index 429db7a..eda8c01 100644
--- a/js/ui/status/power.js
+++ b/js/ui/status/power.js
@@ -8,20 +8,20 @@ const Main = imports.ui.main;
const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu;
-const BUS_NAME = 'org.gnome.SettingsDaemon.Power';
-const OBJECT_PATH = '/org/gnome/SettingsDaemon/Power';
-
-const PowerManagerInterface = <interface name="org.gnome.SettingsDaemon.Power">
-<method name="GetDevices">
- <arg type="a(susdut)" direction="out" />
-</method>
-<method name="GetPrimaryDevice">
- <arg type="(susdut)" direction="out" />
-</method>
-<property name="Icon" type="s" access="read" />
+const BUS_NAME = 'org.freedesktop.UPower';
+const OBJECT_PATH = '/org/freedesktop/UPower/devices/DisplayDevice';
+
+const DisplayDeviceInterface = <interface name="org.freedesktop.UPower.Device">
+ <property name="Type" type="u" access="read"/>
+ <property name="State" type="u" access="read"/>
+ <property name="Percentage" type="d" access="read"/>
+ <property name="TimeToEmpty" type="x" access="read"/>
+ <property name="TimeToFull" type="x" access="read"/>
+ <property name="IsPresent" type="b" access="read"/>
+ <property name="IconName" type="s" access="read"/>
</interface>;
-const PowerManagerProxy = Gio.DBusProxy.makeProxyWrapper(PowerManagerInterface);
+const PowerManagerProxy = Gio.DBusProxy.makeProxyWrapper(DisplayDeviceInterface);
const Indicator = new Lang.Class({
Name: 'PowerIndicator',
@@ -32,7 +32,7 @@ const Indicator = new Lang.Class({
this._indicator = this._addIndicator();
- this._proxy = new PowerManagerProxy(Gio.DBus.session, BUS_NAME, OBJECT_PATH,
+ this._proxy = new PowerManagerProxy(Gio.DBus.system, BUS_NAME, OBJECT_PATH,
Lang.bind(this, function(proxy, error) {
if (error) {
log(error.message);
@@ -43,7 +43,7 @@ const Indicator = new Lang.Class({
this._sync();
}));
- this._item = new PopupMenu.PopupSubMenuMenuItem(_("Battery"), true);
+ this._item = new PopupMenu.PopupSubMenuMenuItem("", true);
this._item.menu.addSettingsAction(_("Power Settings"), 'gnome-power-panel.desktop');
this.menu.addMenuItem(this._item);
@@ -56,11 +56,18 @@ const Indicator = new Lang.Class({
this.menu.setSensitive(sensitive);
},
- _statusForDevice: function(device) {
- let [device_id, device_type, icon, percentage, state, seconds] = device;
+ _getStatus: function() {
+ let seconds = 0;
- if (state == UPower.DeviceState.FULLY_CHARGED)
+ if (this._proxy.State == UPower.DeviceState.FULLY_CHARGED)
return _("Fully Charged");
+ else if (this._proxy.State == UPower.DeviceState.CHARGING)
+ seconds = this._proxy.TimeToFull;
+ else if (this_proxy.State == UPower.DeviceState.DISCHARGING)
+ seconds = this._proxy.TimeToEmpty;
+ // state is one of PENDING_CHARGING, PENDING_DISCHARGING
+ else
+ return _("Estimating…");
let time = Math.round(seconds / 60);
if (time == 0) {
@@ -82,34 +89,33 @@ const Indicator = new Lang.Class({
return _("%d\u2236%02d Until Full (%d%%)").format(hours, minutes, percentage);
}
- // state is one of PENDING_CHARGING, PENDING_DISCHARGING
- return _("Estimating…");
+ return null;
},
_sync: function() {
- function isBattery(result) {
- if (!result)
- return false;
-
- let [device] = result;
- let [, deviceType] = device;
- return (deviceType == UPower.DeviceKind.BATTERY);
+ // Do we have batteries or a UPS?
+ let visible = this._proxy.IsPresent;
+ if (visible) {
+ this._item.actor.show();
+ } else {
+ // If there's no battery, then we use the power icon.
+ this._item.actor.hide();
+ this._indicator.icon_name = 'system-shutdown-symbolic';
+ return;
}
- this._proxy.GetPrimaryDeviceRemote(Lang.bind(this, function(result, error) {
- if (isBattery(result)) {
- let [device] = result;
- let [,, icon] = device;
- let gicon = Gio.icon_new_for_string(icon);
- this._indicator.gicon = gicon;
- this._item.icon.gicon = gicon;
- this._item.status.text = this._statusForDevice(device);
- this._item.actor.show();
- } else {
- // If there's no battery, then we use the power icon.
- this._indicator.icon_name = 'system-shutdown-symbolic';
- this._item.actor.hide();
- }
- }));
+ // The icons
+ let icon = this._proxy.IconName;
+ this._indicator.icon_name = icon;
+ this._item.icon.icon_name = icon;
+
+ // The status label
+ this._item.status.text = this._getStatus();
+
+ // The sub-menu heading
+ if (this._proxy.Type == UPower.DeviceKind.UPS)
+ this._item.label.text = _("UPS");
+ else
+ this._item.label.text = _("Battery");
},
});
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]