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.
This commit is contained in:
parent
5075d64f2e
commit
b3062b5e7e
3 changed files with 12 additions and 18 deletions
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue