fix: allow windows to be moved in the overview

This commit is contained in:
Lucas Oskorep
2025-05-20 01:59:08 -04:00
parent ecb5a568cd
commit a858af73f4

View File

@ -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());
}