From 5c9b5ef4ec652c2069e973303bf69c56a2f9ecb1 Mon Sep 17 00:00:00 2001 From: Nick Briggs Date: Wed, 21 Aug 2024 20:59:37 -0700 Subject: [PATCH] Ignore mouse motion events when the window does not have keyboard focus (#509) --- src/sdl.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/sdl.c b/src/sdl.c index 132dd6f..9739792 100644 --- a/src/sdl.c +++ b/src/sdl.c @@ -46,7 +46,7 @@ static Uint32 sdl_foreground; static Uint32 sdl_background; static int sdl_bytesperpixel; static SDL_PixelFormat *sdl_pixelformat; - +static int sdl_window_focusp = 0; extern void kb_trans(u_short keycode, u_short upflg); extern int error(const char *s); @@ -625,6 +625,14 @@ void process_SDLevents() { sdl_windowheight = event.window.data2; sdl_update_viewport(sdl_windowwidth, sdl_windowheight); break; + case SDL_WINDOWEVENT_FOCUS_GAINED: + sdl_window_focusp = 1; + break; + case SDL_WINDOWEVENT_FOCUS_LOST: + sdl_window_focusp = 0; + break; + default: + break; } break; #else @@ -634,6 +642,12 @@ void process_SDLevents() { sdl_windowheight = event.window.data2; sdl_update_viewport(sdl_windowwidth, sdl_windowheight); break; + case SDL_EVENT_WINDOW_FOCUS_GAINED: + sdl_window_focusp = 1; + break; + case SDL_EVENT_WINDOW_FOCUS_LOST: + sdl_window_focusp = 0; + break; #endif #if SDL_MAJOR_VERSION == 2 case SDL_KEYDOWN: @@ -673,6 +687,7 @@ void process_SDLevents() { int ix, iy; float x, y; #endif + if (!sdl_window_focusp) break; SDL_GetMouseState(&x, &y); x /= sdl_pixelscale; y /= sdl_pixelscale;