develooper Front page | perl.perl5.changes.mac | Postings from November 2002

Change 18195: Work around weird startup Apple events (Matthias, MacPerl Bug #543491)

From:
Chris Nandor
Date:
November 28, 2002 13:36
Subject:
Change 18195: Work around weird startup Apple events (Matthias, MacPerl Bug #543491)
Message ID:
p05200f16ba0c3c30dab0@[10.0.1.104]
Change 18195 by pudge@pudge-mobile on 2002/11/28 03:38:25

	Work around weird startup Apple events (Matthias, MacPerl Bug #543491)

Affected files ...

.... //depot/maint-5.6/macperl/macos/macperl/MPAppleEvents.c#6 edit
.... //depot/maint-5.6/macperl/macos/macperl/MPAppleEvents.h#2 edit
.... //depot/maint-5.6/macperl/macos/macperl/MPMain.c#6 edit

Differences ...

==== //depot/maint-5.6/macperl/macos/macperl/MPAppleEvents.c#6 (text) ====
Index: macperl/macos/macperl/MPAppleEvents.c
--- macperl/macos/macperl/MPAppleEvents.c#5~14932~	Fri Mar  1 09:32:02 2002
+++ macperl/macos/macperl/MPAppleEvents.c	Wed Nov 27 19:38:25 2002
@@ -9,6 +9,9 @@
 Language	:	MPW C
 
 $Log: MPAppleEvents.c,v $
+Revision 1.7  2002/10/30 06:53:15  neeri
+Work around weird startup AppleEvents (MacPerl Bug #543491)
+
 Revision 1.6  2002/03/01 04:24:59  pudge
 Various bugfixes from Thomas Wegner
 
@@ -412,24 +415,6 @@
 		DoQuit(saveOpt);
 
 	return myErr;
-}
-
-/**-----------------------------------------------------------------------
-		Name: 		DoAppleEvent
-		Purpose:		Process and despatch the AppleEvent
-	-----------------------------------------------------------------------**/
-
-#if !defined(powerc) && !defined(__powerc)
-#pragma segment Main
-#endif
-
-pascal void DoAppleEvent(EventRecord theEvent)
-{
-  OSErr err;
-
-  /*should check for your own event message types here - if you have any*/
-
-	err = AEProcessAppleEvent(&theEvent);
 }
 
 /**-----------------------------------------------------------------------

==== //depot/maint-5.6/macperl/macos/macperl/MPAppleEvents.h#2 (text) ====
Index: macperl/macos/macperl/MPAppleEvents.h
--- macperl/macos/macperl/MPAppleEvents.h#1~11243~	Mon Jul  9 15:16:12 2001
+++ macperl/macos/macperl/MPAppleEvents.h	Wed Nov 27 19:38:25 2002
@@ -9,6 +9,9 @@
 Language	:	MPW C
 
 $Log: MPAppleEvents.h,v $
+Revision 1.2  2002/10/30 06:53:15  neeri
+Work around weird startup AppleEvents (MacPerl Bug #543491)
+
 Revision 1.1  2000/11/30 08:37:28  neeri
 Sources & Resources
 
@@ -62,7 +65,6 @@
 
 pascal Boolean AllSelected(TEHandle te);
 pascal void InitAppleEvents(void);
-pascal void DoAppleEvent(EventRecord theEvent);
 pascal OSErr MakeSelfAddress(AEAddressDesc *selfAddress);
 pascal OSErr MakeSelfPSN(ProcessSerialNumber *selfPSN);
 

==== //depot/maint-5.6/macperl/macos/macperl/MPMain.c#6 (text) ====
Index: macperl/macos/macperl/MPMain.c
--- macperl/macos/macperl/MPMain.c#5~14126~	Mon Jan  7 14:23:06 2002
+++ macperl/macos/macperl/MPMain.c	Wed Nov 27 19:38:25 2002
@@ -9,6 +9,9 @@
 Language	:	MPW C
 
 $Log: MPMain.c,v $
+Revision 1.8  2002/10/30 06:53:15  neeri
+Work around weird startup AppleEvents (MacPerl Bug #543491)
+
 Revision 1.7  2002/01/07 08:09:36  neeri
 Eliminate nested calls to exit() (MacPerl bug #469132)
 
@@ -1058,6 +1061,41 @@
 static short		deferredWr		= 0;
 static WindowPtr	deferredWindow	= 0;
 static RgnHandle	mouseRgn;
+static EventRecord sDeferredEvent;
+static Boolean     sHasDeferredEvent;
+
+#if !defined(powerc) && !defined(__powerc)
+#pragma segment Main
+#endif
+
+pascal void DoAppleEvent(EventRecord * ev)
+{
+	static Boolean sFirstHighLevelEvent = true;
+	
+	if (sFirstHighLevelEvent) {
+		/* If some weirdo starts a runtime with a weird AppleEvent, we simulate an oapp */
+		sFirstHighLevelEvent = false;
+		if (gRuntimeScript) {
+			if ((OSType)ev->message != kCoreEventClass 
+			|| (*(OSType *)&ev->where != kAEOpenApplication && *(OSType *)&ev->where != kAEOpenDocuments)
+			) {
+				AEDesc	desc;
+
+				/* Send this event around the event loop again */
+				sDeferredEvent 		= *ev;
+				sHasDeferredEvent 	= true;
+				
+				/* Call DoScript */
+				AECreateDesc(typeNull, nil , 0, &desc);
+				DoScript(&desc, &desc, 0);
+	
+				return;
+			}
+		}
+	}
+	
+	AEProcessAppleEvent(ev);
+}
 
 #if !defined(powerc) && !defined(__powerc)
 #pragma segment MPMain
@@ -1067,7 +1105,7 @@
 {
 	char        theChar;
 	Boolean     activate;
-	Point			mouse;
+	Point		mouse;
 	WindowPtr   theWindow;
 	DPtr        theDoc;
 
@@ -1137,7 +1175,7 @@
 
 	case kHighLevelEvent:
 		FlushAndRecordTypingBuffer();
-		DoAppleEvent(*myEvent);
+		DoAppleEvent(myEvent);
 		
 		if (gDelayedScript.dataHandle) {
 			AppleEvent	awakenedScript = gDelayedScript;
@@ -1168,9 +1206,6 @@
 		}
 	}
 }
-
-static EventRecord sDeferredEvent;
-static Boolean     sHasDeferredEvent;
 
 void MainEvent(Boolean busy, long sleep, RgnHandle rgn)
 {
End of Patch.



nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About