ALT-F4 using DirectX

My game isn’t getting SDL_QUIT when I press ALT-F4 using the DirectX
driver; it does get SDL_QUIT when I press the red X in the window.

I tracked this down to DX5_HandleMessage() in SDL_dx5events.c;
WM_SYSKEYDOWN is being trapped and ignored which causes Windows not to post
a WM_CLOSE, hence no SDL_QUIT is being generated.

The relevant code is this :

	/* The keyboard is handled via DirectInput */
	case WM_SYSKEYUP:
	case WM_SYSKEYDOWN:
	case WM_KEYUP:
	case WM_KEYDOWN: {
		/* Ignore windows keyboard messages */;
	}
	return(0);

If I comment the WM_SYSKEYDOWN case, it falls through DefWindowProc() and
ALT-F4 starts working again.

I’m not sure about the best way to fix this. One option is handling ALT-F4
as a particular case somehow, but doesn’t sound good. Another option would
be to handle WM_SYSKEYDOWN separately and breaking instead of returning 0,
so processing falls through and goes to DefWindowProc which does The Right
Thing ™. This seems to be the minimal change that makes ALT-F4 work and
normal keyboard input continues to work.

Does this sound reasonable? Am I overlooking anything? Do I submit a patch?

–Gabriel--------------------------------------------------------------------
mail2web - Check your email from the web at
http://mail2web.com/ .

My game isn’t getting SDL_QUIT when I press ALT-F4 using the DirectX
driver; it does get SDL_QUIT when I press the red X in the window.

If I comment the WM_SYSKEYDOWN case, it falls through DefWindowProc() and
ALT-F4 starts working again.

I’m not sure about the best way to fix this. One option is handling ALT-F4
as a particular case somehow, but doesn’t sound good. Another option would
be to handle WM_SYSKEYDOWN separately and breaking instead of returning 0,
so processing falls through and goes to DefWindowProc which does The Right
Thing ™. This seems to be the minimal change that makes ALT-F4 work and
normal keyboard input continues to work.

Yep, good catch. I’ve made this change in CVS, thanks!

-Sam Lantinga, Senior Software Engineer, Blizzard Entertainment