From 216b8707d9927473fd645dec37becc2e7f4951f7 Mon Sep 17 00:00:00 2001 From: Jack Jansen Date: Tue, 3 Apr 2001 14:36:35 +0000 Subject: [PATCH] If the frontmost window is not a Tk window exit the event handling code early. This fixes that using Tk once used to disable cmd-. processing. It may also influence Tk/IDE interaction, I'm not sure. --- Mac/tclmods/tclMacNotify.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/Mac/tclmods/tclMacNotify.c b/Mac/tclmods/tclMacNotify.c index 8fc313aee25..3d2695cf010 100644 --- a/Mac/tclmods/tclMacNotify.c +++ b/Mac/tclmods/tclMacNotify.c @@ -82,6 +82,22 @@ static void InitNotifier _ANSI_ARGS_((void)); static void NotifierExitHandler _ANSI_ARGS_(( ClientData clientData)); +/* +** Routine to determine whether Tk is the "main event handler" at the moment or +** something else (MacPython, IDE) is. +** Currently we only check that the frontmost window is Tk based, it may be better +** to also check whether we're inside a Tk mainloop(). +*/ +static int +TkIsTheBoss(void) +{ + WindowRef windowRef; + + windowRef = FrontWindow(); + if ( windowRef && !TkMacGetXWindow(windowRef) ) { + return 0; + } +} /* *---------------------------------------------------------------------- * @@ -156,6 +172,8 @@ HandleMacEvents(void) WindowRef windowRef; Rect mouseRect; + if ( !TkIsTheBoss() ) + return 0; /* * Check for mouse moved events. These events aren't placed on the * system event queue unless we call WaitNextEvent. @@ -191,11 +209,13 @@ HandleMacEvents(void) */ while (needsUpdate || (GetEvQHdr()->qHead != NULL)) { + /* Give Python command-. handling a chance */ + PyMac_DoYield(0, 0); + GetGlobalMouse(¤tMouse); SetRect(&mouseRect, currentMouse.h, currentMouse.v, currentMouse.h + 1, currentMouse.v + 1); RectRgn(notifier.utilityRgn, &mouseRect); - WaitNextEvent(everyEvent, &theEvent, 5, notifier.utilityRgn); needsUpdate = 0; if ((notifier.eventProcPtr != NULL) @@ -327,6 +347,8 @@ Tcl_WaitForEvent( found = 1; } + if ( !TkIsTheBoss() ) + found = 1; /* * Check for window events. We may receive a NULL event for * various reasons. 1) the timer has expired, 2) a mouse moved