Merge remote-tracking branch 'whot/for-keith'
This commit is contained in:
commit
bf9fd0a83e
|
@ -890,8 +890,8 @@ ProcessRawEvent(RawDeviceEvent *ev, DeviceIntPtr device)
|
||||||
i = EventToXI2((InternalEvent*)ev, (xEvent**)&xi);
|
i = EventToXI2((InternalEvent*)ev, (xEvent**)&xi);
|
||||||
if (i != Success)
|
if (i != Success)
|
||||||
{
|
{
|
||||||
ErrorF("[Xi] %s: XI2 conversion failed in ProcessRawEvent (%d)\n",
|
ErrorF("[Xi] %s: XI2 conversion failed in %s (%d)\n",
|
||||||
device->name, i);
|
__func__, device->name, i);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -432,7 +432,7 @@ GetEventFilter(DeviceIntPtr dev, xEvent *event)
|
||||||
return filters[dev ? dev->id : 0][event->u.u.type];
|
return filters[dev ? dev->id : 0][event->u.u.type];
|
||||||
else if ((evtype = xi2_get_type(event)))
|
else if ((evtype = xi2_get_type(event)))
|
||||||
return (1 << (evtype % 8));
|
return (1 << (evtype % 8));
|
||||||
ErrorF("[dix] Unknown device type %d. No filter\n", event->u.u.type);
|
ErrorF("[dix] Unknown event type %d. No filter\n", event->u.u.type);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1421,7 +1421,7 @@ CheckGrabForSyncs(DeviceIntPtr thisDev, Bool thisMode, Bool otherMode)
|
||||||
static void
|
static void
|
||||||
DetachFromMaster(DeviceIntPtr dev)
|
DetachFromMaster(DeviceIntPtr dev)
|
||||||
{
|
{
|
||||||
if (!IsFloating(dev))
|
if (IsFloating(dev))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
dev->saved_master_id = GetMaster(dev, MASTER_ATTACHED)->id;
|
dev->saved_master_id = GetMaster(dev, MASTER_ATTACHED)->id;
|
||||||
|
@ -3997,7 +3997,7 @@ DeliverGrabbedEvent(InternalEvent *event, DeviceIntPtr thisDev,
|
||||||
rc = EventToXI2(event, &xi2);
|
rc = EventToXI2(event, &xi2);
|
||||||
if (rc == Success)
|
if (rc == Success)
|
||||||
{
|
{
|
||||||
int evtype = ((xGenericEvent*)xi2)->evtype;
|
int evtype = xi2_get_type(xi2);
|
||||||
mask = grab->xi2mask[XIAllDevices][evtype/8] |
|
mask = grab->xi2mask[XIAllDevices][evtype/8] |
|
||||||
grab->xi2mask[XIAllMasterDevices][evtype/8] |
|
grab->xi2mask[XIAllMasterDevices][evtype/8] |
|
||||||
grab->xi2mask[thisDev->id][evtype/8];
|
grab->xi2mask[thisDev->id][evtype/8];
|
||||||
|
|
|
@ -864,7 +864,7 @@ positionSprite(DeviceIntPtr dev, int mode,
|
||||||
* to the current screen. */
|
* to the current screen. */
|
||||||
miPointerSetPosition(dev, mode, screenx, screeny);
|
miPointerSetPosition(dev, mode, screenx, screeny);
|
||||||
|
|
||||||
if(!IsMaster(dev) || !IsFloating(dev)) {
|
if(!IsMaster(dev) && !IsFloating(dev)) {
|
||||||
DeviceIntPtr master = GetMaster(dev, MASTER_POINTER);
|
DeviceIntPtr master = GetMaster(dev, MASTER_POINTER);
|
||||||
master->last.valuators[0] = *screenx;
|
master->last.valuators[0] = *screenx;
|
||||||
master->last.valuators[1] = *screeny;
|
master->last.valuators[1] = *screeny;
|
||||||
|
@ -911,7 +911,7 @@ updateHistory(DeviceIntPtr dev, ValuatorMask *mask, CARD32 ms)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
updateMotionHistory(dev, ms, mask, dev->last.valuators);
|
updateMotionHistory(dev, ms, mask, dev->last.valuators);
|
||||||
if(!IsMaster(dev) || !IsFloating(dev))
|
if(!IsMaster(dev) && !IsFloating(dev))
|
||||||
{
|
{
|
||||||
DeviceIntPtr master = GetMaster(dev, MASTER_POINTER);
|
DeviceIntPtr master = GetMaster(dev, MASTER_POINTER);
|
||||||
updateMotionHistory(master, ms, mask, dev->last.valuators);
|
updateMotionHistory(master, ms, mask, dev->last.valuators);
|
||||||
|
@ -1052,17 +1052,39 @@ FreeEventList(InternalEvent *list, int num_events)
|
||||||
free(list);
|
free(list);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Transform vector x/y according to matrix m and drop the rounded coords
|
||||||
|
* back into x/y.
|
||||||
|
*/
|
||||||
static void
|
static void
|
||||||
transformAbsolute(DeviceIntPtr dev, ValuatorMask *mask, int *x, int *y)
|
transform(struct pixman_f_transform *m, int *x, int *y)
|
||||||
{
|
{
|
||||||
struct pixman_f_vector p = {.v = {*x, *y, 1}};
|
struct pixman_f_vector p = {.v = {*x, *y, 1}};
|
||||||
|
pixman_f_transform_point(m, &p);
|
||||||
pixman_f_transform_point(&dev->transform, &p);
|
|
||||||
|
|
||||||
*x = lround(p.v[0]);
|
*x = lround(p.v[0]);
|
||||||
*y = lround(p.v[1]);
|
*y = lround(p.v[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
transformAbsolute(DeviceIntPtr dev, ValuatorMask *mask)
|
||||||
|
{
|
||||||
|
int x, y, ox, oy;
|
||||||
|
|
||||||
|
ox = x = valuator_mask_isset(mask, 0) ? valuator_mask_get(mask, 0) :
|
||||||
|
dev->last.valuators[0];
|
||||||
|
oy = y = valuator_mask_isset(mask, 1) ? valuator_mask_get(mask, 1) :
|
||||||
|
dev->last.valuators[1];
|
||||||
|
|
||||||
|
transform(&dev->transform, &x, &y);
|
||||||
|
|
||||||
|
if (valuator_mask_isset(mask, 0) || ox != x)
|
||||||
|
valuator_mask_set(mask, 0, x);
|
||||||
|
|
||||||
|
if (valuator_mask_isset(mask, 1) || oy != y)
|
||||||
|
valuator_mask_set(mask, 1, y);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generate internal events representing this pointer event and enqueue them
|
* Generate internal events representing this pointer event and enqueue them
|
||||||
* on the event queue.
|
* on the event queue.
|
||||||
|
@ -1175,16 +1197,7 @@ GetPointerEvents(InternalEvent *events, DeviceIntPtr pDev, int type, int buttons
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
x = (valuator_mask_isset(&mask, 0) ? valuator_mask_get(&mask, 0) :
|
transformAbsolute(pDev, &mask);
|
||||||
pDev->last.valuators[0]);
|
|
||||||
y = (valuator_mask_isset(&mask, 1) ? valuator_mask_get(&mask, 1) :
|
|
||||||
pDev->last.valuators[1]);
|
|
||||||
transformAbsolute(pDev, &mask, &x, &y);
|
|
||||||
if (valuator_mask_isset(&mask, 0))
|
|
||||||
valuator_mask_set(&mask, 0, x);
|
|
||||||
if (valuator_mask_isset(&mask, 1))
|
|
||||||
valuator_mask_set(&mask, 1, y);
|
|
||||||
|
|
||||||
moveAbsolute(pDev, &x, &y, &mask);
|
moveAbsolute(pDev, &x, &y, &mask);
|
||||||
} else {
|
} else {
|
||||||
if (flags & POINTER_ACCELERATE) {
|
if (flags & POINTER_ACCELERATE) {
|
||||||
|
|
|
@ -1223,8 +1223,11 @@ static void dix_valuator_alloc(void)
|
||||||
|
|
||||||
assert(v);
|
assert(v);
|
||||||
assert(v->numAxes == num_axes);
|
assert(v->numAxes == num_axes);
|
||||||
|
#ifndef __i386__
|
||||||
|
/* must be double-aligned on 64 bit */
|
||||||
assert(((void*)v->axisVal - (void*)v) % sizeof(double) == 0);
|
assert(((void*)v->axisVal - (void*)v) % sizeof(double) == 0);
|
||||||
assert(((void*)v->axes - (void*)v) % sizeof(double) == 0);
|
assert(((void*)v->axes - (void*)v) % sizeof(double) == 0);
|
||||||
|
#endif
|
||||||
num_axes ++;
|
num_axes ++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue