Mercurial > sdl-ios-xcode
annotate src/audio/SDL_audiodev.c @ 1348:40d0975c1769
Date: Mon, 6 Feb 2006 11:41:04 -0500
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
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Wed, 08 Feb 2006 17:19:43 +0000 |
parents | 604d73db6802 |
children | c71e05b4dc2e |
rev | line source |
---|---|
0 | 1 /* |
2 SDL - Simple DirectMedia Layer | |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1138
diff
changeset
|
3 Copyright (C) 1997-2006 Sam Lantinga |
0 | 4 |
5 This library is free software; you can redistribute it and/or | |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1138
diff
changeset
|
6 modify it under the terms of the GNU Lesser General Public |
0 | 7 License as published by the Free Software Foundation; either |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1138
diff
changeset
|
8 version 2.1 of the License, or (at your option) any later version. |
0 | 9 |
10 This library is distributed in the hope that it will be useful, | |
11 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1138
diff
changeset
|
13 Lesser General Public License for more details. |
0 | 14 |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1138
diff
changeset
|
15 You should have received a copy of the GNU Lesser General Public |
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1138
diff
changeset
|
16 License along with this library; if not, write to the Free Software |
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1138
diff
changeset
|
17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
0 | 18 |
19 Sam Lantinga | |
252
e8157fcb3114
Updated the source with the correct e-mail address
Sam Lantinga <slouken@libsdl.org>
parents:
94
diff
changeset
|
20 slouken@libsdl.org |
0 | 21 */ |
22 | |
23 /* Get the name of the audio device we use for output */ | |
24 | |
1035
974ba6ae0fa3
Date: Wed, 26 Jan 2005 13:37:09 GMT
Sam Lantinga <slouken@libsdl.org>
parents:
1026
diff
changeset
|
25 #if defined(unix) || defined(__unix__) || defined(__riscos__) |
0 | 26 |
27 #include <fcntl.h> | |
28 #include <sys/types.h> | |
29 #include <sys/stat.h> | |
30 | |
1338
604d73db6802
Removed uses of stdlib.h and string.h
Sam Lantinga <slouken@libsdl.org>
parents:
1336
diff
changeset
|
31 #include "SDL_stdlib.h" |
604d73db6802
Removed uses of stdlib.h and string.h
Sam Lantinga <slouken@libsdl.org>
parents:
1336
diff
changeset
|
32 #include "SDL_string.h" |
0 | 33 #include "SDL_audiodev_c.h" |
34 | |
35 #ifndef _PATH_DEV_DSP | |
1026
0f3aa6ab3341
Select patches included from The NetBSD Package Collection (www.pkgsrc.org)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
36 #if defined(__NetBSD__) || defined(__OpenBSD__) |
94
ae6e6b73333f
Cleaned up the OpenBSD port, thanks to Peter Valchev
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
37 #define _PATH_DEV_DSP "/dev/audio" |
ae6e6b73333f
Cleaned up the OpenBSD port, thanks to Peter Valchev
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
38 #else |
ae6e6b73333f
Cleaned up the OpenBSD port, thanks to Peter Valchev
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
39 #define _PATH_DEV_DSP "/dev/dsp" |
ae6e6b73333f
Cleaned up the OpenBSD port, thanks to Peter Valchev
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
40 #endif |
0 | 41 #endif |
42 #ifndef _PATH_DEV_DSP24 | |
43 #define _PATH_DEV_DSP24 "/dev/sound/dsp" | |
44 #endif | |
45 #ifndef _PATH_DEV_AUDIO | |
46 #define _PATH_DEV_AUDIO "/dev/audio" | |
47 #endif | |
48 | |
49 | |
50 int SDL_OpenAudioPath(char *path, int maxlen, int flags, int classic) | |
51 { | |
52 const char *audiodev; | |
53 int audio_fd; | |
54 char audiopath[1024]; | |
55 | |
56 /* Figure out what our audio device is */ | |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
57 if ( ((audiodev=SDL_getenv("SDL_PATH_DSP")) == NULL) && |
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
58 ((audiodev=SDL_getenv("AUDIODEV")) == NULL) ) { |
0 | 59 if ( classic ) { |
60 audiodev = _PATH_DEV_AUDIO; | |
61 } else { | |
62 struct stat sb; | |
63 | |
64 /* Added support for /dev/sound/\* in Linux 2.4 */ | |
1138
fcfb783a3ca2
Commercial-OSS-on-Solaris patch...
Ryan C. Gordon <icculus@icculus.org>
parents:
1035
diff
changeset
|
65 if ( ((stat("/dev/sound", &sb) == 0) && S_ISDIR(sb.st_mode)) && |
fcfb783a3ca2
Commercial-OSS-on-Solaris patch...
Ryan C. Gordon <icculus@icculus.org>
parents:
1035
diff
changeset
|
66 ((stat(_PATH_DEV_DSP24, &sb) == 0) && S_ISCHR(sb.st_mode)) ) { |
0 | 67 audiodev = _PATH_DEV_DSP24; |
68 } else { | |
69 audiodev = _PATH_DEV_DSP; | |
70 } | |
71 } | |
72 } | |
73 audio_fd = open(audiodev, flags, 0); | |
74 | |
75 /* If the first open fails, look for other devices */ | |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
76 if ( (audio_fd < 0) && (SDL_strlen(audiodev) < (sizeof(audiopath)-3)) ) { |
0 | 77 int exists, instance; |
78 struct stat sb; | |
79 | |
80 instance = 1; | |
81 do { /* Don't use errno ENOENT - it may not be thread-safe */ | |
1338
604d73db6802
Removed uses of stdlib.h and string.h
Sam Lantinga <slouken@libsdl.org>
parents:
1336
diff
changeset
|
82 SDL_snprintf(audiopath, SDL_arraysize(audiopath), |
604d73db6802
Removed uses of stdlib.h and string.h
Sam Lantinga <slouken@libsdl.org>
parents:
1336
diff
changeset
|
83 "%s%d", audiodev, instance++); |
0 | 84 exists = 0; |
85 if ( stat(audiopath, &sb) == 0 ) { | |
86 exists = 1; | |
87 audio_fd = open(audiopath, flags, 0); | |
88 } | |
89 } while ( exists && (audio_fd < 0) ); | |
90 audiodev = audiopath; | |
91 } | |
92 if ( path != NULL ) { | |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
93 SDL_strncpy(path, audiodev, maxlen); |
0 | 94 path[maxlen-1] = '\0'; |
95 } | |
96 return(audio_fd); | |
97 } | |
98 | |
99 #elif defined(_AIX) | |
100 | |
101 /* Get the name of the audio device we use for output */ | |
102 | |
103 #include <sys/types.h> | |
104 #include <sys/stat.h> | |
105 | |
1338
604d73db6802
Removed uses of stdlib.h and string.h
Sam Lantinga <slouken@libsdl.org>
parents:
1336
diff
changeset
|
106 #include "SDL_stdlib.h" |
604d73db6802
Removed uses of stdlib.h and string.h
Sam Lantinga <slouken@libsdl.org>
parents:
1336
diff
changeset
|
107 #include "SDL_string.h" |
0 | 108 #include "SDL_audiodev_c.h" |
109 | |
110 #ifndef _PATH_DEV_DSP | |
111 #define _PATH_DEV_DSP "/dev/%caud%c/%c" | |
112 #endif | |
113 | |
114 char devsettings[][3] = | |
115 { | |
116 { 'p', '0', '1' }, { 'p', '0', '2' }, { 'p', '0', '3' }, { 'p', '0', '4' }, | |
117 { 'p', '1', '1' }, { 'p', '1', '2' }, { 'p', '1', '3' }, { 'p', '1', '4' }, | |
118 { 'p', '2', '1' }, { 'p', '2', '2' }, { 'p', '2', '3' }, { 'p', '2', '4' }, | |
119 { 'p', '3', '1' }, { 'p', '3', '2' }, { 'p', '3', '3' }, { 'p', '3', '4' }, | |
120 { 'b', '0', '1' }, { 'b', '0', '2' }, { 'b', '0', '3' }, { 'b', '0', '4' }, | |
121 { 'b', '1', '1' }, { 'b', '1', '2' }, { 'b', '1', '3' }, { 'b', '1', '4' }, | |
122 { 'b', '2', '1' }, { 'b', '2', '2' }, { 'b', '2', '3' }, { 'b', '2', '4' }, | |
123 { 'b', '3', '1' }, { 'b', '3', '2' }, { 'b', '3', '3' }, { 'b', '3', '4' }, | |
124 { '\0', '\0', '\0' } | |
125 }; | |
126 | |
127 static int OpenUserDefinedDevice(char *path, int maxlen, int flags) | |
128 { | |
129 const char *audiodev; | |
130 int audio_fd; | |
131 | |
132 /* Figure out what our audio device is */ | |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
133 if ((audiodev=SDL_getenv("SDL_PATH_DSP")) == NULL) { |
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
134 audiodev=SDL_getenv("AUDIODEV"); |
0 | 135 } |
136 if ( audiodev == NULL ) { | |
137 return -1; | |
138 } | |
139 audio_fd = open(audiodev, flags, 0); | |
140 if ( path != NULL ) { | |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
141 SDL_strncpy(path, audiodev, maxlen); |
0 | 142 path[maxlen-1] = '\0'; |
143 } | |
144 return audio_fd; | |
145 } | |
146 | |
147 int SDL_OpenAudioPath(char *path, int maxlen, int flags, int classic) | |
148 { | |
149 struct stat sb; | |
150 int audio_fd; | |
151 char audiopath[1024]; | |
152 int cycle; | |
153 | |
154 audio_fd = OpenUserDefinedDevice(path,maxlen,flags); | |
155 if ( audio_fd != -1 ) { | |
156 return audio_fd; | |
157 } | |
158 | |
159 cycle = 0; | |
160 while( devsettings[cycle][0] != '\0' ) { | |
1338
604d73db6802
Removed uses of stdlib.h and string.h
Sam Lantinga <slouken@libsdl.org>
parents:
1336
diff
changeset
|
161 SDL_snprintf( audiopath, SDL_arraysize(audiopath), |
0 | 162 _PATH_DEV_DSP, |
163 devsettings[cycle][0], | |
164 devsettings[cycle][1], | |
165 devsettings[cycle][2]); | |
166 | |
167 if ( stat(audiopath, &sb) == 0 ) { | |
168 audio_fd = open(audiopath, flags, 0); | |
169 if ( audio_fd > 0 ) { | |
170 if ( path != NULL ) { | |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
171 SDL_strncpy( path, audiopath, maxlen ); |
0 | 172 path[maxlen-1] = '\0'; |
173 } | |
174 return audio_fd; | |
175 } | |
176 } | |
177 } | |
178 return -1; | |
179 } | |
180 | |
181 #endif /* UNIX system */ |