lookingGlass: Only update window list when visible
Updating the window list in the Looking Glass is a costly operation: it destroys a whole lot of actors, and recreates them. This triggers CSS changes, repaints, and allocations. It is specially bad when paired with Wayland's big number of window creations and deletions when showing Builder's and Epiphany's popup window. Only update the window list in the Looking Glass when it is visible. Related: https://gitlab.gnome.org/GNOME/mutter/issues/556 https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/719
This commit is contained in:
parent
7eb4088f45
commit
43b4f2c7d5
@ -304,6 +304,9 @@ var WindowList = class WindowList {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_updateWindowList() {
|
_updateWindowList() {
|
||||||
|
if (!this._lookingGlass.isOpen)
|
||||||
|
return;
|
||||||
|
|
||||||
this.actor.destroy_all_children();
|
this.actor.destroy_all_children();
|
||||||
let windows = global.get_window_actors();
|
let windows = global.get_window_actors();
|
||||||
let tracker = Shell.WindowTracker.get_default();
|
let tracker = Shell.WindowTracker.get_default();
|
||||||
@ -335,6 +338,10 @@ var WindowList = class WindowList {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
update() {
|
||||||
|
this._updateWindowList();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
Signals.addSignalMethods(WindowList.prototype);
|
Signals.addSignalMethods(WindowList.prototype);
|
||||||
|
|
||||||
@ -1099,6 +1106,8 @@ var LookingGlass = class LookingGlass {
|
|||||||
duration,
|
duration,
|
||||||
mode: Clutter.AnimationMode.EASE_OUT_QUAD
|
mode: Clutter.AnimationMode.EASE_OUT_QUAD
|
||||||
});
|
});
|
||||||
|
|
||||||
|
this._windowList.update();
|
||||||
}
|
}
|
||||||
|
|
||||||
close() {
|
close() {
|
||||||
@ -1124,5 +1133,9 @@ var LookingGlass = class LookingGlass {
|
|||||||
onComplete: () => this.actor.hide()
|
onComplete: () => this.actor.hide()
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get isOpen() {
|
||||||
|
return this._open;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
Signals.addSignalMethods(LookingGlass.prototype);
|
Signals.addSignalMethods(LookingGlass.prototype);
|
||||||
|
Loading…
Reference in New Issue
Block a user