We are currently migrating Bugzilla to GitHub issues.
Any changes made to the bug tracker now will be lost, so please do not post new bugs or make changes to them.
When we're done, all bug URLs will redirect to their equivalent location on the new bug tracker.

Bug 901 - Mouse button events generated by directx driver when state is not SDL_APPMOUSEFOCUS
Summary: Mouse button events generated by directx driver when state is not SDL_APPMOUS...
Status: RESOLVED FIXED
Alias: None
Product: SDL
Classification: Unclassified
Component: events (show other bugs)
Version: HG 1.2
Hardware: x86 Windows (All)
: P2 normal
Assignee: Ryan C. Gordon
QA Contact: Sam Lantinga
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2009-12-11 11:45 UTC by Tim Angus
Modified: 2009-12-14 14:42 UTC (History)
0 users

See Also:


Attachments
Disable mouse event generation when state is not SDL_APPMOUSEFOCUS (9.14 KB, patch)
2009-12-11 11:45 UTC, Tim Angus
Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Tim Angus 2009-12-11 11:45:46 UTC
Created attachment 462 [details]
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 */
Comment 1 Sam Lantinga 2009-12-14 14:42:31 UTC
Thanks, your patch is in subversion! :)