handle windows whose WM_TRANSIENT_FOR points to themselve

I consider this behavior broken and not respecting the standard, but it
happens in real life, and it’s better for i3 to not busy-loop in such a
situation :).

fixes #1259
This commit is contained in:
Michael Stapelberg 2014-06-12 21:16:45 +02:00
parent 1527f2b8a6
commit 5beaea3034
2 changed files with 14 additions and 1 deletions

View File

@ -407,6 +407,11 @@ void manage_window(xcb_window_t window, xcb_get_window_attributes_cookie_t cooki
Con *next_transient = con_by_window_id(transient_win->transient_for);
if (next_transient == NULL)
break;
/* Some clients (e.g. x11-ssh-askpass) actually set
* WM_TRANSIENT_FOR to their own window id, so break instead of
* looping endlessly. */
if (transient_win == next_transient->window)
break;
transient_win = next_transient->window;
}
}

View File

@ -286,7 +286,15 @@ void render_con(Con *con, bool render_fullscreen) {
is_transient_for = true;
break;
}
transient_con = con_by_window_id(transient_con->window->transient_for);
Con *next_transient = con_by_window_id(transient_con->window->transient_for);
if (next_transient == NULL)
break;
/* Some clients (e.g. x11-ssh-askpass) actually set
* WM_TRANSIENT_FOR to their own window id, so break instead of
* looping endlessly. */
if (transient_con == next_transient)
break;
transient_con = next_transient;
}
if (!is_transient_for)