From f6c12ae55dc0ea1663b82b8457d2354cbe1539f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Hedin=20Br=C3=B8nner?= Date: Sun, 3 Jun 2018 17:18:23 +0200 Subject: [PATCH] clickoverlays: show a preview on hover --- stackoverlay.js | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/stackoverlay.js b/stackoverlay.js index 437ba2a..b566292 100644 --- a/stackoverlay.js +++ b/stackoverlay.js @@ -110,8 +110,8 @@ class ClickOverlay { destroy() { for (let overlay of [this.left, this.right]) { let actor = overlay.overlay; - actor.disconnect(overlay.pressId); - actor.disconnect(overlay.releaseId); + [overlay.pressId, overlay.releaseId, overlay.enterId, + overlay.leaveId].forEach(id => actor.disconnect(id)); actor.destroy(); } this.enterMonitor.disconnect(this.enterSignal); @@ -144,6 +144,8 @@ var StackOverlay = new Lang.Class({ this.pressId = overlay.connect('button-press-event', () => { Main.activateWindow(this.target); + if (this.clone) + this.clone.destroy(); return true; }); this.releaseId = overlay.connect('button-release-event', () => { @@ -151,6 +153,27 @@ var StackOverlay = new Lang.Class({ return true; }); + this.enterId = overlay.connect('enter-event', () => { + if (this.clone) + this.clone.destroy(); + + let [x, y, mask] = global.get_pointer(); + let clone = new Clutter.Clone({ + source: this.target.get_compositor_private()}); + this.clone = clone; + clone.set_scale(0.15, 0.15); + Main.uiGroup.add_actor(clone); + + if (this._direction === Meta.MotionDirection.RIGHT) + x = monitor.x + monitor.width - clone.get_transformed_size()[0]; + else + x = monitor.x; + clone.set_position(x, y); + }); + this.leaveId = overlay.connect('leave-event', () => { + this.clone.destroy(); + }); + global.window_group.add_child(overlay); Main.layoutManager.trackChrome(overlay);