endSessionDialog: Only show logout inhibiting apps
Apps that only inhibit other kinds of activity (like idle or suspend) don't need to be shown to user when they are logging out. https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/3119 Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1424>
This commit is contained in:
parent
ef5b92c596
commit
8850c579da
@ -3,6 +3,9 @@
|
|||||||
<method name="GetAppId">
|
<method name="GetAppId">
|
||||||
<arg type="s" direction="out"/>
|
<arg type="s" direction="out"/>
|
||||||
</method>
|
</method>
|
||||||
|
<method name="GetFlags">
|
||||||
|
<arg type="u" direction="out"/>
|
||||||
|
</method>
|
||||||
<method name="GetReason">
|
<method name="GetReason">
|
||||||
<arg type="s" direction="out"/>
|
<arg type="s" direction="out"/>
|
||||||
</method>
|
</method>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||||
/* exported PresenceStatus, Presence, Inhibitor, SessionManager */
|
/* exported PresenceStatus, Presence, Inhibitor, SessionManager, InhibitFlags */
|
||||||
|
|
||||||
const Gio = imports.gi.Gio;
|
const Gio = imports.gi.Gio;
|
||||||
|
|
||||||
@ -35,3 +35,11 @@ var SessionManagerProxy = Gio.DBusProxy.makeProxyWrapper(SessionManagerIface);
|
|||||||
function SessionManager(initCallback, cancellable) {
|
function SessionManager(initCallback, cancellable) {
|
||||||
return new SessionManagerProxy(Gio.DBus.session, 'org.gnome.SessionManager', '/org/gnome/SessionManager', initCallback, cancellable);
|
return new SessionManagerProxy(Gio.DBus.session, 'org.gnome.SessionManager', '/org/gnome/SessionManager', initCallback, cancellable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var InhibitFlags = {
|
||||||
|
LOGOUT: 1 << 0,
|
||||||
|
SWITCH: 1 << 1,
|
||||||
|
SUSPEND: 1 << 2,
|
||||||
|
IDLE: 1 << 3,
|
||||||
|
AUTOMOUNT: 1 << 4,
|
||||||
|
};
|
||||||
|
@ -626,8 +626,9 @@ class EndSessionDialog extends ModalDialog.ModalDialog {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let app = findAppFromInhibitor(inhibitor);
|
let app = findAppFromInhibitor(inhibitor);
|
||||||
|
const [flags] = app ? inhibitor.GetFlagsSync() : [0];
|
||||||
|
|
||||||
if (app) {
|
if (app && flags & GnomeSession.InhibitFlags.LOGOUT) {
|
||||||
let [description] = inhibitor.GetReasonSync();
|
let [description] = inhibitor.GetReasonSync();
|
||||||
let listItem = new Dialog.ListSectionItem({
|
let listItem = new Dialog.ListSectionItem({
|
||||||
icon_actor: app.create_icon_texture(_ITEM_ICON_SIZE),
|
icon_actor: app.create_icon_texture(_ITEM_ICON_SIZE),
|
||||||
@ -636,7 +637,8 @@ class EndSessionDialog extends ModalDialog.ModalDialog {
|
|||||||
});
|
});
|
||||||
this._applicationSection.list.add_child(listItem);
|
this._applicationSection.list.add_child(listItem);
|
||||||
} else {
|
} else {
|
||||||
// inhibiting app is a service, not an application
|
// inhibiting app is a service (not an application) or is not
|
||||||
|
// inhibiting logout/shutdown
|
||||||
this._applications.splice(this._applications.indexOf(inhibitor), 1);
|
this._applications.splice(this._applications.indexOf(inhibitor), 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user