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_SOURCES += udev.c
|
||||||
libconfig_la_LIBADD = $(UDEV_LIBS)
|
libconfig_la_LIBADD = $(UDEV_LIBS)
|
||||||
|
|
||||||
|
if XORG
|
||||||
xorgconfddir = $(datadir)/X11/$(XF86CONFIGDIR)
|
xorgconfddir = $(datadir)/X11/$(XF86CONFIGDIR)
|
||||||
xorgconfd_DATA = 10-evdev.conf
|
xorgconfd_DATA = 10-evdev.conf
|
||||||
|
endif
|
||||||
|
|
||||||
else
|
else
|
||||||
|
|
||||||
|
|
|
@ -324,14 +324,16 @@ countValuators(DeviceEvent *ev, int *first)
|
||||||
|
|
||||||
for (i = 0; i < sizeof(ev->valuators.mask) * 8; i++)
|
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))
|
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)
|
if (first_valuator == -1)
|
||||||
first_valuator = i;
|
first_valuator = i;
|
||||||
last_valuator = i;
|
last_valuator = i;
|
||||||
|
|
|
@ -210,7 +210,7 @@ set_valuators(DeviceIntPtr dev, DeviceEvent* event, ValuatorMask *mask)
|
||||||
if (valuator_mask_isset(mask, i))
|
if (valuator_mask_isset(mask, i))
|
||||||
{
|
{
|
||||||
SetBit(event->valuators.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);
|
SetBit(event->valuators.mode, i);
|
||||||
event->valuators.data[i] = valuator_mask_get(mask, i);
|
event->valuators.data[i] = valuator_mask_get(mask, i);
|
||||||
event->valuators.data_frac[i] =
|
event->valuators.data_frac[i] =
|
||||||
|
@ -1057,14 +1057,18 @@ transformAbsolute(DeviceIntPtr dev, ValuatorMask *mask)
|
||||||
struct pixman_f_vector p;
|
struct pixman_f_vector p;
|
||||||
|
|
||||||
/* p' = M * p in homogeneous coordinates */
|
/* p' = M * p in homogeneous coordinates */
|
||||||
p.v[0] = valuator_mask_get(mask, 0);
|
p.v[0] = (valuator_mask_isset(mask, 0) ? valuator_mask_get(mask, 0) :
|
||||||
p.v[1] = valuator_mask_get(mask, 1);
|
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;
|
p.v[2] = 1.0;
|
||||||
|
|
||||||
pixman_f_transform_point(&dev->transform, &p);
|
pixman_f_transform_point(&dev->transform, &p);
|
||||||
|
|
||||||
valuator_mask_set(mask, 0, lround(p.v[0]));
|
if (lround(p.v[0]) != dev->last.valuators[0])
|
||||||
valuator_mask_set(mask, 1, lround(p.v[1]));
|
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))
|
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,
|
0.0, &y_frac, NULL,
|
||||||
pDev->valuator->axes + 1,
|
pDev->valuator->axes + 1,
|
||||||
scr->height);
|
scr->height);
|
||||||
|
@ -1155,11 +1159,16 @@ GetPointerEvents(EventList *events, DeviceIntPtr pDev, int type, int buttons,
|
||||||
* should be converted to masked valuators. */
|
* should be converted to masked valuators. */
|
||||||
int vals[2];
|
int vals[2];
|
||||||
vals[0] = valuator_mask_isset(&mask, 0) ?
|
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) ?
|
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);
|
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
|
/* The pointer acceleration code modifies the fractional part
|
||||||
* in-place, so we need to extract this information first */
|
* in-place, so we need to extract this information first */
|
||||||
x_frac = pDev->last.remainder[0];
|
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))
|
if (valuator_mask_isset(&mask, 0))
|
||||||
valuator_mask_set(&mask, 0, x);
|
valuator_mask_set(&mask, 0, x);
|
||||||
if (valuator_mask_isset(&mask, 1))
|
if (valuator_mask_isset(&mask, 1))
|
||||||
valuator_mask_set(&mask, 0, y);
|
valuator_mask_set(&mask, 1, y);
|
||||||
|
|
||||||
clipValuators(pDev, &mask);
|
clipValuators(pDev, &mask);
|
||||||
|
|
||||||
|
@ -1239,13 +1248,17 @@ GetProximityEvents(EventList *events, DeviceIntPtr pDev, int type, const Valuato
|
||||||
valuator_mask_copy(&mask, mask_in);
|
valuator_mask_copy(&mask, mask_in);
|
||||||
|
|
||||||
/* ignore relative axes for proximity. */
|
/* 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) &&
|
if (valuator_mask_isset(&mask, i) &&
|
||||||
valuator_get_mode(pDev, i) == Relative)
|
valuator_get_mode(pDev, i) == Relative)
|
||||||
valuator_mask_unset(&mask, i);
|
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);
|
events = UpdateFromMaster(events, pDev, DEVCHANGE_POINTER_EVENT, &num_events);
|
||||||
|
|
||||||
event = (DeviceEvent *) events->event;
|
event = (DeviceEvent *) events->event;
|
||||||
|
|
|
@ -1296,7 +1296,7 @@ xf86ScaleAxis(int Cx,
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
X = 0;
|
X = 0;
|
||||||
ErrorF ("Divide by Zero in xf86ScaleAxis");
|
ErrorF ("Divide by Zero in xf86ScaleAxis\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (X > to_max)
|
if (X > to_max)
|
||||||
|
|
|
@ -85,7 +85,11 @@ static void *console_handler;
|
||||||
static void
|
static void
|
||||||
drain_console(int fd, void *closure)
|
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
|
void
|
||||||
|
|
74
test/input.c
74
test/input.c
|
@ -683,42 +683,82 @@ static void dix_grab_matching(void)
|
||||||
g_assert(rc == TRUE);
|
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;
|
int expected_bytes;
|
||||||
expected_bytes = (i + 7)/8;
|
expected_bytes = (i + 7)/8;
|
||||||
|
|
||||||
g_assert(bits_to_bytes(i) >= i/8);
|
g_assert(bits_to_bytes(i) >= i/8);
|
||||||
g_assert((bits_to_bytes(i) * 8) - i <= 7);
|
g_assert((bits_to_bytes(i) * 8) - i <= 7);
|
||||||
}
|
g_assert(expected_bytes == bits_to_bytes(i));
|
||||||
|
}
|
||||||
|
|
||||||
g_test_message("Testing bytes_to_int32()");
|
static void test_bytes_to_int32(int i)
|
||||||
for (i = 0; i < INT_MAX - 3; i++)
|
{
|
||||||
{
|
|
||||||
int expected_4byte;
|
int expected_4byte;
|
||||||
expected_4byte = (i + 3)/4;
|
expected_4byte = (i + 3)/4;
|
||||||
|
|
||||||
g_assert(bytes_to_int32(i) <= i);
|
g_assert(bytes_to_int32(i) <= i);
|
||||||
g_assert((bytes_to_int32(i) * 4) - i <= 3);
|
g_assert((bytes_to_int32(i) * 4) - i <= 3);
|
||||||
}
|
g_assert(expected_4byte == bytes_to_int32(i));
|
||||||
|
}
|
||||||
|
|
||||||
g_test_message("Testing pad_to_int32");
|
static void test_pad_to_int32(int i)
|
||||||
|
{
|
||||||
for (i = 0; i < INT_MAX - 3; i++)
|
|
||||||
{
|
|
||||||
int expected_bytes;
|
int expected_bytes;
|
||||||
expected_bytes = ((i + 3)/4) * 4;
|
expected_bytes = ((i + 3)/4) * 4;
|
||||||
|
|
||||||
g_assert(pad_to_int32(i) >= i);
|
g_assert(pad_to_int32(i) >= i);
|
||||||
g_assert(pad_to_int32(i) - i <= 3);
|
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)
|
static void xi_unregister_handlers(void)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user