From b3062b5e7eb3737c5426ef8e9d93efe01fbd0a50 Mon Sep 17 00:00:00 2001 From: Oystein Eftevaag Date: Sat, 14 May 2011 23:01:08 -0400 Subject: IPHONE: Changed the iOS queued event handling to fix mouseclicks in Gob We now delay the mouseup events for 50ms, rather than just delaying them for an additional couple of pollEvent (which doesn't work anymore due to changes in the eventhandling code elsewhere). This fixes #3018512. --- backends/platform/iphone/osys_events.cpp | 22 ++++++++-------------- backends/platform/iphone/osys_main.cpp | 6 +++--- backends/platform/iphone/osys_main.h | 2 +- 3 files changed, 12 insertions(+), 18 deletions(-) (limited to 'backends/platform/iphone') diff --git a/backends/platform/iphone/osys_events.cpp b/backends/platform/iphone/osys_events.cpp index 38e101307a..6e2a4b7e1e 100644 --- a/backends/platform/iphone/osys_events.cpp +++ b/backends/platform/iphone/osys_events.cpp @@ -28,6 +28,7 @@ #include "osys_main.h" +static const int kQueuedInputEventDelay = 50; bool OSystem_IPHONE::pollEvent(Common::Event &event) { //printf("pollEvent()\n"); @@ -39,14 +40,7 @@ bool OSystem_IPHONE::pollEvent(Common::Event &event) { _timerCallbackNext = curTime + _timerCallbackTimer; } - if (_needEventRestPeriod) { - // Workaround: Some engines can't handle mouse-down and mouse-up events - // appearing right after each other, without a call returning no input in between. - _needEventRestPeriod = false; - return false; - } - - if (_queuedInputEvent.type != (Common::EventType)0) { + if (_queuedInputEvent.type != (Common::EventType)0 && curTime >= _queuedEventTime) { event = _queuedInputEvent; _queuedInputEvent.type = (Common::EventType)0; return true; @@ -191,7 +185,7 @@ bool OSystem_IPHONE::handleEvent_mouseUp(Common::Event &event, int x, int y) { _queuedInputEvent.mouse.x = _mouseX; _queuedInputEvent.mouse.y = _mouseY; _lastMouseTap = getMillis(); - _needEventRestPeriod = true; + _queuedEventTime = _lastMouseTap + kQueuedInputEventDelay; } else return false; } @@ -232,7 +226,7 @@ bool OSystem_IPHONE::handleEvent_secondMouseUp(Common::Event &event, int x, int event.kbd.flags = _queuedInputEvent.kbd.flags = 0; event.kbd.keycode = _queuedInputEvent.kbd.keycode = Common::KEYCODE_ESCAPE; event.kbd.ascii = _queuedInputEvent.kbd.ascii = Common::ASCII_ESCAPE; - _needEventRestPeriod = true; + _queuedEventTime = curTime + kQueuedInputEventDelay; _lastSecondaryTap = 0; } else if (!_mouseClickAndDragEnabled) { //printf("Rightclick!\n"); @@ -243,7 +237,7 @@ bool OSystem_IPHONE::handleEvent_secondMouseUp(Common::Event &event, int x, int _queuedInputEvent.mouse.x = _mouseX; _queuedInputEvent.mouse.y = _mouseY; _lastSecondaryTap = curTime; - _needEventRestPeriod = true; + _queuedEventTime = curTime + kQueuedInputEventDelay; } else { //printf("Right nothing!\n"); return false; @@ -331,7 +325,7 @@ bool OSystem_IPHONE::handleEvent_mouseSecondDragged(Common::Event &event, int x, event.kbd.flags = _queuedInputEvent.kbd.flags = 0; event.kbd.keycode = _queuedInputEvent.kbd.keycode = Common::KEYCODE_F5; event.kbd.ascii = _queuedInputEvent.kbd.ascii = Common::ASCII_F5; - _needEventRestPeriod = true; + _queuedEventTime = getMillis() + kQueuedInputEventDelay; return true; } @@ -460,7 +454,7 @@ void OSystem_IPHONE::handleEvent_keyPressed(Common::Event &event, int keyPresse event.kbd.flags = _queuedInputEvent.kbd.flags = 0; event.kbd.keycode = _queuedInputEvent.kbd.keycode = (Common::KeyCode)keyPressed; event.kbd.ascii = _queuedInputEvent.kbd.ascii = ascii; - _needEventRestPeriod = true; + _queuedEventTime = getMillis() + kQueuedInputEventDelay; } bool OSystem_IPHONE::handleEvent_swipe(Common::Event &event, int direction) { @@ -527,7 +521,7 @@ bool OSystem_IPHONE::handleEvent_swipe(Common::Event &event, int direction) { event.type = Common::EVENT_KEYDOWN; _queuedInputEvent.type = Common::EVENT_KEYUP; event.kbd.flags = _queuedInputEvent.kbd.flags = 0; - _needEventRestPeriod = true; + _queuedEventTime = getMillis() + kQueuedInputEventDelay; return true; } diff --git a/backends/platform/iphone/osys_main.cpp b/backends/platform/iphone/osys_main.cpp index dcca8dcbef..12317ad935 100644 --- a/backends/platform/iphone/osys_main.cpp +++ b/backends/platform/iphone/osys_main.cpp @@ -55,9 +55,9 @@ void *OSystem_IPHONE::s_soundParam = NULL; OSystem_IPHONE::OSystem_IPHONE() : _savefile(NULL), _mixer(NULL), _timer(NULL), _offscreen(NULL), _overlayVisible(false), _fullscreen(NULL), - _mouseHeight(0), _mouseWidth(0), _mouseBuf(NULL), _lastMouseTap(0), - _secondaryTapped(false), _lastSecondaryTap(0), _screenOrientation(kScreenOrientationFlippedLandscape), - _needEventRestPeriod(false), _mouseClickAndDragEnabled(false), + _mouseHeight(0), _mouseWidth(0), _mouseBuf(NULL), _lastMouseTap(0), _queuedEventTime(0), + _secondaryTapped(false), _lastSecondaryTap(0), + _screenOrientation(kScreenOrientationFlippedLandscape), _mouseClickAndDragEnabled(false), _gestureStartX(-1), _gestureStartY(-1), _fullScreenIsDirty(false), _fullScreenOverlayIsDirty(false), _mouseDirty(false), _timeSuspended(0), _lastDragPosX(-1), _lastDragPosY(-1), _screenChangeCount(0), _overlayHeight(0), _overlayWidth(0), _overlayBuffer(0) diff --git a/backends/platform/iphone/osys_main.h b/backends/platform/iphone/osys_main.h index be3ae4b48a..1ff87967a1 100644 --- a/backends/platform/iphone/osys_main.h +++ b/backends/platform/iphone/osys_main.h @@ -86,9 +86,9 @@ protected: bool _mouseDirty; long _lastMouseDown; long _lastMouseTap; + long _queuedEventTime; Common::Rect _lastDrawnMouseRect; Common::Event _queuedInputEvent; - bool _needEventRestPeriod; bool _secondaryTapped; long _lastSecondaryDown; long _lastSecondaryTap; -- cgit v1.2.3