Export TouchEventRejected as TouchRejected
This function is mostly correct for early reject usage. With a small change to pass the client resource explicitly and making the TouchOwnership event optional, it is usable for all rejection scenarios. This change exports it for use outside Xi/exevents.c and modifies the name accordingly. Signed-off-by: Chase Douglas <chase.douglas@canonical.com> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
		
							parent
							
								
									19073425e5
								
							
						
					
					
						commit
						192b2c9a2e
					
				| 
						 | 
					@ -1145,18 +1145,34 @@ TouchPuntToNextOwner(DeviceIntPtr dev, TouchPointInfoPtr ti,
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					/**
 | 
				
			||||||
TouchEventRejected(DeviceIntPtr sourcedev, TouchPointInfoPtr ti,
 | 
					 * Process a touch rejection.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @param sourcedev The source device of the touch sequence.
 | 
				
			||||||
 | 
					 * @param ti The touchpoint info record.
 | 
				
			||||||
 | 
					 * @param resource The resource of the client rejecting the touch.
 | 
				
			||||||
 | 
					 * @param ev TouchOwnership event to send. Set to NULL if no event should be
 | 
				
			||||||
 | 
					 *        sent.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					void
 | 
				
			||||||
 | 
					TouchRejected(DeviceIntPtr sourcedev, TouchPointInfoPtr ti, XID resource,
 | 
				
			||||||
              TouchOwnershipEvent *ev)
 | 
					              TouchOwnershipEvent *ev)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    Bool was_owner = (ev->resource == ti->listeners[0].listener);
 | 
					    Bool was_owner = (resource == ti->listeners[0].listener);
 | 
				
			||||||
    void *grab;
 | 
					    void *grab;
 | 
				
			||||||
 | 
					    int i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* Send a TouchEnd event to the resource being removed, but only if they
 | 
					    /* Send a TouchEnd event to the resource being removed, but only if they
 | 
				
			||||||
     * haven't received one yet already */
 | 
					     * haven't received one yet already */
 | 
				
			||||||
    if (ti->listeners[0].state != LISTENER_HAS_END)
 | 
					    for (i = 0; i < ti->num_listeners; i++)
 | 
				
			||||||
        EmitTouchEnd(sourcedev, ti, TOUCH_REJECT, ev->resource);
 | 
					    {
 | 
				
			||||||
 | 
					        if (ti->listeners[i].listener == resource)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (ti->listeners[i].state != LISTENER_HAS_END)
 | 
				
			||||||
 | 
					                EmitTouchEnd(sourcedev, ti, TOUCH_REJECT, resource);
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* If there are no other listeners left, and the touchpoint is pending
 | 
					    /* If there are no other listeners left, and the touchpoint is pending
 | 
				
			||||||
     * finish, then we can just kill it now. */
 | 
					     * finish, then we can just kill it now. */
 | 
				
			||||||
| 
						 | 
					@ -1168,16 +1184,16 @@ TouchEventRejected(DeviceIntPtr sourcedev, TouchPointInfoPtr ti,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* Remove the resource from the listener list, updating
 | 
					    /* Remove the resource from the listener list, updating
 | 
				
			||||||
     * ti->num_listeners, as well as ti->num_grabs if it was a grab. */
 | 
					     * ti->num_listeners, as well as ti->num_grabs if it was a grab. */
 | 
				
			||||||
    if (TouchRemoveListener(ti, ev->resource))
 | 
					    if (TouchRemoveListener(ti, resource))
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        if (dixLookupResourceByType(&grab, ev->resource, RT_PASSIVEGRAB,
 | 
					        if (dixLookupResourceByType(&grab, resource, RT_PASSIVEGRAB,
 | 
				
			||||||
                                    serverClient, DixGetAttrAccess) == Success)
 | 
					                                    serverClient, DixGetAttrAccess) == Success)
 | 
				
			||||||
            ti->num_grabs--;
 | 
					            ti->num_grabs--;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* If the current owner was removed and there are further listeners, deliver
 | 
					    /* If the current owner was removed and there are further listeners, deliver
 | 
				
			||||||
     * the TouchOwnership or TouchBegin event to the new owner. */
 | 
					     * the TouchOwnership or TouchBegin event to the new owner. */
 | 
				
			||||||
    if (ti->num_listeners > 0 && was_owner)
 | 
					    if (ev && ti->num_listeners > 0 && was_owner)
 | 
				
			||||||
        TouchPuntToNextOwner(sourcedev, ti, ev);
 | 
					        TouchPuntToNextOwner(sourcedev, ti, ev);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1194,7 +1210,7 @@ ProcessTouchOwnershipEvent(DeviceIntPtr dev, TouchPointInfoPtr ti,
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (ev->reason == XIRejectTouch)
 | 
					    if (ev->reason == XIRejectTouch)
 | 
				
			||||||
        TouchEventRejected(dev, ti, ev);
 | 
					        TouchRejected(dev, ti, ev->resource, ev);
 | 
				
			||||||
    else if (ev->reason == XIAcceptTouch) {
 | 
					    else if (ev->reason == XIAcceptTouch) {
 | 
				
			||||||
        /* The touch owner has accepted the touch.  Send TouchEnd events to
 | 
					        /* The touch owner has accepted the touch.  Send TouchEnd events to
 | 
				
			||||||
         * everyone else, and truncate the list of listeners. */
 | 
					         * everyone else, and truncate the list of listeners. */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -323,6 +323,13 @@ SendEventToAllWindows(
 | 
				
			||||||
        xEvent *               /* ev */,
 | 
					        xEvent *               /* ev */,
 | 
				
			||||||
        int                    /* count */);
 | 
					        int                    /* count */);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extern void
 | 
				
			||||||
 | 
					TouchRejected(
 | 
				
			||||||
 | 
					        DeviceIntPtr           /* sourcedev */,
 | 
				
			||||||
 | 
					        TouchPointInfoPtr      /* ti */,
 | 
				
			||||||
 | 
					        XID                    /* resource */,
 | 
				
			||||||
 | 
					        TouchOwnershipEvent *  /* ev */);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern _X_HIDDEN void XI2EventSwap(
 | 
					extern _X_HIDDEN void XI2EventSwap(
 | 
				
			||||||
        xGenericEvent  *              /* from */,
 | 
					        xGenericEvent  *              /* from */,
 | 
				
			||||||
        xGenericEvent  *              /* to */);
 | 
					        xGenericEvent  *              /* to */);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue