[gnome-shell/gnome-3-34] switcherPopup: Dismiss when a system modal dialog opens
- From: Florian Müllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell/gnome-3-34] switcherPopup: Dismiss when a system modal dialog opens
- Date: Wed, 11 Dec 2019 21:40:03 +0000 (UTC)
commit 61fccf188ae16683d6847ee8ebe0f95bcd4c35c8
Author: Florian Müllner <fmuellner gnome org>
Date: Fri Dec 6 13:56:24 2019 +0100
switcherPopup: Dismiss when a system modal dialog opens
As system modal dialogs may open without user interaction (for instance
polkit or network agent requests), it is possible for them to pop up
while the app/window switcher is up.
The current result of having both up simultaneously is clearly broken,
so we can either dismiss the popup or prevent the modal dialog from
opening. Assume that the dialog indicates a more important action and
should therefore take precedence, so go with the former.
https://gitlab.gnome.org/GNOME/gnome-shell/issues/1536
js/ui/layout.js | 1 +
js/ui/modalDialog.js | 2 ++
js/ui/switcherPopup.js | 5 +++++
3 files changed, 8 insertions(+)
---
diff --git a/js/ui/layout.js b/js/ui/layout.js
index 744a8f1192..1441bfe0a8 100644
--- a/js/ui/layout.js
+++ b/js/ui/layout.js
@@ -189,6 +189,7 @@ var LayoutManager = GObject.registerClass({
'startup-complete': {},
'startup-prepared': {},
'monitors-changed': {},
+ 'system-modal-opened': {},
'keyboard-visible-changed': { param_types: [GObject.TYPE_BOOLEAN] } },
}, class LayoutManager extends GObject.Object {
_init() {
diff --git a/js/ui/modalDialog.js b/js/ui/modalDialog.js
index 1eeb15a956..64d02001b5 100644
--- a/js/ui/modalDialog.js
+++ b/js/ui/modalDialog.js
@@ -216,6 +216,8 @@ var ModalDialog = GObject.registerClass({
if (!Main.pushModal(this, params))
return false;
+ Main.layoutManager.emit('system-modal-opened');
+
this._hasModal = true;
if (this._savedKeyFocus) {
this._savedKeyFocus.grab_key_focus();
diff --git a/js/ui/switcherPopup.js b/js/ui/switcherPopup.js
index 96c85df381..693a415a02 100644
--- a/js/ui/switcherPopup.js
+++ b/js/ui/switcherPopup.js
@@ -46,6 +46,9 @@ var SwitcherPopup = GObject.registerClass({
Main.uiGroup.add_actor(this);
+ this._systemModalOpenedId =
+ Main.layoutManager.connect('system-modal-opened', () => this.destroy());
+
this._haveModal = false;
this._modifierMask = 0;
@@ -312,6 +315,8 @@ var SwitcherPopup = GObject.registerClass({
_onDestroy() {
this._popModal();
+ Main.layoutManager.disconnect(this._systemModalOpenedId);
+
if (this._motionTimeoutId != 0)
GLib.source_remove(this._motionTimeoutId);
if (this._initialDelayTimeoutId != 0)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]