dix: add dixClientForGrab()
Helper function for retrieving the owning client of a grab. It's an actual function, so callers don't need access to internal knowledge (definition of GrabRec, clients[] array, ...) Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
This commit is contained in:
		
							parent
							
								
									d697618c16
								
							
						
					
					
						commit
						0ca0c334d8
					
				|  | @ -1119,7 +1119,7 @@ ActivateEarlyAccept(DeviceIntPtr dev, TouchPointInfoPtr ti) | |||
|                ti->listeners[0].type != TOUCH_LISTENER_POINTER_GRAB); | ||||
|     BUG_RETURN(!grab); | ||||
| 
 | ||||
|     client = rClient(grab); | ||||
|     client = dixClientForGrab(grab); | ||||
| 
 | ||||
|     if (TouchAcceptReject(client, dev, XIAcceptTouch, ti->client_id, | ||||
|                           ti->listeners[0].window->drawable.id, &error) != Success) | ||||
|  | @ -1371,7 +1371,7 @@ RetrieveTouchDeliveryData(DeviceIntPtr dev, TouchPointInfoPtr ti, | |||
| 
 | ||||
|         BUG_RETURN_VAL(!*grab, FALSE); | ||||
| 
 | ||||
|         *client = rClient(*grab); | ||||
|         *client = dixClientForGrab(*grab); | ||||
|         *win = (*grab)->window; | ||||
|         *mask = (*grab)->xi2mask; | ||||
|     } | ||||
|  | @ -1454,7 +1454,7 @@ DeliverTouchEmulatedEvent(DeviceIntPtr dev, TouchPointInfoPtr ti, | |||
|         if (grab) { | ||||
|             win = grab->window; | ||||
|             xi2mask = grab->xi2mask; | ||||
|             client = rClient(grab); | ||||
|             client = dixClientForGrab(grab); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|  | @ -2284,7 +2284,7 @@ RetrieveGestureDeliveryData(DeviceIntPtr dev, InternalEvent *ev, GestureListener | |||
| 
 | ||||
|         BUG_RETURN_VAL(!*grab, FALSE); | ||||
| 
 | ||||
|         *client = rClient(*grab); | ||||
|         *client = dixClientForGrab(*grab); | ||||
|         *win = (*grab)->window; | ||||
|     } | ||||
|     else { | ||||
|  |  | |||
							
								
								
									
										20
									
								
								dix/events.c
								
								
								
								
							
							
						
						
									
										20
									
								
								dix/events.c
								
								
								
								
							|  | @ -3827,7 +3827,7 @@ ActivatePassiveGrab(DeviceIntPtr device, GrabPtr grab, InternalEvent *event, | |||
|         FixUpEventFromWindow(pSprite, xE, grab->window, None, TRUE); | ||||
| 
 | ||||
|         /* XXX: XACE? */ | ||||
|         TryClientEvents(rClient(grab), device, xE, count, | ||||
|         TryClientEvents(dixClientForGrab(grab), device, xE, count, | ||||
|                         GetEventFilter(device, xE), | ||||
|                         GetEventFilter(device, xE), grab); | ||||
|     } | ||||
|  | @ -3867,7 +3867,7 @@ CoreGrabInterferes(DeviceIntPtr device, GrabPtr grab) | |||
|         GrabPtr othergrab = other->deviceGrab.grab; | ||||
| 
 | ||||
|         if (othergrab && othergrab->grabtype == CORE && | ||||
|             SameClient(grab, rClient(othergrab)) && | ||||
|             SameClient(grab, dixClientForGrab(othergrab)) && | ||||
|             ((IsPointerDevice(grab->device) && | ||||
|               IsPointerDevice(othergrab->device)) || | ||||
|              (IsKeyboardDevice(grab->device) && | ||||
|  | @ -4326,10 +4326,10 @@ DeliverOneGrabbedEvent(InternalEvent *event, DeviceIntPtr dev, | |||
|     if (rc == Success) { | ||||
|         FixUpEventFromWindow(pSprite, xE, grab->window, None, TRUE); | ||||
|         if (XaceHookSendAccess(NullClient, dev, grab->window, xE, count) || | ||||
|             XaceHookReceiveAccess(rClient(grab), grab->window, xE, count)) | ||||
|             XaceHookReceiveAccess(dixClientForGrab(grab), grab->window, xE, count)) | ||||
|             deliveries = 1;     /* don't send, but pretend we did */ | ||||
|         else if (level != CORE || !IsInterferingGrab(rClient(grab), dev, xE)) { | ||||
|             deliveries = TryClientEvents(rClient(grab), dev, | ||||
|         else if (level != CORE || !IsInterferingGrab(dixClientForGrab(grab), dev, xE)) { | ||||
|             deliveries = TryClientEvents(dixClientForGrab(grab), dev, | ||||
|                                          xE, count, mask, filter, grab); | ||||
|         } | ||||
|     } | ||||
|  | @ -4683,7 +4683,7 @@ CoreEnterLeaveEvent(DeviceIntPtr mouse, | |||
|     if (grab) { | ||||
|         mask = (pWin == grab->window) ? grab->eventMask : 0; | ||||
|         if (grab->ownerEvents) | ||||
|             mask |= EventMaskForClient(pWin, rClient(grab)); | ||||
|             mask |= EventMaskForClient(pWin, dixClientForGrab(grab)); | ||||
|     } | ||||
|     else { | ||||
|         mask = pWin->eventMask | wOtherEventMasks(pWin); | ||||
|  | @ -4711,7 +4711,7 @@ CoreEnterLeaveEvent(DeviceIntPtr mouse, | |||
| 
 | ||||
|     if ((mask & GetEventFilter(mouse, &event))) { | ||||
|         if (grab) | ||||
|             TryClientEvents(rClient(grab), mouse, &event, 1, mask, | ||||
|             TryClientEvents(dixClientForGrab(grab), mouse, &event, 1, mask, | ||||
|                             GetEventFilter(mouse, &event), grab); | ||||
|         else | ||||
|             DeliverEventsToWindow(mouse, pWin, &event, 1, | ||||
|  | @ -4722,7 +4722,7 @@ CoreEnterLeaveEvent(DeviceIntPtr mouse, | |||
|         xKeymapEvent ke = { | ||||
|             .type = KeymapNotify | ||||
|         }; | ||||
|         ClientPtr client = grab ? rClient(grab) : dixClientForWindow(pWin); | ||||
|         ClientPtr client = grab ? dixClientForGrab(grab) : dixClientForWindow(pWin); | ||||
|         int rc; | ||||
| 
 | ||||
|         rc = XaceHookDeviceAccess(client, keybd, DixReadAccess); | ||||
|  | @ -4730,7 +4730,7 @@ CoreEnterLeaveEvent(DeviceIntPtr mouse, | |||
|             memcpy((char *) &ke.map[0], (char *) &keybd->key->down[1], 31); | ||||
| 
 | ||||
|         if (grab) | ||||
|             TryClientEvents(rClient(grab), keybd, (xEvent *) &ke, 1, | ||||
|             TryClientEvents(dixClientForGrab(grab), keybd, (xEvent *) &ke, 1, | ||||
|                             mask, KeymapStateMask, grab); | ||||
|         else | ||||
|             DeliverEventsToWindow(mouse, pWin, (xEvent *) &ke, 1, | ||||
|  | @ -4804,7 +4804,7 @@ DeviceEnterLeaveEvent(DeviceIntPtr mouse, | |||
|         Mask mask; | ||||
| 
 | ||||
|         mask = xi2mask_isset(grab->xi2mask, mouse, type); | ||||
|         TryClientEvents(rClient(grab), mouse, (xEvent *) event, 1, mask, 1, | ||||
|         TryClientEvents(dixClientForGrab(grab), mouse, (xEvent *) event, 1, mask, 1, | ||||
|                         grab); | ||||
|     } | ||||
|     else { | ||||
|  |  | |||
							
								
								
									
										10
									
								
								dix/lookup.c
								
								
								
								
							
							
						
						
									
										10
									
								
								dix/lookup.c
								
								
								
								
							|  | @ -7,6 +7,9 @@ | |||
| #include <dix-config.h> | ||||
| 
 | ||||
| #include "dix/dix_priv.h" | ||||
| #include "dix/resource_priv.h" | ||||
| #include "include/input.h" | ||||
| #include "include/inputstr.h" | ||||
| #include "include/windowstr.h" | ||||
| 
 | ||||
| ClientPtr dixClientForWindow(WindowPtr pWin) { | ||||
|  | @ -15,3 +18,10 @@ ClientPtr dixClientForWindow(WindowPtr pWin) { | |||
| 
 | ||||
|     return clients[CLIENT_ID(pWin->drawable.id)]; | ||||
| } | ||||
| 
 | ||||
| ClientPtr dixClientForGrab(GrabPtr pGrab) { | ||||
|     if (!pGrab) | ||||
|         return NullClient; | ||||
| 
 | ||||
|     return clients[CLIENT_ID(pGrab->resource)]; | ||||
| } | ||||
|  |  | |||
|  | @ -18,4 +18,15 @@ | |||
|  */ | ||||
| ClientPtr dixClientForWindow(WindowPtr pWin); | ||||
| 
 | ||||
| /*
 | ||||
|  * @brief retrieve client that owns given grab | ||||
|  * | ||||
|  * XIDs carry the ID of the client who created/owns the resource in upper bits. | ||||
|  * (every client so is assigned a range of XIDs it may use for resource creation) | ||||
|  * | ||||
|  * @param GrabPtr to the grab whose owning client shall be retrieved | ||||
|  * @return pointer to ClientRec structure or NullClient (NULL) | ||||
|  */ | ||||
| ClientPtr dixClientForGrab(GrabPtr pGrab); | ||||
| 
 | ||||
| #endif /* _XSERVER_DIX_RESOURCE_PRIV_H */ | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue