From 321e07c3c6be5339e1df50218a8cf031915f8add Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Thu, 12 Aug 2021 02:47:23 +0200 Subject: [PATCH] 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: --- js/ui/appMenu.js | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/js/ui/appMenu.js b/js/ui/appMenu.js index afd04d4b8..7f25566e0 100644 --- a/js/ui/appMenu.js +++ b/js/ui/appMenu.js @@ -71,17 +71,34 @@ var AppMenu = class AppMenu extends PopupMenu.PopupMenu { 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.push([ this._appSystem, this._appSystem.connect('installed-changed', () => this._updateDetailsVisibility()), + ], [ + this._appSystem, + this._appSystem.connect('app-state-changed', + this._onAppStateChanged.bind(this)), ]); + this._updateQuitItem(); this._updateDetailsVisibility(); } + _onAppStateChanged(sys, app) { + if (this._app !== app) + return; + + this._updateQuitItem(); + } + + _updateQuitItem() { + this._quitItem.visible = this._app?.state === Shell.AppState.RUNNING; + } + _updateDetailsVisibility() { const sw = this._appSystem.lookup_app('org.gnome.Software.desktop'); this._detailsItem.visible = sw !== null; @@ -149,6 +166,7 @@ var AppMenu = class AppMenu extends PopupMenu.PopupMenu { this._newWindowItem.visible = app && app.can_open_new_window() && !actions.includes('new-window'); + this._updateQuitItem(); } _queueUpdateWindowsSection() {