mirror of
https://github.com/reactos/wine.git
synced 2025-02-15 18:37:49 +00:00
Fix behavior of TVS_SINGLEEXPAND style broken in Corel merge. Optimize
redrawing in TREEVIEW_SetItemA() to redraw only if the item changes.
This commit is contained in:
parent
a99ce7ef3d
commit
36c8db8c7d
@ -1860,8 +1860,10 @@ static LRESULT
|
|||||||
TREEVIEW_SetItemA(TREEVIEW_INFO *infoPtr, LPTVITEMEXA tvItem)
|
TREEVIEW_SetItemA(TREEVIEW_INFO *infoPtr, LPTVITEMEXA tvItem)
|
||||||
{
|
{
|
||||||
TREEVIEW_ITEM *wineItem;
|
TREEVIEW_ITEM *wineItem;
|
||||||
|
TREEVIEW_ITEM originalItem;
|
||||||
|
|
||||||
wineItem = tvItem->hItem;
|
wineItem = tvItem->hItem;
|
||||||
|
|
||||||
TRACE("item %d,mask %x\n", TREEVIEW_GetItemIndex(infoPtr, wineItem),
|
TRACE("item %d,mask %x\n", TREEVIEW_GetItemIndex(infoPtr, wineItem),
|
||||||
tvItem->mask);
|
tvItem->mask);
|
||||||
|
|
||||||
@ -1871,6 +1873,9 @@ TREEVIEW_SetItemA(TREEVIEW_INFO *infoPtr, LPTVITEMEXA tvItem)
|
|||||||
if (!TREEVIEW_DoSetItem(infoPtr, wineItem, tvItem))
|
if (!TREEVIEW_DoSetItem(infoPtr, wineItem, tvItem))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
/* store the orignal item values */
|
||||||
|
originalItem = *wineItem;
|
||||||
|
|
||||||
/* If the text or TVIS_BOLD was changed, and it is visible, recalculate. */
|
/* If the text or TVIS_BOLD was changed, and it is visible, recalculate. */
|
||||||
if ((tvItem->mask & TVIF_TEXT
|
if ((tvItem->mask & TVIF_TEXT
|
||||||
|| (tvItem->mask & TVIF_STATE && tvItem->stateMask & TVIS_BOLD))
|
|| (tvItem->mask & TVIF_STATE && tvItem->stateMask & TVIS_BOLD))
|
||||||
@ -1885,18 +1890,22 @@ TREEVIEW_SetItemA(TREEVIEW_INFO *infoPtr, LPTVITEMEXA tvItem)
|
|||||||
/* The refresh updates everything, but we can't wait until then. */
|
/* The refresh updates everything, but we can't wait until then. */
|
||||||
TREEVIEW_ComputeItemInternalMetrics(infoPtr, wineItem);
|
TREEVIEW_ComputeItemInternalMetrics(infoPtr, wineItem);
|
||||||
|
|
||||||
if (tvItem->mask & TVIF_INTEGRAL)
|
/* if any of the items values changed, redraw the item */
|
||||||
{
|
if(memcmp(&originalItem, wineItem, sizeof(TREEVIEW_ITEM)))
|
||||||
TREEVIEW_RecalculateVisibleOrder(infoPtr, wineItem);
|
{
|
||||||
TREEVIEW_UpdateScrollBars(infoPtr);
|
if (tvItem->mask & TVIF_INTEGRAL)
|
||||||
|
{
|
||||||
|
TREEVIEW_RecalculateVisibleOrder(infoPtr, wineItem);
|
||||||
|
TREEVIEW_UpdateScrollBars(infoPtr);
|
||||||
|
|
||||||
TREEVIEW_QueueRefresh(infoPtr);
|
TREEVIEW_QueueRefresh(infoPtr);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
TREEVIEW_UpdateScrollBars(infoPtr);
|
TREEVIEW_UpdateScrollBars(infoPtr);
|
||||||
TREEVIEW_QueueItemRefresh(infoPtr, wineItem);
|
TREEVIEW_QueueItemRefresh(infoPtr, wineItem);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@ -3717,23 +3726,22 @@ TREEVIEW_LButtonDown(TREEVIEW_INFO *infoPtr, LPARAM lParam)
|
|||||||
*/
|
*/
|
||||||
TREEVIEW_SendTreeviewNotify(infoPtr, TVN_SINGLEEXPAND, TVIF_HANDLE | TVIF_PARAM,
|
TREEVIEW_SendTreeviewNotify(infoPtr, TVN_SINGLEEXPAND, TVIF_HANDLE | TVIF_PARAM,
|
||||||
0, ht.hItem, 0);
|
0, ht.hItem, 0);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Close the previous selection all the way to the root
|
* Close the previous selection all the way to the root
|
||||||
* as long as the new selection is not a child
|
* as long as the new selection is not a child
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if((infoPtr->selectedItem)
|
if((infoPtr->selectedItem)
|
||||||
&& (infoPtr->selectedItem != ht.hItem))
|
&& (infoPtr->selectedItem != ht.hItem))
|
||||||
{
|
{
|
||||||
BOOL closeit = TRUE;
|
BOOL closeit = TRUE;
|
||||||
SelItem = ht.hItem;
|
SelItem = ht.hItem;
|
||||||
|
|
||||||
while(closeit && SelItem)
|
/* determine of the hitItem is a child of the currently selected item */
|
||||||
|
while(closeit && SelItem && TREEVIEW_ValidItem(infoPtr, SelItem) && (SelItem != infoPtr->root))
|
||||||
{
|
{
|
||||||
closeit = (SelItem != infoPtr->selectedItem);
|
closeit = (SelItem != infoPtr->selectedItem);
|
||||||
|
SelItem = SelItem->parent;
|
||||||
if(TREEVIEW_ValidItem(infoPtr, SelItem->parent))
|
|
||||||
SelItem = SelItem->parent;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(closeit)
|
if(closeit)
|
||||||
@ -3741,12 +3749,10 @@ TREEVIEW_LButtonDown(TREEVIEW_INFO *infoPtr, LPARAM lParam)
|
|||||||
if(TREEVIEW_ValidItem(infoPtr, infoPtr->selectedItem))
|
if(TREEVIEW_ValidItem(infoPtr, infoPtr->selectedItem))
|
||||||
SelItem = infoPtr->selectedItem;
|
SelItem = infoPtr->selectedItem;
|
||||||
|
|
||||||
while((SelItem) && (SelItem != ht.hItem))
|
while(SelItem && (SelItem != ht.hItem) && TREEVIEW_ValidItem(infoPtr, SelItem) && (SelItem != infoPtr->root))
|
||||||
{
|
{
|
||||||
TREEVIEW_Expand(infoPtr, SelItem, (WPARAM)TVE_COLLAPSE,
|
TREEVIEW_Collapse(infoPtr, SelItem, FALSE, FALSE);
|
||||||
FALSE);
|
SelItem = SelItem->parent;
|
||||||
if(TREEVIEW_ValidItem(infoPtr, SelItem->parent))
|
|
||||||
SelItem = SelItem->parent;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3756,8 +3762,9 @@ TREEVIEW_LButtonDown(TREEVIEW_INFO *infoPtr, LPARAM lParam)
|
|||||||
*/
|
*/
|
||||||
TREEVIEW_Expand(infoPtr, ht.hItem, TVE_TOGGLE, FALSE);
|
TREEVIEW_Expand(infoPtr, ht.hItem, TVE_TOGGLE, FALSE);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
TREEVIEW_DoSelectItem(infoPtr, TVGN_CARET, ht.hItem, TVC_BYMOUSE);
|
/* Select the current item */
|
||||||
|
TREEVIEW_DoSelectItem(infoPtr, TVGN_CARET, ht.hItem, TVC_BYMOUSE);
|
||||||
}
|
}
|
||||||
else if (ht.flags & TVHT_ONITEMSTATEICON)
|
else if (ht.flags & TVHT_ONITEMSTATEICON)
|
||||||
{
|
{
|
||||||
@ -3849,7 +3856,7 @@ TREEVIEW_CreateDragImage(TREEVIEW_INFO *infoPtr, WPARAM wParam, LPARAM lParam)
|
|||||||
hOldFont = SelectObject(hdc, infoPtr->hFont);
|
hOldFont = SelectObject(hdc, infoPtr->hFont);
|
||||||
GetTextExtentPoint32A(hdc, dragItem->pszText, lstrlenA(dragItem->pszText),
|
GetTextExtentPoint32A(hdc, dragItem->pszText, lstrlenA(dragItem->pszText),
|
||||||
&size);
|
&size);
|
||||||
TRACE("%d %d %s %d\n", size.cx, size.cy, dragItem->pszText,
|
TRACE("%ld %ld %s %d\n", size.cx, size.cy, dragItem->pszText,
|
||||||
lstrlenA(dragItem->pszText));
|
lstrlenA(dragItem->pszText));
|
||||||
hbmp = CreateCompatibleBitmap(htopdc, size.cx, size.cy);
|
hbmp = CreateCompatibleBitmap(htopdc, size.cx, size.cy);
|
||||||
hOldbmp = SelectObject(hdc, hbmp);
|
hOldbmp = SelectObject(hdc, hbmp);
|
||||||
@ -3999,7 +4006,13 @@ TREEVIEW_EnsureVisible(TREEVIEW_INFO *infoPtr, HTREEITEM item, BOOL bHScroll)
|
|||||||
if (!ISVISIBLE(item))
|
if (!ISVISIBLE(item))
|
||||||
{
|
{
|
||||||
/* Expand parents as necessary. */
|
/* Expand parents as necessary. */
|
||||||
HTREEITEM parent = item->parent;
|
HTREEITEM parent;
|
||||||
|
|
||||||
|
/* see if we are trying to ensure that root is vislble */
|
||||||
|
if((item != infoPtr->root) && TREEVIEW_ValidItem(infoPtr, item))
|
||||||
|
parent = item->parent;
|
||||||
|
else
|
||||||
|
parent = item; /* this item is the topmost item */
|
||||||
|
|
||||||
while (parent != infoPtr->root)
|
while (parent != infoPtr->root)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user