diff --git a/scratch.js b/scratch.js index 5050160..e0a92d2 100644 --- a/scratch.js +++ b/scratch.js @@ -2,13 +2,16 @@ const Extension = imports.misc.extensionUtils.extensions['paperwm@hedning:matrix const Meta = imports.gi.Meta; const utils = Extension.imports.utils; const debug = utils.debug; +let float; function makeScratch(metaWindow) { + metaWindow[float] = true; metaWindow.make_above(); metaWindow.stick(); } function unmakeScratch(metaWindow) { + metaWindow[float] = false; metaWindow.unmake_above(); metaWindow.unstick(); } @@ -22,7 +25,7 @@ function toggle(metaWindow) { } function isScratchWindow(metaWindow) { - return metaWindow && (metaWindow.above || metaWindow.minimized); + return metaWindow[float]; } /** Return scratch windows in MRU order */ @@ -60,6 +63,10 @@ const PopupMenu = imports.ui.popupMenu; const WindowMenu = imports.ui.windowMenu; const originalBuildMenu = WindowMenu.WindowMenu.prototype._buildMenu; +function init() { + float = Symbol(); +} + function enable() { WindowMenu.WindowMenu.prototype._buildMenu = function (window) { diff --git a/tiling.js b/tiling.js index 256df51..89cd103 100644 --- a/tiling.js +++ b/tiling.js @@ -831,6 +831,12 @@ function add_all_from_workspace(workspace) { let space = spaces.spaceOf(workspace); windows.forEach((meta_window, i) => { if(space.indexOf(meta_window) < 0 && add_filter(meta_window, true)) { + if (meta_window.above || meta_window.minimized) { + // Rough heuristic to figure out if a window should float + Scratch.makeScratch(meta_window); + return; + } + // Using add_handler is unreliable since it interacts with focus. space.push(meta_window); meta_window[focus_signal] = meta_window.connect("focus", focus_wrapper);