@@ -1927,12 +1927,16 @@ Window get_dummy_parent(void)
1927
1927
*/
1928
1928
void detach_client_window ( struct x11drv_win_data * data , Window client_window , BOOL reparent )
1929
1929
{
1930
+ unsigned int allow_flip = 0 ;
1931
+
1930
1932
if (data -> client_window != client_window || !client_window ) return ;
1931
1933
data -> client_window = 0 ;
1932
1934
1933
1935
if (!data -> whole_window ) return ;
1934
1936
1935
1937
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 );
1936
1940
XFlush ( data -> display ); /* make sure XSelectInput is disabled for client_window after this point */
1937
1941
XDeleteContext ( data -> display , client_window , winContext );
1938
1942
@@ -1946,6 +1950,8 @@ void detach_client_window( struct x11drv_win_data *data, Window client_window, B
1946
1950
*/
1947
1951
void attach_client_window ( struct x11drv_win_data * data , Window client_window )
1948
1952
{
1953
+ unsigned int allow_flip = 1 ;
1954
+
1949
1955
if (data -> client_window == client_window || !client_window ) return ;
1950
1956
detach_client_window ( data , data -> client_window , TRUE );
1951
1957
data -> client_window = client_window ;
@@ -1954,10 +1960,13 @@ void attach_client_window( struct x11drv_win_data *data, Window client_window )
1954
1960
1955
1961
XSaveContext ( data -> display , client_window , winContext , (char * )data -> hwnd );
1956
1962
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 );
1957
1965
XFlush ( data -> display ); /* make sure XSelectInput is enabled for client_window after this point */
1958
1966
1959
1967
XReparentWindow ( gdi_display , client_window , data -> whole_window , data -> client_rect .left - data -> whole_rect .left ,
1960
1968
data -> client_rect .top - data -> whole_rect .top );
1969
+
1961
1970
TRACE ( "%p/%lx attached client window %lx\n" , data -> hwnd , data -> whole_window , client_window );
1962
1971
}
1963
1972
@@ -2108,6 +2117,7 @@ void set_gamescope_overlay_prop( Display *display, Window window, HWND hwnd )
2108
2117
*/
2109
2118
static void create_whole_window ( struct x11drv_win_data * data )
2110
2119
{
2120
+ unsigned int allow_flip = 0 ;
2111
2121
int cx , cy , mask ;
2112
2122
XSetWindowAttributes attr ;
2113
2123
WCHAR text [1024 ];
@@ -2162,6 +2172,9 @@ static void create_whole_window( struct x11drv_win_data *data )
2162
2172
data -> vis .visual , mask , & attr );
2163
2173
if (!data -> whole_window ) goto done ;
2164
2174
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
+
2165
2178
X11DRV_XInput2_Enable ( data -> display , data -> whole_window , attr .event_mask );
2166
2179
set_initial_wm_hints ( data -> display , data -> whole_window );
2167
2180
set_wm_hints ( data );
0 commit comments