diff --git a/Misc/NEWS b/Misc/NEWS index 11e224b448f..c450f63dcbe 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -72,6 +72,8 @@ Extension modules Library ------- +- Tkinter now supports the wish -sync and -use options. + - The following methods in time support passing of None: ctime(), gmtime(), and localtime(). If None is provided, the current time is used (the same as when the argument is omitted). diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c index 36aa0109123..74fe0f8d783 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -576,7 +576,7 @@ static void DisableEventHook(void); /* Forward */ static TkappObject * Tkapp_New(char *screenName, char *baseName, char *className, - int interactive, int wantobjects, int wantTk) + int interactive, int wantobjects, int wantTk, int sync, char *use) { TkappObject *v; char *argv0; @@ -644,6 +644,35 @@ Tkapp_New(char *screenName, char *baseName, char *className, Tcl_SetVar(v->interp, "_tkinter_skip_tk_init", "1", TCL_GLOBAL_ONLY); } + /* some initial arguments need to be in argv */ + if (sync || use) { + int len = 0; + if (sync) + len += sizeof "-sync"; + if (use) + len += strlen(use) + sizeof "-use "; + + char *args = (char*)ckalloc(len); + if (!args) { + PyErr_NoMemory(); + Py_DECREF(v); + return NULL; + } + + args[0] = '\0'; + if (sync) + strcat(args, "-sync"); + if (use) { + if (sync) + strcat(args, " "); + strcat(args, "-use "); + strcat(args, use); + } + + Tcl_SetVar(v->interp, "argv", args, TCL_GLOBAL_ONLY); + ckfree(args); + } + if (Tcl_AppInit(v->interp) != TCL_OK) return (TkappObject *)Tkinter_Error((PyObject *)v); @@ -2835,6 +2864,8 @@ Tkinter_Create(PyObject *self, PyObject *args) int interactive = 0; int wantobjects = 0; int wantTk = 1; /* If false, then Tk_Init() doesn't get called */ + int sync = 0; /* pass -sync to wish */ + char *use = NULL; /* pass -use to wish */ baseName = strrchr(Py_GetProgramName(), '/'); if (baseName != NULL) @@ -2843,13 +2874,15 @@ Tkinter_Create(PyObject *self, PyObject *args) baseName = Py_GetProgramName(); className = "Tk"; - if (!PyArg_ParseTuple(args, "|zssiii:create", + if (!PyArg_ParseTuple(args, "|zssiiiiz:create", &screenName, &baseName, &className, - &interactive, &wantobjects, &wantTk)) + &interactive, &wantobjects, &wantTk, + &sync, &use)) return NULL; return (PyObject *) Tkapp_New(screenName, baseName, className, - interactive, wantobjects, wantTk); + interactive, wantobjects, wantTk, + sync, use); } static PyObject *