diff options
-rw-r--r-- | generic/tkTreeStyle.c | 41 |
1 files changed, 39 insertions, 2 deletions
diff --git a/generic/tkTreeStyle.c b/generic/tkTreeStyle.c index c1a550e..7a785b6 100644 --- a/generic/tkTreeStyle.c +++ b/generic/tkTreeStyle.c @@ -2179,7 +2179,7 @@ static void Style_Deleted(TreeCtrl *tree, Style *masterStyle) while (column != NULL) { Style *style = (Style *) TreeItemColumn_GetStyle(tree, column); - if ((style != NULL) && ((style == masterStyle) || (style->master == masterStyle))) + if ((style != NULL) && (style->master == masterStyle)) { Tree_InvalidateColumnWidth(tree, columnIndex); TreeItemColumn_ForgetStyle(tree, column); @@ -2218,6 +2218,43 @@ static void Element_Changed(TreeCtrl *tree, Element *masterElem, int flagM, int } } +static void Element_Deleted(TreeCtrl *tree, Element *masterElem) +{ + Tcl_HashEntry *hPtr; + Tcl_HashSearch search; + Style *masterStyle; + ElementLink *eLink; + int i, j; + + hPtr = Tcl_FirstHashEntry(&tree->styleHash, &search); + while (hPtr != NULL) + { + masterStyle = (Style *) Tcl_GetHashValue(hPtr); + for (i = 0; i < masterStyle->numElements; i++) + { + eLink = &masterStyle->elements[i]; + if (eLink->elem == masterElem) + { + Element *elemList[20]; + int elemMap[20]; + + for (j = 0; j < masterStyle->numElements; j++) + { + if (j == i) + continue; + elemList[(j < i) ? j : (j - 1)] = + masterStyle->elements[j].elem; + elemMap[(j < i) ? j : (j - 1)] = j; + } + Style_ChangeElements(tree, masterStyle, + masterStyle->numElements - 1, elemList, elemMap); + break; + } + } + hPtr = Tcl_NextHashEntry(&search); + } +} + void TreeStyle_TreeChanged(TreeCtrl *tree, int flagT) { Tcl_HashEntry *hPtr; @@ -2567,7 +2604,7 @@ int TreeElementCmd(ClientData clientData, Tcl_Interp *interp, int objc, { if (Element_FromObj(tree, objv[i], &elem) != TCL_OK) return TCL_ERROR; - /* TODO: Mass changes to any Style using this Element */ + Element_Deleted(tree, elem); Element_FreeResources(tree, elem); } break; |