瀏覽代碼

Synthesize a missing touch-up event.

If a touch-down event is received for an existing touch-ID, that
probably means the operating system lost it, and that the missing
touch-up should be synthesized, to keep the client state coherent.
ulatekh 4 年之前
父節點
當前提交
8f8b14cbb6
共有 1 個文件被更改,包括 3 次插入2 次删除
  1. 3 2
      src/events/SDL_touch.c

+ 3 - 2
src/events/SDL_touch.c

@@ -302,8 +302,9 @@ SDL_SendTouch(SDL_TouchID id, SDL_FingerID fingerid, SDL_Window * window,
     finger = SDL_GetFinger(touch, fingerid);
     finger = SDL_GetFinger(touch, fingerid);
     if (down) {
     if (down) {
         if (finger) {
         if (finger) {
-            /* This finger is already down */
-            return 0;
+            /* This finger is already down.
+               Assume the finger-up for the previous touch was lost, and send it. */
+            SDL_SendTouch(id, fingerid, window, SDL_FALSE, x, y, pressure);
         }
         }
 
 
         if (SDL_AddFinger(touch, fingerid, x, y, pressure) < 0) {
         if (SDL_AddFinger(touch, fingerid, x, y, pressure) < 0) {