[gnome-shell] windowManager: Use Sets to track ongoing effects



commit cb7374b1ec0ecc43265668272984a8f5490140b1
Author: Florian Müllner <fmuellner gnome org>
Date:   Fri Nov 8 18:00:05 2019 +0100

    windowManager: Use Sets to track ongoing effects
    
    We only care whether an effect is ongoing for an actor, not about
    any particular order. Sets are more convenient than arrays in that
    case, so use them instead.
    
    https://gitlab.gnome.org/GNOME/mutter/issues/655
    https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/815

 js/ui/windowManager.js | 51 +++++++++++++++++++++-----------------------------
 1 file changed, 21 insertions(+), 30 deletions(-)
---
diff --git a/js/ui/windowManager.js b/js/ui/windowManager.js
index 97f4ef8a98..74d4faf7fa 100644
--- a/js/ui/windowManager.js
+++ b/js/ui/windowManager.js
@@ -699,16 +699,16 @@ var WindowManager = class {
     constructor() {
         this._shellwm =  global.window_manager;
 
-        this._minimizing = [];
-        this._unminimizing = [];
-        this._mapping = [];
-        this._resizing = [];
-        this._destroying = [];
+        this._minimizing = new Set();
+        this._unminimizing = new Set();
+        this._mapping = new Set();
+        this._resizing = new Set();
+        this._destroying = new Set();
         this._movingWindow = null;
 
         this._dimmedWindows = [];
 
-        this._skippedActors = [];
+        this._skippedActors = new Set();
 
         this._allowedKeybindings = {};
 
@@ -1256,7 +1256,7 @@ var WindowManager = class {
     }
 
     skipNextEffect(actor) {
-        this._skippedActors.push(actor);
+        this._skippedActors.add(actor);
     }
 
     setCustomKeybindingHandler(name, modes, handler) {
@@ -1285,7 +1285,7 @@ var WindowManager = class {
     }
 
     _shouldAnimateActor(actor, types) {
-        if (this._removeEffect(this._skippedActors, actor))
+        if (this._skippedActors.delete(actor))
             return false;
 
         if (!this._shouldAnimate())
@@ -1298,15 +1298,6 @@ var WindowManager = class {
         return types.includes(type);
     }
 
-    _removeEffect(list, actor) {
-        let idx = list.indexOf(actor);
-        if (idx != -1) {
-            list.splice(idx, 1);
-            return true;
-        }
-        return false;
-    }
-
     _minimizeWindow(shellwm, actor) {
         let types = [Meta.WindowType.NORMAL,
                      Meta.WindowType.MODAL_DIALOG,
@@ -1318,7 +1309,7 @@ var WindowManager = class {
 
         actor.set_scale(1.0, 1.0);
 
-        this._minimizing.push(actor);
+        this._minimizing.add(actor);
 
         if (actor.meta_window.is_monitor_sized()) {
             actor.ease({
@@ -1367,7 +1358,7 @@ var WindowManager = class {
     }
 
     _minimizeWindowDone(shellwm, actor) {
-        if (this._removeEffect(this._minimizing, actor)) {
+        if (this._minimizing.delete(actor)) {
             actor.remove_all_transitions();
             actor.set_scale(1.0, 1.0);
             actor.set_opacity(255);
@@ -1386,7 +1377,7 @@ var WindowManager = class {
             return;
         }
 
-        this._unminimizing.push(actor);
+        this._unminimizing.add(actor);
 
         if (actor.meta_window.is_monitor_sized()) {
             actor.opacity = 0;
@@ -1433,7 +1424,7 @@ var WindowManager = class {
     }
 
     _unminimizeWindowDone(shellwm, actor) {
-        if (this._removeEffect(this._unminimizing, actor)) {
+        if (this._unminimizing.delete(actor)) {
             actor.remove_all_transitions();
             actor.set_scale(1.0, 1.0);
             actor.set_opacity(255);
@@ -1481,7 +1472,7 @@ var WindowManager = class {
     _sizeChangedWindow(shellwm, actor) {
         if (!actor.__animationInfo)
             return;
-        if (this._resizing.includes(actor))
+        if (this._resizing.has(actor))
             return;
 
         let actorClone = actor.__animationInfo.clone;
@@ -1491,7 +1482,7 @@ var WindowManager = class {
         let scaleX = targetRect.width / sourceRect.width;
         let scaleY = targetRect.height / sourceRect.height;
 
-        this._resizing.push(actor);
+        this._resizing.add(actor);
 
         // Now scale and fade out the clone
         actorClone.ease({
@@ -1539,7 +1530,7 @@ var WindowManager = class {
     }
 
     _sizeChangeWindowDone(shellwm, actor) {
-        if (this._removeEffect(this._resizing, actor)) {
+        if (this._resizing.delete(actor)) {
             actor.remove_all_transitions();
             actor.scale_x = 1.0;
             actor.scale_y = 1.0;
@@ -1638,7 +1629,7 @@ var WindowManager = class {
             actor.scale_y = 0.05;
             actor.opacity = 0;
             actor.show();
-            this._mapping.push(actor);
+            this._mapping.add(actor);
 
             actor.ease({
                 opacity: 255,
@@ -1655,7 +1646,7 @@ var WindowManager = class {
             actor.scale_y = 0;
             actor.opacity = 0;
             actor.show();
-            this._mapping.push(actor);
+            this._mapping.add(actor);
 
             actor.ease({
                 opacity: 255,
@@ -1672,7 +1663,7 @@ var WindowManager = class {
     }
 
     _mapWindowDone(shellwm, actor) {
-        if (this._removeEffect(this._mapping, actor)) {
+        if (this._mapping.delete(actor)) {
             actor.remove_all_transitions();
             actor.opacity = 255;
             actor.set_pivot_point(0, 0);
@@ -1709,7 +1700,7 @@ var WindowManager = class {
         switch (actor.meta_window.window_type) {
         case Meta.WindowType.NORMAL:
             actor.set_pivot_point(0.5, 0.5);
-            this._destroying.push(actor);
+            this._destroying.add(actor);
 
             actor.ease({
                 opacity: 0,
@@ -1723,7 +1714,7 @@ var WindowManager = class {
         case Meta.WindowType.MODAL_DIALOG:
         case Meta.WindowType.DIALOG:
             actor.set_pivot_point(0.5, 0.5);
-            this._destroying.push(actor);
+            this._destroying.add(actor);
 
             if (window.is_attached_dialog()) {
                 let parent = window.get_transient_for();
@@ -1746,7 +1737,7 @@ var WindowManager = class {
     }
 
     _destroyWindowDone(shellwm, actor) {
-        if (this._removeEffect(this._destroying, actor)) {
+        if (this._destroying.delete(actor)) {
             let parent = actor.get_meta_window().get_transient_for();
             if (parent && actor._parentDestroyId) {
                 parent.disconnect(actor._parentDestroyId);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]