diff options
author | fvogel <fvogelnew1@free.fr> | 2018-01-07 14:04:13 (GMT) |
---|---|---|
committer | fvogel <fvogelnew1@free.fr> | 2018-01-07 14:04:13 (GMT) |
commit | 5355f88a118d91aed81f72a271e3745edef23006 (patch) | |
tree | 7ff72cb543aa61aba1f11d7d793e6705d42f137a /generic/ttk/ttkButton.c | |
parent | b46e6278979b46d9860d1a599a3fe0020c8c4732 (diff) | |
download | tk-5355f88a118d91aed81f72a271e3745edef23006.zip tk-5355f88a118d91aed81f72a271e3745edef23006.tar.gz tk-5355f88a118d91aed81f72a271e3745edef23006.tar.bz2 |
Fix [fa8de77936]: ttk::checkbutton handle empty variable graceful. Patch from Christian Werner.
Diffstat (limited to 'generic/ttk/ttkButton.c')
-rw-r--r-- | generic/ttk/ttkButton.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/generic/ttk/ttkButton.c b/generic/ttk/ttkButton.c index c00754b..2cddb09 100644 --- a/generic/ttk/ttkButton.c +++ b/generic/ttk/ttkButton.c @@ -489,12 +489,15 @@ static int CheckbuttonConfigure(Tcl_Interp *interp, void *recordPtr, int mask) { Checkbutton *checkPtr = recordPtr; - Ttk_TraceHandle *vt = Ttk_TraceVariable( - interp, checkPtr->checkbutton.variableObj, - CheckbuttonVariableChanged, checkPtr); - - if (!vt) { - return TCL_ERROR; + Tcl_Obj *varName = checkPtr->checkbutton.variableObj; + Ttk_TraceHandle *vt = NULL; + + if (varName != NULL && *Tcl_GetString(varName) != '\0') { + vt = Ttk_TraceVariable(interp, varName, + CheckbuttonVariableChanged, checkPtr); + if (!vt) { + return TCL_ERROR; + } } if (BaseConfigure(interp, recordPtr, mask) != TCL_OK){ @@ -502,7 +505,9 @@ CheckbuttonConfigure(Tcl_Interp *interp, void *recordPtr, int mask) return TCL_ERROR; } - Ttk_UntraceVariable(checkPtr->checkbutton.variableTrace); + if (checkPtr->checkbutton.variableTrace) { + Ttk_UntraceVariable(checkPtr->checkbutton.variableTrace); + } checkPtr->checkbutton.variableTrace = vt; return TCL_OK; |