• Sam Lantinga's avatar
    Date: Mon, 6 Feb 2006 11:41:04 -0500 · fc0f66b5
    Sam Lantinga authored
    From: "mystml@adinet.com.uy"
    Subject: [SDL] 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 (TM). 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
    
    --HG--
    extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%401352
    fc0f66b5
Name
Last commit
Last update
..
audio Loading commit data...
cdrom Loading commit data...
cpuinfo Loading commit data...
endian Loading commit data...
events Loading commit data...
file Loading commit data...
hermes Loading commit data...
joystick Loading commit data...
loadso Loading commit data...
main Loading commit data...
stdlib Loading commit data...
thread Loading commit data...
timer Loading commit data...
video Loading commit data...
.cvsignore Loading commit data...
Makefile.am Loading commit data...
Makefile.wat Loading commit data...
SDL.c Loading commit data...
SDL_error.c Loading commit data...
SDL_error_c.h Loading commit data...
SDL_fatal.c Loading commit data...
SDL_fatal.h Loading commit data...
SDL_loadso.c Loading commit data...