diff options
author | treectrl <treectrl> | 2006-10-30 00:48:10 (GMT) |
---|---|---|
committer | treectrl <treectrl> | 2006-10-30 00:48:10 (GMT) |
commit | 599cc05179bcec4b823f87274ebe7c778bd40581 (patch) | |
tree | c920069957f227912c2334c4523da97886832cf9 /generic/tkTreeStyle.c | |
parent | d0e7b77e5af62a0361299e4d8bff5270f995fe62 (diff) | |
download | tktreectrl-599cc05179bcec4b823f87274ebe7c778bd40581.zip tktreectrl-599cc05179bcec4b823f87274ebe7c778bd40581.tar.gz tktreectrl-599cc05179bcec4b823f87274ebe7c778bd40581.tar.bz2 |
Fixed a crash when a master element calls Tree_ElementChangedItself.
Pass element index to Style_ElementChanged so instance styles don't need to be searched for every item-column.
Diffstat (limited to 'generic/tkTreeStyle.c')
-rw-r--r-- | generic/tkTreeStyle.c | 47 |
1 files changed, 25 insertions, 22 deletions
diff --git a/generic/tkTreeStyle.c b/generic/tkTreeStyle.c index 9802715..efc4580 100644 --- a/generic/tkTreeStyle.c +++ b/generic/tkTreeStyle.c @@ -5,7 +5,7 @@ * * Copyright (c) 2002-2006 Tim Baker * - * RCS: @(#) $Id: tkTreeStyle.c,v 1.55 2006/10/26 03:01:17 treectrl Exp $ + * RCS: @(#) $Id: tkTreeStyle.c,v 1.56 2006/10/30 00:48:10 treectrl Exp $ */ #include "tkTreeCtrl.h" @@ -3588,6 +3588,7 @@ Style_ElemChanged( TreeCtrl *tree, /* Widget info. */ MStyle *masterStyle, /* Master style that uses the element. */ Element *masterElem, /* Master element affected by the change. */ + int masterElemIndex, /* Index of masterElem in masterStyle. */ int flagM, /* Flags returned by ElementType.configProc() * if the master element was configured, * zero if the TreeCtrl was configured. */ @@ -3604,7 +3605,7 @@ Style_ElemChanged( Tcl_HashEntry *hPtr; Tcl_HashSearch search; IElementLink *eLink; - int i, columnIndex; + int columnIndex; ElementArgs args; IStyle *style; int eMask, cMask, iMask; @@ -3629,26 +3630,21 @@ Style_ElemChanged( style = (IStyle *) TreeItemColumn_GetStyle(tree, column); if ((style != NULL) && (style->master == masterStyle)) { - for (i = 0; i < masterStyle->numElements; i++) + eLink = &style->elements[masterElemIndex]; + if (eLink->elem == masterElem) { - eLink = &style->elements[i]; - if (eLink->elem == masterElem) - { - if (csM & CS_LAYOUT) - eLink->neededWidth = eLink->neededHeight = -1; - cMask |= csM; - break; - } - /* Instance element */ - if (eLink->elem->master == masterElem) - { - args.elem = eLink->elem; - eMask = (*masterElem->typePtr->changeProc)(&args); - if (eMask & CS_LAYOUT) - eLink->neededWidth = eLink->neededHeight = -1; - cMask |= eMask; - break; - } + if (csM & CS_LAYOUT) + eLink->neededWidth = eLink->neededHeight = -1; + cMask |= csM; + } + /* Instance element */ + else + { + args.elem = eLink->elem; + eMask = (*masterElem->typePtr->changeProc)(&args); + if (eMask & CS_LAYOUT) + eLink->neededWidth = eLink->neededHeight = -1; + cMask |= eMask; } iMask |= cMask; if (cMask & CS_LAYOUT) @@ -4082,7 +4078,7 @@ Element_Changed( eLink = &masterStyle->elements[i]; if (eLink->elem == masterElem) { - Style_ElemChanged(tree, masterStyle, masterElem, flagM, flagT, csM); + Style_ElemChanged(tree, masterStyle, masterElem, i, flagM, flagT, csM); break; } } @@ -4291,10 +4287,17 @@ Tree_ElementChangedItself( TreeItem item, /* Item containing the element. */ TreeItemColumn column, /* Item-column containing the element. */ Element *elem, /* The element that changed. */ + int flags, /* Element-specific configuration flags. */ int csM /* CS_xxx flags detailing the effects of * the change. */ ) { + /* Master element. */ + if (item == NULL) + { + Element_Changed(tree, elem, flags, 0, csM); + return; + } if (csM & CS_LAYOUT) { IStyle *style = (IStyle *) TreeItemColumn_GetStyle(tree, column); |