diff --git a/x11/i3/Makefile b/x11/i3/Makefile index a2d31c065be..1715dd0e5d1 100644 --- a/x11/i3/Makefile +++ b/x11/i3/Makefile @@ -1,8 +1,9 @@ -# $OpenBSD: Makefile,v 1.46 2012/09/21 17:16:13 dcoppa Exp $ +# $OpenBSD: Makefile,v 1.47 2012/09/25 15:06:35 dcoppa Exp $ COMMENT = improved dynamic tiling window manager DISTNAME = i3-4.3 +REVISION = 0 CATEGORIES = x11 EXTRACT_SUFX = .tar.bz2 diff --git a/x11/i3/patches/patch-src_manage_c b/x11/i3/patches/patch-src_manage_c new file mode 100644 index 00000000000..805646d554a --- /dev/null +++ b/x11/i3/patches/patch-src_manage_c @@ -0,0 +1,36 @@ +$OpenBSD: patch-src_manage_c,v 1.7 2012/09/25 15:06:35 dcoppa Exp $ + +From 372d47842e7d71fde0a194761bf77dceed6e724c Mon Sep 17 00:00:00 2001 +From: Michael Stapelberg +Date: Mon, 24 Sep 2012 21:57:58 +0000 +Subject: Bugfix: Render workspaces created by assignments to use correct coordinates + +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). + +--- src/manage.c.orig Wed Sep 19 18:08:09 2012 ++++ src/manage.c Tue Sep 25 16:58:40 2012 +@@ -381,6 +381,22 @@ void manage_window(xcb_window_t window, xcb_get_window + /* 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: