|
@@ -502,39 +502,6 @@ static GLboolean createWindow(_GLFWwindow* window,
|
|
|
return GL_TRUE;
|
|
|
}
|
|
|
|
|
|
-// Hide the mouse cursor
|
|
|
-//
|
|
|
-static void hideCursor(_GLFWwindow* window)
|
|
|
-{
|
|
|
- XUngrabPointer(_glfw.x11.display, CurrentTime);
|
|
|
- XDefineCursor(_glfw.x11.display, window->x11.handle, _glfw.x11.cursor);
|
|
|
-}
|
|
|
-
|
|
|
-// Disable the mouse cursor
|
|
|
-//
|
|
|
-static void disableCursor(_GLFWwindow* window)
|
|
|
-{
|
|
|
- XGrabPointer(_glfw.x11.display, window->x11.handle, True,
|
|
|
- ButtonPressMask | ButtonReleaseMask | PointerMotionMask,
|
|
|
- GrabModeAsync, GrabModeAsync,
|
|
|
- window->x11.handle, _glfw.x11.cursor, CurrentTime);
|
|
|
-}
|
|
|
-
|
|
|
-// Restores the mouse cursor
|
|
|
-//
|
|
|
-static void restoreCursor(_GLFWwindow* window)
|
|
|
-{
|
|
|
- XUngrabPointer(_glfw.x11.display, CurrentTime);
|
|
|
-
|
|
|
- if (window->cursor)
|
|
|
- {
|
|
|
- XDefineCursor(_glfw.x11.display, window->x11.handle,
|
|
|
- window->cursor->x11.handle);
|
|
|
- }
|
|
|
- else
|
|
|
- XUndefineCursor(_glfw.x11.display, window->x11.handle);
|
|
|
-}
|
|
|
-
|
|
|
// Returns whether the event is a selection event
|
|
|
//
|
|
|
static Bool isSelectionEvent(Display* display, XEvent* event, XPointer pointer)
|
|
@@ -1109,7 +1076,7 @@ static void processEvent(XEvent *event)
|
|
|
// HACK: This is a workaround for WMs (KWM, Fluxbox) that otherwise
|
|
|
// ignore the defined cursor for hidden cursor mode
|
|
|
if (window->cursorMode == GLFW_CURSOR_HIDDEN)
|
|
|
- hideCursor(window);
|
|
|
+ _glfwPlatformSetCursorMode(window, GLFW_CURSOR_HIDDEN);
|
|
|
|
|
|
_glfwInputCursorEnter(window, GL_TRUE);
|
|
|
return;
|
|
@@ -1323,7 +1290,7 @@ static void processEvent(XEvent *event)
|
|
|
XSetICFocus(window->x11.ic);
|
|
|
|
|
|
if (window->cursorMode == GLFW_CURSOR_DISABLED)
|
|
|
- disableCursor(window);
|
|
|
+ _glfwPlatformSetCursorMode(window, GLFW_CURSOR_DISABLED);
|
|
|
|
|
|
_glfwInputWindowFocus(window, GL_TRUE);
|
|
|
return;
|
|
@@ -1343,7 +1310,7 @@ static void processEvent(XEvent *event)
|
|
|
XUnsetICFocus(window->x11.ic);
|
|
|
|
|
|
if (window->cursorMode == GLFW_CURSOR_DISABLED)
|
|
|
- restoreCursor(window);
|
|
|
+ _glfwPlatformSetCursorMode(window, GLFW_CURSOR_NORMAL);
|
|
|
|
|
|
if (window->monitor && window->autoIconify)
|
|
|
_glfwPlatformIconifyWindow(window);
|
|
@@ -1876,19 +1843,34 @@ void _glfwPlatformSetCursorPos(_GLFWwindow* window, double x, double y)
|
|
|
0,0,0,0, (int) x, (int) y);
|
|
|
}
|
|
|
|
|
|
-void _glfwPlatformApplyCursorMode(_GLFWwindow* window)
|
|
|
+void _glfwPlatformSetCursorMode(_GLFWwindow* window, int mode)
|
|
|
{
|
|
|
- switch (window->cursorMode)
|
|
|
+ if (mode == GLFW_CURSOR_DISABLED)
|
|
|
{
|
|
|
- case GLFW_CURSOR_NORMAL:
|
|
|
- restoreCursor(window);
|
|
|
- break;
|
|
|
- case GLFW_CURSOR_HIDDEN:
|
|
|
- hideCursor(window);
|
|
|
- break;
|
|
|
- case GLFW_CURSOR_DISABLED:
|
|
|
- disableCursor(window);
|
|
|
- break;
|
|
|
+ XGrabPointer(_glfw.x11.display, window->x11.handle, True,
|
|
|
+ ButtonPressMask | ButtonReleaseMask | PointerMotionMask,
|
|
|
+ GrabModeAsync, GrabModeAsync,
|
|
|
+ window->x11.handle, _glfw.x11.cursor, CurrentTime);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ XUngrabPointer(_glfw.x11.display, CurrentTime);
|
|
|
+
|
|
|
+ if (mode == GLFW_CURSOR_NORMAL)
|
|
|
+ {
|
|
|
+ if (window->cursor)
|
|
|
+ {
|
|
|
+ XDefineCursor(_glfw.x11.display, window->x11.handle,
|
|
|
+ window->cursor->x11.handle);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ XUndefineCursor(_glfw.x11.display, window->x11.handle);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ XDefineCursor(_glfw.x11.display, window->x11.handle,
|
|
|
+ _glfw.x11.cursor);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|