Skip to content

Commit 9d08b87

Browse files
author
Paul Gofman
committed
winex11.drv: Set X window property to indicate if the presentation may flip.
CW-Bug-Id: #24273
1 parent bb71e80 commit 9d08b87

File tree

4 files changed

+19
-0
lines changed

4 files changed

+19
-0
lines changed

dlls/winex11.drv/opengl.c

+4
Original file line numberDiff line numberDiff line change
@@ -1546,6 +1546,8 @@ static struct gl_drawable *create_gl_drawable( HWND hwnd, const struct wgl_pixel
15461546
else if(usexcomposite)
15471547
{
15481548
struct x11drv_win_data *data;
1549+
unsigned int allow_flip = 0;
1550+
15491551
gl->type = DC_GL_CHILD_WIN;
15501552
gl->colormap = XCreateColormap( gdi_display, get_dummy_parent(), visual->visual,
15511553
(visual->class == PseudoColor || visual->class == GrayScale ||
@@ -1556,6 +1558,8 @@ static struct gl_drawable *create_gl_drawable( HWND hwnd, const struct wgl_pixel
15561558
{
15571559
gl->drawable = pglXCreateWindow( gdi_display, gl->format->fbconfig, gl->window, NULL );
15581560
pXCompositeRedirectWindow( gdi_display, gl->window, CompositeRedirectManual );
1561+
XChangeProperty( gdi_display, gl->window, x11drv_atom(_WINE_ALLOW_FLIP), XA_CARDINAL, 32,
1562+
PropModeReplace, (unsigned char *)&allow_flip, sizeof(allow_flip) / 4 );
15591563
}
15601564
if ((data = get_win_data( hwnd )))
15611565
{

dlls/winex11.drv/window.c

+13
Original file line numberDiff line numberDiff line change
@@ -1927,12 +1927,16 @@ Window get_dummy_parent(void)
19271927
*/
19281928
void detach_client_window( struct x11drv_win_data *data, Window client_window, BOOL reparent )
19291929
{
1930+
unsigned int allow_flip = 0;
1931+
19301932
if (data->client_window != client_window || !client_window) return;
19311933
data->client_window = 0;
19321934

19331935
if (!data->whole_window) return;
19341936

19351937
XSelectInput( data->display, client_window, 0 );
1938+
XChangeProperty( data->display, client_window, x11drv_atom(_WINE_ALLOW_FLIP), XA_CARDINAL, 32,
1939+
PropModeReplace, (unsigned char *)&allow_flip, sizeof(allow_flip) / 4 );
19361940
XFlush( data->display ); /* make sure XSelectInput is disabled for client_window after this point */
19371941
XDeleteContext( data->display, client_window, winContext );
19381942

@@ -1946,6 +1950,8 @@ void detach_client_window( struct x11drv_win_data *data, Window client_window, B
19461950
*/
19471951
void attach_client_window( struct x11drv_win_data *data, Window client_window )
19481952
{
1953+
unsigned int allow_flip = 1;
1954+
19491955
if (data->client_window == client_window || !client_window) return;
19501956
detach_client_window( data, data->client_window, TRUE );
19511957
data->client_window = client_window;
@@ -1954,10 +1960,13 @@ void attach_client_window( struct x11drv_win_data *data, Window client_window )
19541960

19551961
XSaveContext( data->display, client_window, winContext, (char *)data->hwnd );
19561962
XSelectInput( data->display, client_window, ExposureMask );
1963+
XChangeProperty( data->display, client_window, x11drv_atom(_WINE_ALLOW_FLIP), XA_CARDINAL, 32,
1964+
PropModeReplace, (unsigned char *)&allow_flip, sizeof(allow_flip) / 4 );
19571965
XFlush( data->display ); /* make sure XSelectInput is enabled for client_window after this point */
19581966

19591967
XReparentWindow( gdi_display, client_window, data->whole_window, data->client_rect.left - data->whole_rect.left,
19601968
data->client_rect.top - data->whole_rect.top );
1969+
19611970
TRACE( "%p/%lx attached client window %lx\n", data->hwnd, data->whole_window, client_window );
19621971
}
19631972

@@ -2108,6 +2117,7 @@ void set_gamescope_overlay_prop( Display *display, Window window, HWND hwnd )
21082117
*/
21092118
static void create_whole_window( struct x11drv_win_data *data )
21102119
{
2120+
unsigned int allow_flip = 0;
21112121
int cx, cy, mask;
21122122
XSetWindowAttributes attr;
21132123
WCHAR text[1024];
@@ -2162,6 +2172,9 @@ static void create_whole_window( struct x11drv_win_data *data )
21622172
data->vis.visual, mask, &attr );
21632173
if (!data->whole_window) goto done;
21642174

2175+
XChangeProperty( data->display, data->whole_window, x11drv_atom(_WINE_ALLOW_FLIP), XA_CARDINAL, 32,
2176+
PropModeReplace, (unsigned char *)&allow_flip, sizeof(allow_flip) / 4 );
2177+
21652178
X11DRV_XInput2_Enable( data->display, data->whole_window, attr.event_mask );
21662179
set_initial_wm_hints( data->display, data->whole_window );
21672180
set_wm_hints( data );

dlls/winex11.drv/x11drv.h

+1
Original file line numberDiff line numberDiff line change
@@ -530,6 +530,7 @@ enum x11drv_atoms
530530
XATOM__GTK_WORKAREAS_D0,
531531
XATOM__XEMBED,
532532
XATOM__XEMBED_INFO,
533+
XATOM__WINE_ALLOW_FLIP,
533534
XATOM__WINE_HWND_STYLE,
534535
XATOM__WINE_HWND_EXSTYLE,
535536
XATOM_XdndAware,

dlls/winex11.drv/x11drv_main.c

+1
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,7 @@ static const char * const atom_names[NB_XATOMS - FIRST_XATOM] =
197197
"_GTK_WORKAREAS_D0",
198198
"_XEMBED",
199199
"_XEMBED_INFO",
200+
"_WINE_ALLOW_FLIP",
200201
"_WINE_HWND_STYLE",
201202
"_WINE_HWND_EXSTYLE",
202203
"XdndAware",

0 commit comments

Comments
 (0)