Bugfix: DISPLAY_SetCursor should not use USER-internals, as it is also
used with native USER ...
This commit is contained in:
parent
23f4b09cc3
commit
a7617a05d1
|
@ -33,7 +33,6 @@ static BOOL X11DRV_MOUSE_DoSetCursor( CURSORICONINFO *ptr )
|
||||||
Pixmap pixmapBits, pixmapMask, pixmapAll;
|
Pixmap pixmapBits, pixmapMask, pixmapAll;
|
||||||
XColor fg, bg;
|
XColor fg, bg;
|
||||||
Cursor cursor = None;
|
Cursor cursor = None;
|
||||||
BOOL DesktopWinExists = FALSE;
|
|
||||||
|
|
||||||
if (!ptr) /* Create an empty cursor */
|
if (!ptr) /* Create an empty cursor */
|
||||||
{
|
{
|
||||||
|
@ -144,32 +143,6 @@ static BOOL X11DRV_MOUSE_DoSetCursor( CURSORICONINFO *ptr )
|
||||||
if (X11DRV_MOUSE_XCursor != None) XFreeCursor( display, X11DRV_MOUSE_XCursor );
|
if (X11DRV_MOUSE_XCursor != None) XFreeCursor( display, X11DRV_MOUSE_XCursor );
|
||||||
X11DRV_MOUSE_XCursor = cursor;
|
X11DRV_MOUSE_XCursor = cursor;
|
||||||
|
|
||||||
if (WIN_GetDesktop() != NULL)
|
|
||||||
{
|
|
||||||
DesktopWinExists = TRUE;
|
|
||||||
WIN_ReleaseDesktop();
|
|
||||||
}
|
|
||||||
if (X11DRV_GetXRootWindow() != DefaultRootWindow(display) || !DesktopWinExists)
|
|
||||||
{
|
|
||||||
/* Set the cursor on the desktop window */
|
|
||||||
XDefineCursor( display, X11DRV_GetXRootWindow(), cursor );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* FIXME: this won't work correctly with native USER !*/
|
|
||||||
|
|
||||||
/* Set the same cursor for all top-level windows */
|
|
||||||
HWND hwnd = GetWindow( GetDesktopWindow(), GW_CHILD );
|
|
||||||
while(hwnd)
|
|
||||||
{
|
|
||||||
WND *tmpWnd = WIN_FindWndPtr(hwnd);
|
|
||||||
Window win = X11DRV_WND_FindXWindow(tmpWnd );
|
|
||||||
if (win && win!=DefaultRootWindow(display))
|
|
||||||
XDefineCursor( display, win, cursor );
|
|
||||||
hwnd = GetWindow( hwnd, GW_HWNDNEXT );
|
|
||||||
WIN_ReleaseWndPtr(tmpWnd);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -178,11 +151,37 @@ static BOOL X11DRV_MOUSE_DoSetCursor( CURSORICONINFO *ptr )
|
||||||
*/
|
*/
|
||||||
void X11DRV_MOUSE_SetCursor( CURSORICONINFO *lpCursor )
|
void X11DRV_MOUSE_SetCursor( CURSORICONINFO *lpCursor )
|
||||||
{
|
{
|
||||||
WIN_LockWnds();
|
BOOL success;
|
||||||
|
|
||||||
EnterCriticalSection( &X11DRV_CritSection );
|
EnterCriticalSection( &X11DRV_CritSection );
|
||||||
CALL_LARGE_STACK( X11DRV_MOUSE_DoSetCursor, lpCursor );
|
success = CALL_LARGE_STACK( X11DRV_MOUSE_DoSetCursor, lpCursor );
|
||||||
LeaveCriticalSection( &X11DRV_CritSection );
|
LeaveCriticalSection( &X11DRV_CritSection );
|
||||||
WIN_UnlockWnds();
|
if ( !success ) return;
|
||||||
|
|
||||||
|
if (X11DRV_GetXRootWindow() != DefaultRootWindow(display))
|
||||||
|
{
|
||||||
|
/* If in desktop mode, set the cursor on the desktop window */
|
||||||
|
|
||||||
|
XDefineCursor( display, X11DRV_GetXRootWindow(), X11DRV_MOUSE_XCursor );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Else, set the same cursor for all top-level windows */
|
||||||
|
|
||||||
|
/* FIXME: we should not reference USER internals here, but native USER
|
||||||
|
works only in desktop mode anyway, so this should not matter */
|
||||||
|
|
||||||
|
HWND hwnd = GetWindow( GetDesktopWindow(), GW_CHILD );
|
||||||
|
while(hwnd)
|
||||||
|
{
|
||||||
|
WND *tmpWnd = WIN_FindWndPtr(hwnd);
|
||||||
|
Window win = X11DRV_WND_FindXWindow(tmpWnd );
|
||||||
|
if (win && win!=DefaultRootWindow(display))
|
||||||
|
XDefineCursor( display, win, X11DRV_MOUSE_XCursor );
|
||||||
|
hwnd = GetWindow( hwnd, GW_HWNDNEXT );
|
||||||
|
WIN_ReleaseWndPtr(tmpWnd);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
|
|
Loading…
Reference in New Issue