workspace: Don't keep stale clones in list
If a clone gets destroyed before the corresponding MetaWindow is removed from the workspace, we will still find it in the list of clones and try to destroy it again. Avoid the resulting warnings by updating the list of clones immediately when a clone is destroyed. https://bugzilla.gnome.org/show_bug.cgi?id=791233
This commit is contained in:
parent
ccadf6aca1
commit
d0bdea3178
@ -1443,17 +1443,9 @@ var Workspace = new Lang.Class({
|
|||||||
_doRemoveWindow(metaWin) {
|
_doRemoveWindow(metaWin) {
|
||||||
let win = metaWin.get_compositor_private();
|
let win = metaWin.get_compositor_private();
|
||||||
|
|
||||||
// find the position of the window in our list
|
let clone = this._removeWindowClone(metaWin);
|
||||||
let index = this._lookupIndex (metaWin);
|
|
||||||
|
|
||||||
if (index == -1)
|
|
||||||
return;
|
|
||||||
|
|
||||||
let clone = this._windows[index];
|
|
||||||
|
|
||||||
this._windows.splice(index, 1);
|
|
||||||
this._windowOverlays.splice(index, 1);
|
|
||||||
|
|
||||||
|
if (clone) {
|
||||||
// If metaWin.get_compositor_private() returned non-NULL, that
|
// If metaWin.get_compositor_private() returned non-NULL, that
|
||||||
// means the window still exists (and is just being moved to
|
// means the window still exists (and is just being moved to
|
||||||
// another workspace or something), so set its overviewHint
|
// another workspace or something), so set its overviewHint
|
||||||
@ -1470,7 +1462,7 @@ var Workspace = new Lang.Class({
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
clone.destroy();
|
clone.destroy();
|
||||||
|
}
|
||||||
|
|
||||||
// We need to reposition the windows; to avoid shuffling windows
|
// We need to reposition the windows; to avoid shuffling windows
|
||||||
// around while the user is interacting with the workspace, we delay
|
// around while the user is interacting with the workspace, we delay
|
||||||
@ -1865,6 +1857,9 @@ var Workspace = new Lang.Class({
|
|||||||
clone.connect('size-changed', () => {
|
clone.connect('size-changed', () => {
|
||||||
this._recalculateWindowPositions(WindowPositionFlags.NONE);
|
this._recalculateWindowPositions(WindowPositionFlags.NONE);
|
||||||
});
|
});
|
||||||
|
clone.actor.connect('destroy', () => {
|
||||||
|
this._removeWindowClone(clone.metaWindow);
|
||||||
|
});
|
||||||
|
|
||||||
this.actor.add_actor(clone.actor);
|
this.actor.add_actor(clone.actor);
|
||||||
|
|
||||||
@ -1886,6 +1881,17 @@ var Workspace = new Lang.Class({
|
|||||||
return [clone, overlay];
|
return [clone, overlay];
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_removeWindowClone(metaWin) {
|
||||||
|
// find the position of the window in our list
|
||||||
|
let index = this._lookupIndex (metaWin);
|
||||||
|
|
||||||
|
if (index == -1)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
this._windowOverlays.splice(index, 1);
|
||||||
|
return this._windows.splice(index, 1).pop();
|
||||||
|
},
|
||||||
|
|
||||||
_onShowOverlayClose(windowOverlay) {
|
_onShowOverlayClose(windowOverlay) {
|
||||||
for (let i = 0; i < this._windowOverlays.length; i++) {
|
for (let i = 0; i < this._windowOverlays.length; i++) {
|
||||||
let overlay = this._windowOverlays[i];
|
let overlay = this._windowOverlays[i];
|
||||||
|
Loading…
Reference in New Issue
Block a user