[COMCTL32] Sync with Wine Staging 1.9.23. CORE-12409
authorAmine Khaldi <amine.khaldi@reactos.org>
Tue, 22 Nov 2016 12:10:28 +0000 (12:10 +0000)
committerAmine Khaldi <amine.khaldi@reactos.org>
Tue, 22 Nov 2016 12:10:28 +0000 (12:10 +0000)
svn path=/trunk/; revision=73335

reactos/dll/win32/comctl32/comctl32_ros.diff
reactos/dll/win32/comctl32/header.c
reactos/dll/win32/comctl32/hotkey.c
reactos/dll/win32/comctl32/treeview.c
reactos/media/doc/README.WINE

index 07de47e..05f4aa6 100644 (file)
@@ -1,5 +1,5 @@
 diff -pudN e:\wine\dlls\comctl32/comctl32.h e:\reactos\dll\win32\comctl32/comctl32.h
---- e:\wine\dlls\comctl32/comctl32.h   2016-08-14 19:11:25 +0100
+--- e:\wine\dlls\comctl32/comctl32.h   2016-11-16 17:28:41 +0100
 +++ e:\reactos\dll\win32\comctl32/comctl32.h   2014-03-05 11:47:40 +0100
 @@ -53,67 +53,6 @@
  extern HMODULE COMCTL32_hModule DECLSPEC_HIDDEN;
@@ -79,8 +79,8 @@ diff -pudN e:\wine\dlls\comctl32/comctl32.h e:\reactos\dll\win32\comctl32/comctl
  typedef struct _SUBCLASSPROCS {
      SUBCLASSPROC subproc;
 diff -pudN e:\wine\dlls\comctl32/commctrl.c e:\reactos\dll\win32\comctl32/commctrl.c
---- e:\wine\dlls\comctl32/commctrl.c   2016-08-14 19:11:25 +0100
-+++ e:\reactos\dll\win32\comctl32/commctrl.c   2016-03-01 20:00:53 +0100
+--- e:\wine\dlls\comctl32/commctrl.c   2016-11-16 17:28:41 +0100
++++ e:\reactos\dll\win32\comctl32/commctrl.c   2016-02-26 11:19:35 +0100
 @@ -60,6 +60,19 @@
  
  WINE_DEFAULT_DEBUG_CHANNEL(commctrl);
@@ -333,8 +333,8 @@ diff -pudN e:\wine\dlls\comctl32/commctrl.c e:\reactos\dll\win32\comctl32/commct
 +    return TRUE;
 +}
 diff -pudN e:\wine\dlls\comctl32/imagelist.c e:\reactos\dll\win32\comctl32/imagelist.c
---- e:\wine\dlls\comctl32/imagelist.c  2016-08-14 19:11:25 +0100
-+++ e:\reactos\dll\win32\comctl32/imagelist.c  2016-08-18 12:03:13 +0100
+--- e:\wine\dlls\comctl32/imagelist.c  2016-11-16 17:28:41 +0100
++++ e:\reactos\dll\win32\comctl32/imagelist.c  2016-08-15 16:07:59 +0100
 @@ -33,7 +33,7 @@
   *
   *  TODO:
@@ -504,8 +504,8 @@ diff -pudN e:\wine\dlls\comctl32/imagelist.c e:\reactos\dll\win32\comctl32/image
  
 Common subdirectories: e:\wine\dlls\comctl32/lang and e:\reactos\dll\win32\comctl32/lang
 diff -pudN e:\wine\dlls\comctl32/listview.c e:\reactos\dll\win32\comctl32/listview.c
---- e:\wine\dlls\comctl32/listview.c   2016-08-14 19:11:25 +0100
-+++ e:\reactos\dll\win32\comctl32/listview.c   2016-08-18 12:03:13 +0100
+--- e:\wine\dlls\comctl32/listview.c   2016-11-16 17:28:41 +0100
++++ e:\reactos\dll\win32\comctl32/listview.c   2016-08-15 16:09:30 +0100
 @@ -287,6 +287,9 @@ typedef struct tagLISTVIEW_INFO
    COLORREF clrBk;
    COLORREF clrText;
@@ -623,8 +623,8 @@ diff -pudN e:\wine\dlls\comctl32/listview.c e:\reactos\dll\win32\comctl32/listvi
  
  /*    case WM_TIMER: */
 diff -pudN e:\wine\dlls\comctl32/monthcal.c e:\reactos\dll\win32\comctl32/monthcal.c
---- e:\wine\dlls\comctl32/monthcal.c   2016-08-14 19:11:25 +0100
-+++ e:\reactos\dll\win32\comctl32/monthcal.c   2016-08-18 12:03:13 +0100
+--- e:\wine\dlls\comctl32/monthcal.c   2016-11-16 17:28:41 +0100
++++ e:\reactos\dll\win32\comctl32/monthcal.c   2016-08-17 13:29:31 +0100
 @@ -43,6 +43,9 @@
  
  WINE_DEFAULT_DEBUG_CHANNEL(monthcal);
@@ -636,8 +636,8 @@ diff -pudN e:\wine\dlls\comctl32/monthcal.c e:\reactos\dll\win32\comctl32/monthc
  #define MC_SEL_LBUTDOWN           2   /* Left button pressed in calendar */
  #define MC_PREVPRESSED      4   /* Prev month button pressed */
 diff -pudN e:\wine\dlls\comctl32/propsheet.c e:\reactos\dll\win32\comctl32/propsheet.c
---- e:\wine\dlls\comctl32/propsheet.c  2016-08-14 19:11:25 +0100
-+++ e:\reactos\dll\win32\comctl32/propsheet.c  2016-08-18 12:03:14 +0100
+--- e:\wine\dlls\comctl32/propsheet.c  2016-11-16 17:28:41 +0100
++++ e:\reactos\dll\win32\comctl32/propsheet.c  2016-08-15 16:10:02 +0100
 @@ -2355,12 +2355,19 @@ static void PROPSHEET_SetWizButtons(HWND
    HWND hwndFinish = GetDlgItem(hwndDlg, IDC_FINISH_BUTTON);
    BOOL enable_finish = ((dwFlags & PSWIZB_FINISH) || psInfo->hasFinish) && !(dwFlags & PSWIZB_DISABLEDFINISH);
@@ -693,8 +693,8 @@ diff -pudN e:\wine\dlls\comctl32/propsheet.c e:\reactos\dll\win32\comctl32/props
  
  /******************************************************************************
 diff -pudN e:\wine\dlls\comctl32/rebar.c e:\reactos\dll\win32\comctl32/rebar.c
---- e:\wine\dlls\comctl32/rebar.c      2016-08-14 19:11:25 +0100
-+++ e:\reactos\dll\win32\comctl32/rebar.c      2016-08-18 12:03:14 +0100
+--- e:\wine\dlls\comctl32/rebar.c      2016-11-16 17:28:41 +0100
++++ e:\reactos\dll\win32\comctl32/rebar.c      2016-08-15 16:11:05 +0100
 @@ -50,7 +50,6 @@
   *   - WM_QUERYNEWPALETTE
   *   - WM_RBUTTONDOWN
@@ -908,8 +908,8 @@ diff -pudN e:\wine\dlls\comctl32/rebar.c e:\reactos\dll\win32\comctl32/rebar.c
  
  /*      case WM_VKEYTOITEM:     supported according to ControlSpy */
 diff -pudN e:\wine\dlls\comctl32/toolbar.c e:\reactos\dll\win32\comctl32/toolbar.c
---- e:\wine\dlls\comctl32/toolbar.c    2016-08-14 19:11:25 +0100
-+++ e:\reactos\dll\win32\comctl32/toolbar.c    2016-08-18 12:03:14 +0100
+--- e:\wine\dlls\comctl32/toolbar.c    2016-11-16 17:28:41 +0100
++++ e:\reactos\dll\win32\comctl32/toolbar.c    2016-08-15 16:13:17 +0100
 @@ -33,11 +33,9 @@
   *     - TBSTYLE_REGISTERDROP
   *     - TBSTYLE_EX_DOUBLEBUFFER
@@ -1301,8 +1301,8 @@ diff -pudN e:\wine\dlls\comctl32/toolbar.c e:\reactos\dll\win32\comctl32/toolbar
  /*    case WM_WININICHANGE: */
  
 diff -pudN e:\wine\dlls\comctl32/tooltips.c e:\reactos\dll\win32\comctl32/tooltips.c
---- e:\wine\dlls\comctl32/tooltips.c   2016-08-14 19:11:25 +0100
-+++ e:\reactos\dll\win32\comctl32/tooltips.c   2016-08-18 12:03:14 +0100
+--- e:\wine\dlls\comctl32/tooltips.c   2016-11-16 17:28:41 +0100
++++ e:\reactos\dll\win32\comctl32/tooltips.c   2016-08-15 16:13:43 +0100
 @@ -2009,7 +2009,36 @@ TOOLTIPS_NCHitTest (const TOOLTIPS_INFO 
  static LRESULT
  TOOLTIPS_NotifyFormat (TOOLTIPS_INFO *infoPtr, WPARAM wParam, LPARAM lParam)
@@ -1341,9 +1341,9 @@ diff -pudN e:\wine\dlls\comctl32/tooltips.c e:\reactos\dll\win32\comctl32/toolti
      return 0;
  }
 diff -pudN e:\wine\dlls\comctl32/treeview.c e:\reactos\dll\win32\comctl32/treeview.c
---- e:\wine\dlls\comctl32/treeview.c   2016-08-14 19:11:25 +0100
-+++ e:\reactos\dll\win32\comctl32/treeview.c   2016-08-18 12:03:14 +0100
-@@ -2888,7 +2888,14 @@ TREEVIEW_Refresh(TREEVIEW_INFO *infoPtr,
+--- e:\wine\dlls\comctl32/treeview.c   2016-11-16 17:28:42 +0100
++++ e:\reactos\dll\win32\comctl32/treeview.c   2016-11-16 18:29:47 +0100
+@@ -2909,7 +2909,14 @@ TREEVIEW_Refresh(TREEVIEW_INFO *infoPtr,
        }
      }
  
index c60a005..797cc91 100644 (file)
@@ -312,6 +312,48 @@ HEADER_DrawItemFrame(HEADER_INFO *infoPtr, HDC hdc, RECT *r, const HEADER_ITEM *
     }
 }
 
+/* Create a region for the sort arrow with its bounding rect's top-left
+   co-ord x,y and its height h. */
+static HRGN create_sort_arrow( INT x, INT y, INT h, BOOL is_up )
+{
+    char buffer[256];
+    RGNDATA *data = (RGNDATA *)buffer;
+    DWORD size = FIELD_OFFSET(RGNDATA, Buffer[h * sizeof(RECT)]);
+    INT i, yinc = 1;
+    HRGN rgn;
+
+    if (size > sizeof(buffer))
+    {
+        data = HeapAlloc( GetProcessHeap(), 0, size );
+        if (!data) return NULL;
+    }
+    data->rdh.dwSize = sizeof(data->rdh);
+    data->rdh.iType = RDH_RECTANGLES;
+    data->rdh.nCount = 0;
+    data->rdh.nRgnSize = h * sizeof(RECT);
+
+    if (!is_up)
+    {
+        y += h - 1;
+        yinc = -1;
+    }
+
+    x += h - 1; /* set x to the centre */
+
+    for (i = 0; i < h; i++, y += yinc)
+    {
+        RECT *rect = (RECT *)data->Buffer + data->rdh.nCount;
+        rect->left   = x - i;
+        rect->top    = y;
+        rect->right  = x + i + 1;
+        rect->bottom = y + 1;
+        data->rdh.nCount++;
+    }
+    rgn = ExtCreateRegion( NULL, size, data );
+    if (data != (RGNDATA *)buffer) HeapFree( GetProcessHeap(), 0, data );
+    return rgn;
+}
+
 static INT
 HEADER_DrawItem (HEADER_INFO *infoPtr, HDC hdc, INT iItem, BOOL bHotTrack, LRESULT lCDFlags)
 {
@@ -392,16 +434,18 @@ HEADER_DrawItem (HEADER_INFO *infoPtr, HDC hdc, INT iItem, BOOL bHotTrack, LRESU
 
     /* Now text and image */
     {
-       UINT rw, rh, /* width and height of r */
-            *x = NULL, *w = NULL; /* x and width of the pic (bmp or img) which is part of cnt */
+       INT rw, rh; /* width and height of r */
+        INT *x = NULL; /* x and ... */
+        UINT *w = NULL; /* ...  width of the pic (bmp or img) which is part of cnt */
          /* cnt,txt,img,bmp */
-       UINT cx, tx, ix, bx,
-            cw, tw, iw, bw;
+        INT  cx, tx, ix, bx;
+       UINT cw, tw, iw, bw;
         INT img_cx, img_cy;
+        INT sort_w, sort_x, sort_h;
        BITMAP bmp;
 
         HEADER_PrepareCallbackItems(infoPtr, iItem, HDI_TEXT|HDI_IMAGE);
-        cw = iw = bw = 0;
+        cw = iw = bw = sort_w = sort_h = 0;
        rw = r.right - r.left;
        rh = r.bottom - r.top;
 
@@ -420,23 +464,28 @@ HEADER_DrawItem (HEADER_INFO *infoPtr, HDC hdc, INT iItem, BOOL bHotTrack, LRESU
            cw = textRect.right - textRect.left + 2 * infoPtr->iMargin;
        }
 
-       if ((phdi->fmt & HDF_IMAGE) && ImageList_GetIconSize( infoPtr->himl, &img_cx, &img_cy )) {
-           iw = img_cx + 2 * infoPtr->iMargin;
-           x = &ix;
-           w = &iw;
-       }
-
-       if ((phdi->fmt & HDF_BITMAP) && (phdi->hbm)) {
-            GetObjectW (phdi->hbm, sizeof(BITMAP), &bmp);
-           bw = bmp.bmWidth + 2 * infoPtr->iMargin;
-           if (!iw) {
-               x = &bx;
-               w = &bw;
-           }
-       }
+        if (phdi->fmt & (HDF_SORTUP | HDF_SORTDOWN)) {
+            sort_h = MulDiv( infoPtr->nHeight - VERT_BORDER, 4, 13 );
+            sort_w = 2 * sort_h - 1 + infoPtr->iMargin * 2;
+            cw += sort_w;
+        } else { /* sort arrows take precedent over images/bitmaps */
+            if ((phdi->fmt & HDF_IMAGE) && ImageList_GetIconSize( infoPtr->himl, &img_cx, &img_cy )) {
+                iw = img_cx + 2 * infoPtr->iMargin;
+                x = &ix;
+                w = &iw;
+            }
 
-       if (bw || iw)
-           cw += *w; 
+            if ((phdi->fmt & HDF_BITMAP) && (phdi->hbm)) {
+                GetObjectW (phdi->hbm, sizeof(BITMAP), &bmp);
+                bw = bmp.bmWidth + 2 * infoPtr->iMargin;
+                if (!iw) {
+                    x = &bx;
+                    w = &bw;
+                }
+            }
+            if (bw || iw)
+                cw += *w;
+        }
 
        /* align cx using the unclipped cw */
        if ((phdi->fmt & HDF_JUSTIFYMASK) == HDF_LEFT)
@@ -455,7 +504,10 @@ HEADER_DrawItem (HEADER_INFO *infoPtr, HDC hdc, INT iItem, BOOL bHotTrack, LRESU
        tx = cx + infoPtr->iMargin;
        /* since cw might have changed we have to recalculate tw */
        tw = cw - infoPtr->iMargin * 2;
-                       
+
+        tw -= sort_w;
+        sort_x = cx + tw + infoPtr->iMargin * 3;
+
        if (iw || bw) {
            tw -= *w;
            if (phdi->fmt & HDF_BITMAP_ON_RIGHT) {
@@ -479,22 +531,31 @@ HEADER_DrawItem (HEADER_INFO *infoPtr, HDC hdc, INT iItem, BOOL bHotTrack, LRESU
                bx = cx + cw + infoPtr->iMargin;
        }
 
-       if (iw || bw) {
+       if (sort_w || iw || bw) {
            HDC hClipDC = GetDC(infoPtr->hwndSelf);
            HRGN hClipRgn = CreateRectRgn(r.left, r.top, r.right, r.bottom);
            SelectClipRgn(hClipDC, hClipRgn);
            
+            if (sort_w) {
+                HRGN arrow = create_sort_arrow( sort_x, r.top + (rh - sort_h) / 2,
+                                                sort_h, phdi->fmt & HDF_SORTUP );
+                if (arrow) {
+                    FillRgn( hClipDC, arrow, GetSysColorBrush( COLOR_GRAYTEXT ) );
+                    DeleteObject( arrow );
+                }
+            }
+
            if (bw) {
                HDC hdcBitmap = CreateCompatibleDC (hClipDC);
                SelectObject (hdcBitmap, phdi->hbm);
-               BitBlt (hClipDC, bx, r.top + ((INT)rh - bmp.bmHeight) / 2, 
+               BitBlt (hClipDC, bx, r.top + (rh - bmp.bmHeight) / 2,
                        bmp.bmWidth, bmp.bmHeight, hdcBitmap, 0, 0, SRCCOPY);
                DeleteDC (hdcBitmap);
            }
 
            if (iw) {
                ImageList_DrawEx (infoPtr->himl, phdi->iImage, hClipDC, 
-                                 ix, r.top + ((INT)rh - img_cy) / 2,
+                                 ix, r.top + (rh - img_cy) / 2,
                                  img_cx, img_cy, CLR_DEFAULT, CLR_DEFAULT, 0);
            }
 
index e436c4c..6a35a3a 100644 (file)
@@ -131,7 +131,7 @@ HOTKEY_Refresh(HOTKEY_INFO *infoPtr, HDC hdc)
     TRACE("(infoPtr=%p hdc=%p)\n", infoPtr, hdc);
 
     if(!infoPtr->CurrMod && !infoPtr->HotKey) {
-       HOTKEY_DrawHotKey (infoPtr, hdc, infoPtr->strNone, 4);
+       HOTKEY_DrawHotKey (infoPtr, hdc, infoPtr->strNone, lstrlenW(infoPtr->strNone));
        return;
     }
        
index bbb0c16..e605723 100644 (file)
@@ -31,7 +31,7 @@
  *   missing notifications: TVN_GETINFOTIP, TVN_KEYDOWN,
  *      TVN_SETDISPINFO
  *
- *   missing styles: TVS_FULLROWSELECT, TVS_INFOTIP, TVS_RTLREADING,
+ *   missing styles: TVS_INFOTIP, TVS_RTLREADING,
  *
  *   missing item styles: TVIS_EXPANDPARTIAL, TVIS_EX_FLAT,
  *      TVIS_EX_DISABLED
@@ -332,6 +332,20 @@ TREEVIEW_IsChildOf(const TREEVIEW_ITEM *parent, const TREEVIEW_ITEM *child)
     return FALSE;
 }
 
+static BOOL
+TREEVIEW_IsFullRowSelect(const TREEVIEW_INFO *infoPtr)
+{
+    return !(infoPtr->dwStyle & TVS_HASLINES) && (infoPtr->dwStyle & TVS_FULLROWSELECT);
+}
+
+static BOOL
+TREEVIEW_IsItemHit(const TREEVIEW_INFO *infoPtr, const TVHITTESTINFO *ht)
+{
+    if (TREEVIEW_IsFullRowSelect(infoPtr))
+        return ht->flags & (TVHT_ONITEMINDENT | TVHT_ONITEMBUTTON | TVHT_ONITEM | TVHT_ONITEMRIGHT);
+    else
+        return ht->flags & TVHT_ONITEM;
+}
 
 /* Tree Traversal *******************************************************/
 
@@ -2542,6 +2556,13 @@ TREEVIEW_DrawItem(const TREEVIEW_INFO *infoPtr, HDC hdc, TREEVIEW_ITEM *item)
     if (cditem & CDRF_NEWFONT)
        TREEVIEW_ComputeTextWidth(infoPtr, item, hdc);
 
+    if (TREEVIEW_IsFullRowSelect(infoPtr))
+    {
+        HBRUSH brush = CreateSolidBrush(nmcdhdr.clrTextBk);
+        FillRect(hdc, &item->rect, brush);
+        DeleteObject(brush);
+    }
+
     TREEVIEW_DrawItemLines(infoPtr, hdc, item);
 
     /* Set colors. Custom draw handler can change these so we do this after it. */
@@ -4169,9 +4190,9 @@ TREEVIEW_LButtonDoubleClick(TREEVIEW_INFO *infoPtr, LPARAM lParam)
 static LRESULT
 TREEVIEW_LButtonDown(TREEVIEW_INFO *infoPtr, LPARAM lParam)
 {
+    BOOL do_track, do_select, bDoLabelEdit;
     HWND hwnd = infoPtr->hwnd;
     TVHITTESTINFO ht;
-    BOOL bTrack, bDoLabelEdit;
 
     /* If Edit control is active - kill it and return.
      * The best way to do it is to set focus to itself.
@@ -4191,15 +4212,32 @@ TREEVIEW_LButtonDown(TREEVIEW_INFO *infoPtr, LPARAM lParam)
     TRACE("item %d\n", TREEVIEW_GetItemIndex(infoPtr, ht.hItem));
 
     /* update focusedItem and redraw both items */
-    if(ht.hItem && (ht.flags & TVHT_ONITEM))
+    if (ht.hItem)
     {
-        infoPtr->focusedItem = ht.hItem;
-        TREEVIEW_InvalidateItem(infoPtr, infoPtr->focusedItem);
-        TREEVIEW_InvalidateItem(infoPtr, infoPtr->selectedItem);
+        BOOL do_focus;
+
+        if (TREEVIEW_IsFullRowSelect(infoPtr))
+            do_focus = ht.flags & (TVHT_ONITEMINDENT | TVHT_ONITEM | TVHT_ONITEMRIGHT);
+        else
+            do_focus = ht.flags & TVHT_ONITEM;
+
+        if (do_focus)
+        {
+            infoPtr->focusedItem = ht.hItem;
+            TREEVIEW_InvalidateItem(infoPtr, infoPtr->focusedItem);
+            TREEVIEW_InvalidateItem(infoPtr, infoPtr->selectedItem);
+        }
     }
 
-    bTrack = (ht.flags & TVHT_ONITEM)
-       && !(infoPtr->dwStyle & TVS_DISABLEDRAGDROP);
+    if (!(infoPtr->dwStyle & TVS_DISABLEDRAGDROP))
+    {
+        if (TREEVIEW_IsFullRowSelect(infoPtr))
+            do_track = ht.flags & (TVHT_ONITEMINDENT | TVHT_ONITEM | TVHT_ONITEMRIGHT);
+        else
+            do_track = ht.flags & TVHT_ONITEM;
+    }
+    else
+        do_track = FALSE;
 
     /*
      * If the style allows editing and the node is already selected
@@ -4209,16 +4247,15 @@ TREEVIEW_LButtonDown(TREEVIEW_INFO *infoPtr, LPARAM lParam)
         (ht.flags & TVHT_ONITEMLABEL) && (infoPtr->selectedItem == ht.hItem);
 
     /* Send NM_CLICK right away */
-    if (!bTrack)
-       if (TREEVIEW_SendSimpleNotify(infoPtr, NM_CLICK))
-           goto setfocus;
+    if (!do_track && TREEVIEW_SendSimpleNotify(infoPtr, NM_CLICK))
+        goto setfocus;
 
     if (ht.flags & TVHT_ONITEMBUTTON)
     {
        TREEVIEW_Toggle(infoPtr, ht.hItem, TRUE);
        goto setfocus;
     }
-    else if (bTrack)
+    else if (do_track)
     {   /* if TREEVIEW_TrackMouse == 1 dragging occurred and the cursor left the dragged item's rectangle */
        if (TREEVIEW_TrackMouse(infoPtr, ht.pt))
        {
@@ -4240,9 +4277,14 @@ TREEVIEW_LButtonDown(TREEVIEW_INFO *infoPtr, LPARAM lParam)
         }
     }
 
-    if (bTrack && TREEVIEW_SendSimpleNotify(infoPtr, NM_CLICK))
+    if (do_track && TREEVIEW_SendSimpleNotify(infoPtr, NM_CLICK))
         goto setfocus;
 
+    if (TREEVIEW_IsFullRowSelect(infoPtr))
+        do_select = ht.flags & (TVHT_ONITEMINDENT | TVHT_ONITEMICON | TVHT_ONITEMLABEL | TVHT_ONITEMRIGHT);
+    else
+        do_select = ht.flags & (TVHT_ONITEMICON | TVHT_ONITEMLABEL);
+
     if (bDoLabelEdit)
     {
        if (infoPtr->Timer & TV_EDIT_TIMER_SET)
@@ -4251,7 +4293,7 @@ TREEVIEW_LButtonDown(TREEVIEW_INFO *infoPtr, LPARAM lParam)
        SetTimer(hwnd, TV_EDIT_TIMER, GetDoubleClickTime(), 0);
        infoPtr->Timer |= TV_EDIT_TIMER_SET;
     }
-    else if (ht.flags & (TVHT_ONITEMICON|TVHT_ONITEMLABEL)) /* select the item if the hit was inside of the icon or text */
+    else if (do_select)
     {
         TREEVIEW_ITEM *selection = infoPtr->selectedItem;
 
@@ -4392,7 +4434,7 @@ TREEVIEW_DoSelectItem(TREEVIEW_INFO *infoPtr, INT action, HTREEITEM newSelect,
 
     assert(newSelect == NULL || TREEVIEW_ValidItem(infoPtr, newSelect));
 
-    TRACE("Entering item %p (%s), flag 0x%x, cause 0x%x, state %d\n",
+    TRACE("Entering item %p (%s), flag 0x%x, cause 0x%x, state 0x%x\n",
          newSelect, TREEVIEW_ItemName(newSelect), action, cause,
          newSelect ? newSelect->state : 0);
 
@@ -4467,7 +4509,7 @@ TREEVIEW_DoSelectItem(TREEVIEW_INFO *infoPtr, INT action, HTREEITEM newSelect,
        break;
     }
 
-    TRACE("Leaving state %d\n", newSelect ? newSelect->state : 0);
+    TRACE("Leaving state 0x%x\n", newSelect ? newSelect->state : 0);
     return TRUE;
 }
 
@@ -5320,6 +5362,7 @@ TREEVIEW_MouseMove (TREEVIEW_INFO * infoPtr, LPARAM lParam)
     TRACKMOUSEEVENT trackinfo;
     TREEVIEW_ITEM * item;
     TVHITTESTINFO ht;
+    BOOL item_hit;
 
     if (!(infoPtr->dwStyle & TVS_TRACKSELECT)) return 0;
 
@@ -5348,12 +5391,13 @@ TREEVIEW_MouseMove (TREEVIEW_INFO * infoPtr, LPARAM lParam)
     ht.pt.y = (short)HIWORD(lParam);
 
     item = TREEVIEW_HitTest(infoPtr, &ht);
-    if ((item != infoPtr->hotItem) || !(ht.flags & TVHT_ONITEM))
+    item_hit = TREEVIEW_IsItemHit(infoPtr, &ht);
+    if ((item != infoPtr->hotItem) || !item_hit)
     {
         /* redraw old hot item */
         TREEVIEW_InvalidateItem(infoPtr, infoPtr->hotItem);
         infoPtr->hotItem = NULL;
-        if (item && (ht.flags & TVHT_ONITEM))
+        if (item && item_hit)
         {
             infoPtr->hotItem = item;
             /* redraw new hot item */
@@ -5518,7 +5562,7 @@ TREEVIEW_SetCursor(const TREEVIEW_INFO *infoPtr, WPARAM wParam, LPARAM lParam)
     if (TREEVIEW_SendRealNotify(infoPtr, NM_SETCURSOR, &nmmouse.hdr))
         return 0;
 
-    if (item && (infoPtr->dwStyle & TVS_TRACKSELECT) && (ht.flags & TVHT_ONITEM))
+    if (item && (infoPtr->dwStyle & TVS_TRACKSELECT) && TREEVIEW_IsItemHit(infoPtr, &ht))
     {
         SetCursor(infoPtr->hcurHand);
         return 0;
index 7d9df59..ff67f1a 100644 (file)
@@ -54,7 +54,7 @@ reactos/dll/win32/browseui            # Out of sync
 reactos/dll/win32/cabinet             # Synced to WineStaging-1.9.23
 reactos/dll/win32/clusapi             # Synced to WineStaging-1.9.11
 reactos/dll/win32/comcat              # Synced to WineStaging-1.9.11
-reactos/dll/win32/comctl32            # Synced to WineStaging-1.9.16
+reactos/dll/win32/comctl32            # Synced to WineStaging-1.9.23
 reactos/dll/win32/comdlg32            # Synced to WineStaging-1.9.16
 reactos/dll/win32/compstui            # Synced to WineStaging-1.9.11
 reactos/dll/win32/credui              # Synced to WineStaging-1.9.16