Don't end touchpoint if owning client hasn't accepted/rejected
A touchpoint is ended when no further processing will take place for it. This includes the situation where there is only one grabbing client, and the client receives a touch end before it has accepted/rejected the touchpoint. This change ensures that a delivered touch end event is converted into a touch update event under the above scenario. If the event is left as a touch end event, the touchpoint will be ended in ProcessTouchEvent(). Signed-off-by: Chase Douglas <chase.douglas@canonical.com> Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
		
							parent
							
								
									075a473e53
								
							
						
					
					
						commit
						e30c3c5c59
					
				|  | @ -1803,8 +1803,10 @@ DeliverTouchEndEvent(DeviceIntPtr dev, TouchPointInfoPtr ti, InternalEvent *ev, | ||||||
|                 rc = DeliverOneTouchEvent(client, dev, ti, grab, win, ev); |                 rc = DeliverOneTouchEvent(client, dev, ti, grab, win, ev); | ||||||
|             listener->state = LISTENER_HAS_END; |             listener->state = LISTENER_HAS_END; | ||||||
|         } |         } | ||||||
|         if (ti->num_listeners > 1 && |         if ((ti->num_listeners > 1 || | ||||||
|            (ev->device_event.flags & (TOUCH_ACCEPT|TOUCH_REJECT)) == 0) |              (listener->type == LISTENER_GRAB && | ||||||
|  |               xi2mask_isset(xi2mask, dev, XI_TouchOwnership))) && | ||||||
|  |             (ev->device_event.flags & (TOUCH_ACCEPT|TOUCH_REJECT)) == 0) | ||||||
|         { |         { | ||||||
|             ev->any.type = ET_TouchUpdate; |             ev->any.type = ET_TouchUpdate; | ||||||
|             ev->device_event.flags |= TOUCH_PENDING_END; |             ev->device_event.flags |= TOUCH_PENDING_END; | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue