From 9200b1f05ebc124eaf623b76d085e940934ea37d Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sun, 2 Feb 2020 14:33:29 +0100 Subject: X11: Factor out adding a pending exposure --- pugl/detail/x11.c | 36 ++++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/pugl/detail/x11.c b/pugl/detail/x11.c index 9256b2e..c82a2e5 100644 --- a/pugl/detail/x11.c +++ b/pugl/detail/x11.c @@ -621,6 +621,27 @@ mergeExposeEvents(PuglEvent* dst, const PuglEvent* src) } } +static void +addPendingExpose(PuglView* view, const PuglEvent* expose) +{ + if (view->impl->pendingConfigure.type || + (view->impl->pendingExpose.type && + exposeEventsIntersect(&view->impl->pendingExpose, expose))) { + // Pending configure or an intersecting expose, expand it + mergeExposeEvents(&view->impl->pendingExpose, expose); + } else { + if (view->impl->pendingExpose.type) { + // Pending non-intersecting expose, dispatch it now + // This isn't ideal, but avoids needing to maintain an expose list + puglEnterContext(view, true); + puglDispatchEvent(view, &view->impl->pendingExpose); + puglLeaveContext(view, true); + } + + view->impl->pendingExpose = *expose; + } +} + static void flushPendingConfigure(PuglView* view) { @@ -730,20 +751,7 @@ puglDispatchEvents(PuglWorld* world) if (event.type == PUGL_EXPOSE) { // Expand expose event to be dispatched after loop - if (view->impl->pendingConfigure.type || - (view->impl->pendingExpose.type && - exposeEventsIntersect(&view->impl->pendingExpose, &event))) { - mergeExposeEvents(&view->impl->pendingExpose, &event); - } else { - if (view->impl->pendingExpose.type) { - puglEnterContext(view, true); - flushPendingConfigure(view); - puglDispatchEvent(view, &view->impl->pendingExpose); - puglLeaveContext(view, true); - } - - view->impl->pendingExpose = event; - } + addPendingExpose(view, &event); } else if (event.type == PUGL_CONFIGURE) { // Expand configure event to be dispatched after loop view->impl->pendingConfigure = event; -- cgit v1.2.1