Merge remote branch 'whot/for-keith'
This commit is contained in:
commit
4e0f8f666e
|
@ -9,8 +9,10 @@ AM_CFLAGS += $(UDEV_CFLAGS)
|
|||
libconfig_la_SOURCES += udev.c
|
||||
libconfig_la_LIBADD = $(UDEV_LIBS)
|
||||
|
||||
if XORG
|
||||
xorgconfddir = $(datadir)/X11/$(XF86CONFIGDIR)
|
||||
xorgconfd_DATA = 10-evdev.conf
|
||||
endif
|
||||
|
||||
else
|
||||
|
||||
|
|
|
@ -324,14 +324,16 @@ countValuators(DeviceEvent *ev, int *first)
|
|||
|
||||
for (i = 0; i < sizeof(ev->valuators.mask) * 8; i++)
|
||||
{
|
||||
/* Assume mode of 0th valuator matches XI1 device mode. Stop when the
|
||||
* event mode changes since XI1 can't handle mixed mode devices.
|
||||
*/
|
||||
if (ev->valuators.mode[i] != ev->valuators.mode[0])
|
||||
break;
|
||||
|
||||
if (BitIsOn(ev->valuators.mask, i))
|
||||
{
|
||||
/* Assume mode of first_valuator matches XI1 device mode. Stop when the
|
||||
* event mode changes since XI1 can't handle mixed mode devices.
|
||||
*/
|
||||
if (first_valuator > -1 &&
|
||||
BitIsOn(ev->valuators.mode, i) !=
|
||||
BitIsOn(ev->valuators.mode, first_valuator))
|
||||
break;
|
||||
|
||||
if (first_valuator == -1)
|
||||
first_valuator = i;
|
||||
last_valuator = i;
|
||||
|
|
|
@ -210,7 +210,7 @@ set_valuators(DeviceIntPtr dev, DeviceEvent* event, ValuatorMask *mask)
|
|||
if (valuator_mask_isset(mask, i))
|
||||
{
|
||||
SetBit(event->valuators.mask, i);
|
||||
if (dev->valuator->axes[i].mode == Absolute)
|
||||
if (valuator_get_mode(dev, i) == Absolute)
|
||||
SetBit(event->valuators.mode, i);
|
||||
event->valuators.data[i] = valuator_mask_get(mask, i);
|
||||
event->valuators.data_frac[i] =
|
||||
|
@ -1057,14 +1057,18 @@ transformAbsolute(DeviceIntPtr dev, ValuatorMask *mask)
|
|||
struct pixman_f_vector p;
|
||||
|
||||
/* p' = M * p in homogeneous coordinates */
|
||||
p.v[0] = valuator_mask_get(mask, 0);
|
||||
p.v[1] = valuator_mask_get(mask, 1);
|
||||
p.v[0] = (valuator_mask_isset(mask, 0) ? valuator_mask_get(mask, 0) :
|
||||
dev->last.valuators[0]);
|
||||
p.v[1] = (valuator_mask_isset(mask, 1) ? valuator_mask_get(mask, 1) :
|
||||
dev->last.valuators[1]);
|
||||
p.v[2] = 1.0;
|
||||
|
||||
pixman_f_transform_point(&dev->transform, &p);
|
||||
|
||||
valuator_mask_set(mask, 0, lround(p.v[0]));
|
||||
valuator_mask_set(mask, 1, lround(p.v[1]));
|
||||
if (lround(p.v[0]) != dev->last.valuators[0])
|
||||
valuator_mask_set(mask, 0, lround(p.v[0]));
|
||||
if (lround(p.v[1]) != dev->last.valuators[1])
|
||||
valuator_mask_set(mask, 1, lround(p.v[1]));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1139,7 +1143,7 @@ GetPointerEvents(EventList *events, DeviceIntPtr pDev, int type, int buttons,
|
|||
}
|
||||
if (valuator_mask_isset(&mask, 1))
|
||||
{
|
||||
scaled = rescaleValuatorAxis(valuator_mask_get(&mask, 0),
|
||||
scaled = rescaleValuatorAxis(valuator_mask_get(&mask, 1),
|
||||
0.0, &y_frac, NULL,
|
||||
pDev->valuator->axes + 1,
|
||||
scr->height);
|
||||
|
@ -1155,11 +1159,16 @@ GetPointerEvents(EventList *events, DeviceIntPtr pDev, int type, int buttons,
|
|||
* should be converted to masked valuators. */
|
||||
int vals[2];
|
||||
vals[0] = valuator_mask_isset(&mask, 0) ?
|
||||
valuator_mask_get(&mask, 0) : pDev->last.valuators[0];
|
||||
valuator_mask_get(&mask, 0) : 0;
|
||||
vals[1] = valuator_mask_isset(&mask, 1) ?
|
||||
valuator_mask_get(&mask, 1) : pDev->last.valuators[1];
|
||||
valuator_mask_get(&mask, 1) : 0;
|
||||
accelPointer(pDev, 0, 2, vals, ms);
|
||||
|
||||
if (valuator_mask_isset(&mask, 0))
|
||||
valuator_mask_set(&mask, 0, vals[0]);
|
||||
if (valuator_mask_isset(&mask, 1))
|
||||
valuator_mask_set(&mask, 1, vals[1]);
|
||||
|
||||
/* The pointer acceleration code modifies the fractional part
|
||||
* in-place, so we need to extract this information first */
|
||||
x_frac = pDev->last.remainder[0];
|
||||
|
@ -1177,7 +1186,7 @@ GetPointerEvents(EventList *events, DeviceIntPtr pDev, int type, int buttons,
|
|||
if (valuator_mask_isset(&mask, 0))
|
||||
valuator_mask_set(&mask, 0, x);
|
||||
if (valuator_mask_isset(&mask, 1))
|
||||
valuator_mask_set(&mask, 0, y);
|
||||
valuator_mask_set(&mask, 1, y);
|
||||
|
||||
clipValuators(pDev, &mask);
|
||||
|
||||
|
@ -1239,13 +1248,17 @@ GetProximityEvents(EventList *events, DeviceIntPtr pDev, int type, const Valuato
|
|||
valuator_mask_copy(&mask, mask_in);
|
||||
|
||||
/* ignore relative axes for proximity. */
|
||||
for (i = 0; i < valuator_mask_num_valuators(&mask); i++)
|
||||
for (i = 0; i < valuator_mask_size(&mask); i++)
|
||||
{
|
||||
if (valuator_mask_isset(&mask, i) &&
|
||||
valuator_get_mode(pDev, i) == Relative)
|
||||
valuator_mask_unset(&mask, i);
|
||||
}
|
||||
|
||||
/* FIXME: posting proximity events with relative valuators only results
|
||||
* in an empty event, EventToXI() will fail to convert → no event sent
|
||||
* to client. */
|
||||
|
||||
events = UpdateFromMaster(events, pDev, DEVCHANGE_POINTER_EVENT, &num_events);
|
||||
|
||||
event = (DeviceEvent *) events->event;
|
||||
|
|
|
@ -1296,7 +1296,7 @@ xf86ScaleAxis(int Cx,
|
|||
}
|
||||
else {
|
||||
X = 0;
|
||||
ErrorF ("Divide by Zero in xf86ScaleAxis");
|
||||
ErrorF ("Divide by Zero in xf86ScaleAxis\n");
|
||||
}
|
||||
|
||||
if (X > to_max)
|
||||
|
|
|
@ -85,7 +85,11 @@ static void *console_handler;
|
|||
static void
|
||||
drain_console(int fd, void *closure)
|
||||
{
|
||||
tcflush(fd, TCIOFLUSH);
|
||||
errno = 0;
|
||||
if (tcflush(fd, TCIOFLUSH) == -1 && errno == EIO) {
|
||||
xf86RemoveGeneralHandler(console_handler);
|
||||
console_handler = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
|
74
test/input.c
74
test/input.c
|
@ -683,42 +683,82 @@ static void dix_grab_matching(void)
|
|||
g_assert(rc == TRUE);
|
||||
}
|
||||
|
||||
static void include_byte_padding_macros(void)
|
||||
static void test_bits_to_byte(int i)
|
||||
{
|
||||
int i;
|
||||
g_test_message("Testing bits_to_bytes()");
|
||||
|
||||
/* the macros don't provide overflow protection */
|
||||
for (i = 0; i < INT_MAX - 7; i++)
|
||||
{
|
||||
int expected_bytes;
|
||||
expected_bytes = (i + 7)/8;
|
||||
|
||||
g_assert(bits_to_bytes(i) >= i/8);
|
||||
g_assert((bits_to_bytes(i) * 8) - i <= 7);
|
||||
}
|
||||
g_assert(expected_bytes == bits_to_bytes(i));
|
||||
}
|
||||
|
||||
g_test_message("Testing bytes_to_int32()");
|
||||
for (i = 0; i < INT_MAX - 3; i++)
|
||||
{
|
||||
static void test_bytes_to_int32(int i)
|
||||
{
|
||||
int expected_4byte;
|
||||
expected_4byte = (i + 3)/4;
|
||||
|
||||
g_assert(bytes_to_int32(i) <= i);
|
||||
g_assert((bytes_to_int32(i) * 4) - i <= 3);
|
||||
}
|
||||
g_assert(expected_4byte == bytes_to_int32(i));
|
||||
}
|
||||
|
||||
g_test_message("Testing pad_to_int32");
|
||||
|
||||
for (i = 0; i < INT_MAX - 3; i++)
|
||||
{
|
||||
static void test_pad_to_int32(int i)
|
||||
{
|
||||
int expected_bytes;
|
||||
expected_bytes = ((i + 3)/4) * 4;
|
||||
|
||||
g_assert(pad_to_int32(i) >= i);
|
||||
g_assert(pad_to_int32(i) - i <= 3);
|
||||
}
|
||||
g_assert(expected_bytes == pad_to_int32(i));
|
||||
}
|
||||
static void include_byte_padding_macros(void)
|
||||
{
|
||||
g_test_message("Testing bits_to_bytes()");
|
||||
|
||||
/* the macros don't provide overflow protection */
|
||||
test_bits_to_byte(0);
|
||||
test_bits_to_byte(1);
|
||||
test_bits_to_byte(2);
|
||||
test_bits_to_byte(7);
|
||||
test_bits_to_byte(8);
|
||||
test_bits_to_byte(0xFF);
|
||||
test_bits_to_byte(0x100);
|
||||
test_bits_to_byte(INT_MAX - 9);
|
||||
test_bits_to_byte(INT_MAX - 8);
|
||||
|
||||
g_test_message("Testing bytes_to_int32()");
|
||||
|
||||
test_bytes_to_int32(0);
|
||||
test_bytes_to_int32(1);
|
||||
test_bytes_to_int32(2);
|
||||
test_bytes_to_int32(7);
|
||||
test_bytes_to_int32(8);
|
||||
test_bytes_to_int32(0xFF);
|
||||
test_bytes_to_int32(0x100);
|
||||
test_bytes_to_int32(0xFFFF);
|
||||
test_bytes_to_int32(0x10000);
|
||||
test_bytes_to_int32(0xFFFFFF);
|
||||
test_bytes_to_int32(0x1000000);
|
||||
test_bytes_to_int32(INT_MAX - 4);
|
||||
test_bytes_to_int32(INT_MAX - 3);
|
||||
|
||||
g_test_message("Testing pad_to_int32");
|
||||
|
||||
test_pad_to_int32(0);
|
||||
test_pad_to_int32(0);
|
||||
test_pad_to_int32(1);
|
||||
test_pad_to_int32(2);
|
||||
test_pad_to_int32(7);
|
||||
test_pad_to_int32(8);
|
||||
test_pad_to_int32(0xFF);
|
||||
test_pad_to_int32(0x100);
|
||||
test_pad_to_int32(0xFFFF);
|
||||
test_pad_to_int32(0x10000);
|
||||
test_pad_to_int32(0xFFFFFF);
|
||||
test_pad_to_int32(0x1000000);
|
||||
test_pad_to_int32(INT_MAX - 4);
|
||||
test_pad_to_int32(INT_MAX - 3);
|
||||
}
|
||||
|
||||
static void xi_unregister_handlers(void)
|
||||
|
|
Loading…
Reference in New Issue
Block a user