From afef42a4acbc6c4808fef6c0ae128f01be0e1271 Mon Sep 17 00:00:00 2001 From: Michael Stapelberg Date: Sun, 10 Jul 2011 20:08:40 +0200 Subject: [PATCH] x: set the contents of a decoration window immediately after changing its size Reduces flickering. A window loses its contents when being resized, so we have to restore them as fast as possible. --- src/x.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/x.c b/src/x.c index 061984f6..492442a7 100644 --- a/src/x.c +++ b/src/x.c @@ -585,7 +585,14 @@ void x_push_node(Con *con) { } DLOG("setting rect (%d, %d, %d, %d)\n", rect.x, rect.y, rect.width, rect.height); + /* flush to ensure that the following commands are sent in a single + * buffer and will be processed directly afterwards (the contents of a + * window get lost when resizing it, therefore we want to provide it as + * fast as possible) */ + xcb_flush(conn); xcb_set_window_rect(conn, con->frame, rect); + xcb_copy_area(conn, con->pixmap, con->frame, con->pm_gc, 0, 0, 0, 0, con->rect.width, con->rect.height); + xcb_flush(conn); memcpy(&(state->rect), &rect, sizeof(Rect)); fake_notify = true;