@ -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 */