diff --git a/src/backend/gl/glx.c b/src/backend/gl/glx.c index d2070e9..8008fa5 100644 --- a/src/backend/gl/glx.c +++ b/src/backend/gl/glx.c @@ -389,12 +389,8 @@ void *glx_prepare_win(void *backend_data, session_t *ps, win *w) { } auto wd = ccalloc(1, struct _glx_win_data); - if (ps->has_name_pixmap) { - wd->pixmap = xcb_generate_id(ps->c); - xcb_composite_name_window_pixmap(ps->c, w->id, wd->pixmap); - } else { - wd->pixmap = w->id; - } + wd->pixmap = xcb_generate_id(ps->c); + xcb_composite_name_window_pixmap(ps->c, w->id, wd->pixmap); if (!wd->pixmap) { log_error("Failed to get pixmap for window %#010x", w->id); goto err; diff --git a/src/common.h b/src/common.h index f19cd3e..a0edf25 100644 --- a/src/common.h +++ b/src/common.h @@ -457,9 +457,6 @@ typedef struct session { int composite_error; /// Major opcode for X Composite extension. int composite_opcode; - /// Whether X Composite NameWindowPixmap is available. Aka if X - /// Composite version >= 0.2. - bool has_name_pixmap; /// Whether X Shape extension exists. bool shape_exists; /// Event base number for X Shape extension. diff --git a/src/compton.c b/src/compton.c index 871848d..a720554 100644 --- a/src/compton.c +++ b/src/compton.c @@ -2426,7 +2426,6 @@ session_init(int argc, char **argv, Display *dpy, const char *config_file, .composite_event = 0, .composite_error = 0, .composite_opcode = 0, - .has_name_pixmap = false, .shape_exists = false, .shape_event = 0, .shape_error = 0, @@ -2541,8 +2540,9 @@ session_init(int argc, char **argv, Display *dpy, const char *config_file, xcb_composite_query_version(ps->c, XCB_COMPOSITE_MAJOR_VERSION, XCB_COMPOSITE_MINOR_VERSION), NULL); - if (reply && (reply->major_version > 0 || reply->minor_version >= 2)) { - ps->has_name_pixmap = true; + if (!reply || (reply->major_version == 0 && reply->minor_version < 2)) { + log_fatal("Your X server doesn't have Composite >= 0.2 support, compton cannot run."); + exit(1); } free(reply); } diff --git a/src/diagnostic.c b/src/diagnostic.c index 378575c..7e26d9f 100644 --- a/src/diagnostic.c +++ b/src/diagnostic.c @@ -12,7 +12,6 @@ void print_diagnostics(session_t *ps, const char *config_file) { printf("**Version:** " COMPTON_VERSION "\n"); //printf("**CFLAGS:** %s\n", "??"); printf("\n### Extensions:\n\n"); - printf("* Name Pixmap: %s\n", ps->has_name_pixmap ? "Yes" : "No"); printf("* Shape: %s\n", ps->shape_exists ? "Yes" : "No"); printf("* XRandR: %s\n", ps->randr_exists ? "Yes" : "No"); printf("* Present: %s\n", ps->present_exists ? "Present" : "Not Present"); diff --git a/src/render.c b/src/render.c index 71b768b..ee461a2 100644 --- a/src/render.c +++ b/src/render.c @@ -234,15 +234,19 @@ static inline bool paint_isvalid(session_t *ps, const paint_t *ppaint) { */ void paint_one(session_t *ps, win *w, const region_t *reg_paint) { // Fetch Pixmap - if (!w->paint.pixmap && ps->has_name_pixmap) { + if (!w->paint.pixmap) { w->paint.pixmap = xcb_generate_id(ps->c); set_ignore_cookie( ps, xcb_composite_name_window_pixmap(ps->c, w->id, w->paint.pixmap)); } xcb_drawable_t draw = w->paint.pixmap; - if (!draw) - draw = w->id; + if (!draw) { + log_error("Failed to get pixmap from window %#010x (%s), window won't be " + "visible", + w->id, w->name); + return; + } // XRender: Build picture if (bkend_use_xrender(ps) && !w->paint.pict) {