Lines Matching +full:sync +full:- +full:branches
8 /* _tkinter.c -- Interface to libtk.a and libtcl.a. */
17 /* XXX Further speed-up ideas, involving Tcl 8.0 features:
19 - Register a new Tcl type, "Python callable", which can be called more
107 On Windows use UTF-16 (or UTF-32 for 32-bit Tcl_UniChar) with the
109 On Linux use UTF-8 with the "surrogateescape" error handler for converting
118 #define NATIVE_BYTEORDER -1
138 prefix = PyUnicode_FromWideChar(Py_GetPrefix(), -1); in _get_tcl_lib_path()
153 if (stat_return_value == -2) { in _get_tcl_lib_path()
156 if (stat_return_value == -1) { in _get_tcl_lib_path()
167 if (stat_return_value == -2) { in _get_tcl_lib_path()
170 if (stat_return_value == -1) { in _get_tcl_lib_path()
186 /* The threading situation is complicated. Tcl is not thread-safe, except
187 when configured with --enable-threads.
220 interpreter lock and re-acquires the lock for Tcl. It is okay for
225 not be used in branches of if statements and the like.
285 if (((TkappObject *)self)->threaded && \
286 ((TkappObject *)self)->thread_id != Tcl_GetCurrentThread()) { \
321 #define Tkapp_Interp(v) (((TkappObject *) (v))->interp)
379 if (self->dispatching) in WaitForMainloop()
385 if (self->dispatching) in WaitForMainloop()
408 https://en.wikipedia.org/wiki/UTF-8#Modified_UTF-8 */ in unicodeFromTclStringAndSize()
426 size = q - s; in unicodeFromTclStringAndSize()
436 /* In CESU-8 non-BMP characters are represented as a surrogate pair, in unicodeFromTclStringAndSize()
437 like in UTF-16, and then each surrogate code point is encoded in UTF-8. in unicodeFromTclStringAndSize()
438 https://en.wikipedia.org/wiki/CESU-8 */ in unicodeFromTclStringAndSize()
443 if (i == -2) { in unicodeFromTclStringAndSize()
447 if (i == -1) { in unicodeFromTclStringAndSize()
458 /* Low surrogates U+D800 - U+DBFF are encoded as in unicodeFromTclStringAndSize()
459 \xED\xA0\x80 - \xED\xAF\xBF. */ in unicodeFromTclStringAndSize()
468 /* High surrogates U+DC00 - U+DFFF are encoded as in unicodeFromTclStringAndSize()
469 \xED\xB0\x80 - \xED\xBF\xBF. */ in unicodeFromTclStringAndSize()
572 int interactive, int wantobjects, int wantTk, int sync, in Tkapp_New() argument
582 v->interp = Tcl_CreateInterp(); in Tkapp_New()
583 v->wantobjects = wantobjects; in Tkapp_New()
584 v->threaded = Tcl_GetVar2Ex(v->interp, "tcl_platform", "threaded", in Tkapp_New()
586 v->thread_id = Tcl_GetCurrentThread(); in Tkapp_New()
587 v->dispatching = 0; in Tkapp_New()
590 if (v->threaded) { in Tkapp_New()
597 if (v->threaded && tcl_lock) { in Tkapp_New()
603 v->OldBooleanType = Tcl_GetObjType("boolean"); in Tkapp_New()
604 v->BooleanType = Tcl_GetObjType("booleanString"); in Tkapp_New()
605 v->ByteArrayType = Tcl_GetObjType("bytearray"); in Tkapp_New()
606 v->DoubleType = Tcl_GetObjType("double"); in Tkapp_New()
607 v->IntType = Tcl_GetObjType("int"); in Tkapp_New()
608 v->WideIntType = Tcl_GetObjType("wideInt"); in Tkapp_New()
609 v->BignumType = Tcl_GetObjType("bignum"); in Tkapp_New()
610 v->ListType = Tcl_GetObjType("list"); in Tkapp_New()
611 v->ProcBodyType = Tcl_GetObjType("procbody"); in Tkapp_New()
612 v->StringType = Tcl_GetObjType("string"); in Tkapp_New()
615 Tcl_DeleteCommand(v->interp, "exit"); in Tkapp_New()
618 Tcl_SetVar2(v->interp, "env", "DISPLAY", in Tkapp_New()
622 Tcl_SetVar(v->interp, "tcl_interactive", "1", TCL_GLOBAL_ONLY); in Tkapp_New()
624 Tcl_SetVar(v->interp, "tcl_interactive", "0", TCL_GLOBAL_ONLY); in Tkapp_New()
637 Tcl_SetVar(v->interp, "argv0", argv0, TCL_GLOBAL_ONLY); in Tkapp_New()
641 Tcl_SetVar(v->interp, in Tkapp_New()
646 Tcl_SetVar(v->interp, in Tkapp_New()
652 if (sync || use) { in Tkapp_New()
656 if (sync) in Tkapp_New()
657 len += sizeof "-sync"; in Tkapp_New()
659 len += strlen(use) + sizeof "-use "; /* never overflows */ in Tkapp_New()
669 if (sync) in Tkapp_New()
670 strcat(args, "-sync"); in Tkapp_New()
672 if (sync) in Tkapp_New()
674 strcat(args, "-use "); in Tkapp_New()
678 Tcl_SetVar(v->interp, "argv", args, TCL_GLOBAL_ONLY); in Tkapp_New()
699 Tcl_SetVar(v->interp, in Tkapp_New()
709 if (Tcl_AppInit(v->interp) != TCL_OK) { in Tkapp_New()
714 _tkinter_tk_failed = Tcl_GetVar(v->interp, in Tkapp_New()
739 Tcl_ThreadQueueEvent(self->thread_id, ev, TCL_QUEUE_TAIL); in Tkapp_ThreadSend()
740 Tcl_ThreadAlert(self->thread_id); in Tkapp_ThreadSend()
766 self->value = arg; in newPyTclObject()
767 self->string = NULL; in newPyTclObject()
775 Tcl_DecrRefCount(self->value); in PyTclObject_dealloc()
776 Py_XDECREF(self->string); in PyTclObject_dealloc()
788 if (!self->string) { in PyTclObject_string()
789 self->string = unicodeFromTclObj(self->value); in PyTclObject_string()
790 if (!self->string) in PyTclObject_string()
793 Py_INCREF(self->string); in PyTclObject_string()
794 return self->string; in PyTclObject_string()
800 if (self->string) { in PyTclObject_str()
801 Py_INCREF(self->string); in PyTclObject_str()
802 return self->string; in PyTclObject_str()
804 /* XXX Could cache result if it is non-ASCII. */ in PyTclObject_str()
805 return unicodeFromTclObj(self->value); in PyTclObject_str()
815 self->value->typePtr->name, str); in PyTclObject_repr()
840 result = strcmp(Tcl_GetString(((PyTclObject *)self)->value), in PyTclObject_richcompare()
841 Tcl_GetString(((PyTclObject *)other)->value)); in PyTclObject_richcompare()
850 return unicodeFromTclString(obj->value->typePtr->name); in get_typename()
1002 if (PyUnicode_READY(value) == -1) in AsObj()
1051 return ((PyTclObject*)value)->value; in AsObj()
1124 /* big-endian */ 0, in fromBignumObj()
1142 if (value->typePtr == NULL) { in FromObj()
1146 if (value->typePtr == tkapp->BooleanType || in FromObj()
1147 value->typePtr == tkapp->OldBooleanType) { in FromObj()
1151 if (value->typePtr == tkapp->ByteArrayType) { in FromObj()
1157 if (value->typePtr == tkapp->DoubleType) { in FromObj()
1158 return PyFloat_FromDouble(value->internalRep.doubleValue); in FromObj()
1161 if (value->typePtr == tkapp->IntType) { in FromObj()
1169 if (value->typePtr == tkapp->IntType || in FromObj()
1170 value->typePtr == tkapp->WideIntType) { in FromObj()
1179 if (value->typePtr == tkapp->IntType || in FromObj()
1180 value->typePtr == tkapp->WideIntType || in FromObj()
1181 value->typePtr == tkapp->BignumType) { in FromObj()
1185 if (value->typePtr == tkapp->ListType) { in FromObj()
1213 if (value->typePtr == tkapp->ProcBodyType) { in FromObj()
1217 if (value->typePtr == tkapp->StringType) { in FromObj()
1221 if (tkapp->BooleanType == NULL && in FromObj()
1222 strcmp(value->typePtr->name, "booleanString") == 0) { in FromObj()
1224 tkapp->BooleanType = value->typePtr; in FromObj()
1228 if (tkapp->BignumType == NULL && in FromObj()
1229 strcmp(value->typePtr->name, "bignum") == 0) { in FromObj()
1231 tkapp->BignumType = value->typePtr; in FromObj()
1238 /* This mutex synchronizes inter-thread command calls. */
1325 return unicodeFromTclObj(Tcl_GetObjResult(self->interp)); in Tkapp_UnicodeResult()
1335 Tcl_Obj *value = Tcl_GetObjResult(self->interp); in Tkapp_ObjectResult()
1336 if (self->wantobjects) { in Tkapp_ObjectResult()
1362 objv = Tkapp_CallArgs(e->args, objStore, &objc); in Tkapp_CallProc()
1364 PyErr_Fetch(e->exc_type, e->exc_value, e->exc_tb); in Tkapp_CallProc()
1365 *(e->res) = NULL; in Tkapp_CallProc()
1370 i = Tcl_EvalObjv(e->self->interp, objc, objv, e->flags); in Tkapp_CallProc()
1373 *(e->res) = Tkinter_Error(e->self); in Tkapp_CallProc()
1376 *(e->res) = Tkapp_ObjectResult(e->self); in Tkapp_CallProc()
1378 if (*(e->res) == NULL) { in Tkapp_CallProc()
1379 PyErr_Fetch(e->exc_type, e->exc_value, e->exc_tb); in Tkapp_CallProc()
1387 Tcl_ConditionNotify(e->done); in Tkapp_CallProc()
1421 if (self->threaded && self->thread_id != Tcl_GetCurrentThread()) { in Tkapp_Call()
1434 ev->ev.proc = (Tcl_EventProc*)Tkapp_CallProc; in Tkapp_Call()
1435 ev->self = self; in Tkapp_Call()
1436 ev->args = args; in Tkapp_Call()
1437 ev->res = &res; in Tkapp_Call()
1438 ev->exc_type = &exc_type; in Tkapp_Call()
1439 ev->exc_value = &exc_value; in Tkapp_Call()
1440 ev->exc_tb = &exc_tb; in Tkapp_Call()
1441 ev->done = &cond; in Tkapp_Call()
1462 i = Tcl_EvalObjv(self->interp, objc, objv, flags); in Tkapp_Call()
1653 *out = Tcl_GetString(((PyTclObject *)in)->value); in varname_converter()
1658 Py_TYPE(in)->tp_name); in varname_converter()
1666 *(ev->res) = ev->func(ev->self, ev->args, ev->flags); in var_perform()
1667 if (!*(ev->res)) { in var_perform()
1671 *(ev->exc_type) = exc; in var_perform()
1672 *(ev->exc_val) = val; in var_perform()
1684 Tcl_ConditionNotify(ev->cond); in var_proc()
1695 if (self->threaded && self->thread_id != Tcl_GetCurrentThread()) { in var_invoke()
1711 ev->self = self; in var_invoke()
1712 ev->args = args; in var_invoke()
1713 ev->flags = flags; in var_invoke()
1714 ev->func = func; in var_invoke()
1715 ev->res = &res; in var_invoke()
1716 ev->exc_type = &exc_type; in var_invoke()
1717 ev->exc_val = &exc_val; in var_invoke()
1718 ev->cond = &cond; in var_invoke()
1719 ev->ev.proc = (Tcl_EventProc*)var_proc; in var_invoke()
1821 if (self->wantobjects) { in GetVar()
1910 value = ((PyTclObject*)arg)->value; in _tkinter_tkapp_getint()
1917 value = Tcl_NewStringObj(s, -1); in _tkinter_tkapp_getint()
1922 in ranges -2**32..-2**31-1 and 2**31..2**32-1 (on 32-bit platform). in _tkinter_tkapp_getint()
1925 value in ranges -2**64..-2**63-1 and 2**63..2**64-1 (on 32-bit platform). in _tkinter_tkapp_getint()
1960 ((PyTclObject*)arg)->value, in _tkinter_tkapp_getdouble()
1995 ((PyTclObject*)arg)->value, in _tkinter_tkapp_getboolean()
2150 ((PyTclObject*)arg)->value, in _tkinter_tkapp_splitlist()
2174 if (!PyArg_Parse(arg, "et:splitlist", "utf-8", &list)) in _tkinter_tkapp_splitlist()
2240 if (!(args = PyTuple_New(objc - 1))) in PythonCmd()
2243 for (i = 0; i < (objc - 1); i++) { in PythonCmd()
2252 res = PyObject_Call(data->func, args, NULL); in PythonCmd()
2278 Py_XDECREF(data->self); in PythonCmdDelete()
2279 Py_XDECREF(data->func); in PythonCmdDelete()
2302 if (ev->create) in Tkapp_CommandProc()
2303 *ev->status = Tcl_CreateObjCommand( in Tkapp_CommandProc()
2304 ev->interp, ev->name, PythonCmd, in Tkapp_CommandProc()
2305 ev->data, PythonCmdDelete) == NULL; in Tkapp_CommandProc()
2307 *ev->status = Tcl_DeleteCommand(ev->interp, ev->name); in Tkapp_CommandProc()
2309 Tcl_ConditionNotify(ev->done); in Tkapp_CommandProc()
2337 if (self->threaded && self->thread_id != Tcl_GetCurrentThread() && in _tkinter_tkapp_createcommand_impl()
2346 data->self = (PyObject *) self; in _tkinter_tkapp_createcommand_impl()
2347 data->func = func; in _tkinter_tkapp_createcommand_impl()
2348 if (self->threaded && self->thread_id != Tcl_GetCurrentThread()) { in _tkinter_tkapp_createcommand_impl()
2356 ev->ev.proc = (Tcl_EventProc*)Tkapp_CommandProc; in _tkinter_tkapp_createcommand_impl()
2357 ev->interp = self->interp; in _tkinter_tkapp_createcommand_impl()
2358 ev->create = 1; in _tkinter_tkapp_createcommand_impl()
2359 ev->name = name; in _tkinter_tkapp_createcommand_impl()
2360 ev->data = (ClientData)data; in _tkinter_tkapp_createcommand_impl()
2361 ev->status = &err; in _tkinter_tkapp_createcommand_impl()
2362 ev->done = &cond; in _tkinter_tkapp_createcommand_impl()
2401 if (self->threaded && self->thread_id != Tcl_GetCurrentThread()) { in _tkinter_tkapp_deletecommand_impl()
2409 ev->ev.proc = (Tcl_EventProc*)Tkapp_CommandProc; in _tkinter_tkapp_deletecommand_impl()
2410 ev->interp = self->interp; in _tkinter_tkapp_deletecommand_impl()
2411 ev->create = 0; in _tkinter_tkapp_deletecommand_impl()
2412 ev->name = name; in _tkinter_tkapp_deletecommand_impl()
2413 ev->status = &err; in _tkinter_tkapp_deletecommand_impl()
2414 ev->done = &cond; in _tkinter_tkapp_deletecommand_impl()
2422 err = Tcl_DeleteCommand(self->interp, name); in _tkinter_tkapp_deletecommand_impl()
2425 if (err == -1) { in _tkinter_tkapp_deletecommand_impl()
2454 p->func = func; in NewFHCD()
2455 p->file = file; in NewFHCD()
2456 p->id = id; in NewFHCD()
2457 p->next = HeadFHCD; in NewFHCD()
2470 if (p->id == id) { in DeleteFHCD()
2471 *pp = p->next; in DeleteFHCD()
2472 Py_XDECREF(p->func); in DeleteFHCD()
2473 Py_XDECREF(p->file); in DeleteFHCD()
2477 pp = &p->next; in DeleteFHCD()
2488 func = data->func; in FileHandler()
2489 file = data->file; in FileHandler()
2590 PyObject *func = v->func; in _tkinter_tktimertoken_deletetimerhandler_impl()
2592 if (v->token != NULL) { in _tkinter_tktimertoken_deletetimerhandler_impl()
2593 Tcl_DeleteTimerHandler(v->token); in _tkinter_tktimertoken_deletetimerhandler_impl()
2594 v->token = NULL; in _tkinter_tktimertoken_deletetimerhandler_impl()
2597 v->func = NULL; in _tkinter_tktimertoken_deletetimerhandler_impl()
2614 v->token = NULL; in Tktt_New()
2615 v->func = func; in Tktt_New()
2626 PyObject *func = v->func; in Tktt_Dealloc()
2641 v->func == NULL ? ", handler deleted" : ""); in Tktt_Repr()
2650 PyObject *func = v->func; in TimerHandler()
2656 v->func = NULL; in TimerHandler()
2699 v->token = Tcl_CreateTimerHandler(milliseconds, TimerHandler, in _tkinter_tkapp_createtimerhandler_impl()
2724 self->dispatching = 1; in _tkinter_tkapp_mainloop_impl()
2733 if (self->threaded) { in _tkinter_tkapp_mainloop_impl()
2752 self->dispatching = 0; in _tkinter_tkapp_mainloop_impl()
2758 self->dispatching = 0; in _tkinter_tkapp_mainloop_impl()
2869 int wantobjects = -1; in Tkapp_WantObjects()
2872 if (wantobjects == -1) in Tkapp_WantObjects()
2873 return PyBool_FromLong(((TkappObject*)self)->wantobjects); in Tkapp_WantObjects()
2874 ((TkappObject*)self)->wantobjects = wantobjects; in Tkapp_WantObjects()
2888 self->dispatching = 1; in _tkinter_tkapp_willdispatch_impl()
2925 Py_ssize_t maxsize = context->maxsize * 2; /* never overflows */ in _bump()
2927 if (maxsize < context->size + size) in _bump()
2928 maxsize = context->size + size; /* never overflows */ in _bump()
2930 context->maxsize = maxsize; in _bump()
2932 return _PyTuple_Resize(&context->tuple, maxsize) >= 0; in _bump()
2949 if (context->size + size > context->maxsize && in _flatten1()
2959 if (context->size + 1 > context->maxsize && in _flatten1()
2963 PyTuple_SET_ITEM(context->tuple, in _flatten1()
2964 context->size++, o); in _flatten1()
3021 sync: bool(accept={int}) = False
3022 if true, then pass -sync to wish
3024 if not None, then pass -use to wish
3032 int interactive, int wantobjects, int wantTk, int sync, in _tkinter_create_impl() argument
3045 sync, use); in _tkinter_create_impl()
3054 Set the busy-wait interval in milliseconds between successive calls to Tcl_DoOneEvent in a threaded…
3073 _tkinter.getbusywaitinterval -> int
3075 Return the current busy-wait interval between successive calls to Tcl_DoOneEvent in a threaded Pyth…
3262 -1,
3383 * NB - You have to swap in the Tk Notifier BEFORE you start up the in PyInit__tkinter()
3394 uexe = PyUnicode_FromWideChar(Py_GetProgramName(), -1); in PyInit__tkinter()