[gnome-shell] layout: Don't update the input region while we have a modal
- From: Jasper St. Pierre <jstpierre src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] layout: Don't update the input region while we have a modal
- Date: Tue, 30 Sep 2014 06:44:23 +0000 (UTC)
commit 0ca2fee54fb9be9d5f2006d23bdf52b4b91b91c6
Author: Jasper St. Pierre <jstpierre mecheye net>
Date: Fri Sep 19 18:54:31 2014 -0600
layout: Don't update the input region while we have a modal
If we have a modal, the stage's input region doesn't really matter --
all events go to us anyway. To avoid doing extra work doing animations
when we have a modal, like menus, the overview, and the message tray,
just fizzle out all updates.
To make sure we catch updates, update the input region whenever we end a
modal.
https://bugzilla.gnome.org/show_bug.cgi?id=737001
js/ui/layout.js | 20 ++++++++++++--------
js/ui/main.js | 1 +
2 files changed, 13 insertions(+), 8 deletions(-)
---
diff --git a/js/ui/layout.js b/js/ui/layout.js
index 5019036..0c7a134 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 be69ca1..f9bb59e 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;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]