From a858af73f4665d40997bd8b5306a914af0ac91d3 Mon Sep 17 00:00:00 2001 From: Lucas Oskorep Date: Tue, 20 May 2025 01:59:08 -0400 Subject: [PATCH] fix: allow windows to be moved in the overview --- src/wm/windowManager.ts | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/src/wm/windowManager.ts b/src/wm/windowManager.ts index 71c8dd4..ed83451 100644 --- a/src/wm/windowManager.ts +++ b/src/wm/windowManager.ts @@ -46,6 +46,8 @@ export default class WindowManager implements IWindowManager { _grabbedWindowId: number = _UNUSED_WINDOW_ID; _changingGrabbedMonitor: boolean = false; + _showingOverview: boolean = false; + constructor() { @@ -74,6 +76,10 @@ export default class WindowManager implements IWindowManager { }), global.display.connect("window-entered-monitor", (display, monitor, window) => { Logger.log("WINDOW HAS ENTERED NEW MONITOR!") + if (this._showingOverview) { + Logger.log("WINDOW HAS ENTERED NEW MONITOR IN OVERVIEW - MOVING") + this._moveWindowToMonitor(window, monitor) + } }), global.display.connect('window-created', (display, window) => { this.handleWindowCreated(display, window); @@ -122,6 +128,7 @@ export default class WindowManager implements IWindowManager { Main.overview.connect("hiding", () => { // this.fromOverview = true; Logger.log("HIDING OVERVIEW") + this._showingOverview = false; this._tileMonitors(); // const eventObj = { // name: "focus-after-overview", @@ -132,7 +139,7 @@ export default class WindowManager implements IWindowManager { // this.queueEvent(eventObj); }), Main.overview.connect("showing", () => { - // this.toOverview = true; + this._showingOverview = true; Logger.log("SHOWING OVERVIEW"); }), ]; @@ -209,6 +216,25 @@ export default class WindowManager implements IWindowManager { this._getWrappedWindow(window)?.stopDragging(); Logger.info("Release Location", window.get_monitor(), rect.x, rect.y, rect.width, rect.height) // previously window was moved to a new monitor here instead of it being fluid during drag events. + const old_mon_id = this._grabbedWindowMonitor; + const new_mon_id = window.get_monitor(); + Logger.info("MONITOR MATCH", old_mon_id !== new_mon_id); + if (old_mon_id !== new_mon_id) { + Logger.trace("MOVING MONITOR"); + let old_mon = this._monitors.get(old_mon_id); + let new_mon = this._monitors.get(new_mon_id); + if (old_mon === undefined || new_mon === undefined) { + return; + } + + let wrapped = old_mon.getWindow(window.get_id()) + if (wrapped === undefined) { + wrapped = new WindowWrapper(window, this.handleWindowMinimized); + } else { + old_mon.removeWindow(wrapped) + } + new_mon.addWindow(wrapped) + } this._tileMonitors(); Logger.info("monitor_start and monitor_end", this._grabbedWindowMonitor, window.get_monitor()); }