Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 17 additions & 6 deletions lib/extension/window.js
Original file line number Diff line number Diff line change
Expand Up @@ -1694,6 +1694,9 @@ export class WindowManager extends GObject.Object {
nodeWindow = this.tree.findNodeByActor(actor);

if (nodeWindow?.isWindow()) {
// a window closed while it was being dragged (e.g. a browser tab dropped back into its
// window) would leave its drop preview on screen
this._removePreviewHint(nodeWindow);
this.tree.removeNode(nodeWindow);
this.renderTree("window-destroy-quick", true);
this.removeFloatOverride(nodeWindow.nodeValue, true);
Expand Down Expand Up @@ -2501,9 +2504,22 @@ export class WindowManager extends GObject.Object {
}
}

/** Remove the drop preview a drag showed for `nodeWindow`, if any. */
_removePreviewHint(nodeWindow) {
const previewHint = nodeWindow?.previewHint;
if (!previewHint) return;
nodeWindow.previewHint = null;
previewHint.hide();
if (global.window_group.contains(previewHint)) global.window_group.remove_child(previewHint);
previewHint.destroy();
}

_handleGrabOpEnd(_display, _metaWindow, grabOp) {
this._stopLiveResizeLoop();
this.unfreezeRender();
// The drop preview belongs to the window that was dragged, which may not have the focus any
// more: remove it whichever window has the focus now (#529, #433)
if (_metaWindow) this._removePreviewHint(this.findNodeWindow(_metaWindow));
let focusMetaWindow = this.focusMetaWindow;
if (!focusMetaWindow) return;
let focusNodeWindow = this.findNodeWindow(focusMetaWindow);
Expand Down Expand Up @@ -2549,12 +2565,7 @@ export class WindowManager extends GObject.Object {
focusNodeWindow.grabMode = null;
focusNodeWindow.initGrabOp = null;

if (focusNodeWindow.previewHint) {
focusNodeWindow.previewHint.hide();
global.window_group.remove_child(focusNodeWindow.previewHint);
focusNodeWindow.previewHint.destroy();
focusNodeWindow.previewHint = null;
}
this._removePreviewHint(focusNodeWindow);

if (focusNodeWindow.mode === WINDOW_MODES.GRAB_TILE) {
focusNodeWindow.mode = WINDOW_MODES.TILE;
Expand Down