workspace: Fix infinite loop when finding parent window of dialogs

When a dialog is added to a window while the overview is shown, we get
its parent using get_transient_for() so we can add it to the right
window clone.

If we have multiple layers of dialogs we have to do this recursively
until we find the root ancestor. This case currently results in an
infinite loop: Since parent is always set to the same window, the
while-condition will always be true.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/180


(cherry picked from commit 52cbc299a7)
This commit is contained in:
verdre 2018-07-23 12:22:34 +00:00 committed by Marco Trevisan
parent 82886b7ee8
commit d08497414f
2 changed files with 2 additions and 2 deletions

View File

@ -1507,7 +1507,7 @@ var Workspace = new Lang.Class({
if (metaWin.is_attached_dialog()) { if (metaWin.is_attached_dialog()) {
let parent = metaWin.get_transient_for(); let parent = metaWin.get_transient_for();
while (parent.is_attached_dialog()) while (parent.is_attached_dialog())
parent = metaWin.get_transient_for(); parent = parent.get_transient_for();
let idx = this._lookupIndex (parent); let idx = this._lookupIndex (parent);
if (idx < 0) { if (idx < 0) {

View File

@ -416,7 +416,7 @@ var WorkspaceThumbnail = new Lang.Class({
} else if (metaWin.is_attached_dialog()) { } else if (metaWin.is_attached_dialog()) {
let parent = metaWin.get_transient_for(); let parent = metaWin.get_transient_for();
while (parent.is_attached_dialog()) while (parent.is_attached_dialog())
parent = metaWin.get_transient_for(); parent = parent.get_transient_for();
let idx = this._lookupIndex (parent); let idx = this._lookupIndex (parent);
if (idx < 0) { if (idx < 0) {