|
@@ -317,62 +317,30 @@ static GLboolean createWindow(_GLFWwindow* window,
|
|
|
return GL_TRUE;
|
|
|
}
|
|
|
|
|
|
-// Hide cursor
|
|
|
+// Hide the mouse cursor
|
|
|
//
|
|
|
static void hideCursor(_GLFWwindow* window)
|
|
|
{
|
|
|
- // Un-grab cursor (in windowed mode only; in fullscreen mode we still
|
|
|
- // want the cursor grabbed in order to confine the cursor to the window
|
|
|
- // area)
|
|
|
- if (window->x11.cursorGrabbed && window->monitor == NULL)
|
|
|
- {
|
|
|
- XUngrabPointer(_glfw.x11.display, CurrentTime);
|
|
|
- window->x11.cursorGrabbed = GL_FALSE;
|
|
|
- }
|
|
|
-
|
|
|
- if (!window->x11.cursorHidden)
|
|
|
- {
|
|
|
- XDefineCursor(_glfw.x11.display, window->x11.handle, _glfw.x11.cursor);
|
|
|
- window->x11.cursorHidden = GL_TRUE;
|
|
|
- }
|
|
|
+ XUngrabPointer(_glfw.x11.display, CurrentTime);
|
|
|
+ XDefineCursor(_glfw.x11.display, window->x11.handle, _glfw.x11.cursor);
|
|
|
}
|
|
|
|
|
|
-// Capture cursor
|
|
|
+// Disable the mouse cursor
|
|
|
//
|
|
|
-static void captureCursor(_GLFWwindow* window)
|
|
|
+static void disableCursor(_GLFWwindow* window)
|
|
|
{
|
|
|
- if (!window->x11.cursorGrabbed)
|
|
|
- {
|
|
|
- if (XGrabPointer(_glfw.x11.display, window->x11.handle, True,
|
|
|
- ButtonPressMask | ButtonReleaseMask |
|
|
|
- PointerMotionMask, GrabModeAsync, GrabModeAsync,
|
|
|
- window->x11.handle, _glfw.x11.cursor, CurrentTime) ==
|
|
|
- GrabSuccess)
|
|
|
- {
|
|
|
- window->x11.cursorGrabbed = GL_TRUE;
|
|
|
- }
|
|
|
- }
|
|
|
+ XGrabPointer(_glfw.x11.display, window->x11.handle, True,
|
|
|
+ ButtonPressMask | ButtonReleaseMask | PointerMotionMask,
|
|
|
+ GrabModeAsync, GrabModeAsync,
|
|
|
+ window->x11.handle, _glfw.x11.cursor, CurrentTime);
|
|
|
}
|
|
|
|
|
|
-// Show cursor
|
|
|
+// Restores the mouse cursor
|
|
|
//
|
|
|
-static void showCursor(_GLFWwindow* window)
|
|
|
+static void restoreCursor(_GLFWwindow* window)
|
|
|
{
|
|
|
- // Un-grab cursor (in windowed mode only; in fullscreen mode we still
|
|
|
- // want the cursor grabbed in order to confine the cursor to the window
|
|
|
- // area)
|
|
|
- if (window->x11.cursorGrabbed && window->monitor == NULL)
|
|
|
- {
|
|
|
- XUngrabPointer(_glfw.x11.display, CurrentTime);
|
|
|
- window->x11.cursorGrabbed = GL_FALSE;
|
|
|
- }
|
|
|
-
|
|
|
- // Show cursor
|
|
|
- if (window->x11.cursorHidden)
|
|
|
- {
|
|
|
- XUndefineCursor(_glfw.x11.display, window->x11.handle);
|
|
|
- window->x11.cursorHidden = GL_FALSE;
|
|
|
- }
|
|
|
+ XUngrabPointer(_glfw.x11.display, CurrentTime);
|
|
|
+ XUndefineCursor(_glfw.x11.display, window->x11.handle);
|
|
|
}
|
|
|
|
|
|
// Enter fullscreen mode
|
|
@@ -640,18 +608,12 @@ static void processEvent(XEvent *event)
|
|
|
|
|
|
case EnterNotify:
|
|
|
{
|
|
|
- if (window->cursorMode == GLFW_CURSOR_HIDDEN)
|
|
|
- hideCursor(window);
|
|
|
-
|
|
|
_glfwInputCursorEnter(window, GL_TRUE);
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case LeaveNotify:
|
|
|
{
|
|
|
- if (window->cursorMode == GLFW_CURSOR_HIDDEN)
|
|
|
- showCursor(window);
|
|
|
-
|
|
|
_glfwInputCursorEnter(window, GL_FALSE);
|
|
|
break;
|
|
|
}
|
|
@@ -763,7 +725,7 @@ static void processEvent(XEvent *event)
|
|
|
_glfwInputWindowFocus(window, GL_TRUE);
|
|
|
|
|
|
if (window->cursorMode == GLFW_CURSOR_DISABLED)
|
|
|
- captureCursor(window);
|
|
|
+ disableCursor(window);
|
|
|
|
|
|
break;
|
|
|
}
|
|
@@ -773,7 +735,7 @@ static void processEvent(XEvent *event)
|
|
|
_glfwInputWindowFocus(window, GL_FALSE);
|
|
|
|
|
|
if (window->cursorMode == GLFW_CURSOR_DISABLED)
|
|
|
- showCursor(window);
|
|
|
+ restoreCursor(window);
|
|
|
|
|
|
break;
|
|
|
}
|
|
@@ -1202,18 +1164,18 @@ void _glfwPlatformSetCursorPos(_GLFWwindow* window, double x, double y)
|
|
|
0,0,0,0, (int) x, (int) y);
|
|
|
}
|
|
|
|
|
|
-void _glfwPlatformSetCursorMode(_GLFWwindow* window, int mode)
|
|
|
+void _glfwPlatformApplyCursorMode(_GLFWwindow* window)
|
|
|
{
|
|
|
- switch (mode)
|
|
|
+ switch (window->cursorMode)
|
|
|
{
|
|
|
case GLFW_CURSOR_NORMAL:
|
|
|
- showCursor(window);
|
|
|
+ restoreCursor(window);
|
|
|
break;
|
|
|
case GLFW_CURSOR_HIDDEN:
|
|
|
hideCursor(window);
|
|
|
break;
|
|
|
case GLFW_CURSOR_DISABLED:
|
|
|
- captureCursor(window);
|
|
|
+ disableCursor(window);
|
|
|
break;
|
|
|
}
|
|
|
}
|