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

This commit is contained in:
Alexandre Julliard 2011-04-06 12:35:11 +02:00
parent ad32b28ac0
commit 06948ebccf
3 changed files with 7 additions and 17 deletions

View File

@ -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;
}

View File

@ -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 );

View File

@ -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,