diff --git a/js/ui/status/power.js b/js/ui/status/power.js index 515c716ba..7c7838221 100644 --- a/js/ui/status/power.js +++ b/js/ui/status/power.js @@ -55,45 +55,36 @@ const Indicator = new Lang.Class({ this.parent('battery-missing-symbolic', _("Battery")); this._proxy = new PowerManagerProxy(Gio.DBus.session, BUS_NAME, OBJECT_PATH, - Lang.bind(this, function(proxy, error) { - if (error) { - log(error.message); - return; - } - this._proxy.connect('g-properties-changed', - Lang.bind(this, this._devicesChanged)); - this._devicesChanged(); - })); + Lang.bind(this, function(proxy, error) { + if (error) { + log(error.message); + return; + } + this._proxy.connect('g-properties-changed', + Lang.bind(this, this._devicesChanged)); + this._devicesChanged(); + })); - this._deviceItems = [ ]; - this._hasPrimary = false; - this._primaryDeviceId = null; - - this._batteryItem = new PopupMenu.PopupMenuItem('', { reactive: false }); + this.item = new PopupMenu.PopupMenuItem('', { reactive: false }); this._primaryPercentage = new St.Label({ style_class: 'popup-battery-percentage' }); - this._batteryItem.addActor(this._primaryPercentage, { align: St.Align.END }); - this.menu.addMenuItem(this._batteryItem); - - this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); - this._otherDevicePosition = 2; + this.item.addActor(this._primaryPercentage, { align: St.Align.END }); + this.menu.addMenuItem(this.item); }, _readPrimaryDevice: function() { this._proxy.GetPrimaryDeviceRemote(Lang.bind(this, function(result, error) { if (error) { - this._hasPrimary = false; - this._primaryDeviceId = null; - this._batteryItem.actor.hide(); + this.item.actor.hide(); return; } + let [[device_id, device_type, icon, percentage, state, seconds]] = result; if (device_type == UPDeviceType.BATTERY) { - this._hasPrimary = true; let time = Math.round(seconds / 60); if (time == 0) { // 0 is reported when UPower does not have enough data // to estimate battery life - this._batteryItem.label.text = _("Estimating…"); + this.item.label.text = _("Estimating…"); } else { let minutes = time % 60; let hours = Math.floor(time / 60); @@ -109,39 +100,12 @@ const Indicator = new Lang.Class({ } } else timestring = ngettext("%d minute remaining", "%d minutes remaining", minutes).format(minutes); - this._batteryItem.label.text = timestring; + this.item.label.text = timestring; } this._primaryPercentage.text = C_("percent of battery remaining", "%d%%").format(Math.round(percentage)); - this._batteryItem.actor.show(); + this.item.actor.show(); } else { - this._hasPrimary = false; - this._batteryItem.actor.hide(); - } - - this._primaryDeviceId = device_id; - })); - }, - - _readOtherDevices: function() { - this._proxy.GetDevicesRemote(Lang.bind(this, function(result, error) { - this._deviceItems.forEach(function(i) { i.destroy(); }); - this._deviceItems = []; - - if (error) { - return; - } - - let position = 0; - let [devices] = result; - for (let i = 0; i < devices.length; i++) { - let [device_id, device_type] = devices[i]; - if (device_type == UPDeviceType.AC_POWER || device_id == this._primaryDeviceId) - continue; - - let item = new DeviceItem (devices[i]); - this._deviceItems.push(item); - this.menu.addMenuItem(item, this._otherDevicePosition + position); - position++; + this.item.actor.hide(); } })); }, @@ -162,55 +126,5 @@ const Indicator = new Lang.Class({ _devicesChanged: function() { this._syncIcon(); this._readPrimaryDevice(); - this._readOtherDevices(); - } -}); - -const DeviceItem = new Lang.Class({ - Name: 'DeviceItem', - Extends: PopupMenu.PopupBaseMenuItem, - - _init: function(device) { - this.parent({ reactive: false }); - - let [device_id, device_type, icon, percentage, state, time] = device; - - this._label = new St.Label({ text: this._deviceTypeToString(device_type) }); - this.addActor(this._label); - - let percentLabel = new St.Label({ text: C_("percent of battery remaining", "%d%%").format(Math.round(percentage)), - style_class: 'popup-status-menu-item popup-battery-percentage' }); - this.addActor(percentLabel, { align: St.Align.END }); - //FIXME: ideally we would like to expose this._label and percentLabel - this.actor.label_actor = percentLabel; - }, - - _deviceTypeToString: function(type) { - switch (type) { - case UPDeviceType.AC_POWER: - return _("AC Adapter"); - case UPDeviceType.BATTERY: - return _("Laptop Battery"); - case UPDeviceType.UPS: - return _("UPS"); - case UPDeviceType.MONITOR: - return _("Monitor"); - case UPDeviceType.MOUSE: - return _("Mouse"); - case UPDeviceType.KEYBOARD: - return _("Keyboard"); - case UPDeviceType.PDA: - return _("PDA"); - case UPDeviceType.PHONE: - return _("Cell Phone"); - case UPDeviceType.MEDIA_PLAYER: - return _("Media Player"); - case UPDeviceType.TABLET: - return _("Tablet"); - case UPDeviceType.COMPUTER: - return _("Computer"); - default: - return C_("device", "Unknown"); - } } });