x: when rendering stacked/tabbed cons, only update decoration once, saves some CopyAreas
This commit is contained in:
parent
8be26c9a22
commit
0d8dd571f8
9
src/x.c
9
src/x.c
|
@ -452,7 +452,6 @@ void x_draw_decoration(Con *con) {
|
||||||
|
|
||||||
copy_pixmaps:
|
copy_pixmaps:
|
||||||
xcb_copy_area(conn, con->pixmap, con->frame, con->pm_gc, 0, 0, 0, 0, con->rect.width, con->rect.height);
|
xcb_copy_area(conn, con->pixmap, con->frame, con->pm_gc, 0, 0, 0, 0, con->rect.width, con->rect.height);
|
||||||
xcb_copy_area(conn, parent->pixmap, parent->frame, parent->pm_gc, 0, 0, 0, 0, parent->rect.width, parent->rect.height);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -463,13 +462,21 @@ copy_pixmaps:
|
||||||
*/
|
*/
|
||||||
static void x_deco_recurse(Con *con) {
|
static void x_deco_recurse(Con *con) {
|
||||||
Con *current;
|
Con *current;
|
||||||
|
bool leaf = TAILQ_EMPTY(&(con->nodes_head)) &&
|
||||||
|
TAILQ_EMPTY(&(con->floating_head));
|
||||||
|
con_state *state = state_for_frame(con->frame);
|
||||||
|
|
||||||
|
if (!leaf) {
|
||||||
TAILQ_FOREACH(current, &(con->nodes_head), nodes)
|
TAILQ_FOREACH(current, &(con->nodes_head), nodes)
|
||||||
x_deco_recurse(current);
|
x_deco_recurse(current);
|
||||||
|
|
||||||
TAILQ_FOREACH(current, &(con->floating_head), floating_windows)
|
TAILQ_FOREACH(current, &(con->floating_head), floating_windows)
|
||||||
x_deco_recurse(current);
|
x_deco_recurse(current);
|
||||||
|
|
||||||
|
if (state->mapped)
|
||||||
|
xcb_copy_area(conn, con->pixmap, con->frame, con->pm_gc, 0, 0, 0, 0, con->rect.width, con->rect.height);
|
||||||
|
}
|
||||||
|
|
||||||
if ((con->type != CT_ROOT && con->type != CT_OUTPUT) &&
|
if ((con->type != CT_ROOT && con->type != CT_OUTPUT) &&
|
||||||
con->mapped)
|
con->mapped)
|
||||||
x_draw_decoration(con);
|
x_draw_decoration(con);
|
||||||
|
|
Loading…
Reference in New Issue