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.
This commit is contained in:
Michael Stapelberg 2011-07-10 20:08:40 +02:00
parent 517833569d
commit afef42a4ac
1 changed files with 7 additions and 0 deletions

View File

@ -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); 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_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)); memcpy(&(state->rect), &rect, sizeof(Rect));
fake_notify = true; fake_notify = true;