UserMenu: show "Install Updates & Restart" when appropriate
When PackageKit signals that it prepared an update, offer an option to reboot and apply it, using a helper that will setup the next reboot and then calling to gnome-session. https://bugzilla.gnome.org/show_bug.cgi?id=677394
This commit is contained in:
parent
8754b2767c
commit
34831796f6
@ -50,6 +50,7 @@ const SessionManagerIface = <interface name="org.gnome.SessionManager">
|
|||||||
<arg type="u" direction="in" />
|
<arg type="u" direction="in" />
|
||||||
</method>
|
</method>
|
||||||
<method name="Shutdown" />
|
<method name="Shutdown" />
|
||||||
|
<method name="Reboot" />
|
||||||
<method name="CanShutdown">
|
<method name="CanShutdown">
|
||||||
<arg type="b" direction="out" />
|
<arg type="b" direction="out" />
|
||||||
</method>
|
</method>
|
||||||
|
@ -523,6 +523,10 @@ const UserMenuButton = new Lang.Class({
|
|||||||
this._updateLogout();
|
this._updateLogout();
|
||||||
this._updateLockScreen();
|
this._updateLockScreen();
|
||||||
|
|
||||||
|
this._updatesFile = Gio.File.new_for_path('/var/lib/PackageKit/prepared-update');
|
||||||
|
this._updatesMonitor = this._updatesFile.monitor(Gio.FileMonitorFlags.NONE, null);
|
||||||
|
this._updatesMonitor.connect('changed', Lang.bind(this, this._updateInstallUpdates));
|
||||||
|
|
||||||
// Whether shutdown is available or not depends on both lockdown
|
// Whether shutdown is available or not depends on both lockdown
|
||||||
// settings (disable-log-out) and Polkit policy - the latter doesn't
|
// settings (disable-log-out) and Polkit policy - the latter doesn't
|
||||||
// notify, so we update the menu item each time the menu opens or
|
// notify, so we update the menu item each time the menu opens or
|
||||||
@ -578,11 +582,17 @@ const UserMenuButton = new Lang.Class({
|
|||||||
this._lockScreenItem.actor.visible = allowLockScreen;
|
this._lockScreenItem.actor.visible = allowLockScreen;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_updateInstallUpdates: function() {
|
||||||
|
let haveUpdates = this._updatesFile.query_exists(null);
|
||||||
|
this._installUpdatesItem.actor.visible = haveUpdates && this._haveShutdown;
|
||||||
|
},
|
||||||
|
|
||||||
_updateHaveShutdown: function() {
|
_updateHaveShutdown: function() {
|
||||||
this._session.CanShutdownRemote(Lang.bind(this,
|
this._session.CanShutdownRemote(Lang.bind(this,
|
||||||
function(result, error) {
|
function(result, error) {
|
||||||
if (!error) {
|
if (!error) {
|
||||||
this._haveShutdown = result[0];
|
this._haveShutdown = result[0];
|
||||||
|
this._updateInstallUpdates();
|
||||||
this._updateSuspendOrPowerOff();
|
this._updateSuspendOrPowerOff();
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
@ -711,6 +721,11 @@ const UserMenuButton = new Lang.Class({
|
|||||||
item = new PopupMenu.PopupSeparatorMenuItem();
|
item = new PopupMenu.PopupSeparatorMenuItem();
|
||||||
this.menu.addMenuItem(item);
|
this.menu.addMenuItem(item);
|
||||||
|
|
||||||
|
item = new PopupMenu.PopupMenuItem(_("Install Updates & Restart"));
|
||||||
|
item.connect('activate', Lang.bind(this, this._onInstallUpdatesActivate));
|
||||||
|
this.menu.addMenuItem(item);
|
||||||
|
this._installUpdatesItem = item;
|
||||||
|
|
||||||
item = new PopupMenu.PopupAlternatingMenuItem(_("Power Off"),
|
item = new PopupMenu.PopupAlternatingMenuItem(_("Power Off"),
|
||||||
_("Suspend"));
|
_("Suspend"));
|
||||||
this.menu.addMenuItem(item);
|
this.menu.addMenuItem(item);
|
||||||
@ -769,6 +784,13 @@ const UserMenuButton = new Lang.Class({
|
|||||||
this._session.LogoutRemote(0);
|
this._session.LogoutRemote(0);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_onInstallUpdatesActivate: function() {
|
||||||
|
Main.overview.hide();
|
||||||
|
Util.spawn(['pkexec', '/usr/libexec/pk-trigger-offline-update']);
|
||||||
|
|
||||||
|
this._session.RebootRemote();
|
||||||
|
},
|
||||||
|
|
||||||
_onSuspendOrPowerOffActivate: function() {
|
_onSuspendOrPowerOffActivate: function() {
|
||||||
Main.overview.hide();
|
Main.overview.hide();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user