performance: deactivate clones when hidden

This commit is contained in:
Tor Hedin Brønner
2020-01-13 14:09:14 +01:00
parent 0f0f9c4e7c
commit 4d032dc79d
+31 -13
View File
@@ -125,7 +125,7 @@ class Space extends Array {
let clip = new Clutter.Actor();
this.clip = clip;
let actor = new Clutter.Actor();
actor.hide(); // We keep the space actor hidden when inactive due to performance
this.hide(); // We keep the space actor hidden when inactive due to performance
this.actor = actor;
let cloneClip = new Clutter.Actor();
this.cloneClip = cloneClip;
@@ -272,6 +272,23 @@ class Space extends Array {
this.updateBackground.bind(this));
}
show() {
this.clip.show();
for (let col of this) {
for (let w of col) {
let actor = w.get_compositor_private();
w.clone.cloneActor.source = actor;
}
}
}
hide() {
this.clip.hide();
for (let col of this)
for (let w of col)
w.clone.cloneActor.source = null;
}
workArea() {
let workArea = Main.layoutManager.getWorkAreaForMonitor(this.monitor.index);
workArea.x -= this.monitor.x;
@@ -1298,7 +1315,7 @@ class Spaces extends Map {
this.selectedSpace = mru[0];
this.monitors.set(activeSpace.monitor, activeSpace);
for (let [monitor, space] of this.monitors) {
space.actor.show();
space.show();
space.clip.raise_top();
}
this.forEach(space => {
@@ -1581,7 +1598,7 @@ class Spaces extends Map {
space.border.opacity = 255;
space.border.show();
space.actor.show();
space.show();
let padding = (space.height * scale / 100) * padding_percentage;
let y = ((space.height + padding) * (i - to)) * scale;
@@ -1653,7 +1670,6 @@ class Spaces extends Map {
const padding_percentage = 4;
let last = monitorSpaces.length - 1;
monitorSpaces.forEach((space, i) => {
let actor = space.actor;
let padding = (space.height * scale / 100) * padding_percentage;
let center = (space.height - (space.height * scale)) / 2;
@@ -1666,8 +1682,8 @@ class Spaces extends Map {
space_y = center + (space.height + padding) * (i - to) * scale;
}
actor.show();
Tweener.addTween(actor,
space.show();
Tweener.addTween(space.actor,
{y: space_y,
time: prefs.animation_time,
scale_x: scale,
@@ -1714,7 +1730,7 @@ class Spaces extends Map {
space.border.opacity = 255;
space.border.show();
space.actor.show();
space.show();
let h;
if (i === 0)
@@ -1725,7 +1741,7 @@ class Spaces extends Map {
h = StackPositions.top;
else {
h = StackPositions.top;
space.actor.hide();
space.hide();
}
space.actor.set_position(0, space.height*h);
@@ -1822,9 +1838,9 @@ class Spaces extends Map {
h = StackPositions.bottom;
if (Math.abs(i - to) > 2) {
onComplete = () => space.actor.hide();
onComplete = () => space.hide();
} else {
space.actor.show();
space.show();
}
Tweener.addTween(actor,
@@ -1847,7 +1863,7 @@ class Spaces extends Map {
this.selectedSpace = to;
to.actor.show();
to.show();
let selected = to.selectedWindow;
if (selected)
ensureViewport(selected, to);
@@ -1867,7 +1883,7 @@ class Spaces extends Map {
// cases
for (const space of spaces.values()) {
if (!visible.get(space)) {
space.actor.hide();
space.hide();
}
}
@@ -2126,7 +2142,7 @@ function resizeHandler(metaWindow) {
let selected = metaWindow === space.selectedWindow;
if (inGrab) {
if (inGrab && !inGrab.dnd) {
// OK to layout directly from size-changed signal since layout wont resize the grab window
space.layout(false);
} else if (!space._inLayout && needLayout) {
@@ -2724,6 +2740,7 @@ function showWindow(metaWindow) {
if (!actor)
return false;
metaWindow.clone.cloneActor.hide();
metaWindow.clone.cloneActor.source = null;
actor.show();
return true;
}
@@ -2733,6 +2750,7 @@ function animateWindow(metaWindow) {
if (!actor)
return false;
metaWindow.clone.cloneActor.show();
metaWindow.clone.cloneActor.source = actor;
actor.hide();
return true;
}