diff --git a/js/ui/layout.js b/js/ui/layout.js index 5019036df..0c7a13426 100644 --- a/js/ui/layout.js +++ b/js/ui/layout.js @@ -259,7 +259,6 @@ const LayoutManager = new Lang.Class({ this._inOverview = true; this._updateVisibility(); - this._updateRegions(); }, hideOverview: function() { @@ -267,7 +266,6 @@ const LayoutManager = new Lang.Class({ this._inOverview = false; this._updateVisibility(); - this._queueUpdateRegions(); }, _sessionUpdated: function() { @@ -915,9 +913,6 @@ const LayoutManager = new Lang.Class({ }, _queueUpdateRegions: function() { - if (Main.sessionMode.isGreeter) - return; - if (this._startingUp) return; @@ -951,13 +946,16 @@ const LayoutManager = new Lang.Class({ }, _updateRegions: function() { - let rects = [], struts = [], i; - if (this._updateRegionIdle) { Meta.later_remove(this._updateRegionIdle); delete this._updateRegionIdle; } + // No need to update when we have a modal. + if (Main.modalCount > 0) + return GLib.SOURCE_REMOVE; + + let rects = [], struts = [], i; let isPopupMenuVisible = global.top_window_group.get_children().some(isPopupMetaWindow); let wantsInputRegion = !isPopupMenuVisible; @@ -1043,7 +1041,13 @@ const LayoutManager = new Lang.Class({ } return GLib.SOURCE_REMOVE; - } + }, + + modalEnded: function() { + // We don't update the stage input region while in a modal, + // so queue an update now. + this._queueUpdateRegions(); + }, }); Signals.addSignalMethods(LayoutManager.prototype); diff --git a/js/ui/main.js b/js/ui/main.js index be69ca149..f9bb59efb 100644 --- a/js/ui/main.js +++ b/js/ui/main.js @@ -454,6 +454,7 @@ function popModal(actor, timestamp) { if (modalCount > 0) return; + layoutManager.modalEnded(); global.end_modal(timestamp); Meta.enable_unredirect_for_screen(global.screen); keybindingMode = Shell.KeyBindingMode.NORMAL;