Fix issue with merge

This commit is contained in:
NarrikSynthfox 2024-04-10 13:39:35 -04:00
parent 39dec1415b
commit a4c3492a03
3 changed files with 960 additions and 1146 deletions

View File

@ -728,19 +728,6 @@ GLFWAPI void glfwSetInputMode(GLFWwindow *handle, int mode, int value)
return; return;
} }
case GLFW_RAW_MOUSE_MOTION:
{
if (!_glfw.platform.rawMouseMotionSupported())
{
_glfwInputError(GLFW_PLATFORM_ERROR,
"Raw mouse motion is not supported on this system");
return;
}
value = value ? GLFW_TRUE : GLFW_FALSE;
if (window->rawMouseMotion == value)
return;
case GLFW_RAW_MOUSE_MOTION: case GLFW_RAW_MOUSE_MOTION:
{ {
if (!_glfw.platform.rawMouseMotionSupported()) if (!_glfw.platform.rawMouseMotionSupported())

View File

@ -33,6 +33,7 @@
#include <stdlib.h> #include <stdlib.h>
#include <float.h> #include <float.h>
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
////// GLFW event API ////// ////// GLFW event API //////
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
@ -1198,3 +1199,4 @@ GLFWAPI void glfwPostEmptyEvent(void)
_GLFW_REQUIRE_INIT(); _GLFW_REQUIRE_INIT();
_glfw.platform.postEmptyEvent(); _glfw.platform.postEmptyEvent();
} }

View File

@ -158,8 +158,7 @@ static GLFWbool waitForVisibilityNotify(_GLFWwindow *window)
static int getWindowState(_GLFWwindow* window) static int getWindowState(_GLFWwindow* window)
{ {
int result = WithdrawnState; int result = WithdrawnState;
struct struct {
{
CARD32 state; CARD32 state;
Window icon; Window icon;
} *state = NULL; } *state = NULL;
@ -420,7 +419,8 @@ static uint32_t decodeUTF8(const char **s)
static const uint32_t offsets[] = static const uint32_t offsets[] =
{ {
0x00000000u, 0x00003080u, 0x000e2080u, 0x00000000u, 0x00003080u, 0x000e2080u,
0x03c82080u, 0xfa082080u, 0x82082080u}; 0x03c82080u, 0xfa082080u, 0x82082080u
};
do do
{ {
@ -665,7 +665,8 @@ static GLFWbool createNativeWindow(_GLFWwindow *window,
Atom protocols[] = Atom protocols[] =
{ {
_glfw.x11.WM_DELETE_WINDOW, _glfw.x11.WM_DELETE_WINDOW,
_glfw.x11.NET_WM_PING}; _glfw.x11.NET_WM_PING
};
XSetWMProtocols(_glfw.x11.display, window->x11.handle, XSetWMProtocols(_glfw.x11.display, window->x11.handle,
protocols, sizeof(protocols) / sizeof(Atom)); protocols, sizeof(protocols) / sizeof(Atom));
@ -1487,6 +1488,9 @@ static void processEvent(XEvent *event)
if (event->xconfigure.width != window->x11.width || if (event->xconfigure.width != window->x11.width ||
event->xconfigure.height != window->x11.height) event->xconfigure.height != window->x11.height)
{ {
window->x11.width = event->xconfigure.width;
window->x11.height = event->xconfigure.height;
_glfwInputFramebufferSize(window, _glfwInputFramebufferSize(window,
event->xconfigure.width, event->xconfigure.width,
event->xconfigure.height); event->xconfigure.height);
@ -1494,9 +1498,6 @@ static void processEvent(XEvent *event)
_glfwInputWindowSize(window, _glfwInputWindowSize(window,
event->xconfigure.width, event->xconfigure.width,
event->xconfigure.height); event->xconfigure.height);
window->x11.width = event->xconfigure.width;
window->x11.height = event->xconfigure.height;
} }
int xpos = event->xconfigure.x; int xpos = event->xconfigure.x;
@ -1524,9 +1525,10 @@ static void processEvent(XEvent *event)
if (xpos != window->x11.xpos || ypos != window->x11.ypos) if (xpos != window->x11.xpos || ypos != window->x11.ypos)
{ {
_glfwInputWindowPos(window, xpos, ypos);
window->x11.xpos = xpos; window->x11.xpos = xpos;
window->x11.ypos = ypos; window->x11.ypos = ypos;
_glfwInputWindowPos(window, xpos, ypos);
} }
return; return;
@ -1613,188 +1615,7 @@ static void processEvent(XEvent *event)
// The drag operation has finished by dropping on the window // The drag operation has finished by dropping on the window
Time time = CurrentTime; Time time = CurrentTime;
if (event->xbutton.button == Button1) if (_glfw.x11.xdnd.version > _GLFW_XDND_VERSION)
_glfwInputMouseClick(window, GLFW_MOUSE_BUTTON_LEFT, GLFW_PRESS, mods);
else if (event->xbutton.button == Button2)
_glfwInputMouseClick(window, GLFW_MOUSE_BUTTON_MIDDLE, GLFW_PRESS, mods);
else if (event->xbutton.button == Button3)
_glfwInputMouseClick(window, GLFW_MOUSE_BUTTON_RIGHT, GLFW_PRESS, mods);
// Modern X provides scroll events as mouse button presses
else if (event->xbutton.button == Button4)
_glfwInputScroll(window, 0.0, 1.0);
else if (event->xbutton.button == Button5)
_glfwInputScroll(window, 0.0, -1.0);
else if (event->xbutton.button == Button6)
_glfwInputScroll(window, 1.0, 0.0);
else if (event->xbutton.button == Button7)
_glfwInputScroll(window, -1.0, 0.0);
else
{
// Additional buttons after 7 are treated as regular buttons
// We subtract 4 to fill the gap left by scroll input above
_glfwInputMouseClick(window,
event->xbutton.button - Button1 - 4,
GLFW_PRESS,
mods);
}
return;
}
case ButtonRelease:
{
const int mods = translateState(event->xbutton.state);
if (event->xbutton.button == Button1)
{
_glfwInputMouseClick(window,
GLFW_MOUSE_BUTTON_LEFT,
GLFW_RELEASE,
mods);
}
else if (event->xbutton.button == Button2)
{
_glfwInputMouseClick(window,
GLFW_MOUSE_BUTTON_MIDDLE,
GLFW_RELEASE,
mods);
}
else if (event->xbutton.button == Button3)
{
_glfwInputMouseClick(window,
GLFW_MOUSE_BUTTON_RIGHT,
GLFW_RELEASE,
mods);
}
else if (event->xbutton.button > Button7)
{
// Additional buttons after 7 are treated as regular buttons
// We subtract 4 to fill the gap left by scroll input above
_glfwInputMouseClick(window,
event->xbutton.button - Button1 - 4,
GLFW_RELEASE,
mods);
}
return;
}
case EnterNotify:
{
// XEnterWindowEvent is XCrossingEvent
const int x = event->xcrossing.x;
const int y = event->xcrossing.y;
// 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)
updateCursorImage(window);
_glfwInputCursorEnter(window, GLFW_TRUE);
_glfwInputCursorPos(window, x, y);
window->x11.lastCursorPosX = x;
window->x11.lastCursorPosY = y;
return;
}
case LeaveNotify:
{
_glfwInputCursorEnter(window, GLFW_FALSE);
return;
}
case MotionNotify:
{
const int x = event->xmotion.x;
const int y = event->xmotion.y;
if (x != window->x11.warpCursorPosX ||
y != window->x11.warpCursorPosY)
{
// The cursor was moved by something other than GLFW
if (window->cursorMode == GLFW_CURSOR_DISABLED)
{
if (_glfw.x11.disabledCursorWindow != window)
return;
if (window->rawMouseMotion)
return;
const int dx = x - window->x11.lastCursorPosX;
const int dy = y - window->x11.lastCursorPosY;
_glfwInputCursorPos(window,
window->virtualCursorPosX + dx,
window->virtualCursorPosY + dy);
}
else
_glfwInputCursorPos(window, x, y);
}
window->x11.lastCursorPosX = x;
window->x11.lastCursorPosY = y;
return;
}
case ConfigureNotify:
{
if (event->xconfigure.width != window->x11.width ||
event->xconfigure.height != window->x11.height)
{
window->x11.width = event->xconfigure.width;
window->x11.height = event->xconfigure.height;
_glfwInputFramebufferSize(window,
event->xconfigure.width,
event->xconfigure.height);
_glfwInputWindowSize(window,
event->xconfigure.width,
event->xconfigure.height);
}
int xpos = event->xconfigure.x;
int ypos = event->xconfigure.y;
// NOTE: ConfigureNotify events from the server are in local
// coordinates, so if we are reparented we need to translate
// the position into root (screen) coordinates
if (!event->xany.send_event && window->x11.parent != _glfw.x11.root)
{
_glfwGrabErrorHandlerX11();
Window dummy;
XTranslateCoordinates(_glfw.x11.display,
window->x11.parent,
_glfw.x11.root,
xpos, ypos,
&xpos, &ypos,
&dummy);
_glfwReleaseErrorHandlerX11();
if (_glfw.x11.errorCode == BadWindow)
return;
}
if (xpos != window->x11.xpos || ypos != window->x11.ypos)
{
window->x11.xpos = xpos;
window->x11.ypos = ypos;
_glfwInputWindowPos(window, xpos, ypos);
}
return;
}
case ClientMessage:
{
// Custom client message, probably from the window manager
if (filtered)
return; return;
if (_glfw.x11.xdnd.format) if (_glfw.x11.xdnd.format)
@ -2012,6 +1833,7 @@ static void processEvent(XEvent *event)
} }
} }
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
////// GLFW internal API ////// ////// GLFW internal API //////
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
@ -2129,6 +1951,7 @@ void _glfwCreateInputContextX11(_GLFWwindow *window)
} }
} }
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
////// GLFW platform API ////// ////// GLFW platform API //////
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
@ -2570,7 +2393,8 @@ void _glfwMaximizeWindowX11(_GLFWwindow *window)
Atom missing[2] = Atom missing[2] =
{ {
_glfw.x11.NET_WM_STATE_MAXIMIZED_VERT, _glfw.x11.NET_WM_STATE_MAXIMIZED_VERT,
_glfw.x11.NET_WM_STATE_MAXIMIZED_HORZ}; _glfw.x11.NET_WM_STATE_MAXIMIZED_HORZ
};
unsigned long missingCount = 2; unsigned long missingCount = 2;
for (unsigned long i = 0; i < count; i++) for (unsigned long i = 0; i < count; i++)
@ -2961,7 +2785,6 @@ void _glfwPollEventsX11(void)
#if defined(GLFW_BUILD_LINUX_JOYSTICK) #if defined(GLFW_BUILD_LINUX_JOYSTICK)
if (_glfw.joysticksInitialized) if (_glfw.joysticksInitialized)
_glfwPollAllJoysticks();
_glfwDetectJoystickConnectionLinux(); _glfwDetectJoystickConnectionLinux();
#endif #endif
XPending(_glfw.x11.display); XPending(_glfw.x11.display);
@ -3459,6 +3282,7 @@ VkResult _glfwCreateWindowSurfaceX11(VkInstance instance,
} }
} }
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
////// GLFW native API ////// ////// GLFW native API //////
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
@ -3534,3 +3358,4 @@ GLFWAPI const char *glfwGetX11SelectionString(void)
} }
#endif // _GLFW_X11 #endif // _GLFW_X11