summaryrefslogtreecommitdiffstats
path: root/generic/tkTreeDrag.c
diff options
context:
space:
mode:
authortreectrl <treectrl>2003-01-02 22:15:55 (GMT)
committertreectrl <treectrl>2003-01-02 22:15:55 (GMT)
commitb2f7a8f01edd8f77f8e1b37b809c832ddb5ae0da (patch)
treebbab1fa0d8e816e7bc7b9fabdcc1508df56b9b9b /generic/tkTreeDrag.c
parentc3d09be7d13233bdf1c5d50cc97844cc2b783e9f (diff)
downloadtktreectrl-b2f7a8f01edd8f77f8e1b37b809c832ddb5ae0da.zip
tktreectrl-b2f7a8f01edd8f77f8e1b37b809c832ddb5ae0da.tar.gz
tktreectrl-b2f7a8f01edd8f77f8e1b37b809c832ddb5ae0da.tar.bz2
Remove 20-element limit.
Diffstat (limited to 'generic/tkTreeDrag.c')
-rw-r--r--generic/tkTreeDrag.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/generic/tkTreeDrag.c b/generic/tkTreeDrag.c
index 9ef5fbb..96a61c2 100644
--- a/generic/tkTreeDrag.c
+++ b/generic/tkTreeDrag.c
@@ -191,7 +191,8 @@ int DragImageCmd(ClientData clientData, Tcl_Interp *interp, int objc,
/* T dragimage add I ?C? ?E ...? */
case COMMAND_ADD:
{
- XRectangle rects[20];
+#define STATIC_SIZE 20
+ XRectangle staticRects[STATIC_SIZE], *rects = staticRects;
TreeItem item;
TreeItemColumn itemColumn;
TreeColumn treeColumn;
@@ -270,6 +271,8 @@ int DragImageCmd(ClientData clientData, Tcl_Interp *interp, int objc,
drawArgs.x = x + indent + totalWidth;
drawArgs.width = TreeColumn_UseWidth(treeColumn) - indent;
drawArgs.justify = TreeColumn_Justify(treeColumn);
+ if (objc - 5 > STATIC_SIZE)
+ rects = (XRectangle *) ckalloc(sizeof(XRectangle) * (objc - 5));
count = TreeStyle_GetElemRects(&drawArgs, objc - 5, objv + 5, rects);
if (count == -1)
{
@@ -305,6 +308,9 @@ int DragImageCmd(ClientData clientData, Tcl_Interp *interp, int objc,
drawArgs.x = x + indent + totalWidth;
drawArgs.width = width - indent;
drawArgs.justify = TreeColumn_Justify(treeColumn);
+ count = TreeStyle_NumElements(tree, drawArgs.style);
+ if (count > STATIC_SIZE)
+ rects = (XRectangle *) ckalloc(sizeof(XRectangle) * count);
count = TreeStyle_GetElemRects(&drawArgs, 0, NULL, rects);
if (count == -1)
{
@@ -319,6 +325,11 @@ int DragImageCmd(ClientData clientData, Tcl_Interp *interp, int objc,
elem->width = rects[i].width;
elem->height = rects[i].height;
}
+ if (rects != staticRects)
+ {
+ ckfree((char *) rects);
+ rects = staticRects;
+ }
}
totalWidth += width;
nextColumn:
@@ -344,6 +355,8 @@ nextColumn:
dragImage->bounds[3] = elem->y + elem->height;
}
doneAdd:
+ if (rects != staticRects)
+ ckfree((char *) rects);
TreeDragImage_Display(tree->dragImage);
return result;
}