Merge Mac and Windows mods (which mostly affect the same problem -- no
usable createfilehandler).  Define HAVE_CREATEFILEHANDLER to test
later.  Also other Mac specific patches by Jack.
diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c
index c3d1b61..ec62b93 100644
--- a/Modules/_tkinter.c
+++ b/Modules/_tkinter.c
@@ -59,10 +59,19 @@
 
 #define TKMAJORMINOR (TK_MAJOR_VERSION*1000 + TK_MINOR_VERSION)
 
+#if TKMAJORMINOR >= 8000 && defined(macintosh)
+/* Sigh, we have to include this to get at the tcl qd pointer */
+#include <tkMac.h>
+#endif
+
 #if TKMAJORMINOR < 4001
 #error "Tk 4.0 or 3.x are not supported -- use 4.1 or higher"
 #endif
 
+#if TKMAJORMINOR < 8000 || !defined(MS_WINDOWS) && !defined(macintosh)
+#define HAVE_CREATEFILEHANDLER
+#endif
+
 extern int Tk_GetNumMainWindows();
 
 #ifdef macintosh
@@ -78,7 +87,11 @@
 #include <Events.h> /* For EventRecord */
 
 typedef int (*TclMacConvertEventPtr) Py_PROTO((EventRecord *eventPtr));
-void TclMacSetEventProc Py_PROTO((TclMacConvertEventPtr procPtr));
+/* They changed the name... */
+#if TKMAJORMINOR < 8000
+#define Tcl_MacSetEventProc TclMacSetEventProc
+#endif
+void Tcl_MacSetEventProc Py_PROTO((TclMacConvertEventPtr procPtr));
 int TkMacConvertEvent Py_PROTO((EventRecord *eventPtr));
 
 staticforward int PyMacConvertEvent Py_PROTO((EventRecord *eventPtr));
@@ -985,7 +998,7 @@
 
 static PyObject* Tkapp_ClientDataDict = NULL;
 
-#ifndef WIN32
+#ifdef HAVE_CREATEFILEHANDLER
 static PyObject *
 Tkapp_CreateFileHandler(self, args)
 	PyObject *self;
@@ -1089,7 +1102,7 @@
 	Py_INCREF(Py_None);
 	return Py_None;
 }
-#endif /* WIN32 */
+#endif /* HAVE_CREATEFILEHANDLER */
 
 
 /**** Tktt Object (timer token) ****/
@@ -1104,6 +1117,8 @@
 }
 TkttObject;
 
+/* XXXX For now... */
+#if TKMAJORMINOR < 8000 || !defined(macintosh)
 static PyObject *
 Tktt_DeleteTimerHandler(self, args)
 	PyObject *self;
@@ -1210,6 +1225,7 @@
 	else
 		Py_DECREF(res);
 }
+#endif /* macintosh */
 
 static PyObject *
 Tkapp_CreateTimerHandler(self, args)
@@ -1340,7 +1356,7 @@
 	{"merge", 	       Tkapp_Merge, 0},
 	{"createcommand",      Tkapp_CreateCommand, 1},
 	{"deletecommand",      Tkapp_DeleteCommand, 1},
-#ifndef WIN32
+#ifdef HAVE_CREATEFILEHANDLER
 	{"createfilehandler",  Tkapp_CreateFileHandler, 1},
 	{"deletefilehandler",  Tkapp_DeleteFileHandler, 1},
 #endif
@@ -1423,7 +1439,7 @@
 static PyMethodDef moduleMethods[] =
 {
 	{"create",             Tkinter_Create, 1},
-#ifndef WIN32
+#ifdef HAVE_CREATEFILEHANDLER
 	{"createfilehandler",  Tkapp_CreateFileHandler, 1},
 	{"deletefilehandler",  Tkapp_DeleteFileHandler, 1},
 #endif
@@ -1505,15 +1521,22 @@
 	ins_string(d, "TK_VERSION", TK_VERSION);
 	ins_string(d, "TCL_VERSION", TCL_VERSION);
 
-#ifndef WIN32
 	if (PyOS_InputHook == NULL)
 		PyOS_InputHook = EventHook;
-#endif
 
 	if (PyErr_Occurred())
 		Py_FatalError("can't initialize module _tkinter");
 #ifdef macintosh
-	TclMacSetEventProc(PyMacConvertEvent);
+	/*
+	** Part of this code is stolen from MacintoshInit in tkMacAppInit.
+	** Most of the initializations in that routine (toolbox init calls and
+	** such) have already been done for us, so we only need these.
+	*/
+#if TKMAJORMINOR >= 8000
+	tcl_macQdPtr = &qd;
+#endif
+
+	Tcl_MacSetEventProc(PyMacConvertEvent);
 #if GENERATINGCFM
 	mac_addlibresources();
 #endif /* GENERATINGCFM */
@@ -1556,7 +1579,7 @@
 	return TkMacConvertEvent(eventPtr);
 }
 
-#ifdef USE_GUSI
+#if defined(USE_GUSI) && TKMAJORMINOR < 8000
 /*
  * For Python we have to override this routine (from TclMacNotify),
  * since we use GUSI for our sockets, not Tcl streams. Hence, we have