[gnome-shell] endSessionDialog: Warn when trying to install updates on battery power
- From: Kalev Lember <klember src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] endSessionDialog: Warn when trying to install updates on battery power
- Date: Wed, 19 Feb 2014 23:29:05 +0000 (UTC)
commit 46163a6607c55aa8c0ff5333c7ade123041705aa
Author: Kalev Lember <kalevlember gmail com>
Date: Wed Feb 19 19:59:47 2014 +0100
endSessionDialog: Warn when trying to install updates on battery power
Interrupting update installation can mess up the package database quite
a bit and could lead to totally destroying the distro installtion. To
avoid running out of juice during an upgrade, warn when someone tries to
install updates on battery power.
https://bugzilla.gnome.org/show_bug.cgi?id=722898
data/theme/gnome-shell.css | 13 ++++++++++++
js/ui/endSessionDialog.js | 45 ++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 58 insertions(+), 0 deletions(-)
---
diff --git a/data/theme/gnome-shell.css b/data/theme/gnome-shell.css
index 35079d4..bb9ff54 100644
--- a/data/theme/gnome-shell.css
+++ b/data/theme/gnome-shell.css
@@ -1966,6 +1966,19 @@ StScrollBar StButton#vhandle:active {
text-align: right;
}
+.end-session-dialog-warning {
+ width: 28em;
+ color: #f57900;
+ padding-top: 6px;
+}
+
+.end-session-dialog-warning:rtl {
+ width: 28em;
+ color: #f57900;
+ padding-top: 6px;
+ text-align: right;
+}
+
.end-session-dialog-logout-icon {
border: 2px solid #8b8b8b;
border-radius: 5px;
diff --git a/js/ui/endSessionDialog.js b/js/ui/endSessionDialog.js
index 5f06fc1..2ac185e 100644
--- a/js/ui/endSessionDialog.js
+++ b/js/ui/endSessionDialog.js
@@ -75,6 +75,7 @@ const logoutDialogContent = {
"You will be logged out automatically in %d seconds.",
seconds).format(seconds);
},
+ showBatteryWarning: false,
confirmButtons: [{ signal: 'ConfirmedLogout',
label: C_("button", "Log Out") }],
iconStyleClass: 'end-session-dialog-logout-icon',
@@ -90,6 +91,7 @@ const shutdownDialogContent = {
seconds).format(seconds);
},
checkBoxText: C_("checkbox", "Install pending software updates"),
+ showBatteryWarning: true,
confirmButtons: [{ signal: 'ConfirmedReboot',
label: C_("button", "Restart") },
{ signal: 'ConfirmedShutdown',
@@ -106,6 +108,7 @@ const restartDialogContent = {
"The system will restart automatically in %d seconds.",
seconds).format(seconds);
},
+ showBatteryWarning: false,
confirmButtons: [{ signal: 'ConfirmedReboot',
label: C_("button", "Restart") }],
iconName: 'view-refresh-symbolic',
@@ -121,6 +124,7 @@ const restartInstallDialogContent = {
"The system will automatically restart and install updates in %d seconds.",
seconds).format(seconds);
},
+ showBatteryWarning: true,
confirmButtons: [{ signal: 'ConfirmedReboot',
label: C_("button", "Restart & Install") }],
iconName: 'view-refresh-symbolic',
@@ -149,6 +153,14 @@ const LogindSessionIface = '<node> \
const LogindSession = Gio.DBusProxy.makeProxyWrapper(LogindSessionIface);
+const UPowerIface = '<node> \
+<interface name="org.freedesktop.UPower"> \
+ <property name="OnBattery" type="b" access="read"/> \
+</interface> \
+</node>';
+
+const UPowerProxy = Gio.DBusProxy.makeProxyWrapper(UPowerIface);
+
function findAppFromInhibitor(inhibitor) {
let desktopFile;
try {
@@ -234,6 +246,19 @@ const EndSessionDialog = new Lang.Class({
this._updatesFile = Gio.File.new_for_path('/system-update');
this._preparedUpdateFile = Gio.File.new_for_path('/var/lib/PackageKit/prepared-update');
+ this._powerProxy = new UPowerProxy(Gio.DBus.system,
+ 'org.freedesktop.UPower',
+ '/org/freedesktop/UPower',
+ Lang.bind(this, function(proxy, error) {
+ if (error) {
+ log(error.message);
+ return;
+ }
+ this._powerProxy.connect('g-properties-changed',
+ Lang.bind(this, this._sync));
+ this._sync();
+ }));
+
this._secondsLeft = 0;
this._totalSecondsToStayOpen = 0;
this._applications = [];
@@ -284,6 +309,12 @@ const EndSessionDialog = new Lang.Class({
this._checkBox.actor.connect('clicked', Lang.bind(this, this._sync));
messageLayout.add(this._checkBox.actor);
+ this._batteryWarning = new St.Label({ style_class: 'end-session-dialog-warning',
+ text: _("Running on battery power: please plug in before
installing updates.") });
+ this._batteryWarning.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
+ this._batteryWarning.clutter_text.line_wrap = true;
+ messageLayout.add(this._batteryWarning);
+
this._scrollView = new St.ScrollView({ style_class: 'end-session-dialog-list' });
this._scrollView.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC);
this.contentLayout.add(this._scrollView,
@@ -337,6 +368,14 @@ const EndSessionDialog = new Lang.Class({
if (dialogContent.subjectWithUpdates && this._checkBox.actor.checked)
subject = dialogContent.subjectWithUpdates;
+ if (dialogContent.showBatteryWarning) {
+ // Warn when running on battery power
+ if (this._powerProxy.OnBattery && this._checkBox.actor.checked)
+ this._batteryWarning.opacity = 255;
+ else
+ this._batteryWarning.opacity = 0;
+ }
+
let description;
let displayTime = _roundSecondsToInterval(this._totalSecondsToStayOpen,
this._secondsLeft,
@@ -671,6 +710,12 @@ const EndSessionDialog = new Lang.Class({
this._checkBox.actor.visible = (dialogContent.checkBoxText && preparedUpdate && updatesAllowed);
this._checkBox.actor.checked = (preparedUpdate && updateAlreadyTriggered);
+ // We show the warning either together with the checkbox, or when
+ // updates have already been triggered, but the user doesn't have
+ // enough permissions to cancel them.
+ this._batteryWarning.visible = (dialogContent.showBatteryWarning &&
+ (this._checkBox.actor.visible || preparedUpdate &&
updateAlreadyTriggered && !updatesAllowed));
+
this._updateButtons();
if (!this.open(timestamp)) {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]