From a48e013395b0ed46ca48b0cf2ab19b5ed5572ced Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Hedin=20Br=C3=B8nner?= Date: Thu, 26 Apr 2018 13:51:39 +0200 Subject: [PATCH] Add ClickOverlay class --- stackoverlay.js | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/stackoverlay.js b/stackoverlay.js index 725a11b..06ed61f 100644 --- a/stackoverlay.js +++ b/stackoverlay.js @@ -56,6 +56,54 @@ function createAppIcon(metaWindow, size) { return appIcon; } +/** + */ +class ClickOverlay { + constructor(monitor) { + this.monitor = monitor; + this.left = new StackOverlay(Meta.MotionDirection.LEFT, monitor); + this.right = new StackOverlay(Meta.MotionDirection.RIGHT, monitor); + + let enterMonitor = new Clutter.Actor({reactive: true}); + this.enterMonitor = enterMonitor; + enterMonitor.set_position(monitor.x, monitor.y); + + Main.uiGroup.add_actor(enterMonitor); + + this.enterSignal = enterMonitor.connect( + 'enter-event', () => { + this.reset(); + let space = Tiling.spaces.monitors.get(this.monitor); + space.workspace.activate(global.get_current_time()); + return Clutter.EVENT_STOP; + } + ); + } + + activate() { + let monitor = this.monitor; + this.enterMonitor.set_position(monitor.x, monitor.y); + this.enterMonitor.set_size(monitor.width, monitor.height); + } + + reset() { + this.left.setTarget(null); + this.right.setTarget(null); + this.enterMonitor.set_size(0, 0); + } + + destroy() { + for (let overlay of [this.left, this.right]) { + let actor = overlay.overlay; + actor.disconnect(overlay.pressId); + actor.disconnect(overlay.releaseId); + actor.destroy(); + } + this.enterMonitor.disconnect(this.enterSignal); + this.enterMonitor.destroy(); + } +} + var StackOverlay = new Lang.Class({ Name: 'Stackoverlay',