input: add POINTER_NORAW to avoid generation of raw events (#30068)
RawEvents are supposed to be events coming from the driver. When warping the pointer, this should not generate a raw event. X.Org Bug 30068 <http://bugs.freedesktop.org/show_bug.cgi?id=30068> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Daniel Stone <daniel@fooishbar.org> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
parent
9444e40d77
commit
23a7832789
|
@ -1164,14 +1164,17 @@ GetPointerEvents(InternalEvent *events, DeviceIntPtr pDev, int type, int buttons
|
||||||
|
|
||||||
events = UpdateFromMaster(events, pDev, DEVCHANGE_POINTER_EVENT, &num_events);
|
events = UpdateFromMaster(events, pDev, DEVCHANGE_POINTER_EVENT, &num_events);
|
||||||
|
|
||||||
raw = &events->raw_event;
|
|
||||||
events++;
|
|
||||||
num_events++;
|
|
||||||
|
|
||||||
valuator_mask_copy(&mask, mask_in);
|
valuator_mask_copy(&mask, mask_in);
|
||||||
|
|
||||||
init_raw(pDev, raw, ms, type, buttons);
|
if ((flags & POINTER_NORAW) == 0)
|
||||||
set_raw_valuators(raw, &mask, raw->valuators.data_raw);
|
{
|
||||||
|
raw = &events->raw_event;
|
||||||
|
events++;
|
||||||
|
num_events++;
|
||||||
|
|
||||||
|
init_raw(pDev, raw, ms, type, buttons);
|
||||||
|
set_raw_valuators(raw, &mask, raw->valuators.data_raw);
|
||||||
|
}
|
||||||
|
|
||||||
if (flags & POINTER_ABSOLUTE)
|
if (flags & POINTER_ABSOLUTE)
|
||||||
{
|
{
|
||||||
|
@ -1210,7 +1213,8 @@ GetPointerEvents(InternalEvent *events, DeviceIntPtr pDev, int type, int buttons
|
||||||
moveRelative(pDev, &x, &y, &mask);
|
moveRelative(pDev, &x, &y, &mask);
|
||||||
}
|
}
|
||||||
|
|
||||||
set_raw_valuators(raw, &mask, raw->valuators.data);
|
if ((flags & POINTER_NORAW) == 0)
|
||||||
|
set_raw_valuators(raw, &mask, raw->valuators.data);
|
||||||
|
|
||||||
positionSprite(pDev, (flags & POINTER_ABSOLUTE) ? Absolute : Relative,
|
positionSprite(pDev, (flags & POINTER_ABSOLUTE) ? Absolute : Relative,
|
||||||
&x, &y, x_frac, y_frac, scr, &cx, &cy, &cx_frac, &cy_frac);
|
&x, &y, x_frac, y_frac, scr, &cx, &cy, &cx_frac, &cy_frac);
|
||||||
|
|
|
@ -62,10 +62,11 @@ SOFTWARE.
|
||||||
#define DEVICE_OFF 2
|
#define DEVICE_OFF 2
|
||||||
#define DEVICE_CLOSE 3
|
#define DEVICE_CLOSE 3
|
||||||
|
|
||||||
#define POINTER_RELATIVE (1 << 1)
|
#define POINTER_RELATIVE (1 << 1)
|
||||||
#define POINTER_ABSOLUTE (1 << 2)
|
#define POINTER_ABSOLUTE (1 << 2)
|
||||||
#define POINTER_ACCELERATE (1 << 3)
|
#define POINTER_ACCELERATE (1 << 3)
|
||||||
#define POINTER_SCREEN (1 << 4) /* Data in screen coordinates */
|
#define POINTER_SCREEN (1 << 4) /* Data in screen coordinates */
|
||||||
|
#define POINTER_NORAW (1 << 5) /* Don't generate RawEvents */
|
||||||
|
|
||||||
/*int constants for pointer acceleration schemes*/
|
/*int constants for pointer acceleration schemes*/
|
||||||
#define PtrAccelNoOp 0
|
#define PtrAccelNoOp 0
|
||||||
|
|
|
@ -683,7 +683,7 @@ miPointerMove (DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y)
|
||||||
|
|
||||||
valuator_mask_set_range(&mask, 0, 2, valuators);
|
valuator_mask_set_range(&mask, 0, 2, valuators);
|
||||||
nevents = GetPointerEvents(events, pDev, MotionNotify, 0,
|
nevents = GetPointerEvents(events, pDev, MotionNotify, 0,
|
||||||
POINTER_SCREEN | POINTER_ABSOLUTE, &mask);
|
POINTER_SCREEN | POINTER_ABSOLUTE | POINTER_NORAW, &mask);
|
||||||
|
|
||||||
OsBlockSignals();
|
OsBlockSignals();
|
||||||
#ifdef XQUARTZ
|
#ifdef XQUARTZ
|
||||||
|
|
Loading…
Reference in New Issue