RESEND: dlls/comctl32/treeview.c: remove repainting

Robert Shearman rob at codeweavers.com
Thu Feb 10 10:14:07 CST 2005


yuxdwa702 at sneakemail.com wrote:

> Changelog:
>   tinus <yuxdwa702 at sneakemail.com>
>     Scroll instead of repainting when expanding/collapsing trees
>     Don't repaint on hover if 'hot tracking' isn't on
>
>
> Index: dlls/comctl32/treeview.c
> ===================================================================
> RCS file: /home/wine/wine/dlls/comctl32/treeview.c,v
> retrieving revision 1.164
> diff -u -p -r1.164 treeview.c
> --- dlls/comctl32/treeview.c    14 Jan 2005 15:13:24 -0000    1.164
> +++ dlls/comctl32/treeview.c    31 Jan 2005 01:51:30 -0000
> @@ -631,7 +631,8 @@ TREEVIEW_SendCustomDrawItemNotify(TREEVI
>      uItemState |= CDIS_SELECTED;
>      if (wineItem == infoPtr->selectedItem)
>      uItemState |= CDIS_FOCUS;
> -    if (wineItem == infoPtr->hotItem)
> +    /* I'm not sure of this, needs to be compared to the real thing */


Usually you find this out before submitting a patch.

> +    if ((infoPtr->dwStyle & TVS_TRACKSELECT) && wineItem == 
> infoPtr->hotItem)
>      uItemState |= CDIS_HOT;
> @@ -5037,11 +5107,13 @@ TREEVIEW_KeyDown(TREEVIEW_INFO *infoPtr,
>  static LRESULT
>  TREEVIEW_MouseLeave (TREEVIEW_INFO * infoPtr)
>  {
> -    if (infoPtr->hotItem)
> +    HTREEITEM orgItem = infoPtr->hotItem;
> +    infoPtr->hotItem = NULL;
> +
> +    /* remove hot effect from item */
> +    if (infoPtr->dwStyle & TVS_TRACKSELECT)
>      {
> -        /* remove hot effect from item */
> -        InvalidateRect(infoPtr->hwnd, &infoPtr->hotItem->rect, TRUE);
> -        infoPtr->hotItem = NULL;
> +        InvalidateRect(infoPtr->hwnd, &orgItem->rect, TRUE);
>      }
>      return 0;
>  }


If hot tracking isn't required when TVS_TRACKSELECT isn't set, then 
don't call TrackMouseEvent, instead of putting these exceptions everywhere.

> @@ -5080,11 +5152,11 @@ TREEVIEW_MouseMove (TREEVIEW_INFO * info
>      if (item != infoPtr->hotItem)
>      {
>          /* redraw old hot item */
> -        if (infoPtr->hotItem)
> +        if (infoPtr->hotItem && (infoPtr->dwStyle & TVS_TRACKSELECT) )
>              InvalidateRect(infoPtr->hwnd, &infoPtr->hotItem->rect, 
> TRUE);
>          infoPtr->hotItem = item;
>          /* redraw new hot item */
> -        if (infoPtr->hotItem)
> +        if (infoPtr->hotItem && (infoPtr->dwStyle & TVS_TRACKSELECT) )
>              InvalidateRect(infoPtr->hwnd, &infoPtr->hotItem->rect, 
> TRUE);
>

Same here. Don't change the hot item if the hot item isn't going to be 
repainted anyway.

Rob




More information about the wine-devel mailing list