diff --git a/tiling.js b/tiling.js index 43c940d..345a557 100644 --- a/tiling.js +++ b/tiling.js @@ -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; }