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