|
|
@ -11,6 +11,7 @@ |
|
|
|
#include <xcb/xcb_image.h> |
|
|
|
#include <xcb/xcb_atom.h> |
|
|
|
#include <xcb/xcb_aux.h> |
|
|
|
#include <xcb/composite.h> |
|
|
|
#include <stdio.h> |
|
|
|
#include <stdlib.h> |
|
|
|
#include <stdbool.h> |
|
|
@ -106,6 +107,29 @@ xcb_window_t open_fullscreen_window(xcb_connection_t *conn, xcb_screen_t *scr, c |
|
|
|
uint32_t mask = 0; |
|
|
|
uint32_t values[3]; |
|
|
|
xcb_window_t win = xcb_generate_id(conn); |
|
|
|
xcb_window_t parent_win = scr->root; |
|
|
|
|
|
|
|
/* Check whether the composite extension is available */ |
|
|
|
const xcb_query_extension_reply_t *extension_query = NULL; |
|
|
|
xcb_generic_error_t *error = NULL; |
|
|
|
xcb_composite_get_overlay_window_cookie_t cookie; |
|
|
|
xcb_composite_get_overlay_window_reply_t *composite_reply = NULL; |
|
|
|
|
|
|
|
extension_query = xcb_get_extension_data(conn, &xcb_composite_id); |
|
|
|
if (extension_query && extension_query->present) { |
|
|
|
/* When composition is used, we need to use the composite overlay
|
|
|
|
* window instead of the normal root window to be able to cover |
|
|
|
* composited windows */ |
|
|
|
cookie = xcb_composite_get_overlay_window(conn, scr->root); |
|
|
|
composite_reply = xcb_composite_get_overlay_window_reply(conn, cookie, &error); |
|
|
|
|
|
|
|
if (!error && composite_reply) { |
|
|
|
parent_win = composite_reply->overlay_win; |
|
|
|
} |
|
|
|
|
|
|
|
free(composite_reply); |
|
|
|
free(error); |
|
|
|
} |
|
|
|
|
|
|
|
if (pixmap == XCB_NONE) { |
|
|
|
mask |= XCB_CW_BACK_PIXEL; |
|
|
@ -127,8 +151,8 @@ xcb_window_t open_fullscreen_window(xcb_connection_t *conn, xcb_screen_t *scr, c |
|
|
|
|
|
|
|
xcb_create_window(conn, |
|
|
|
XCB_COPY_FROM_PARENT, |
|
|
|
win, /* the window id */ |
|
|
|
scr->root, /* parent == root */ |
|
|
|
win, /* the window id */ |
|
|
|
parent_win, |
|
|
|
0, 0, |
|
|
|
scr->width_in_pixels, |
|
|
|
scr->height_in_pixels, /* dimensions */ |
|
|
|