Merge remote-tracking branch 'whot/for-keith'
This commit is contained in:
commit
53da26afb7
|
@ -156,8 +156,8 @@ XvExtensionInit(void)
|
||||||
if (!dixRegisterPrivateKey(&XvScreenKeyRec, PRIVATE_SCREEN, 0))
|
if (!dixRegisterPrivateKey(&XvScreenKeyRec, PRIVATE_SCREEN, 0))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* LOOK TO SEE IF ANY SCREENS WERE INITIALIZED; IF NOT THEN
|
/* Look to see if any screens were initialized; if not then
|
||||||
INIT GLOBAL VARIABLES SO THE EXTENSION CAN FUNCTION */
|
init global variables so the extension can function */
|
||||||
if (XvScreenGeneration != serverGeneration) {
|
if (XvScreenGeneration != serverGeneration) {
|
||||||
if (!CreateResourceTypes()) {
|
if (!CreateResourceTypes()) {
|
||||||
ErrorF("XvExtensionInit: Unable to allocate resource types\n");
|
ErrorF("XvExtensionInit: Unable to allocate resource types\n");
|
||||||
|
|
|
@ -142,7 +142,8 @@ ProcXDeviceBell(ClientPtr client)
|
||||||
newpercent = base + newpercent;
|
newpercent = base + newpercent;
|
||||||
else
|
else
|
||||||
newpercent = base - newpercent + stuff->percent;
|
newpercent = base - newpercent + stuff->percent;
|
||||||
|
if (proc == NULL)
|
||||||
|
return BadValue;
|
||||||
(*proc) (newpercent, dev, ctrl, class);
|
(*proc) (newpercent, dev, ctrl, class);
|
||||||
|
|
||||||
return Success;
|
return Success;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1223,9 +1223,16 @@ TouchRejected(DeviceIntPtr sourcedev, TouchPointInfoPtr ti, XID resource,
|
||||||
* touchpoint if it is pending finish.
|
* touchpoint if it is pending finish.
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
ProcessTouchOwnershipEvent(DeviceIntPtr dev, TouchPointInfoPtr ti,
|
ProcessTouchOwnershipEvent(TouchOwnershipEvent *ev,
|
||||||
TouchOwnershipEvent *ev)
|
DeviceIntPtr dev)
|
||||||
{
|
{
|
||||||
|
TouchPointInfoPtr ti = TouchFindByClientID(dev, ev->touchid);
|
||||||
|
|
||||||
|
if (!ti) {
|
||||||
|
DebugF("[Xi] %s: Failed to get event %d for touchpoint %d\n",
|
||||||
|
dev->name, ev->type, ev->touchid);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (ev->reason == XIRejectTouch)
|
if (ev->reason == XIRejectTouch)
|
||||||
TouchRejected(dev, ti, ev->resource, ev);
|
TouchRejected(dev, ti, ev->resource, ev);
|
||||||
|
@ -1538,10 +1545,7 @@ ProcessTouchEvent(InternalEvent *ev, DeviceIntPtr dev)
|
||||||
if (!t)
|
if (!t)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (ev->any.type == ET_TouchOwnership)
|
touchid = ev->device_event.touchid;
|
||||||
touchid = ev->touch_ownership_event.touchid;
|
|
||||||
else
|
|
||||||
touchid = ev->device_event.touchid;
|
|
||||||
|
|
||||||
if (type == ET_TouchBegin) {
|
if (type == ET_TouchBegin) {
|
||||||
ti = TouchBeginTouch(dev, ev->device_event.sourceid, touchid,
|
ti = TouchBeginTouch(dev, ev->device_event.sourceid, touchid,
|
||||||
|
@ -1614,19 +1618,13 @@ ProcessTouchEvent(InternalEvent *ev, DeviceIntPtr dev)
|
||||||
(type != ET_TouchEnd && ti->sprite.spriteTraceGood == 0))
|
(type != ET_TouchEnd && ti->sprite.spriteTraceGood == 0))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* TouchOwnership events are handled separately from the rest, as they
|
TouchCopyValuatorData(&ev->device_event, ti);
|
||||||
* have more complex semantics. */
|
/* WARNING: the event type may change to TouchUpdate in
|
||||||
if (ev->any.type == ET_TouchOwnership)
|
* DeliverTouchEvents if a TouchEnd was delivered to a grabbing
|
||||||
ProcessTouchOwnershipEvent(dev, ti, &ev->touch_ownership_event);
|
* owner */
|
||||||
else {
|
DeliverTouchEvents(dev, ti, (InternalEvent *) ev, 0);
|
||||||
TouchCopyValuatorData(&ev->device_event, ti);
|
if (ev->any.type == ET_TouchEnd)
|
||||||
/* WARNING: the event type may change to TouchUpdate in
|
TouchEndTouch(dev, ti);
|
||||||
* DeliverTouchEvents if a TouchEnd was delivered to a grabbing
|
|
||||||
* owner */
|
|
||||||
DeliverTouchEvents(dev, ti, (InternalEvent *) ev, 0);
|
|
||||||
if (ev->any.type == ET_TouchEnd)
|
|
||||||
TouchEndTouch(dev, ti);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (emulate_pointer)
|
if (emulate_pointer)
|
||||||
UpdateDeviceState(dev, &ev->device_event);
|
UpdateDeviceState(dev, &ev->device_event);
|
||||||
|
@ -1820,10 +1818,14 @@ ProcessOtherEvent(InternalEvent *ev, DeviceIntPtr device)
|
||||||
break;
|
break;
|
||||||
case ET_TouchBegin:
|
case ET_TouchBegin:
|
||||||
case ET_TouchUpdate:
|
case ET_TouchUpdate:
|
||||||
case ET_TouchOwnership:
|
|
||||||
case ET_TouchEnd:
|
case ET_TouchEnd:
|
||||||
ProcessTouchEvent(ev, device);
|
ProcessTouchEvent(ev, device);
|
||||||
break;
|
break;
|
||||||
|
case ET_TouchOwnership:
|
||||||
|
/* TouchOwnership events are handled separately from the rest, as they
|
||||||
|
* have more complex semantics. */
|
||||||
|
ProcessTouchOwnershipEvent(&ev->touch_ownership_event, device);
|
||||||
|
break;
|
||||||
case ET_BarrierHit:
|
case ET_BarrierHit:
|
||||||
case ET_BarrierLeave:
|
case ET_BarrierLeave:
|
||||||
ProcessBarrierEvent(ev, device);
|
ProcessBarrierEvent(ev, device);
|
||||||
|
|
34
Xi/extinit.c
34
Xi/extinit.c
|
@ -848,24 +848,24 @@ SBarrierEvent(xXIBarrierEvent * from,
|
||||||
|
|
||||||
*to = *from;
|
*to = *from;
|
||||||
|
|
||||||
swaps(&from->sequenceNumber);
|
swaps(&to->sequenceNumber);
|
||||||
swapl(&from->length);
|
swapl(&to->length);
|
||||||
swaps(&from->evtype);
|
swaps(&to->evtype);
|
||||||
swapl(&from->time);
|
swapl(&to->time);
|
||||||
swaps(&from->deviceid);
|
swaps(&to->deviceid);
|
||||||
swaps(&from->sourceid);
|
swaps(&to->sourceid);
|
||||||
swapl(&from->event);
|
swapl(&to->event);
|
||||||
swapl(&from->root);
|
swapl(&to->root);
|
||||||
swapl(&from->root_x);
|
swapl(&to->root_x);
|
||||||
swapl(&from->root_y);
|
swapl(&to->root_y);
|
||||||
|
|
||||||
swapl(&from->dx.integral);
|
swapl(&to->dx.integral);
|
||||||
swapl(&from->dx.frac);
|
swapl(&to->dx.frac);
|
||||||
swapl(&from->dy.integral);
|
swapl(&to->dy.integral);
|
||||||
swapl(&from->dy.frac);
|
swapl(&to->dy.frac);
|
||||||
swapl(&from->dtime);
|
swapl(&to->dtime);
|
||||||
swapl(&from->barrier);
|
swapl(&to->barrier);
|
||||||
swapl(&from->eventid);
|
swapl(&to->eventid);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Event swapping function for XI2 events. */
|
/** Event swapping function for XI2 events. */
|
||||||
|
|
|
@ -67,6 +67,8 @@ ProcXIGrabDevice(ClientPtr client)
|
||||||
uint8_t status;
|
uint8_t status;
|
||||||
GrabMask mask = { 0 };
|
GrabMask mask = { 0 };
|
||||||
int mask_len;
|
int mask_len;
|
||||||
|
unsigned int keyboard_mode;
|
||||||
|
unsigned int pointer_mode;
|
||||||
|
|
||||||
REQUEST(xXIGrabDeviceReq);
|
REQUEST(xXIGrabDeviceReq);
|
||||||
REQUEST_AT_LEAST_SIZE(xXIGrabDeviceReq);
|
REQUEST_AT_LEAST_SIZE(xXIGrabDeviceReq);
|
||||||
|
@ -78,6 +80,15 @@ ProcXIGrabDevice(ClientPtr client)
|
||||||
if (!IsMaster(dev))
|
if (!IsMaster(dev))
|
||||||
stuff->paired_device_mode = GrabModeAsync;
|
stuff->paired_device_mode = GrabModeAsync;
|
||||||
|
|
||||||
|
if (IsKeyboardDevice(dev)) {
|
||||||
|
keyboard_mode = stuff->grab_mode;
|
||||||
|
pointer_mode = stuff->paired_device_mode;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
keyboard_mode = stuff->paired_device_mode;
|
||||||
|
pointer_mode = stuff->grab_mode;
|
||||||
|
}
|
||||||
|
|
||||||
if (XICheckInvalidMaskBits(client, (unsigned char *) &stuff[1],
|
if (XICheckInvalidMaskBits(client, (unsigned char *) &stuff[1],
|
||||||
stuff->mask_len * 4) != Success)
|
stuff->mask_len * 4) != Success)
|
||||||
return BadValue;
|
return BadValue;
|
||||||
|
@ -91,8 +102,8 @@ ProcXIGrabDevice(ClientPtr client)
|
||||||
xi2mask_set_one_mask(mask.xi2mask, dev->id, (unsigned char *) &stuff[1],
|
xi2mask_set_one_mask(mask.xi2mask, dev->id, (unsigned char *) &stuff[1],
|
||||||
mask_len);
|
mask_len);
|
||||||
|
|
||||||
ret = GrabDevice(client, dev, stuff->grab_mode,
|
ret = GrabDevice(client, dev, pointer_mode,
|
||||||
stuff->paired_device_mode,
|
keyboard_mode,
|
||||||
stuff->grab_window,
|
stuff->grab_window,
|
||||||
stuff->owner_events,
|
stuff->owner_events,
|
||||||
stuff->time,
|
stuff->time,
|
||||||
|
|
|
@ -795,6 +795,7 @@ FreeDeviceClass(int type, pointer *class)
|
||||||
free((*t)->touches[i].valuators);
|
free((*t)->touches[i].valuators);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
free((*t)->touches);
|
||||||
free((*t));
|
free((*t));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -2766,9 +2767,10 @@ AllocDevicePair(ClientPtr client, const char *name,
|
||||||
keyboard->type = (master) ? MASTER_KEYBOARD : SLAVE;
|
keyboard->type = (master) ? MASTER_KEYBOARD : SLAVE;
|
||||||
|
|
||||||
/* The ClassesRec stores the device classes currently not used. */
|
/* The ClassesRec stores the device classes currently not used. */
|
||||||
pointer->unused_classes = calloc(1, sizeof(ClassesRec));
|
if (IsMaster(pointer)) {
|
||||||
|
pointer->unused_classes = calloc(1, sizeof(ClassesRec));
|
||||||
keyboard->unused_classes = calloc(1, sizeof(ClassesRec));
|
keyboard->unused_classes = calloc(1, sizeof(ClassesRec));
|
||||||
|
}
|
||||||
|
|
||||||
*ptr = pointer;
|
*ptr = pointer;
|
||||||
|
|
||||||
|
|
|
@ -684,17 +684,18 @@ eventToDeviceEvent(DeviceEvent *ev, xEvent **xi)
|
||||||
xde->root_x = double_to_fp1616(ev->root_x + ev->root_x_frac);
|
xde->root_x = double_to_fp1616(ev->root_x + ev->root_x_frac);
|
||||||
xde->root_y = double_to_fp1616(ev->root_y + ev->root_y_frac);
|
xde->root_y = double_to_fp1616(ev->root_y + ev->root_y_frac);
|
||||||
|
|
||||||
if (ev->type == ET_TouchUpdate)
|
if (IsTouchEvent((InternalEvent *)ev)) {
|
||||||
xde->flags |= (ev->flags & TOUCH_PENDING_END) ? XITouchPendingEnd : 0;
|
if (ev->type == ET_TouchUpdate)
|
||||||
else
|
xde->flags |= (ev->flags & TOUCH_PENDING_END) ? XITouchPendingEnd : 0;
|
||||||
|
|
||||||
|
if (ev->flags & TOUCH_POINTER_EMULATED)
|
||||||
|
xde->flags |= XITouchEmulatingPointer;
|
||||||
|
} else {
|
||||||
xde->flags = ev->flags;
|
xde->flags = ev->flags;
|
||||||
|
|
||||||
if (IsTouchEvent((InternalEvent *) ev) &&
|
if (ev->key_repeat)
|
||||||
ev->flags & TOUCH_POINTER_EMULATED)
|
xde->flags |= XIKeyRepeat;
|
||||||
xde->flags |= XITouchEmulatingPointer;
|
}
|
||||||
|
|
||||||
if (ev->key_repeat)
|
|
||||||
xde->flags |= XIKeyRepeat;
|
|
||||||
|
|
||||||
xde->mods.base_mods = ev->mods.base;
|
xde->mods.base_mods = ev->mods.base;
|
||||||
xde->mods.latched_mods = ev->mods.latched;
|
xde->mods.latched_mods = ev->mods.latched;
|
||||||
|
|
|
@ -620,14 +620,14 @@ TouchConvertToPointerEvent(const InternalEvent *event,
|
||||||
BUG_WARN_MSG(!(event->device_event.flags & TOUCH_POINTER_EMULATED),
|
BUG_WARN_MSG(!(event->device_event.flags & TOUCH_POINTER_EMULATED),
|
||||||
"Non-emulating touch event\n");
|
"Non-emulating touch event\n");
|
||||||
|
|
||||||
*motion_event = *event;
|
motion_event->device_event = event->device_event;
|
||||||
motion_event->any.type = ET_Motion;
|
motion_event->any.type = ET_Motion;
|
||||||
motion_event->device_event.detail.button = 0;
|
motion_event->device_event.detail.button = 0;
|
||||||
motion_event->device_event.flags = XIPointerEmulated;
|
motion_event->device_event.flags = XIPointerEmulated;
|
||||||
|
|
||||||
if (nevents > 1) {
|
if (nevents > 1) {
|
||||||
BUG_RETURN_VAL(!button_event, 0);
|
BUG_RETURN_VAL(!button_event, 0);
|
||||||
*button_event = *event;
|
button_event->device_event = event->device_event;
|
||||||
button_event->any.type = ptrtype;
|
button_event->any.type = ptrtype;
|
||||||
button_event->device_event.flags = XIPointerEmulated;
|
button_event->device_event.flags = XIPointerEmulated;
|
||||||
/* detail is already correct */
|
/* detail is already correct */
|
||||||
|
|
|
@ -26,35 +26,17 @@ get_drm_info(struct OdevAttributes *attribs, char *path, int delayed_index)
|
||||||
char *buf;
|
char *buf;
|
||||||
int fd;
|
int fd;
|
||||||
int err = 0;
|
int err = 0;
|
||||||
int tries = 0;
|
|
||||||
|
|
||||||
fd = open(path, O_RDWR, O_CLOEXEC);
|
fd = open(path, O_RDWR, O_CLOEXEC);
|
||||||
if (fd == -1)
|
if (fd == -1)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
while (tries++ < 200) {
|
sv.drm_di_major = 1;
|
||||||
sv.drm_di_major = 1;
|
sv.drm_di_minor = 4;
|
||||||
sv.drm_di_minor = 4;
|
sv.drm_dd_major = -1; /* Don't care */
|
||||||
sv.drm_dd_major = -1; /* Don't care */
|
sv.drm_dd_minor = -1; /* Don't care */
|
||||||
sv.drm_dd_minor = -1; /* Don't care */
|
|
||||||
|
|
||||||
err = drmSetInterfaceVersion(fd, &sv);
|
err = drmSetInterfaceVersion(fd, &sv);
|
||||||
if (!err) {
|
|
||||||
if (tries > 1)
|
|
||||||
LogMessage(X_INFO, "setversion 1.4 succeeded on try #%d\n", tries);
|
|
||||||
break;
|
|
||||||
} if (err == -EACCES) {
|
|
||||||
if (tries % 500 == 0)
|
|
||||||
LogMessage(X_INFO, "waiting on drm device...\n");
|
|
||||||
} else {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
usleep(10000);
|
|
||||||
|
|
||||||
if (!drmSetMaster(fd))
|
|
||||||
LogMessage(X_INFO, "drmSetMaster succeeded\n");
|
|
||||||
}
|
|
||||||
if (err) {
|
if (err) {
|
||||||
ErrorF("setversion 1.4 failed: %s\n", strerror(-err));
|
ErrorF("setversion 1.4 failed: %s\n", strerror(-err));
|
||||||
goto out;
|
goto out;
|
||||||
|
@ -161,8 +143,7 @@ xf86PlatformDeviceProbe(struct OdevAttributes *attribs)
|
||||||
if (i != xf86_num_platform_devices)
|
if (i != xf86_num_platform_devices)
|
||||||
goto out_free;
|
goto out_free;
|
||||||
|
|
||||||
LogMessage(X_INFO, "config/udev: Adding drm device (%s)\n",
|
LogMessage(X_INFO, "xfree86: Adding drm device (%s)\n", path);
|
||||||
path);
|
|
||||||
|
|
||||||
if (!xf86VTOwner()) {
|
if (!xf86VTOwner()) {
|
||||||
/* if we don't currently own the VT then don't probe the device,
|
/* if we don't currently own the VT then don't probe the device,
|
||||||
|
|
|
@ -96,7 +96,7 @@ typedef struct _Client {
|
||||||
unsigned int clientGone:1;
|
unsigned int clientGone:1;
|
||||||
unsigned int closeDownMode:2;
|
unsigned int closeDownMode:2;
|
||||||
unsigned int clientState:2;
|
unsigned int clientState:2;
|
||||||
char smart_priority;
|
signed char smart_priority;
|
||||||
short noClientException; /* this client died or needs to be killed */
|
short noClientException; /* this client died or needs to be killed */
|
||||||
int priority;
|
int priority;
|
||||||
ReplySwapPtr pSwapReplyFunc;
|
ReplySwapPtr pSwapReplyFunc;
|
||||||
|
|
Loading…
Reference in New Issue