Send mouse leave updates for Windows and X11.
We now generate a final SDL_MOUSEMOTION before the cursor leaves the window, followed by a SDL_WINDOWEVENT_LEAVE.
This commit is contained in:
parent
c7fb60a46b
commit
f7032de060
9 changed files with 69 additions and 10 deletions
|
@ -445,10 +445,16 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
|||
}
|
||||
|
||||
#ifdef WM_MOUSELEAVE
|
||||
/* FIXME: Do we need the SDL 1.2 hack to generate WM_MOUSELEAVE now? */
|
||||
case WM_MOUSELEAVE:
|
||||
if (SDL_GetMouseFocus() == data->window) {
|
||||
SDL_SetMouseFocus(NULL);
|
||||
if (!SDL_GetMouse()->relative_mode) {
|
||||
POINT cursorPos;
|
||||
GetCursorPos(&cursorPos);
|
||||
ScreenToClient(hwnd, &cursorPos);
|
||||
SDL_SendMouseMotion(data->window, 0, 0, cursorPos.x, cursorPos.y);
|
||||
}
|
||||
|
||||
SDL_SetMouseFocus(NULL);
|
||||
}
|
||||
returnCode = 0;
|
||||
break;
|
||||
|
|
|
@ -121,6 +121,7 @@ WIN_CreateDevice(int devindex)
|
|||
device->CreateWindowFramebuffer = WIN_CreateWindowFramebuffer;
|
||||
device->UpdateWindowFramebuffer = WIN_UpdateWindowFramebuffer;
|
||||
device->DestroyWindowFramebuffer = WIN_DestroyWindowFramebuffer;
|
||||
device->OnWindowEnter = WIN_OnWindowEnter;
|
||||
|
||||
device->shape_driver.CreateShaper = Win32_CreateShaper;
|
||||
device->shape_driver.SetWindowShape = Win32_SetWindowShape;
|
||||
|
|
|
@ -678,6 +678,25 @@ SDL_HelperWindowDestroy(void)
|
|||
}
|
||||
}
|
||||
|
||||
void WIN_OnWindowEnter(_THIS, SDL_Window * window)
|
||||
{
|
||||
#ifdef WM_MOUSELEAVE
|
||||
SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
|
||||
TRACKMOUSEEVENT trackMouseEvent;
|
||||
|
||||
if (!data || !data->hwnd) {
|
||||
/* The window wasn't fully initialized */
|
||||
return;
|
||||
}
|
||||
|
||||
trackMouseEvent.cbSize = sizeof(TRACKMOUSEEVENT);
|
||||
trackMouseEvent.dwFlags = TME_LEAVE;
|
||||
trackMouseEvent.hwndTrack = data->hwnd;
|
||||
|
||||
TrackMouseEvent(&trackMouseEvent);
|
||||
#endif /* WM_MOUSELEAVE */
|
||||
}
|
||||
|
||||
#endif /* SDL_VIDEO_DRIVER_WINDOWS */
|
||||
|
||||
/* vi: set ts=4 sw=4 expandtab: */
|
||||
|
|
|
@ -56,6 +56,7 @@ extern void WIN_SetWindowGrab(_THIS, SDL_Window * window, SDL_bool grabbed);
|
|||
extern void WIN_DestroyWindow(_THIS, SDL_Window * window);
|
||||
extern SDL_bool WIN_GetWindowWMInfo(_THIS, SDL_Window * window,
|
||||
struct SDL_SysWMinfo *info);
|
||||
extern void WIN_OnWindowEnter(_THIS, SDL_Window * window);
|
||||
|
||||
#endif /* _SDL_windowswindow_h */
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue