Module: wine Branch: master Commit: 2eebedf38e4d5fd49075f8f89e63f869ca85cceb URL: http://source.winehq.org/git/wine.git/?a=commit;h=2eebedf38e4d5fd49075f8f89e...
Author: Alexandre Julliard julliard@winehq.org Date: Mon Apr 30 15:09:03 2012 +0200
winex11: Handle Expose events by refreshing from the window surface.
---
dlls/winex11.drv/event.c | 16 ++++++++++------ 1 files changed, 10 insertions(+), 6 deletions(-)
diff --git a/dlls/winex11.drv/event.c b/dlls/winex11.drv/event.c index 7da0947..dc7d1e3 100644 --- a/dlls/winex11.drv/event.c +++ b/dlls/winex11.drv/event.c @@ -791,7 +791,7 @@ static void X11DRV_Expose( HWND hwnd, XEvent *xev ) XExposeEvent *event = &xev->xexpose; RECT rect; struct x11drv_win_data *data; - int flags = RDW_INVALIDATE | RDW_ERASE; + int flags = RDW_INVALIDATE | RDW_ERASE | RDW_FRAME;
TRACE( "win %p (%lx) %d,%d %dx%d\n", hwnd, event->window, event->x, event->y, event->width, event->height ); @@ -802,15 +802,19 @@ static void X11DRV_Expose( HWND hwnd, XEvent *xev ) rect.top = event->y; rect.right = event->x + event->width; rect.bottom = event->y + event->height; - if (event->window == data->whole_window) + + if (data->surface) { - OffsetRect( &rect, data->whole_rect.left - data->client_rect.left, - data->whole_rect.top - data->client_rect.top ); - flags |= RDW_FRAME; + data->surface->funcs->lock( data->surface ); + add_bounds_rect( data->surface->funcs->get_bounds( data->surface ), &rect ); + data->surface->funcs->unlock( data->surface ); }
if (event->window != root_window) { + OffsetRect( &rect, data->whole_rect.left - data->client_rect.left, + data->whole_rect.top - data->client_rect.top ); + if (GetWindowLongW( data->hwnd, GWL_EXSTYLE ) & WS_EX_LAYOUTRTL) mirror_rect( &data->client_rect, &rect );
@@ -829,7 +833,7 @@ static void X11DRV_Expose( HWND hwnd, XEvent *xev ) } else OffsetRect( &rect, virtual_screen_rect.left, virtual_screen_rect.top );
- RedrawWindow( hwnd, &rect, 0, flags ); + if (!data->surface) RedrawWindow( hwnd, &rect, 0, flags ); }