summaryrefslogtreecommitdiffstats
path: root/generic/ttk/ttkButton.c
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2016-05-09 09:35:14 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2016-05-09 09:35:14 (GMT)
commit3cdd95ce74a87635ef2ca5e4b9bde33e187a4646 (patch)
tree36f65cf4995c34e70cb40078b6f2906b1b3d3ed3 /generic/ttk/ttkButton.c
parent16c6ee8bf0a30510f88cf3f32fd202fc5201d8c8 (diff)
downloadtk-bug_fa8de779361f5ec2.zip
tk-bug_fa8de779361f5ec2.tar.gz
tk-bug_fa8de779361f5ec2.tar.bz2
Fix [fa8de779361f5ec2]: ttk::checkbutton handle empty variable graceful. A test-case would be nice.bug_fa8de779361f5ec2
Diffstat (limited to 'generic/ttk/ttkButton.c')
-rw-r--r--generic/ttk/ttkButton.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/generic/ttk/ttkButton.c b/generic/ttk/ttkButton.c
index bc44f25..9067f71 100644
--- a/generic/ttk/ttkButton.c
+++ b/generic/ttk/ttkButton.c
@@ -480,12 +480,13 @@ static int
CheckbuttonConfigure(Tcl_Interp *interp, void *recordPtr, int mask)
{
Checkbutton *checkPtr = recordPtr;
- Ttk_TraceHandle *vt = Ttk_TraceVariable(
- interp, checkPtr->checkbutton.variableObj,
- CheckbuttonVariableChanged, checkPtr);
+ Tcl_Obj *varName = checkPtr->checkbutton.variableObj;
+ Ttk_TraceHandle *vt = 0;
- if (!vt) {
- return TCL_ERROR;
+ 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){
@@ -493,7 +494,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;