|
@@ -98,14 +98,14 @@ static bool SDLCALL watchAppEvents(void *udata, SDL_Event *event)
|
|
}
|
|
}
|
|
break;
|
|
break;
|
|
case SDL_EVENT_WINDOW_EXPOSED:
|
|
case SDL_EVENT_WINDOW_EXPOSED:
|
|
- if (eventModule != nullptr && SDL_IsMainThread())
|
|
|
|
|
|
+ if (eventModule != nullptr && SDL_IsMainThread() && eventModule->allowModalDraws())
|
|
eventModule->modalDraw();
|
|
eventModule->modalDraw();
|
|
break;
|
|
break;
|
|
default:
|
|
default:
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
- return 1;
|
|
|
|
|
|
+ return true;
|
|
}
|
|
}
|
|
|
|
|
|
Event::Event()
|
|
Event::Event()
|
|
@@ -143,31 +143,30 @@ void Event::pump(float waitTimeout)
|
|
else if (waitTimeout > 0.0f)
|
|
else if (waitTimeout > 0.0f)
|
|
waitTimeoutMS = (int)std::min<int64>(LOVE_INT32_MAX, 1000LL * waitTimeout);
|
|
waitTimeoutMS = (int)std::min<int64>(LOVE_INT32_MAX, 1000LL * waitTimeout);
|
|
|
|
|
|
|
|
+ // Wait for the first event, if requested. WaitEvent also calls PumpEvents.
|
|
|
|
+ SDL_Event e = {};
|
|
|
|
+ insideEventPump = true;
|
|
|
|
+ bool success = false;
|
|
try
|
|
try
|
|
{
|
|
{
|
|
- // Wait for the first event, if requested.
|
|
|
|
- SDL_Event e;
|
|
|
|
- insideEventPump = true;
|
|
|
|
- if (SDL_WaitEventTimeout(&e, waitTimeoutMS))
|
|
|
|
- {
|
|
|
|
- insideEventPump = false;
|
|
|
|
- StrongRef<Message> msg(convert(e), Acquire::NORETAIN);
|
|
|
|
- if (msg)
|
|
|
|
- push(msg);
|
|
|
|
-
|
|
|
|
- // Fetch any extra events that came in during WaitEvent.
|
|
|
|
- shouldPoll = true;
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- insideEventPump = false;
|
|
|
|
- }
|
|
|
|
|
|
+ success = SDL_WaitEventTimeout(&e, waitTimeoutMS);
|
|
}
|
|
}
|
|
catch (std::exception &)
|
|
catch (std::exception &)
|
|
{
|
|
{
|
|
insideEventPump = false;
|
|
insideEventPump = false;
|
|
throw;
|
|
throw;
|
|
}
|
|
}
|
|
|
|
+ insideEventPump = false;
|
|
|
|
+
|
|
|
|
+ if (success)
|
|
|
|
+ {
|
|
|
|
+ StrongRef<Message> msg(convert(e), Acquire::NORETAIN);
|
|
|
|
+ if (msg)
|
|
|
|
+ push(msg);
|
|
|
|
+
|
|
|
|
+ // Fetch any extra events that came in during WaitEvent.
|
|
|
|
+ shouldPoll = true;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
if (shouldPoll)
|
|
if (shouldPoll)
|
|
@@ -208,6 +207,11 @@ void Event::clear()
|
|
love::event::Event::clear();
|
|
love::event::Event::clear();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+bool Event::allowModalDraws() const
|
|
|
|
+{
|
|
|
|
+ return insideEventPump;
|
|
|
|
+}
|
|
|
|
+
|
|
void Event::exceptionIfInRenderPass(const char *name)
|
|
void Event::exceptionIfInRenderPass(const char *name)
|
|
{
|
|
{
|
|
// Some core OS graphics functionality (e.g. swap buffers on some platforms)
|
|
// Some core OS graphics functionality (e.g. swap buffers on some platforms)
|