Kaydet (Commit) d308e2ba authored tarafından Guido van Rossum's avatar Guido van Rossum

* tkintermodule.c

	 (PyInit_tkinter): Only create stdin file handler when stdin
	 is a tty.
	 (Tkinter_Cleanup): New function.  This is an exit handler that
	 cleanup Tk.
üst 460b6bb1
......@@ -33,7 +33,11 @@ typedef struct methodlist PyMethodDef;
#include <tk.h>
extern char *getprogramname ();
extern int isatty (int);
/* Internal declarations from tkInt.h. */
extern int tk_NumMainWindows;
extern struct { Tk_Window win; } *tkMainWindowList;
/**** Tkapp Object Declaration ****/
......@@ -58,6 +62,7 @@ TkappObject;
/**** Error Handling ****/
static PyObject *Tkinter_TclError;
static int quitMainLoop = 0;
static int errorInCmd = 0;
static PyObject *excInCmd;
static PyObject *valInCmd;
......@@ -66,8 +71,6 @@ static PyObject *
Tkinter_Error (v)
PyObject *v;
{
if (Tkapp_Check (v))
PyErr_BadInternalCall ();
PyErr_SetString (Tkinter_TclError, Tkapp_Result (v));
return NULL;
}
......@@ -688,6 +691,7 @@ PythonCmd (clientData, interp, argc, argv)
res = PyEval_CallObject (func, arg);
Py_DECREF (arg);
if (res == NULL)
return PythonCmd_Error (interp);
......@@ -835,8 +839,6 @@ Tkapp_DeleteFileHandler (self, args)
/** Event Loop **/
static int quitMainLoop;
static PyObject *
Tkapp_MainLoop (self, args)
PyObject *self;
......@@ -1023,9 +1025,19 @@ StdinProc (clientData, mask)
/* Do nothing. */
}
static void
Tkinter_Cleanup ()
{
/* XXX rl_deprep_terminal is static, damned! */
while (tkMainWindowList != 0)
Tk_DestroyWindow (tkMainWindowList->win);
}
void
PyInit_tkinter ()
{
static inited = 0;
#ifdef WITH_READLINE
extern int (*rl_event_hook) ();
#endif /* WITH_READLINE */
......@@ -1045,12 +1057,20 @@ PyInit_tkinter ()
PyDict_SetItemString (d, "EXCEPTION", v);
/* Unblock stdin. */
Tk_CreateFileHandler (0, TK_READABLE, StdinProc, (ClientData) 0);
if (isatty (0))
Tk_CreateFileHandler (0, TK_READABLE, StdinProc, (ClientData) 0);
#ifdef WITH_READLINE
rl_event_hook = EventHook;
#endif /* WITH_READLINE */
if (!inited)
{
inited = 1;
if (atexit (Tkinter_Cleanup))
PyErr_SetFromErrno (Tkinter_TclError);
}
if (PyErr_Occurred ())
Py_FatalError ("can't initialize module tkinter");
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment