Alexandre Julliard : winex11: Handle Expose events by refreshing from the window surface.

Alexandre Julliard julliard at winehq.org
Thu Sep 6 13:37:22 CDT 2012


Module: wine
Branch: master
Commit: 2eebedf38e4d5fd49075f8f89e63f869ca85cceb
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=2eebedf38e4d5fd49075f8f89e63f869ca85cceb

Author: Alexandre Julliard <julliard at 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 );
 }
 
 




More information about the wine-cvs mailing list