From d7fa57592ccbfdb3d25a043d09a855e901ec362d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ole=20J=C3=B8rgen=20Br=C3=B8nner?= Date: Wed, 27 Sep 2017 21:26:08 +0200 Subject: [PATCH] (empty) Minimap for all spaces! Not hooked up to 'window-added/removed' so the map will be empty. --- minimap.js | 96 +++++++++++++++++++++++++----------------------------- tiling.js | 7 ++-- utils.js | 2 +- 3 files changed, 49 insertions(+), 56 deletions(-) diff --git a/minimap.js b/minimap.js index 04226ae..a70ee5d 100644 --- a/minimap.js +++ b/minimap.js @@ -2,12 +2,6 @@ Clutter = imports.gi.Clutter; Tweener = imports.ui.tweener; Lang = imports.lang; -if (window.mm) { - mm.viewport.destroy(); -} - -mm = null; - calcOffset = function(metaWindow) { let buffer = metaWindow.get_buffer_rect(); let frame = metaWindow.get_frame_rect(); @@ -16,49 +10,21 @@ calcOffset = function(metaWindow) { return [x_offset, y_offset]; } -layout = function(actors) { - - function tweenTo(actor, x) { - let [dx, dy] = calcOffset(actor.meta_window); - // actor.set_pivot_point(0, 0); - Tweener.addTween(actor, { x: x - dx - , scale_x: 1 - , scale_y: 1 - , time: 0.25 - , transition: "easeInOutQuad"}); - } - - function propagate_forward(i, leftEdge, gap) { - if(i < 0 || i >= actors.length) - return; - let actor = actors[i]; - let w = actor.meta_window.get_frame_rect().width; - let x = leftEdge; - - tweenTo(actor, x); - - propagate_forward(i+1, x + w + gap, gap); - } - - propagate_forward(0, 0, window_gap); -} - allocationChanged = function allocationChanged(actor, propertySpec) { - layout(mm.viewport.clones); + this.layout(this.clones); } -createMinimap = function(workspace) { - let space = spaces[workspace.index()].slice(); +function createMinimap(space) { + let viewport = new Clutter.Actor(); let clones = space.map((mw) => { let windowActor = mw.get_compositor_private() let clone = new Clutter.Clone({ source: windowActor }); clone.meta_window = mw; windowActor.connect("notify::allocation", - dynamic_function_ref("allocationChanged")); + Lang.bind(viewport, dynamic_function_ref("allocationChanged"))); return clone; }); let minimapActor = new Clutter.Actor(); - let viewport = new Clutter.Actor(); clones.forEach(clone => { minimapActor.add_actor(clone); }) @@ -108,7 +74,41 @@ createMinimap = function(workspace) { } viewport.unfold = function () { - layout(clones); + viewport.layout(clones); + } + + viewport.toggle = function() { + viewport.visible = !viewport.visible; + } + + viewport.layout = function(actors) { + function tweenTo(actor, x) { + let [dx, dy] = calcOffset(actor.meta_window); + // actor.set_pivot_point(0, 0); + Tweener.addTween(actor, { x: x - dx + , scale_x: 1 + , scale_y: 1 + , time: 0.25 + , transition: "easeInOutQuad"}); + } + + function propagate_forward(i, leftEdge, gap) { + if(i < 0 || i >= actors.length) + return; + let actor = actors[i]; + let w = actor.meta_window.get_frame_rect().width; + let x = leftEdge; + + tweenTo(actor, x); + + propagate_forward(i+1, x + w + gap, gap); + } + + propagate_forward(0, 0, window_gap); + } + + viewport.sync = function(originX) { + Tweener.addTween(minimapActor, { x: originX, time: 0.25, transition: 'easeInOutQuad' }); } viewport.clones = clones; @@ -118,23 +118,15 @@ createMinimap = function(workspace) { viewport.add_actor(minimapActor); viewport.set_background_color(Clutter.Color.get_static(3)) viewport.hide(); - return {viewport: viewport, minimap: minimapActor}; -} -minimapSyncFn = function(originX) { - Tweener.addTween(mm.minimap, { x: originX, time: 0.25, transition: 'easeInOutQuad' }); -} + viewport.layout(viewport.clones); + global.stage.add_actor(viewport) + viewport.x = (primary.width - viewport.get_transformed_size()[0])/2; -toggleMinimap = function() { - if (!mm) { - mm = createMinimap(global.screen.get_active_workspace()); - layout(mm.viewport.clones); - global.stage.add_actor(mm.viewport) - mm.viewport.x = (primary.width - mm.viewport.get_transformed_size()[0])/2; - } - mm.viewport.visible = !mm.viewport.visible; + return viewport; } // bg=Main.layoutManager._backgroundGroup.get_children()[0] // bgc= new Clutter.Clone({source:bg}) + diff --git a/tiling.js b/tiling.js index 32540fc..1f892b2 100644 --- a/tiling.js +++ b/tiling.js @@ -10,6 +10,8 @@ const Shell = imports.gi.Shell; const Gio = imports.gi.Gio; const utils = Extension.imports.utils; +Minimap = Extension.imports.minimap; + let preferences = Extension.imports.convenience.getSettings(); // Gap between windows window_gap = preferences.get_int('window-gap'); @@ -53,6 +55,7 @@ Space = (workspace) => { space.moving = false; space.leftStack = 0; space.rightStack = 0; + space.minimap = Minimap.createMinimap(space); return space; } @@ -299,9 +302,7 @@ ensure_viewport = (space, meta_window, force) => { debug('delay', delay) } let newOriginX = move_to(space, meta_window, x, y, delay, transition); - if(window.minimapSyncFn) { - window.minimapSyncFn(newOriginX); - } + space.minimap.sync(newOriginX); } focus_handler = (meta_window, user_data) => { diff --git a/utils.js b/utils.js index 7d465cd..99b7542 100644 --- a/utils.js +++ b/utils.js @@ -39,7 +39,7 @@ framestr = (rect) => { dynamic_function_ref = (handler_name, owner_obj) => { owner_obj = owner_obj || window; return function() { - owner_obj[handler_name].apply(owner_obj, arguments); + owner_obj[handler_name].apply(this, arguments); } }