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))
|
||||
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");
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
34
Xi/extinit.c
34
Xi/extinit.c
|
@ -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. */
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue
Block a user