diff options
-rw-r--r-- | pugl/detail/win.c | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/pugl/detail/win.c b/pugl/detail/win.c index 080460d..6b7414a 100644 --- a/pugl/detail/win.c +++ b/pugl/detail/win.c @@ -735,8 +735,8 @@ puglWaitForEvent(PuglView* PUGL_UNUSED(view)) } #endif -PUGL_API PuglStatus -puglDispatchEvents(PuglWorld* PUGL_UNUSED(world)) +static PuglStatus +puglDispatchViewEvents(PuglView* view) { /* Windows has no facility to process only currently queued messages, which causes the event loop to run forever in cases like mouse movement where @@ -744,11 +744,10 @@ puglDispatchEvents(PuglWorld* PUGL_UNUSED(world)) this, we post a message to ourselves before starting, record its time when it is received, then break the loop on the first message that was created afterwards. */ - PostMessage(NULL, PUGL_LOCAL_MARK_MSG, 0, 0); long markTime = 0; MSG msg; - while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { + while (PeekMessage(&msg, view->impl->hwnd, 0, 0, PM_REMOVE)) { if (msg.message == PUGL_LOCAL_MARK_MSG) { markTime = GetMessageTime(); } else { @@ -763,6 +762,24 @@ puglDispatchEvents(PuglWorld* PUGL_UNUSED(world)) return PUGL_SUCCESS; } +PUGL_API PuglStatus +puglDispatchEvents(PuglWorld* world) +{ + for (size_t i = 0; i < world->numViews; ++i) { + PostMessage(world->views[i]->impl->hwnd, PUGL_LOCAL_MARK_MSG, 0, 0); + } + + for (size_t i = 0; i < world->numViews; ++i) { + puglDispatchViewEvents(world->views[i]); + } + + for (size_t i = 0; i < world->numViews; ++i) { + UpdateWindow(world->views[i]->impl->hwnd); + } + + return PUGL_SUCCESS; +} + #ifndef PUGL_DISABLE_DEPRECATED PuglStatus puglProcessEvents(PuglView* view) |