Alexandre Julliard : winex11: Handle Expose events on top-level client windows.

Alexandre Julliard julliard at winehq.org
Wed Jan 23 16:40:18 CST 2013


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

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Wed Jan 23 19:09:29 2013 +0100

winex11: Handle Expose events on top-level client windows.

---

 dlls/winex11.drv/event.c  |   23 +++++++++++++----------
 dlls/winex11.drv/window.c |    5 +++--
 2 files changed, 16 insertions(+), 12 deletions(-)

diff --git a/dlls/winex11.drv/event.c b/dlls/winex11.drv/event.c
index 90b2068..5e5b19e 100644
--- a/dlls/winex11.drv/event.c
+++ b/dlls/winex11.drv/event.c
@@ -829,21 +829,24 @@ static void X11DRV_Expose( HWND hwnd, XEvent *xev )
     rect.right  = event->x + event->width;
     rect.bottom = event->y + event->height;
 
-    if (data->surface)
+    if (event->window != data->client_window)
     {
-        surface_region = expose_surface( data->surface, &rect );
-        if (!surface_region) flags = 0;
-        if (data->vis.visualid != default_visual.visualid)
-            data->surface->funcs->flush( data->surface );
-    }
+        if (data->surface)
+        {
+            surface_region = expose_surface( data->surface, &rect );
+            if (!surface_region) flags = 0;
+            else OffsetRgn( surface_region, data->whole_rect.left - data->client_rect.left,
+                            data->whole_rect.top - data->client_rect.top );
 
-    if (event->window != root_window)
-    {
+            if (data->vis.visualid != default_visual.visualid)
+                data->surface->funcs->flush( data->surface );
+        }
         OffsetRect( &rect, data->whole_rect.left - data->client_rect.left,
                     data->whole_rect.top - data->client_rect.top );
-        if (surface_region) OffsetRgn( surface_region, data->whole_rect.left - data->client_rect.left,
-                                       data->whole_rect.top - data->client_rect.top );
+    }
 
+    if (event->window != root_window)
+    {
         if (GetWindowLongW( data->hwnd, GWL_EXSTYLE ) & WS_EX_LAYOUTRTL)
             mirror_rect( &data->client_rect, &rect );
 
diff --git a/dlls/winex11.drv/window.c b/dlls/winex11.drv/window.c
index d45e9a1..7f97330 100644
--- a/dlls/winex11.drv/window.c
+++ b/dlls/winex11.drv/window.c
@@ -1383,11 +1383,12 @@ Window create_client_window( struct x11drv_win_data *data, const XVisualInfo *vi
     attr.bit_gravity = NorthWestGravity;
     attr.win_gravity = NorthWestGravity;
     attr.backing_store = NotUseful;
+    attr.event_mask = ExposureMask;
 
     data->client_window = XCreateWindow( data->display, data->whole_window, x, y, cx, cy,
                                          0, default_visual.depth, InputOutput, visual->visual,
-                                         CWBitGravity | CWWinGravity | CWBackingStore | CWColormap,
-                                         &attr );
+                                         CWBitGravity | CWWinGravity | CWBackingStore |
+                                         CWColormap | CWEventMask, &attr );
     if (!data->client_window) return 0;
 
     XSaveContext( data->display, data->client_window, winContext, (char *)data->hwnd );




More information about the wine-cvs mailing list