summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortreectrl <treectrl>2005-06-18 01:52:38 (GMT)
committertreectrl <treectrl>2005-06-18 01:52:38 (GMT)
commitc65adcf7cb77b74de0c4ff5768065d4bae5631f5 (patch)
treebc0a452a645db356b536ab0b2e1583b8dd7c184f
parent2e192204b12041b5a5a6d9a2098ace71a047cf43 (diff)
downloadtktreectrl-c65adcf7cb77b74de0c4ff5768065d4bae5631f5.zip
tktreectrl-c65adcf7cb77b74de0c4ff5768065d4bae5631f5.tar.gz
tktreectrl-c65adcf7cb77b74de0c4ff5768065d4bae5631f5.tar.bz2
Fixed unix compile issue. [BUG 1222277]
Fixed per-state-info crash [BUG 1222419]
-rw-r--r--generic/tkTreeUtils.c31
1 files changed, 23 insertions, 8 deletions
diff --git a/generic/tkTreeUtils.c b/generic/tkTreeUtils.c
index 4d9f014..e2c9ce0 100644
--- a/generic/tkTreeUtils.c
+++ b/generic/tkTreeUtils.c
@@ -5,7 +5,7 @@
*
* Copyright (c) 2002-2005 Tim Baker
*
- * RCS: @(#) $Id: tkTreeUtils.c,v 1.28 2005/06/15 21:50:22 treectrl Exp $
+ * RCS: @(#) $Id: tkTreeUtils.c,v 1.29 2005/06/18 01:52:38 treectrl Exp $
*/
#include "tkTreeCtrl.h"
@@ -616,8 +616,9 @@ int Tree_ScrollWindow(TreeCtrl *tree, GC gc, int x, int y,
void Tree_DrawBitmapWithGC(TreeCtrl *tree, Pixmap bitmap, Drawable drawable,
GC gc, int src_x, int src_y, int width, int height, int dest_x, int dest_y)
{
+#ifdef WIN32
TkpClipMask *clipPtr = (TkpClipMask *) gc->clip_mask;
-
+#endif
XSetClipOrigin(tree->display, gc, dest_x, dest_y);
#ifdef WIN32
/*
@@ -790,6 +791,7 @@ void XImage2Photo(Tcl_Interp *interp, Tk_PhotoHandle photoH, XImage *ximage, int
((i << blue_shift) & ximage->blue_mask);
}
} else {
+ red_shift = green_shift = blue_shift = 0;
for (i = 0; i < ncolors; i++)
xcolors[i].pixel = i;
}
@@ -1746,24 +1748,37 @@ int PerStateInfo_FromObj(
pInfo->data = pData;
for (i = 0; i < objc; i += 2) {
if ((*typePtr->fromObjProc)(tree, objv[i], pData) != TCL_OK) {
- PerStateInfo_Free(tree, typePtr, pInfo);
- return TCL_ERROR;
+ goto freeIt;
}
pInfo->count++;
if (Tcl_ListObjGetElements(tree->interp, objv[i + 1], &objc2, &objv2) != TCL_OK) {
- PerStateInfo_Free(tree, typePtr, pInfo);
- return TCL_ERROR;
+ goto freeIt;
}
pData->stateOff = pData->stateOn = 0; /* all states */
for (j = 0; j < objc2; j++) {
if (proc(tree, objv2[j], &pData->stateOff, &pData->stateOn) != TCL_OK) {
- PerStateInfo_Free(tree, typePtr, pInfo);
- return TCL_ERROR;
+ goto freeIt;
}
}
pData = (PerStateData *) (((char *) pData) + typePtr->size);
}
return TCL_OK;
+
+freeIt:
+ pData = pInfo->data;
+ for (i = 0; i < pInfo->count; i++) {
+ (*typePtr->freeProc)(tree, pData);
+ pData = (PerStateData *) (((char *) pData) + typePtr->size);
+ }
+#ifdef ALLOC_HAX
+ AllocHax_CFree(tree->allocData, (char *) pInfo->data, typePtr->size,
+ objc / 2, 5);
+#else
+ wipefree((char *) pInfo->data, typePtr->size * (objc / 2));
+#endif
+ pInfo->data = NULL;
+ pInfo->count = 0;
+ return TCL_ERROR;
}
PerStateData *PerStateInfo_ForState(