--- dix/getevents.c.orig 2013-06-21 09:24:16.000000000 -0700 +++ dix/getevents.c 2013-07-16 17:50:44.277385392 -0700 @@ -277,7 +277,7 @@ dce->valuators[i].mode = slave->valuator->axes[i].mode; dce->valuators[i].name = slave->valuator->axes[i].label; dce->valuators[i].scroll = slave->valuator->axes[i].scroll; - dce->valuators[i].value = slave->valuator->axisVal[i]; + dce->valuators[i].value = slave->last.valuators[i]; } } if (slave->key) { @@ -712,12 +712,12 @@ MASTER_KEYBOARD); if (master && master->last.slave != dev) { - CreateClassesChangedEvent(events, master, dev, - type | DEVCHANGE_SLAVE_SWITCH); if (IsPointerDevice(master)) { updateSlaveDeviceCoords(master, dev); master->last.numValuators = dev->last.numValuators; } + CreateClassesChangedEvent(events, master, dev, + type | DEVCHANGE_SLAVE_SWITCH); master->last.slave = dev; (*num_events)++; events++;