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:
parent
1527f2b8a6
commit
5beaea3034
|
@ -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);
|
Con *next_transient = con_by_window_id(transient_win->transient_for);
|
||||||
if (next_transient == NULL)
|
if (next_transient == NULL)
|
||||||
break;
|
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;
|
transient_win = next_transient->window;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
10
src/render.c
10
src/render.c
|
@ -286,7 +286,15 @@ void render_con(Con *con, bool render_fullscreen) {
|
||||||
is_transient_for = true;
|
is_transient_for = true;
|
||||||
break;
|
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)
|
if (!is_transient_for)
|
||||||
|
|
Loading…
Reference in New Issue