aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorHarry Jeffery <harry@exec64.co.uk>2017-08-23 21:16:30 +0100
committerHarry Jeffery <harry@exec64.co.uk>2017-08-23 21:16:30 +0100
commitc51dff6a4e5bd21491bb0c085cb08f35275332a0 (patch)
tree8a981b87175687f74ca5528dde3a56b727419542 /src
parentc3f233e971f8eb9ae344f829738cf97132582b79 (diff)
downloadimv-c51dff6a4e5bd21491bb0c085cb08f35275332a0.tar.gz
Workaround bug where events are received incorrectly
For some reason SDL passes events to us that occurred before we gained focus, and passes them *after* the focus gained event. Due to behavioural quirks from such events, whenever we gain focus we have to clear the event queue. It's hacky, but works without any visible side effects.
Diffstat (limited to 'src')
-rw-r--r--src/imv.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/imv.c b/src/imv.c
index 63addcf..afefce7 100644
--- a/src/imv.c
+++ b/src/imv.c
@@ -752,6 +752,17 @@ static void handle_event(struct imv *imv, SDL_Event *event)
SDL_ShowCursor(SDL_ENABLE);
break;
case SDL_WINDOWEVENT:
+ /* For some reason SDL passes events to us that occurred before we
+ * gained focus, and passes them *after* the focus gained event.
+ * Due to behavioural quirks from such events, whenever we gain focus
+ * we have to clear the event queue. It's hacky, but works without
+ * any visible side effects.
+ */
+ if(event->window.event == SDL_WINDOWEVENT_FOCUS_GAINED) {
+ SDL_PumpEvents();
+ SDL_FlushEvents(SDL_FIRSTEVENT, SDL_LASTEVENT);
+ }
+
imv_viewport_update(imv->view, imv->texture);
break;
}