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

This commit is contained in:
Keith Packard 2013-04-24 10:27:19 -07:00
commit 53da26afb7
10 changed files with 80 additions and 82 deletions

View File

@ -156,8 +156,8 @@ XvExtensionInit(void)
if (!dixRegisterPrivateKey(&XvScreenKeyRec, PRIVATE_SCREEN, 0))
return;
/* LOOK TO SEE IF ANY SCREENS WERE INITIALIZED; IF NOT THEN
INIT GLOBAL VARIABLES SO THE EXTENSION CAN FUNCTION */
/* Look to see if any screens were initialized; if not then
init global variables so the extension can function */
if (XvScreenGeneration != serverGeneration) {
if (!CreateResourceTypes()) {
ErrorF("XvExtensionInit: Unable to allocate resource types\n");

View File

@ -142,7 +142,8 @@ ProcXDeviceBell(ClientPtr client)
newpercent = base + newpercent;
else
newpercent = base - newpercent + stuff->percent;
if (proc == NULL)
return BadValue;
(*proc) (newpercent, dev, ctrl, class);
return Success;
}

View File

@ -1223,9 +1223,16 @@ TouchRejected(DeviceIntPtr sourcedev, TouchPointInfoPtr ti, XID resource,
* touchpoint if it is pending finish.
*/
static void
ProcessTouchOwnershipEvent(DeviceIntPtr dev, TouchPointInfoPtr ti,
TouchOwnershipEvent *ev)
ProcessTouchOwnershipEvent(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)
TouchRejected(dev, ti, ev->resource, ev);
@ -1538,10 +1545,7 @@ ProcessTouchEvent(InternalEvent *ev, DeviceIntPtr dev)
if (!t)
return;
if (ev->any.type == ET_TouchOwnership)
touchid = ev->touch_ownership_event.touchid;
else
touchid = ev->device_event.touchid;
touchid = ev->device_event.touchid;
if (type == ET_TouchBegin) {
ti = TouchBeginTouch(dev, ev->device_event.sourceid, touchid,
@ -1614,19 +1618,13 @@ ProcessTouchEvent(InternalEvent *ev, DeviceIntPtr dev)
(type != ET_TouchEnd && ti->sprite.spriteTraceGood == 0))
return;
/* TouchOwnership events are handled separately from the rest, as they
* have more complex semantics. */
if (ev->any.type == ET_TouchOwnership)
ProcessTouchOwnershipEvent(dev, ti, &ev->touch_ownership_event);
else {
TouchCopyValuatorData(&ev->device_event, ti);
/* WARNING: the event type may change to TouchUpdate in
* 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);
}
TouchCopyValuatorData(&ev->device_event, ti);
/* WARNING: the event type may change to TouchUpdate in
* 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)
UpdateDeviceState(dev, &ev->device_event);
@ -1820,10 +1818,14 @@ ProcessOtherEvent(InternalEvent *ev, DeviceIntPtr device)
break;
case ET_TouchBegin:
case ET_TouchUpdate:
case ET_TouchOwnership:
case ET_TouchEnd:
ProcessTouchEvent(ev, device);
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_BarrierLeave:
ProcessBarrierEvent(ev, device);

View File

@ -848,24 +848,24 @@ SBarrierEvent(xXIBarrierEvent * from,
*to = *from;
swaps(&from->sequenceNumber);
swapl(&from->length);
swaps(&from->evtype);
swapl(&from->time);
swaps(&from->deviceid);
swaps(&from->sourceid);
swapl(&from->event);
swapl(&from->root);
swapl(&from->root_x);
swapl(&from->root_y);
swaps(&to->sequenceNumber);
swapl(&to->length);
swaps(&to->evtype);
swapl(&to->time);
swaps(&to->deviceid);
swaps(&to->sourceid);
swapl(&to->event);
swapl(&to->root);
swapl(&to->root_x);
swapl(&to->root_y);
swapl(&from->dx.integral);
swapl(&from->dx.frac);
swapl(&from->dy.integral);
swapl(&from->dy.frac);
swapl(&from->dtime);
swapl(&from->barrier);
swapl(&from->eventid);
swapl(&to->dx.integral);
swapl(&to->dx.frac);
swapl(&to->dy.integral);
swapl(&to->dy.frac);
swapl(&to->dtime);
swapl(&to->barrier);
swapl(&to->eventid);
}
/** Event swapping function for XI2 events. */

View File

@ -67,6 +67,8 @@ ProcXIGrabDevice(ClientPtr client)
uint8_t status;
GrabMask mask = { 0 };
int mask_len;
unsigned int keyboard_mode;
unsigned int pointer_mode;
REQUEST(xXIGrabDeviceReq);
REQUEST_AT_LEAST_SIZE(xXIGrabDeviceReq);
@ -78,6 +80,15 @@ ProcXIGrabDevice(ClientPtr client)
if (!IsMaster(dev))
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],
stuff->mask_len * 4) != Success)
return BadValue;
@ -91,8 +102,8 @@ ProcXIGrabDevice(ClientPtr client)
xi2mask_set_one_mask(mask.xi2mask, dev->id, (unsigned char *) &stuff[1],
mask_len);
ret = GrabDevice(client, dev, stuff->grab_mode,
stuff->paired_device_mode,
ret = GrabDevice(client, dev, pointer_mode,
keyboard_mode,
stuff->grab_window,
stuff->owner_events,
stuff->time,

View File

@ -795,6 +795,7 @@ FreeDeviceClass(int type, pointer *class)
free((*t)->touches[i].valuators);
}
free((*t)->touches);
free((*t));
break;
}
@ -2766,9 +2767,10 @@ AllocDevicePair(ClientPtr client, const char *name,
keyboard->type = (master) ? MASTER_KEYBOARD : SLAVE;
/* The ClassesRec stores the device classes currently not used. */
pointer->unused_classes = calloc(1, sizeof(ClassesRec));
keyboard->unused_classes = calloc(1, sizeof(ClassesRec));
if (IsMaster(pointer)) {
pointer->unused_classes = calloc(1, sizeof(ClassesRec));
keyboard->unused_classes = calloc(1, sizeof(ClassesRec));
}
*ptr = pointer;

View File

@ -684,17 +684,18 @@ eventToDeviceEvent(DeviceEvent *ev, xEvent **xi)
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);
if (ev->type == ET_TouchUpdate)
xde->flags |= (ev->flags & TOUCH_PENDING_END) ? XITouchPendingEnd : 0;
else
if (IsTouchEvent((InternalEvent *)ev)) {
if (ev->type == ET_TouchUpdate)
xde->flags |= (ev->flags & TOUCH_PENDING_END) ? XITouchPendingEnd : 0;
if (ev->flags & TOUCH_POINTER_EMULATED)
xde->flags |= XITouchEmulatingPointer;
} else {
xde->flags = ev->flags;
if (IsTouchEvent((InternalEvent *) ev) &&
ev->flags & TOUCH_POINTER_EMULATED)
xde->flags |= XITouchEmulatingPointer;
if (ev->key_repeat)
xde->flags |= XIKeyRepeat;
if (ev->key_repeat)
xde->flags |= XIKeyRepeat;
}
xde->mods.base_mods = ev->mods.base;
xde->mods.latched_mods = ev->mods.latched;

View File

@ -620,14 +620,14 @@ TouchConvertToPointerEvent(const InternalEvent *event,
BUG_WARN_MSG(!(event->device_event.flags & TOUCH_POINTER_EMULATED),
"Non-emulating touch event\n");
*motion_event = *event;
motion_event->device_event = event->device_event;
motion_event->any.type = ET_Motion;
motion_event->device_event.detail.button = 0;
motion_event->device_event.flags = XIPointerEmulated;
if (nevents > 1) {
BUG_RETURN_VAL(!button_event, 0);
*button_event = *event;
button_event->device_event = event->device_event;
button_event->any.type = ptrtype;
button_event->device_event.flags = XIPointerEmulated;
/* detail is already correct */

View File

@ -26,35 +26,17 @@ get_drm_info(struct OdevAttributes *attribs, char *path, int delayed_index)
char *buf;
int fd;
int err = 0;
int tries = 0;
fd = open(path, O_RDWR, O_CLOEXEC);
if (fd == -1)
return FALSE;
while (tries++ < 200) {
sv.drm_di_major = 1;
sv.drm_di_minor = 4;
sv.drm_dd_major = -1; /* Don't care */
sv.drm_dd_minor = -1; /* Don't care */
sv.drm_di_major = 1;
sv.drm_di_minor = 4;
sv.drm_dd_major = -1; /* Don't care */
sv.drm_dd_minor = -1; /* Don't care */
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");
}
err = drmSetInterfaceVersion(fd, &sv);
if (err) {
ErrorF("setversion 1.4 failed: %s\n", strerror(-err));
goto out;
@ -161,8 +143,7 @@ xf86PlatformDeviceProbe(struct OdevAttributes *attribs)
if (i != xf86_num_platform_devices)
goto out_free;
LogMessage(X_INFO, "config/udev: Adding drm device (%s)\n",
path);
LogMessage(X_INFO, "xfree86: Adding drm device (%s)\n", path);
if (!xf86VTOwner()) {
/* if we don't currently own the VT then don't probe the device,

View File

@ -96,7 +96,7 @@ typedef struct _Client {
unsigned int clientGone:1;
unsigned int closeDownMode:2;
unsigned int clientState:2;
char smart_priority;
signed char smart_priority;
short noClientException; /* this client died or needs to be killed */
int priority;
ReplySwapPtr pSwapReplyFunc;