removed all HAVE_ERRNO checks
[freeglut] / src / x11 / fg_cursor_x11.c
index 3098e53..6d889f2 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * freeglut_cursor_x11.c
+ * fg_cursor_x11.c
  *
  * The Windows-specific mouse cursor related stuff.
  *
@@ -149,3 +149,27 @@ void fgPlatformWarpPointer ( int x, int y )
     XFlush( fgDisplay.pDisplay.Display );
 }
 
+void fghPlatformGetCursorPos(const SFG_Window *window, GLboolean client, SFG_XYUse *mouse_pos)
+{
+    /* Get current pointer location in screen coordinates (if client is false or window is NULL), else
+     * Get current pointer location relative to top-left of client area of window (if client is true and window is not NULL)
+     */
+    Window w = (client && window && window->Window.Handle)? window->Window.Handle: fgDisplay.pDisplay.RootWindow;
+    Window junk_window;
+    unsigned int junk_mask;
+    int clientX, clientY;
+
+    XQueryPointer(fgDisplay.pDisplay.Display, w,
+            &junk_window, &junk_window,
+            &mouse_pos->X, &mouse_pos->Y, /* Screen coords relative to root window's top-left */
+            &clientX, &clientY,           /* Client coords relative to window's top-left */
+            &junk_mask);
+
+    if (client && window && window->Window.Handle)
+    {
+        mouse_pos->X = clientX;
+        mouse_pos->Y = clientY;
+    }
+
+    mouse_pos->Use = GL_TRUE;
+}