internal override void SetCursor(IntPtr handle, IntPtr cursor) {
Hwnd hwnd;
if (OverrideCursorHandle == IntPtr.Zero) {
if ((LastCursorWindow == handle) && (LastCursorHandle == cursor)) {
return;
}
LastCursorHandle = cursor;
LastCursorWindow = handle;
hwnd = Hwnd.ObjectFromHandle(handle);
lock (XlibLock) {
if (cursor != IntPtr.Zero) {
XDefineCursor(DisplayHandle, hwnd.whole_window, cursor);
} else {
XUndefineCursor(DisplayHandle, hwnd.whole_window);
}
XFlush(DisplayHandle);
}
return;
}
hwnd = Hwnd.ObjectFromHandle(handle);
lock (XlibLock) {
XDefineCursor(DisplayHandle, hwnd.whole_window, OverrideCursorHandle);
}
}