diff --git a/js/ui/layout.js b/js/ui/layout.js index 7fb9f2419..c7dd6287f 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 c29b89ba7..caa874454 100644 --- a/js/ui/modalDialog.js +++ b/js/ui/modalDialog.js @@ -219,6 +219,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 48f44c90f..945f4020a 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; @@ -319,6 +322,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)