Commits

Martin von Löwis committed 63df4cb

Patch #986929: Add support for wish -sync and -use options.

Comments (0)

Files changed (2)

 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).

Modules/_tkinter.c

 
 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;
 	    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);
 
 	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)
 		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 *