appMenu: Only show 'Quit' for running apps
The top bar menu always corresponds to a running app, so it made sense to include the 'Quit' item unconditionally. That won't be the case for the overview context menus, so handle app state changes and show/hide the item as necessary. Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1948>
This commit is contained in:
parent
991d9597e0
commit
321e07c3c6
@ -71,17 +71,34 @@ var AppMenu = class AppMenu extends PopupMenu.PopupMenu {
|
|||||||
|
|
||||||
this.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
this.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
||||||
|
|
||||||
this.addAction(_('Quit'), () => this._app.request_quit());
|
this._quitItem =
|
||||||
|
this.addAction(_('Quit'), () => this._app.request_quit());
|
||||||
|
|
||||||
this._signals = [];
|
this._signals = [];
|
||||||
this._signals.push([
|
this._signals.push([
|
||||||
this._appSystem,
|
this._appSystem,
|
||||||
this._appSystem.connect('installed-changed',
|
this._appSystem.connect('installed-changed',
|
||||||
() => this._updateDetailsVisibility()),
|
() => this._updateDetailsVisibility()),
|
||||||
|
], [
|
||||||
|
this._appSystem,
|
||||||
|
this._appSystem.connect('app-state-changed',
|
||||||
|
this._onAppStateChanged.bind(this)),
|
||||||
]);
|
]);
|
||||||
|
this._updateQuitItem();
|
||||||
this._updateDetailsVisibility();
|
this._updateDetailsVisibility();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_onAppStateChanged(sys, app) {
|
||||||
|
if (this._app !== app)
|
||||||
|
return;
|
||||||
|
|
||||||
|
this._updateQuitItem();
|
||||||
|
}
|
||||||
|
|
||||||
|
_updateQuitItem() {
|
||||||
|
this._quitItem.visible = this._app?.state === Shell.AppState.RUNNING;
|
||||||
|
}
|
||||||
|
|
||||||
_updateDetailsVisibility() {
|
_updateDetailsVisibility() {
|
||||||
const sw = this._appSystem.lookup_app('org.gnome.Software.desktop');
|
const sw = this._appSystem.lookup_app('org.gnome.Software.desktop');
|
||||||
this._detailsItem.visible = sw !== null;
|
this._detailsItem.visible = sw !== null;
|
||||||
@ -149,6 +166,7 @@ var AppMenu = class AppMenu extends PopupMenu.PopupMenu {
|
|||||||
|
|
||||||
this._newWindowItem.visible =
|
this._newWindowItem.visible =
|
||||||
app && app.can_open_new_window() && !actions.includes('new-window');
|
app && app.can_open_new_window() && !actions.includes('new-window');
|
||||||
|
this._updateQuitItem();
|
||||||
}
|
}
|
||||||
|
|
||||||
_queueUpdateWindowsSection() {
|
_queueUpdateWindowsSection() {
|
||||||
|
Loading…
Reference in New Issue
Block a user