Mercurial > sdl-ios-xcode
annotate test/testtimer.c @ 4393:9afe12fb4c41 SDL-1.2
Fixed bug #901
Tim Angus 2009-12-11 11:45:46 PST
Disable mouse event generation when state is not SDL_APPMOUSEFOCUS
If a Windows SDL application is minimised by using alt-tab, SDL_APPMOUSEFOCUS
is lost as part of the minimisation. Unfortunately, the directx driver doesn't
pay any attention to this state when generating mouse button events, so
clicking on the Desktop can cause mouse clicks in the SDL application, while
it's still minimised. The attached patch fixes this. It looks much more
complicated than it actually is due to indentation; here it is ignoring
whitespace:
tma@abraxas:~/sources/SDL-1.2-svn$ svn diff -x -b
Index: src/video/windx5/SDL_dx5events.c
===================================================================
--- src/video/windx5/SDL_dx5events.c (revision 5376)
+++ src/video/windx5/SDL_dx5events.c (working copy)
@@ -374,10 +374,9 @@
if ( !(SDL_GetAppState() & SDL_APPMOUSEFOCUS) ) {
mouse_lost = 1;
ClipCursor(NULL);
- }
-
+ } else {
/* If the mouse was lost, regain some sense of mouse state */
- if ( mouse_lost && (SDL_GetAppState() & SDL_APPMOUSEFOCUS) ) {
+ if ( mouse_lost ) {
POINT mouse_pos;
Uint8 old_state;
Uint8 new_state;
@@ -548,6 +547,7 @@
if ( xrel || yrel ) {
post_mouse_motion(1, xrel, yrel);
}
+ }
}
/* The main Win32 event handler */
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Mon, 14 Dec 2009 22:41:31 +0000 |
parents | 290b5baf2fca |
children | 782fd950bd46 c121d94672cb |
rev | line source |
---|---|
0 | 1 |
2 /* Test program to check the resolution of the SDL timer on the current | |
3 platform | |
4 */ | |
5 | |
6 #include <stdlib.h> | |
7 #include <stdio.h> | |
8 | |
9 #include "SDL.h" | |
10 | |
11 #define DEFAULT_RESOLUTION 1 | |
12 | |
13 static int ticks = 0; | |
14 | |
1769 | 15 static Uint32 SDLCALL ticktock(Uint32 interval) |
0 | 16 { |
17 ++ticks; | |
18 return(interval); | |
19 } | |
20 | |
1769 | 21 static Uint32 SDLCALL callback(Uint32 interval, void *param) |
0 | 22 { |
1615
d5298e8f22b3
Ugh, more 64-bit cleanup
Sam Lantinga <slouken@libsdl.org>
parents:
1500
diff
changeset
|
23 printf("Timer %d : param = %d\n", interval, (int)(uintptr_t)param); |
0 | 24 return interval; |
25 } | |
26 | |
27 int main(int argc, char *argv[]) | |
28 { | |
29 int desired; | |
30 SDL_TimerID t1, t2, t3; | |
31 | |
32 if ( SDL_Init(SDL_INIT_TIMER) < 0 ) { | |
1484
b2b476a4a73c
Added documentation on how to build a completely useless SDL library. :)
Sam Lantinga <slouken@libsdl.org>
parents:
1151
diff
changeset
|
33 fprintf(stderr, "Couldn't initialize SDL: %s\n", SDL_GetError()); |
1151
be9c9c8f6d53
Removed atexit() from most of the test programs; atexit(SDL_Quit) isn't safe
Ryan C. Gordon <icculus@icculus.org>
parents:
766
diff
changeset
|
34 return(1); |
0 | 35 } |
36 | |
37 /* Start the timer */ | |
38 desired = 0; | |
39 if ( argv[1] ) { | |
40 desired = atoi(argv[1]); | |
41 } | |
42 if ( desired == 0 ) { | |
43 desired = DEFAULT_RESOLUTION; | |
44 } | |
45 SDL_SetTimer(desired, ticktock); | |
46 | |
47 /* Wait 10 seconds */ | |
48 printf("Waiting 10 seconds\n"); | |
49 SDL_Delay(10*1000); | |
50 | |
51 /* Stop the timer */ | |
52 SDL_SetTimer(0, NULL); | |
53 | |
54 /* Print the results */ | |
55 if ( ticks ) { | |
56 fprintf(stderr, | |
57 "Timer resolution: desired = %d ms, actual = %f ms\n", | |
58 desired, (double)(10*1000)/ticks); | |
59 } | |
60 | |
61 /* Test multiple timers */ | |
62 printf("Testing multiple timers...\n"); | |
63 t1 = SDL_AddTimer(100, callback, (void*)1); | |
64 if(!t1) | |
766
ed57c876700d
Date: Wed, 26 Nov 2003 01:52:02 +0800
Sam Lantinga <slouken@libsdl.org>
parents:
0
diff
changeset
|
65 fprintf(stderr,"Could not create timer 1: %s\n", SDL_GetError()); |
0 | 66 t2 = SDL_AddTimer(50, callback, (void*)2); |
67 if(!t2) | |
766
ed57c876700d
Date: Wed, 26 Nov 2003 01:52:02 +0800
Sam Lantinga <slouken@libsdl.org>
parents:
0
diff
changeset
|
68 fprintf(stderr,"Could not create timer 2: %s\n", SDL_GetError()); |
0 | 69 t3 = SDL_AddTimer(233, callback, (void*)3); |
70 if(!t3) | |
766
ed57c876700d
Date: Wed, 26 Nov 2003 01:52:02 +0800
Sam Lantinga <slouken@libsdl.org>
parents:
0
diff
changeset
|
71 fprintf(stderr,"Could not create timer 3: %s\n", SDL_GetError()); |
0 | 72 |
73 /* Wait 10 seconds */ | |
74 printf("Waiting 10 seconds\n"); | |
75 SDL_Delay(10*1000); | |
76 | |
77 printf("Removing timer 1 and waiting 5 more seconds\n"); | |
78 SDL_RemoveTimer(t1); | |
79 | |
80 SDL_Delay(5*1000); | |
81 | |
82 SDL_RemoveTimer(t2); | |
83 SDL_RemoveTimer(t3); | |
84 | |
1151
be9c9c8f6d53
Removed atexit() from most of the test programs; atexit(SDL_Quit) isn't safe
Ryan C. Gordon <icculus@icculus.org>
parents:
766
diff
changeset
|
85 SDL_Quit(); |
0 | 86 return(0); |
87 } |