diff --git a/readme.html b/readme.html
index ea2d34da..fd788bae 100644
--- a/readme.html
+++ b/readme.html
@@ -846,6 +846,9 @@ their skills. Special thanks go out to:
Ralph Eastwood, for the initial design and implementation of the gamma
correction API
+ GeO4d, for the implementation of cursor enter/leave notifications on
+ Win32.
+
Gerald Franz, who made GLFW compile under IRIX, and supplied patches
for the X11 keyboard translation routine
diff --git a/src/win32_platform.h b/src/win32_platform.h
index 82b8c9ca..aa551a09 100644
--- a/src/win32_platform.h
+++ b/src/win32_platform.h
@@ -268,6 +268,7 @@ typedef struct _GLFWwindowWin32
// Various platform specific internal variables
int desiredRefreshRate; // Desired vertical monitor refresh rate
GLboolean cursorCentered;
+ GLboolean cursorInside;
int oldMouseX, oldMouseY;
} _GLFWwindowWin32;
diff --git a/src/win32_window.c b/src/win32_window.c
index 0f3c67d0..66326278 100644
--- a/src/win32_window.c
+++ b/src/win32_window.c
@@ -1021,6 +1021,26 @@ static LRESULT CALLBACK windowProc(HWND hWnd, UINT uMsg,
_glfwInputCursorMotion(window, x, y);
}
+ if (!window->Win32.cursorInside)
+ {
+ TRACKMOUSEEVENT tme;
+ ZeroMemory(&tme, sizeof(tme));
+ tme.cbSize = sizeof(tme);
+ tme.dwFlags = TME_LEAVE;
+ tme.hwndTrack = window->Win32.handle;
+ TrackMouseEvent(&tme);
+
+ window->Win32.cursorInside = GL_TRUE;
+ _glfwInputCursorEnter(window, GL_TRUE);
+ }
+
+ return 0;
+ }
+
+ case WM_MOUSELEAVE:
+ {
+ window->Win32.cursorInside = GL_FALSE;
+ _glfwInputCursorEnter(window, GL_FALSE);
return 0;
}