Fixes: 278ca7f68d727639b3389b78c363134fa2bd32a8 Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=57189
From: Rémi Bernon rbernon@codeweavers.com
--- dlls/winex11.drv/opengl.c | 57 +++++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 29 deletions(-)
diff --git a/dlls/winex11.drv/opengl.c b/dlls/winex11.drv/opengl.c index 53bad9efb23..786ec2a2444 100644 --- a/dlls/winex11.drv/opengl.c +++ b/dlls/winex11.drv/opengl.c @@ -1270,6 +1270,34 @@ static BOOL set_pixel_format( HDC hdc, int format, BOOL internal ) return set_win_format( hwnd, fmt, internal ); }
+static void update_gl_drawable_size( struct gl_drawable *gl ) +{ + struct gl_drawable *new_gl; + XWindowChanges changes; + RECT rect; + + NtUserGetClientRect( gl->hwnd, &rect, NtUserGetDpiForWindow( gl->hwnd ) ); + if (EqualRect( &rect, &gl->rect )) return; + + changes.width = min( max( 1, rect.right ), 65535 ); + changes.height = min( max( 1, rect.bottom ), 65535 ); + + switch (gl->type) + { + case DC_GL_WINDOW: + case DC_GL_CHILD_WIN: + gl->rect = rect; + XConfigureWindow( gdi_display, gl->window, CWWidth | CWHeight, &changes ); + set_dc_drawable( gl->hdc_src, gl->window, &gl->rect, IncludeInferiors ); + break; + case DC_GL_PIXMAP_WIN: + new_gl = create_gl_drawable( gl->hwnd, gl->format, TRUE, gl->mutable_pf ); + mark_drawable_dirty( gl, new_gl ); + release_gl_drawable( new_gl ); + default: + break; + } +}
/*********************************************************************** * sync_gl_drawable @@ -2762,35 +2790,6 @@ static void X11DRV_WineGL_LoadExtensions(void) } }
-static void update_gl_drawable_size( struct gl_drawable *gl ) -{ - struct gl_drawable *new_gl; - XWindowChanges changes; - RECT rect; - - NtUserGetClientRect( gl->hwnd, &rect, NtUserGetDpiForWindow( gl->hwnd ) ); - if (EqualRect( &rect, &gl->rect )) return; - - changes.width = min( max( 1, rect.right ), 65535 ); - changes.height = min( max( 1, rect.bottom ), 65535 ); - - switch (gl->type) - { - case DC_GL_WINDOW: - case DC_GL_CHILD_WIN: - gl->rect = rect; - XConfigureWindow( gdi_display, gl->window, CWWidth | CWHeight, &changes ); - set_dc_drawable( gl->hdc_src, gl->window, &gl->rect, IncludeInferiors ); - break; - case DC_GL_PIXMAP_WIN: - new_gl = create_gl_drawable( gl->hwnd, gl->format, TRUE, gl->mutable_pf ); - mark_drawable_dirty( gl, new_gl ); - release_gl_drawable( new_gl ); - default: - break; - } -} - /** * glxdrv_SwapBuffers *
From: Rémi Bernon rbernon@codeweavers.com
Fixes: 278ca7f68d727639b3389b78c363134fa2bd32a8 Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=57189 --- dlls/winex11.drv/opengl.c | 7 ++++++- dlls/winex11.drv/window.c | 10 ++++------ 2 files changed, 10 insertions(+), 7 deletions(-)
diff --git a/dlls/winex11.drv/opengl.c b/dlls/winex11.drv/opengl.c index 786ec2a2444..ff20fc0fbd3 100644 --- a/dlls/winex11.drv/opengl.c +++ b/dlls/winex11.drv/opengl.c @@ -1311,7 +1311,12 @@ void sync_gl_drawable( HWND hwnd, BOOL known_child ) switch (old->type) { case DC_GL_WINDOW: - if (!known_child) break; /* Still a childless top-level window */ + if (!known_child) + { + /* Still a childless top-level window */ + update_gl_drawable_size( old ); + break; + } /* fall through */ case DC_GL_PIXMAP_WIN: if (!(new = create_gl_drawable( hwnd, old->format, known_child, old->mutable_pf ))) break; diff --git a/dlls/winex11.drv/window.c b/dlls/winex11.drv/window.c index 16dad0747a2..24e926d229f 100644 --- a/dlls/winex11.drv/window.c +++ b/dlls/winex11.drv/window.c @@ -2603,15 +2603,13 @@ void X11DRV_WindowPosChanged( HWND hwnd, HWND insert_after, UINT swp_flags, cons
sync_client_position( data, &old_rects );
+ if (data->rects.client.right - data->rects.client.left != old_rects.client.right - old_rects.client.left || + data->rects.client.bottom - data->rects.client.top != old_rects.client.bottom - old_rects.client.top) + sync_gl_drawable( hwnd, FALSE ); + if (!data->whole_window) { - BOOL needs_resize = (!data->client_window && - (data->rects.client.right - data->rects.client.left != - old_rects.client.right - old_rects.client.left || - data->rects.client.bottom - data->rects.client.top != - old_rects.client.bottom - old_rects.client.top)); release_win_data( data ); - if (needs_resize) sync_gl_drawable( hwnd, FALSE ); return; }