Alexandre Julliard : winex11: Update the cursor on the clip window when the pointer grab starts.

Alexandre Julliard julliard at winehq.org
Wed Apr 6 11:36:37 CDT 2011


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

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Wed Apr  6 12:35:11 2011 +0200

winex11: Update the cursor on the clip window when the pointer grab starts.

---

 dlls/winex11.drv/mouse.c  |   11 ++++-------
 dlls/winex11.drv/window.c |   10 ++--------
 dlls/winex11.drv/x11drv.h |    3 +--
 3 files changed, 7 insertions(+), 17 deletions(-)

diff --git a/dlls/winex11.drv/mouse.c b/dlls/winex11.drv/mouse.c
index e7e8d62..eb903cd 100644
--- a/dlls/winex11.drv/mouse.c
+++ b/dlls/winex11.drv/mouse.c
@@ -194,7 +194,7 @@ void set_window_cursor( Window window, HCURSOR handle )
 /***********************************************************************
  *              sync_window_cursor
  */
-void sync_window_cursor( struct x11drv_win_data *data )
+void sync_window_cursor( Window window )
 {
     HCURSOR cursor;
 
@@ -206,11 +206,7 @@ void sync_window_cursor( struct x11drv_win_data *data )
     }
     SERVER_END_REQ;
 
-    if (data->cursor != cursor)
-    {
-        data->cursor = cursor;
-        set_window_cursor( data->whole_window, cursor );
-    }
+    set_window_cursor( window, cursor );
 }
 
 /***********************************************************************
@@ -253,7 +249,7 @@ static void send_mouse_input( HWND hwnd, UINT flags, Window window, int x, int y
     if (InterlockedExchangePointer( (void **)&cursor_window, hwnd ) != hwnd ||
         GetTickCount() - last_cursor_change > 100)
     {
-        sync_window_cursor( data );
+        sync_window_cursor( data->whole_window );
         last_cursor_change = GetTickCount();
     }
 
@@ -964,6 +960,7 @@ BOOL CDECL X11DRV_ClipCursor( LPCRECT clip )
 
             if (clipping_cursor)
             {
+                sync_window_cursor( clip_window );
                 clip_rect = *clip;
                 return TRUE;
             }
diff --git a/dlls/winex11.drv/window.c b/dlls/winex11.drv/window.c
index e35547a..648ed59 100644
--- a/dlls/winex11.drv/window.c
+++ b/dlls/winex11.drv/window.c
@@ -1715,10 +1715,7 @@ static Window create_whole_window( Display *display, struct x11drv_win_data *dat
     XFlush( display );  /* make sure the window exists before we start painting to it */
     wine_tsx11_unlock();
 
-    sync_window_cursor( data );
-    /* setting the cursor can fail if the window isn't created yet */
-    /* so make sure that we try again once we receive a mouse event */
-    data->cursor = (HANDLE)~0u;
+    sync_window_cursor( data->whole_window );
 
 done:
     if (win_rgn) DeleteObject( win_rgn );
@@ -2701,10 +2698,7 @@ LRESULT CDECL X11DRV_WindowMessage( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp )
         return 0;
     case WM_X11DRV_SET_CURSOR:
         if ((data = X11DRV_get_win_data( hwnd )) && data->whole_window)
-        {
-            data->cursor = (HCURSOR)lp;
-            set_window_cursor( data->whole_window, data->cursor );
-        }
+            set_window_cursor( data->whole_window, (HCURSOR)lp );
         return 0;
     default:
         FIXME( "got window msg %x hwnd %p wp %lx lp %lx\n", msg, hwnd, wp, lp );
diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h
index 986d03a..867d9fe 100644
--- a/dlls/winex11.drv/x11drv.h
+++ b/dlls/winex11.drv/x11drv.h
@@ -771,7 +771,6 @@ struct x11drv_win_data
     RECT        whole_rect;     /* X window rectangle for the whole window relative to parent */
     RECT        client_rect;    /* client area relative to parent */
     XIC         xic;            /* X input context */
-    HCURSOR     cursor;         /* current cursor */
     XWMHints   *wm_hints;       /* window manager hints */
     BOOL        managed : 1;    /* is window managed? */
     BOOL        mapped : 1;     /* is window mapped? (in either normal or iconic state) */
@@ -822,7 +821,7 @@ extern void X11DRV_Clipboard_Cleanup(void);
 extern void X11DRV_ResetSelectionOwner(void);
 extern void CDECL X11DRV_SetFocus( HWND hwnd );
 extern void set_window_cursor( Window window, HCURSOR handle );
-extern void sync_window_cursor( struct x11drv_win_data *data );
+extern void sync_window_cursor( Window window );
 extern BOOL CDECL X11DRV_ClipCursor( LPCRECT clip );
 extern void X11DRV_InitKeyboard( Display *display );
 extern DWORD CDECL X11DRV_MsgWaitForMultipleObjectsEx( DWORD count, const HANDLE *handles, DWORD timeout,




More information about the wine-cvs mailing list