diff options
author | treectrl <treectrl> | 2005-06-04 18:55:55 (GMT) |
---|---|---|
committer | treectrl <treectrl> | 2005-06-04 18:55:55 (GMT) |
commit | 046005a7b6bec963a0f048fcea527cb879318701 (patch) | |
tree | a9c60c2a36e2a76615257a2166b636fff31c38e5 | |
parent | c53cfe18bd0080af1ef6c500ec5b97fdd1d8b5b0 (diff) | |
download | tktreectrl-046005a7b6bec963a0f048fcea527cb879318701.zip tktreectrl-046005a7b6bec963a0f048fcea527cb879318701.tar.gz tktreectrl-046005a7b6bec963a0f048fcea527cb879318701.tar.bz2 |
Free button/bitmap per-state options when widget deleted.
Make sure "state undefine" affects button/bitmap per-state options.
Fix bug 1210738: incorrect number of chars passed to Tk_ComputeTextLayout (was using number of bytes).
-rw-r--r-- | generic/tkTreeCtrl.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/generic/tkTreeCtrl.c b/generic/tkTreeCtrl.c index 75955b9..99e427b 100644 --- a/generic/tkTreeCtrl.c +++ b/generic/tkTreeCtrl.c @@ -7,7 +7,7 @@ * Copyright (c) 2002-2003 Christian Krone * Copyright (c) 2003-2004 ActiveState, a division of Sophos * - * RCS: @(#) $Id: tkTreeCtrl.c,v 1.43 2005/06/02 04:49:31 treectrl Exp $ + * RCS: @(#) $Id: tkTreeCtrl.c,v 1.44 2005/06/04 18:55:55 treectrl Exp $ */ #include "tkTreeCtrl.h" @@ -1486,6 +1486,9 @@ static void TreeDestroy(char *memPtr) Tk_FreeConfigOptions((char *) tree, tree->debug.optionTable, tree->tkwin); + PerStateInfo_Free(tree, &pstBitmap, &tree->buttonBitmap); + PerStateInfo_Free(tree, &pstImage, &tree->buttonImage); + Tk_FreeConfigOptions((char *) tree, tree->optionTable, tree->tkwin); Tcl_DeleteHashTable(&tree->selection); @@ -1790,7 +1793,11 @@ static int TreeStateCmd(TreeCtrl *tree, int objc, Tcl_Obj *CONST objv[]) if (Tree_StateFromObj(tree, objv[i], NULL, &index, SFO_NOT_STATIC | SFO_NOT_OFF | SFO_NOT_TOGGLE) != TCL_OK) return TCL_ERROR; - TreeStyle_UndefineState(tree, 1L << index); + Tree_UndefineState(tree, 1L << index); + PerStateInfo_Undefine(tree, &pstBitmap, &tree->buttonBitmap, + 1L << index); + PerStateInfo_Undefine(tree, &pstImage, &tree->buttonImage, + 1L << index); ckfree(tree->stateNames[index]); tree->stateNames[index] = NULL; } @@ -2678,7 +2685,6 @@ int TextLayoutCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tk_Font tkfont; Tk_Window tkwin = Tk_MainWindow(interp); char *text; - int textLen; int flags = 0; Tk_Justify justify = TK_JUSTIFY_LEFT; Tk_TextLayout layout; @@ -2694,7 +2700,7 @@ int TextLayoutCmd(ClientData clientData, Tcl_Interp *interp, int objc, tkfont = Tk_AllocFontFromObj(interp, tkwin, objv[1]); if (tkfont == NULL) return TCL_ERROR; - text = Tcl_GetStringFromObj(objv[2], &textLen); + text = Tcl_GetString(objv[2]); for (i = 3; i < objc; i += 2) { static CONST char *optionNames[] = { @@ -2762,7 +2768,7 @@ int TextLayoutCmd(ClientData clientData, Tcl_Interp *interp, int objc, } } - layout = Tk_ComputeTextLayout(tkfont, text, textLen, width, justify, flags, + layout = Tk_ComputeTextLayout(tkfont, text, -1, width, justify, flags, &width, &height); FormatResult(interp, "%d %d", width, height); Tk_FreeTextLayout(layout); |