From 0c96887d35d75782a6455f82b0c754e6b6e218ca Mon Sep 17 00:00:00 2001
From: Jack Jansen <jack.jansen@cwi.nl>
Date: Tue, 26 Aug 1997 13:20:34 +0000
Subject: Handle systemclicks ourselves, in stead of passing them to Sioux.
 This fixes (or masks?) a bug with Python becoming unreactive during
 time.sleep() if you have already switched applications before.

---
 Mac/Python/macglue.c | 25 +++++++++++++++----------
 1 file changed, 15 insertions(+), 10 deletions(-)

diff --git a/Mac/Python/macglue.c b/Mac/Python/macglue.c
index 04e6bbb..50b89e2 100644
--- a/Mac/Python/macglue.c
+++ b/Mac/Python/macglue.c
@@ -92,7 +92,7 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 ** handle them). Note that we don't know who has windows open, so
 ** even handing updates off to SIOUX under MW isn't going to work.
 */
-#define MAINLOOP_EVENTMASK (mDownMask|keyDownMask|osMask)
+#define MAINLOOP_EVENTMASK (mDownMask|keyDownMask|osMask|activMask)
 
 #include <signal.h>
 
@@ -476,6 +476,14 @@ void
 PyMac_HandleEventIntern(evp)
 	EventRecord *evp;
 {
+	if ( evp->what == mouseDown ) {
+		WindowPtr wp;
+		
+		if ( FindWindow(evp->where, &wp) == inSysWindow ) {
+			SystemClick(evp, wp);
+			return;
+		}
+	}
 #ifdef __MWERKS__
 	{
 		int siouxdidit;
@@ -486,15 +494,7 @@ PyMac_HandleEventIntern(evp)
 			return;
 	}
 #else
-	/* Other compilers are just unlucky: we only weed out clicks in other applications */
-	if ( evp->what == mouseDown ) {
-		WindowPtr wp;
-		
-		if ( FindWindow(evp->where, &wp) == inSysWindow ) {
-			SystemClick(evp, wp);
-			return;
-		}
-	}
+	/* Other compilers are just unlucky... */
 #endif /* !__MWERKS__ */
 }
 
@@ -557,6 +557,11 @@ PyMac_DoYield(int maxsleep, int maycallpython)
 	} else {
 		latest_time_ready = LMGetTicks() + maxsleep;
 		while ( maxsleep >= 0 ) {
+			/* XXXX Hack by Jack.
+			** In time.sleep() you can click to another application
+			** once only. If you come back to Python you cannot get away
+			** again.
+			**/
 			gotone = WaitNextEvent(schedparams.process_events, &ev, maxsleep, NULL);	
 			/* Get out quickly if nothing interesting is happening */
 			if ( !gotone || ev.what == nullEvent )
-- 
cgit v0.12

