diff options
author | David Robillard <d@drobilla.net> | 2015-09-13 16:43:21 -0400 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2015-09-13 16:43:21 -0400 |
commit | fbcce71995edab304fafd889db91213f6dae94df (patch) | |
tree | ed5e2bd13bf99cadc01cac5d2d04c6a2dd170156 /pugl/pugl_x11.c | |
parent | add00976a0c39f78f57df79c2a194c4f4e7adbf7 (diff) | |
parent | e5ec8fbf3f94c5a5143f43287a3cc8888f2b99ee (diff) | |
download | pugl-fbcce71995edab304fafd889db91213f6dae94df.tar.gz pugl-fbcce71995edab304fafd889db91213f6dae94df.tar.bz2 pugl-fbcce71995edab304fafd889db91213f6dae94df.zip |
Merge branch 'master' of git.drobilla.net:/home/drobilla/git.drobilla.net/pugl
Diffstat (limited to 'pugl/pugl_x11.c')
-rw-r--r-- | pugl/pugl_x11.c | 28 |
1 files changed, 13 insertions, 15 deletions
diff --git a/pugl/pugl_x11.c b/pugl/pugl_x11.c index 35cca8c..8167ece 100644 --- a/pugl/pugl_x11.c +++ b/pugl/pugl_x11.c @@ -505,10 +505,8 @@ PuglStatus puglProcessEvents(PuglView* view) { XEvent xevent; - bool resized = false; while (XPending(view->impl->display) > 0) { XNextEvent(view->impl->display, &xevent); - bool ignore = false; if (xevent.type == ClientMessage) { // Handle close message char* type = XGetAtomName(view->impl->display, @@ -529,32 +527,32 @@ puglProcessEvents(PuglView* view) next.xkey.time == xevent.xkey.time && next.xkey.keycode == xevent.xkey.keycode) { XNextEvent(view->impl->display, &xevent); - ignore = true; + continue; } } } else if (xevent.type == FocusIn) { XSetICFocus(view->impl->xic); } else if (xevent.type == FocusOut) { XUnsetICFocus(view->impl->xic); - } else if (xevent.type == ConfigureNotify) { - resized = true; } - if (!ignore) { - // Translate and dispatch event - const PuglEvent event = translateEvent(view, xevent); - puglDispatchEvent(view, &event); - } - } + // Translate X11 event to Pugl event + const PuglEvent event = translateEvent(view, xevent); - if (resized) { #ifdef PUGL_HAVE_CAIRO - if (view->ctx_type == PUGL_CAIRO) { - cairo_xlib_surface_set_size( - view->impl->surface, view->width, view->height); + if (event.type == PUGL_CONFIGURE && view->ctx_type == PUGL_CAIRO) { + // Resize surfaces/contexts before dispatching + cairo_xlib_surface_set_size(view->impl->surface, + event.configure.width, + event.configure.height); view->redisplay = true; } #endif + + // Dispatch event to application + if (!(view->redisplay && event.type == PUGL_EXPOSE)) { + puglDispatchEvent(view, &event); + } } if (view->redisplay) { |