From: Michael Stapelberg Date: Mon, 24 Sep 2012 21:57:58 +0000 (+0200) Subject: Bugfix: Render workspaces created by assignments to use correct coordinates (Thanks... X-Git-Tag: 4.4~110^2^2 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=372d47842e7d71fde0a194761bf77dceed6e724c;p=i3%2Fi3 Bugfix: Render workspaces created by assignments to use correct coordinates (Thanks meaneye) Previously, i3 would send width=0, height=0 to windows which were put on workspaces created by an assignment (that is, invisible workspaces, which do not get rendered normally). fixes #653 --- diff --git a/src/manage.c b/src/manage.c index 1dc39b9e..9a5a4cf3 100644 --- a/src/manage.c +++ b/src/manage.c @@ -381,6 +381,22 @@ void manage_window(xcb_window_t window, xcb_get_window_attributes_cookie_t cooki /* Check if any assignments match */ run_assignments(cwindow); + /* If this window was put onto an invisible workspace (via assignments), we + * render this workspace. It wouldn’t be rendered in our normal code path + * because only the visible workspaces get rendered. + * + * By rendering the workspace, we assign proper coordinates (read: not + * width=0, height=0) to the window, which is important for windows who + * actually use them to position their GUI elements, e.g. rhythmbox. */ + if (ws && !workspace_is_visible(ws)) { + /* This is a bit hackish: we need to copy the content container’s rect + * to the workspace, because calling render_con() on the content + * container would also take the shortcut and not render the invisible + * workspace at all. However, just calling render_con() on the + * workspace isn’t enough either — it needs the rect. */ + ws->rect = ws->parent->rect; + render_con(ws, true); + } tree_render(); geom_out: