diff options
| author | Alon Zakai <alonzakai@gmail.com> | 2014-06-30 13:12:10 -0700 |
|---|---|---|
| committer | Alon Zakai <alonzakai@gmail.com> | 2014-06-30 13:12:10 -0700 |
| commit | f5b6f032baef8a9ee397a24e49cd4512aa45681e (patch) | |
| tree | a67d8430c4c889f8b71c2d6f21575c7da08c5ac2 | |
| parent | f963a3566b0fab2df7a0dce0627e2098dba87ca5 (diff) | |
fix uninitialized structure data in ignored touchmove events; fixes #2466
| -rw-r--r-- | src/library_sdl.js | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/src/library_sdl.js b/src/library_sdl.js index 7e61cbbb..4857c672 100644 --- a/src/library_sdl.js +++ b/src/library_sdl.js @@ -778,13 +778,18 @@ var LibrarySDL = { // to automatically query for events, query for joystick events. SDL.queryJoysticks(); } - if (SDL.events.length === 0) return 0; if (ptr) { - SDL.makeCEvent(SDL.events.shift(), ptr); + while (SDL.events.length > 0) { + if (SDL.makeCEvent(SDL.events.shift(), ptr) !== false) return 1; + } + return 0; + } else { + // XXX: somewhat risky in that we do not check if the event is real or not (makeCEvent returns false) if no pointer supplied + return SDL.events.length > 0; } - return 1; }, + // returns false if the event was determined to be irrelevant makeCEvent: function(event, ptr) { if (typeof event === 'number') { // This is a pointer to a native C event that was SDL_PushEvent'ed @@ -873,7 +878,7 @@ var LibrarySDL = { var dx = x - lx; var dy = y - ly; if (touch['deviceID'] === undefined) touch.deviceID = SDL.TOUCH_DEFAULT_ID; - if (dx === 0 && dy === 0 && event.type === 'touchmove') return; // don't send these if nothing happened + if (dx === 0 && dy === 0 && event.type === 'touchmove') return false; // don't send these if nothing happened {{{ makeSetValue('ptr', C_STRUCTS.SDL_TouchFingerEvent.type, 'SDL.DOMEventToSDLEvent[event.type]', 'i32') }}}; {{{ makeSetValue('ptr', C_STRUCTS.SDL_TouchFingerEvent.timestamp, '_SDL_GetTicks()', 'i32') }}}; {{{ makeSetValue('ptr', C_STRUCTS.SDL_TouchFingerEvent.touchId, 'touch.deviceID', 'i64') }}}; @@ -1779,9 +1784,12 @@ var LibrarySDL = { var event = SDL.events[index]; var type = SDL.DOMEventToSDLEvent[event.type]; if (from <= type && type <= to) { - SDL.makeCEvent(event, events); - SDL.events.splice(index, 1); - retrievedEventCount++; + if (SDL.makeCEvent(event, events) === false) { + index++; + } else { + SDL.events.splice(index, 1); + retrievedEventCount++; + } } else { index++; } |
