Merge remote-tracking branch 'whot/for-keith'

This commit is contained in:
Keith Packard 2012-02-22 18:07:20 +13:00
commit 71594746c7
2 changed files with 20 additions and 12 deletions

View File

@ -671,7 +671,7 @@ DeepCopyPointerClasses(DeviceIntPtr from, DeviceIntPtr to)
if (from->touch) if (from->touch)
{ {
TouchPointInfoPtr tmp; TouchClassPtr t, f;
if (!to->touch) if (!to->touch)
{ {
classes = to->unused_classes; classes = to->unused_classes;
@ -692,17 +692,22 @@ DeepCopyPointerClasses(DeviceIntPtr from, DeviceIntPtr to)
} else } else
classes->touch = NULL; classes->touch = NULL;
} }
tmp = to->touch->touches;
memcpy(to->touch, from->touch, sizeof(TouchClassRec));
to->touch->touches = tmp; t = to->touch;
to->touch->sourceid = from->id; f = from->touch;
} else if (to->touch) t->sourceid = f->sourceid;
{ t->max_touches = f->max_touches;
ClassesPtr classes; t->mode = f->mode;
classes = to->unused_classes; t->buttonsDown = f->buttonsDown;
classes->touch = to->touch; t->state = f->state;
to->touch = NULL; t->motionMask = f->motionMask;
/* to->touches and to->num_touches are separate on the master,
* don't copy */
} }
/* Don't remove touch class if from->touch is non-existent. The to device
* may have an active touch grab, so we need to keep the touch class record
* around. */
} }
/** /**
@ -1164,6 +1169,7 @@ TouchPuntToNextOwner(DeviceIntPtr dev, TouchPointInfoPtr ti,
{ {
EmitTouchEnd(dev, ti, 0, 0); EmitTouchEnd(dev, ti, 0, 0);
TouchEndTouch(dev, ti); TouchEndTouch(dev, ti);
return;
} }
if (ti->listeners[0].state == LISTENER_EARLY_ACCEPT) if (ti->listeners[0].state == LISTENER_EARLY_ACCEPT)
@ -2215,7 +2221,7 @@ DeviceFocusEvent(DeviceIntPtr dev, int type, int mode, int detail,
for (i = 0; mouse && mouse->button && i < mouse->button->numButtons; i++) for (i = 0; mouse && mouse->button && i < mouse->button->numButtons; i++)
if (BitIsOn(mouse->button->down, i)) if (BitIsOn(mouse->button->down, i))
SetBit(&xi2event[1], i); SetBit(&xi2event[1], mouse->button->map[i]);
if (dev->key) if (dev->key)
{ {

View File

@ -360,6 +360,7 @@ updateSlaveDeviceCoords(DeviceIntPtr master, DeviceIntPtr pDev)
if (i >= lastSlave->valuator->numAxes) if (i >= lastSlave->valuator->numAxes)
{ {
pDev->last.valuators[i] = 0; pDev->last.valuators[i] = 0;
valuator_mask_set_double(pDev->last.scroll, i, 0);
} }
else else
{ {
@ -367,6 +368,7 @@ updateSlaveDeviceCoords(DeviceIntPtr master, DeviceIntPtr pDev)
val = rescaleValuatorAxis(val, lastSlave->valuator->axes + i, val = rescaleValuatorAxis(val, lastSlave->valuator->axes + i,
pDev->valuator->axes + i, 0, 0); pDev->valuator->axes + i, 0, 0);
pDev->last.valuators[i] = val; pDev->last.valuators[i] = val;
valuator_mask_set_double(pDev->last.scroll, i, val);
} }
} }
} }