diff --git a/js/ui/workspace.js b/js/ui/workspace.js index 5aa9ba66ca7768eec23731aad0a791614b9f2da6..f09f487142b9da3dc128e8d00358b5832d4340d5 100644 --- a/js/ui/workspace.js +++ b/js/ui/workspace.js @@ -110,6 +110,7 @@ var WindowClone = new Lang.Class({ this.metaWindow = realWindow.meta_window; this.metaWindow._delegate = this; this._workspace = workspace; + this._attachedDialogs = []; this._windowClone = new Clutter.Clone({ source: realWindow }); // We expect this.actor to be used for all interaction rather than @@ -208,6 +209,12 @@ var WindowClone = new Lang.Class({ }, addDialog(win) { + let realWin = win.get_compositor_private(); + if (this._attachedDialogs.includes(realWin)) + return; + + this._attachedDialogs.push(realWin); + let parent = win.get_transient_for(); while (parent.is_attached_dialog()) parent = parent.get_transient_for(); @@ -225,7 +232,7 @@ var WindowClone = new Lang.Class({ }, hasAttachedDialogs() { - return this.actor.get_n_children() > 1; + return this._attachedDialogs.length > 1; }, _doAddAttachedDialog(metaWin, realWin) { @@ -235,6 +242,9 @@ var WindowClone = new Lang.Class({ clone._posChangedId = metaWin.connect('position-changed', this._onMetaWindowSizeChanged.bind(this)); clone._destroyId = realWin.connect('destroy', () => { + let idx = this._attachedDialogs.indexOf(realWin); + this._attachedDialogs.splice(idx, 1); + clone.destroy(); this._onMetaWindowSizeChanged(); diff --git a/js/ui/workspaceThumbnail.js b/js/ui/workspaceThumbnail.js index cf21e13170adf93752150428e6e44bc710bef53b..b648821479873a9c53490dba736864e0fafa1ea4 100644 --- a/js/ui/workspaceThumbnail.js +++ b/js/ui/workspaceThumbnail.js @@ -151,7 +151,7 @@ var WindowClone = new Lang.Class({ _doAddAttachedDialog(metaDialog, realDialog) { let clone = new Clutter.Clone({ source: realDialog }); - this._updateDialogPosition(realDialog, clone); + this._updateDialogPosition(metaDialog, clone); clone._updateId = realDialog.connect('notify::position', dialog => { this._updateDialogPosition(dialog, clone); @@ -162,8 +162,7 @@ var WindowClone = new Lang.Class({ this.actor.add_child(clone); }, - _updateDialogPosition(realDialog, cloneDialog) { - let metaDialog = realDialog.meta_window; + _updateDialogPosition(metaDialog, cloneDialog) { let dialogRect = metaDialog.get_frame_rect(); let rect = this.metaWindow.get_frame_rect();