diff options
author | Harry Jeffery <harry@exec64.co.uk> | 2017-08-23 21:16:30 +0100 |
---|---|---|
committer | Harry Jeffery <harry@exec64.co.uk> | 2017-08-23 21:16:30 +0100 |
commit | c51dff6a4e5bd21491bb0c085cb08f35275332a0 (patch) | |
tree | 8a981b87175687f74ca5528dde3a56b727419542 /src | |
parent | c3f233e971f8eb9ae344f829738cf97132582b79 (diff) | |
download | imv-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.c | 11 |
1 files changed, 11 insertions, 0 deletions
@@ -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; } |