forked from bartvdbraak/blender
Fix T48901: Blender ignores xinput cursor matrix
This commit is contained in:
parent
a3ce64be5a
commit
7065022f7a
@ -61,6 +61,11 @@
|
|||||||
#include <X11/XF86keysym.h>
|
#include <X11/XF86keysym.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* for XIWarpPointer */
|
||||||
|
#ifdef WITH_X11_XINPUT
|
||||||
|
# include <X11/extensions/XInput2.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
/* For timing */
|
/* For timing */
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
@ -1469,7 +1474,22 @@ setCursorPosition(
|
|||||||
int relx = x - cx;
|
int relx = x - cx;
|
||||||
int rely = y - cy;
|
int rely = y - cy;
|
||||||
|
|
||||||
XWarpPointer(m_display, None, None, 0, 0, 0, 0, relx, rely);
|
#ifdef WITH_X11_XINPUT
|
||||||
|
if ((m_xinput_version.present) &&
|
||||||
|
(m_xinput_version.major_version >= 2))
|
||||||
|
{
|
||||||
|
/* Needed to account for XInput "Coordinate Transformation Matrix", see T48901 */
|
||||||
|
int device_id;
|
||||||
|
if (XIGetClientPointer(m_display, None, &device_id) != False) {
|
||||||
|
XIWarpPointer(m_display, device_id, None, None, 0, 0, 0, 0, relx, rely);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
XWarpPointer(m_display, None, None, 0, 0, 0, 0, relx, rely);
|
||||||
|
}
|
||||||
|
|
||||||
XSync(m_display, 0); /* Sync to process all requests */
|
XSync(m_display, 0); /* Sync to process all requests */
|
||||||
|
|
||||||
return GHOST_kSuccess;
|
return GHOST_kSuccess;
|
||||||
|
@ -51,6 +51,11 @@
|
|||||||
# include "GHOST_ContextGLX.h"
|
# include "GHOST_ContextGLX.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* for XIWarpPointer */
|
||||||
|
#ifdef WITH_X11_XINPUT
|
||||||
|
# include <X11/extensions/XInput2.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(__sun__) || defined(__sun) || defined(__sparc) || defined(__sparc__) || defined(_AIX)
|
#if defined(__sun__) || defined(__sun) || defined(__sparc) || defined(__sparc__) || defined(_AIX)
|
||||||
# include <strings.h>
|
# include <strings.h>
|
||||||
#endif
|
#endif
|
||||||
@ -1520,7 +1525,21 @@ setWindowCursorGrab(
|
|||||||
/* use to generate a mouse move event, otherwise the last event
|
/* use to generate a mouse move event, otherwise the last event
|
||||||
* blender gets can be outside the screen causing menus not to show
|
* blender gets can be outside the screen causing menus not to show
|
||||||
* properly unless the user moves the mouse */
|
* properly unless the user moves the mouse */
|
||||||
XWarpPointer(m_display, None, None, 0, 0, 0, 0, 0, 0);
|
|
||||||
|
#ifdef WITH_X11_XINPUT
|
||||||
|
if ((m_system->m_xinput_version.present) &&
|
||||||
|
(m_system->m_xinput_version.major_version >= 2))
|
||||||
|
{
|
||||||
|
int device_id;
|
||||||
|
if (XIGetClientPointer(m_display, None, &device_id) != False) {
|
||||||
|
XIWarpPointer(m_display, device_id, None, None, 0, 0, 0, 0, 0, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
XWarpPointer(m_display, None, None, 0, 0, 0, 0, 0, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Almost works without but important otherwise the mouse GHOST location can be incorrect on exit */
|
/* Almost works without but important otherwise the mouse GHOST location can be incorrect on exit */
|
||||||
|
Loading…
Reference in New Issue
Block a user