diff options
Diffstat (limited to 'macosx/tkMacOSXHLEvents.c')
-rw-r--r-- | macosx/tkMacOSXHLEvents.c | 68 |
1 files changed, 65 insertions, 3 deletions
diff --git a/macosx/tkMacOSXHLEvents.c b/macosx/tkMacOSXHLEvents.c index 47907fd..e986eab 100644 --- a/macosx/tkMacOSXHLEvents.c +++ b/macosx/tkMacOSXHLEvents.c @@ -10,7 +10,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkMacOSXHLEvents.c,v 1.5.2.2 2004/02/16 00:42:34 wolfsuit Exp $ + * RCS: @(#) $Id: tkMacOSXHLEvents.c,v 1.5.2.3 2004/03/17 19:01:46 wolfsuit Exp $ */ #include "tkMacOSXPort.h" @@ -45,7 +45,58 @@ static OSErr PrefsHandler (const AppleEvent * event, AppleEvent * reply, long ha static int MissedAnyParameters _ANSI_ARGS_((const AppleEvent *theEvent)); static int ReallyKillMe _ANSI_ARGS_((Tcl_Event *eventPtr, int flags)); static OSErr FSRefToDString _ANSI_ARGS_((const FSRef *fsref, Tcl_DString *ds)); - + +OSStatus ApplicationCarbonEventsHandler (EventHandlerCallRef inHandlerCallRef, + EventRef inEvent, + void *inUserData); +OSStatus ApplicationCarbonEventsHandler (EventHandlerCallRef inHandlerCallRef, + EventRef inEvent, + void *inUserData) +{ + Tcl_CmdInfo dummy; + Tcl_Interp *interp = (Tcl_Interp *) inUserData; + + /* + * This is a bit of a hack. We get "show" events both when we come back + * from being hidden, and whenever we are activated. I only want to run the + * "show" proc when we have been hidden already, not as a substitute for + * <Activate>. So I use this toggle... + */ + + static int toggleHide = 0; + + switch(GetEventKind (inEvent)) + { + case kEventAppHidden: + /* + * Don't bother if we don't have an interp or + * the show preferences procedure doesn't exist. + */ + + if ((interp == NULL) || + (Tcl_GetCommandInfo(interp, + "::tk::mac::OnHide", &dummy)) == 0) { + return eventNotHandledErr; + } + Tcl_GlobalEval(interp, "::tk::mac::OnHide"); + toggleHide = 1; + break; + case kEventAppShown: + if (toggleHide == 1) { + toggleHide = 0; + if ((interp == NULL) || + (Tcl_GetCommandInfo(interp, + "::tk::mac::OnShow", &dummy)) == 0) { + return eventNotHandledErr; + } + Tcl_GlobalEval(interp, "::tk::mac::OnShow"); + } + break; + default: + break; + } + return eventNotHandledErr; +} /* *---------------------------------------------------------------------- * @@ -71,7 +122,11 @@ TkMacOSXInitAppleEvents( AEEventHandlerUPP OappHandlerUPP, RappHandlerUPP, OdocHandlerUPP, PrintHandlerUPP, QuitHandlerUPP, ScriptHandlerUPP, PrefsHandlerUPP; - + const EventTypeSpec inAppEventTypes[] = { + {kEventClassApplication, kEventAppHidden}, + {kEventClassApplication, kEventAppShown}}; + UInt32 inNumTypes = 2; + /* * Install event handlers for the core apple events. */ @@ -104,6 +159,13 @@ TkMacOSXInitAppleEvents( err = AEInstallEventHandler(kAEMiscStandards, kAEDoScript, ScriptHandlerUPP, (long) interp, false); } + + InstallEventHandler(GetApplicationEventTarget(), + NewEventHandlerUPP (ApplicationCarbonEventsHandler), + inNumTypes, + inAppEventTypes, + (void *) interp, + NULL); } /* |