summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1998-04-28 16:12:43 (GMT)
committerGuido van Rossum <guido@python.org>1998-04-28 16:12:43 (GMT)
commit2ea1c94b9acf0300b83e6efd1363f0f82b434a8b (patch)
tree8a19f41e85c2c8f85eec837be8718dd47fdcdf30
parent19efc5fb803384043c39e6341fb20a8cea11c3a3 (diff)
downloadcpython-2ea1c94b9acf0300b83e6efd1363f0f82b434a8b.zip
cpython-2ea1c94b9acf0300b83e6efd1363f0f82b434a8b.tar.gz
cpython-2ea1c94b9acf0300b83e6efd1363f0f82b434a8b.tar.bz2
On the Mac a call to TkMacInitMenus is needed. Also, we pass
appropriate events to Sioux so the console window remains functional. (Jack)
-rw-r--r--Modules/_tkinter.c33
1 files changed, 31 insertions, 2 deletions
diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c
index 8def1ef..b8c59a8 100644
--- a/Modules/_tkinter.c
+++ b/Modules/_tkinter.c
@@ -62,6 +62,8 @@ PERFORMANCE OF THIS SOFTWARE.
#if TKMAJORMINOR >= 8000 && defined(macintosh)
/* Sigh, we have to include this to get at the tcl qd pointer */
#include <tkMac.h>
+/* And this one we need to clear the menu bar */
+#include <Menus.h>
#endif
#if TKMAJORMINOR < 4001
@@ -96,6 +98,16 @@ int TkMacConvertEvent Py_PROTO((EventRecord *eventPtr));
staticforward int PyMacConvertEvent Py_PROTO((EventRecord *eventPtr));
+#if defined(__CFM68K__) && !defined(__USING_STATIC_LIBS__)
+ #pragma import on
+#endif
+
+#include <SIOUX.h>
+extern int SIOUXIsAppWindow(WindowPtr);
+
+#if defined(__CFM68K__) && !defined(__USING_STATIC_LIBS__)
+ #pragma import reset
+#endif
#endif /* macintosh */
#ifndef FREECAST
@@ -337,6 +349,11 @@ Tkapp_New(screenName, baseName, className, interactive)
v->interp = Tcl_CreateInterp();
+#if defined(macintosh) && TKMAJORMINOR >= 8000
+ /* This seems to be needed since Tk 8.0 */
+ ClearMenuBar();
+ TkMacInitMenus(v->interp);
+#endif
/* Delete the 'exit' command, which can screw things up */
Tcl_DeleteCommand(v->interp, "exit");
@@ -1600,8 +1617,20 @@ static int
PyMacConvertEvent(eventPtr)
EventRecord *eventPtr;
{
- if (SIOUXHandleOneEvent(eventPtr))
- return 0; /* Nothing happened to the Tcl event queue */
+ WindowPtr frontwin;
+ /*
+ ** Sioux eats too many events, so we don't pass it everything.
+ ** We always pass update events to Sioux, and we only pass other events if
+ ** the Sioux window is frontmost. This means that Tk menus don't work
+ ** in that case, but at least we can scroll the sioux window.
+ ** Note that the SIOUXIsAppWindow() routine we use here is not really
+ ** part of the external interface of Sioux...
+ */
+ frontwin = FrontWindow();
+ if ( eventPtr->what == updateEvt || SIOUXIsAppWindow(frontwin) ) {
+ if (SIOUXHandleOneEvent(eventPtr))
+ return 0; /* Nothing happened to the Tcl event queue */
+ }
return TkMacConvertEvent(eventPtr);
}