* Scroll (instead of repaint) as much as possible.
*/
-#include "config.h"
-#include "wine/port.h"
-
-#include <assert.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include <string.h>
-#include <limits.h>
-#include <stdlib.h>
-
-#define NONAMELESSUNION
-#define NONAMELESSSTRUCT
-#include "windef.h"
-#include "winbase.h"
-#include "wingdi.h"
-#include "winuser.h"
-#include "winnls.h"
-#include "commctrl.h"
#include "comctl32.h"
-#include "uxtheme.h"
-#include "vssym32.h"
-#include "wine/unicode.h"
-#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(treeview);
BOOL insertBeforeorAfter; /* flag used by TVM_SETINSERTMARK */
HIMAGELIST dragList; /* Bitmap of dragged item */
LONG scrollX;
+ INT wheelRemainder;
COLORREF clrBk;
COLORREF clrText;
COLORREF clrLine;
HFONT hDefaultFont;
HFONT hBoldFont;
HFONT hUnderlineFont;
+ HFONT hBoldUnderlineFont;
HCURSOR hcurHand;
HWND hwndToolTip;
return CreateFontIndirectW(&font);
}
+static HFONT
+TREEVIEW_CreateBoldUnderlineFont(HFONT hfont)
+{
+ LOGFONTW font;
+
+ GetObjectW(hfont, sizeof(font), &font);
+ font.lfWeight = FW_BOLD;
+ font.lfUnderline = TRUE;
+ return CreateFontIndirectW(&font);
+}
+
static inline HFONT
TREEVIEW_FontForItem(const TREEVIEW_INFO *infoPtr, const TREEVIEW_ITEM *item)
{
if ((infoPtr->dwStyle & TVS_TRACKSELECT) && (item == infoPtr->hotItem))
- return infoPtr->hUnderlineFont;
+ return item->state & TVIS_BOLD ? infoPtr->hBoldUnderlineFont : infoPtr->hUnderlineFont;
if (item->state & TVIS_BOLD)
return infoPtr->hBoldFont;
return infoPtr->hFont;
}
static inline BOOL
-TREEVIEW_SendRealNotify(const TREEVIEW_INFO *infoPtr, WPARAM wParam, LPNMHDR pnmh)
+TREEVIEW_SendRealNotify(const TREEVIEW_INFO *infoPtr, UINT code, NMHDR *hdr)
{
- TRACE("wParam=%ld, lParam=%p\n", wParam, pnmh);
- return SendMessageW(infoPtr->hwndNotify, WM_NOTIFY, wParam, (LPARAM)pnmh);
+ TRACE("code=%d, hdr=%p\n", code, hdr);
+
+ hdr->hwndFrom = infoPtr->hwnd;
+ hdr->idFrom = GetWindowLongPtrW(infoPtr->hwnd, GWLP_ID);
+ hdr->code = get_notifycode(infoPtr, code);
+
+ return SendMessageW(infoPtr->hwndNotify, WM_NOTIFY, hdr->idFrom, (LPARAM)hdr);
}
static BOOL
TREEVIEW_SendSimpleNotify(const TREEVIEW_INFO *infoPtr, UINT code)
{
- NMHDR nmhdr;
- HWND hwnd = infoPtr->hwnd;
-
- TRACE("%d\n", code);
- nmhdr.hwndFrom = hwnd;
- nmhdr.idFrom = GetWindowLongPtrW(hwnd, GWLP_ID);
- nmhdr.code = get_notifycode(infoPtr, code);
-
- return TREEVIEW_SendRealNotify(infoPtr, nmhdr.idFrom, &nmhdr);
+ NMHDR hdr;
+ return TREEVIEW_SendRealNotify(infoPtr, code, &hdr);
}
static VOID
TREEVIEW_SendTreeviewNotify(const TREEVIEW_INFO *infoPtr, UINT code, UINT action,
UINT mask, HTREEITEM oldItem, HTREEITEM newItem)
{
- HWND hwnd = infoPtr->hwnd;
NMTREEVIEWW nmhdr;
BOOL ret;
TRACE("code:%d action:%x olditem:%p newitem:%p\n",
code, action, oldItem, newItem);
- ZeroMemory(&nmhdr, sizeof(NMTREEVIEWW));
-
- nmhdr.hdr.hwndFrom = hwnd;
- nmhdr.hdr.idFrom = GetWindowLongPtrW(hwnd, GWLP_ID);
- nmhdr.hdr.code = get_notifycode(infoPtr, code);
+ memset(&nmhdr, 0, sizeof(NMTREEVIEWW));
nmhdr.action = action;
if (oldItem)
nmhdr.ptDrag.x = 0;
nmhdr.ptDrag.y = 0;
- ret = TREEVIEW_SendRealNotify(infoPtr, nmhdr.hdr.idFrom, &nmhdr.hdr);
+ ret = TREEVIEW_SendRealNotify(infoPtr, code, &nmhdr.hdr);
if (!infoPtr->bNtfUnicode)
{
Free(nmhdr.itemOld.pszText);
TREEVIEW_SendTreeviewDnDNotify(const TREEVIEW_INFO *infoPtr, UINT code,
HTREEITEM dragItem, POINT pt)
{
- HWND hwnd = infoPtr->hwnd;
NMTREEVIEWW nmhdr;
TRACE("code:%d dragitem:%p\n", code, dragItem);
- nmhdr.hdr.hwndFrom = hwnd;
- nmhdr.hdr.idFrom = GetWindowLongPtrW(hwnd, GWLP_ID);
- nmhdr.hdr.code = get_notifycode(infoPtr, code);
nmhdr.action = 0;
nmhdr.itemNew.mask = TVIF_STATE | TVIF_PARAM | TVIF_HANDLE;
nmhdr.itemNew.hItem = dragItem;
nmhdr.ptDrag.x = pt.x;
nmhdr.ptDrag.y = pt.y;
- return TREEVIEW_SendRealNotify(infoPtr, nmhdr.hdr.idFrom, &nmhdr.hdr);
+ return TREEVIEW_SendRealNotify(infoPtr, code, &nmhdr.hdr);
}
TREEVIEW_SendCustomDrawNotify(const TREEVIEW_INFO *infoPtr, DWORD dwDrawStage,
HDC hdc, RECT rc)
{
- HWND hwnd = infoPtr->hwnd;
NMTVCUSTOMDRAW nmcdhdr;
- LPNMCUSTOMDRAW nmcd;
+ NMCUSTOMDRAW *nmcd;
TRACE("drawstage:%x hdc:%p\n", dwDrawStage, hdc);
nmcd = &nmcdhdr.nmcd;
- nmcd->hdr.hwndFrom = hwnd;
- nmcd->hdr.idFrom = GetWindowLongPtrW(hwnd, GWLP_ID);
- nmcd->hdr.code = NM_CUSTOMDRAW;
nmcd->dwDrawStage = dwDrawStage;
nmcd->hdc = hdc;
nmcd->rc = rc;
nmcdhdr.clrTextBk = infoPtr->clrBk;
nmcdhdr.iLevel = 0;
- return TREEVIEW_SendRealNotify(infoPtr, nmcd->hdr.idFrom, &nmcdhdr.nmcd.hdr);
+ return TREEVIEW_SendRealNotify(infoPtr, NM_CUSTOMDRAW, &nmcdhdr.nmcd.hdr);
}
-
-
/* FIXME: need to find out when the flags in uItemState need to be set */
static BOOL
TREEVIEW_ITEM *item, UINT uItemDrawState,
NMTVCUSTOMDRAW *nmcdhdr)
{
- HWND hwnd = infoPtr->hwnd;
- LPNMCUSTOMDRAW nmcd;
+ NMCUSTOMDRAW *nmcd;
DWORD dwDrawStage;
DWORD_PTR dwItemSpec;
UINT uItemState;
uItemState |= CDIS_HOT;
nmcd = &nmcdhdr->nmcd;
- nmcd->hdr.hwndFrom = hwnd;
- nmcd->hdr.idFrom = GetWindowLongPtrW(hwnd, GWLP_ID);
- nmcd->hdr.code = NM_CUSTOMDRAW;
nmcd->dwDrawStage = dwDrawStage;
nmcd->hdc = hdc;
nmcd->rc = item->rect;
nmcd->dwDrawStage, nmcd->hdc, nmcd->dwItemSpec,
nmcd->uItemState, nmcd->lItemlParam);
- return TREEVIEW_SendRealNotify(infoPtr, nmcd->hdr.idFrom, &nmcdhdr->nmcd.hdr);
+ return TREEVIEW_SendRealNotify(infoPtr, NM_CUSTOMDRAW, &nmcdhdr->nmcd.hdr);
}
static BOOL
TREEVIEW_BeginLabelEditNotify(const TREEVIEW_INFO *infoPtr, TREEVIEW_ITEM *editItem)
{
- HWND hwnd = infoPtr->hwnd;
NMTVDISPINFOW tvdi;
BOOL ret;
- tvdi.hdr.hwndFrom = hwnd;
- tvdi.hdr.idFrom = GetWindowLongPtrW(hwnd, GWLP_ID);
- tvdi.hdr.code = get_notifycode(infoPtr, TVN_BEGINLABELEDITW);
-
TREEVIEW_TVItemFromItem(infoPtr, TVIF_HANDLE | TVIF_STATE | TVIF_PARAM | TVIF_TEXT,
&tvdi.item, editItem);
- ret = TREEVIEW_SendRealNotify(infoPtr, tvdi.hdr.idFrom, &tvdi.hdr);
+ ret = TREEVIEW_SendRealNotify(infoPtr, TVN_BEGINLABELEDITW, &tvdi.hdr);
if (!infoPtr->bNtfUnicode)
Free(tvdi.item.pszText);
UINT mask)
{
NMTVDISPINFOEXW callback;
- HWND hwnd = infoPtr->hwnd;
TRACE("mask=0x%x, callbackmask=0x%x\n", mask, item->callbackMask);
mask &= item->callbackMask;
if (mask == 0) return;
- callback.hdr.hwndFrom = hwnd;
- callback.hdr.idFrom = GetWindowLongPtrW(hwnd, GWLP_ID);
- callback.hdr.code = get_notifycode(infoPtr, TVN_GETDISPINFOW);
-
/* 'state' always contains valid value, as well as 'lParam'.
* All other parameters are uninitialized.
*/
if (mask & TVIF_TEXT)
item->textWidth = 0;
- TREEVIEW_SendRealNotify(infoPtr, callback.hdr.idFrom, &callback.hdr);
+ TREEVIEW_SendRealNotify(infoPtr, TVN_GETDISPINFOW, &callback.hdr);
TRACE("resulting code 0x%08x\n", callback.hdr.code);
/* It may have changed due to a call to SetItem. */
newFirstVisible = item->prevSibling;
else if (item->parent != infoPtr->root)
newFirstVisible = item->parent;
- TREEVIEW_SetFirstVisible(infoPtr, NULL, TRUE);
+ TREEVIEW_SetFirstVisible(infoPtr, NULL, TRUE);
}
else
newFirstVisible = infoPtr->firstVisible;
DeleteObject(infoPtr->hBoldFont);
DeleteObject(infoPtr->hUnderlineFont);
+ DeleteObject(infoPtr->hBoldUnderlineFont);
infoPtr->hBoldFont = TREEVIEW_CreateBoldFont(infoPtr->hFont);
infoPtr->hUnderlineFont = TREEVIEW_CreateUnderlineFont(infoPtr->hFont);
+ infoPtr->hBoldUnderlineFont = TREEVIEW_CreateBoldUnderlineFont(infoPtr->hFont);
if (!infoPtr->bHeightSet)
infoPtr->uItemHeight = TREEVIEW_NaturalHeight(infoPtr);
* - Otherwise - use background color
*/
if ((item->state & TVIS_DROPHILITED) || ((item == infoPtr->focusedItem) && !(item->state & TVIS_SELECTED)) ||
- ((item->state & TVIS_SELECTED) && (!infoPtr->focusedItem) &&
+ ((item->state & TVIS_SELECTED) && (!infoPtr->focusedItem || item == infoPtr->focusedItem) &&
(inFocus || (infoPtr->dwStyle & TVS_SHOWSELALWAYS))))
{
if ((item->state & TVIS_DROPHILITED) || inFocus)
DeleteObject(hNewPen);
}
+ /* Restore the hdc state */
+ SetTextColor(hdc, oldTextColor);
+ SetBkColor(hdc, oldTextBkColor);
+ SelectObject(hdc, hOldFont);
+
if (cditem & CDRF_NOTIFYPOSTPAINT)
{
cditem = TREEVIEW_SendCustomDrawItemNotify
(infoPtr, hdc, item, CDDS_ITEMPOSTPAINT, &nmcdhdr);
TRACE("postpaint:cditem-app returns 0x%x\n", cditem);
}
-
- /* Restore the hdc state */
- SetTextColor(hdc, oldTextColor);
- SetBkColor(hdc, oldTextBkColor);
- SelectObject(hdc, hOldFont);
}
/* Computes treeHeight and treeWidth and updates the scroll bars.
InvalidateRect(infoPtr->hwnd, NULL, TRUE);
}
+static void
+TREEVIEW_InitCheckboxes(TREEVIEW_INFO *infoPtr)
+{
+ RECT rc;
+ HBITMAP hbm, hbmOld;
+ HDC hdc, hdcScreen;
+ int nIndex;
+
+ infoPtr->himlState = ImageList_Create(16, 16, ILC_COLOR | ILC_MASK, 3, 0);
+
+ hdcScreen = GetDC(0);
+
+ hdc = CreateCompatibleDC(hdcScreen);
+ hbm = CreateCompatibleBitmap(hdcScreen, 48, 16);
+ hbmOld = SelectObject(hdc, hbm);
+
+ SetRect(&rc, 0, 0, 48, 16);
+ FillRect(hdc, &rc, (HBRUSH)(COLOR_WINDOW+1));
+
+ SetRect(&rc, 18, 2, 30, 14);
+ DrawFrameControl(hdc, &rc, DFC_BUTTON,
+ DFCS_BUTTONCHECK|DFCS_FLAT);
+
+ SetRect(&rc, 34, 2, 46, 14);
+ DrawFrameControl(hdc, &rc, DFC_BUTTON,
+ DFCS_BUTTONCHECK|DFCS_FLAT|DFCS_CHECKED);
+
+ SelectObject(hdc, hbmOld);
+ nIndex = ImageList_AddMasked(infoPtr->himlState, hbm,
+ comctl32_color.clrWindow);
+ TRACE("checkbox index %d\n", nIndex);
+
+ DeleteObject(hbm);
+ DeleteDC(hdc);
+ ReleaseDC(0, hdcScreen);
+
+ infoPtr->stateImageWidth = 16;
+ infoPtr->stateImageHeight = 16;
+}
+
+static void
+TREEVIEW_ResetImageStateIndex(TREEVIEW_INFO *infoPtr, TREEVIEW_ITEM *item)
+{
+ TREEVIEW_ITEM *child = item->firstChild;
+
+ item->state &= ~TVIS_STATEIMAGEMASK;
+ item->state |= INDEXTOSTATEIMAGEMASK(1);
+
+ while (child)
+ {
+ TREEVIEW_ITEM *next = child->nextSibling;
+ TREEVIEW_ResetImageStateIndex(infoPtr, child);
+ child = next;
+ }
+}
+
static LRESULT
TREEVIEW_Paint(TREEVIEW_INFO *infoPtr, HDC hdc_ref)
{
TRACE("(%p %p)\n", infoPtr, hdc_ref);
+ if ((infoPtr->dwStyle & TVS_CHECKBOXES) && !infoPtr->himlState)
+ {
+ TREEVIEW_InitCheckboxes(infoPtr);
+ TREEVIEW_ResetImageStateIndex(infoPtr, infoPtr->root);
+
+ TREEVIEW_EndEditLabelNow(infoPtr, TRUE);
+ TREEVIEW_UpdateSubTree(infoPtr, infoPtr->root);
+ TREEVIEW_UpdateScrollBars(infoPtr);
+ TREEVIEW_Invalidate(infoPtr, NULL);
+ }
+
if (hdc_ref)
{
hdc = hdc_ref;
{
int visOrder = infoPtr->firstVisible->visibleOrder;
- if (parent == infoPtr->root)
- TREEVIEW_RecalculateVisibleOrder(infoPtr, NULL);
- else
- TREEVIEW_RecalculateVisibleOrder(infoPtr, parent);
+ if (parent == infoPtr->root)
+ TREEVIEW_RecalculateVisibleOrder(infoPtr, NULL);
+ else
+ TREEVIEW_RecalculateVisibleOrder(infoPtr, parent);
if (TREEVIEW_IsChildOf(parent, infoPtr->firstVisible))
{
TREEVIEW_RemoveAllChildren(infoPtr, item);
item->cChildren = old_cChildren;
}
+ if (!wasExpanded)
+ return FALSE;
if (item->firstChild)
{
TREEVIEW_ITEM *nextItem, *tmpItem;
BOOL sendsNotifications;
- TRACE("(%p, %p, partial=%d, %d\n", infoPtr, item, partial, user);
+ TRACE("(%p, %p, partial=%d, %d)\n", infoPtr, item, partial, user);
if (!TREEVIEW_HasChildren(infoPtr, item))
return FALSE;
static LRESULT
TREEVIEW_EndEditLabelNow(TREEVIEW_INFO *infoPtr, BOOL bCancel)
{
- HWND hwnd = infoPtr->hwnd;
TREEVIEW_ITEM *editedItem = infoPtr->editItem;
NMTVDISPINFOW tvdi;
BOOL bCommit;
if (!IsWindow(infoPtr->hwndEdit)) return FALSE;
- tvdi.hdr.hwndFrom = hwnd;
- tvdi.hdr.idFrom = GetWindowLongPtrW(hwnd, GWLP_ID);
- tvdi.hdr.code = get_notifycode(infoPtr, TVN_ENDLABELEDITW);
tvdi.item.mask = 0;
tvdi.item.hItem = editedItem;
tvdi.item.state = editedItem->state;
tvdi.item.cchTextMax = 0;
}
- bCommit = TREEVIEW_SendRealNotify(infoPtr, tvdi.hdr.idFrom, &tvdi.hdr);
+ bCommit = TREEVIEW_SendRealNotify(infoPtr, TVN_ENDLABELEDITW, &tvdi.hdr);
if (!bCancel && bCommit) /* Apply the changes */
{
static LRESULT
TREEVIEW_MouseWheel(TREEVIEW_INFO *infoPtr, WPARAM wParam, LPARAM lParam)
{
- short gcWheelDelta;
+ short wheelDelta;
UINT pulScrollLines = 3;
if (wParam & (MK_SHIFT | MK_CONTROL))
SystemParametersInfoW(SPI_GETWHEELSCROLLLINES, 0, &pulScrollLines, 0);
- gcWheelDelta = -(short)HIWORD(wParam);
- pulScrollLines *= (gcWheelDelta / WHEEL_DELTA);
+ wheelDelta = GET_WHEEL_DELTA_WPARAM(wParam);
+ /* if scrolling changes direction, ignore left overs */
+ if ((wheelDelta < 0 && infoPtr->wheelRemainder < 0) ||
+ (wheelDelta > 0 && infoPtr->wheelRemainder > 0))
+ infoPtr->wheelRemainder += wheelDelta;
+ else
+ infoPtr->wheelRemainder = wheelDelta;
- if (abs(gcWheelDelta) >= WHEEL_DELTA && pulScrollLines)
+ if (infoPtr->wheelRemainder && pulScrollLines)
{
- int newDy = infoPtr->firstVisible->visibleOrder + pulScrollLines;
- int maxDy = infoPtr->maxVisibleOrder;
+ int newDy;
+ int maxDy;
+ int lineScroll;
+
+ lineScroll = pulScrollLines * (float)infoPtr->wheelRemainder / WHEEL_DELTA;
+ infoPtr->wheelRemainder -= WHEEL_DELTA * lineScroll / (int)pulScrollLines;
+
+ newDy = infoPtr->firstVisible->visibleOrder - lineScroll;
+ maxDy = infoPtr->maxVisibleOrder;
if (newDy > maxDy)
newDy = maxDy;
/* Create/Destroy *******************************************************/
-static void
-TREEVIEW_InitCheckboxes(TREEVIEW_INFO *infoPtr)
-{
- RECT rc;
- HBITMAP hbm, hbmOld;
- HDC hdc, hdcScreen;
- int nIndex;
-
- infoPtr->himlState = ImageList_Create(16, 16, ILC_COLOR | ILC_MASK, 3, 0);
-
- hdcScreen = GetDC(0);
-
- hdc = CreateCompatibleDC(hdcScreen);
- hbm = CreateCompatibleBitmap(hdcScreen, 48, 16);
- hbmOld = SelectObject(hdc, hbm);
-
- SetRect(&rc, 0, 0, 48, 16);
- FillRect(hdc, &rc, (HBRUSH)(COLOR_WINDOW+1));
-
- SetRect(&rc, 18, 2, 30, 14);
- DrawFrameControl(hdc, &rc, DFC_BUTTON,
- DFCS_BUTTONCHECK|DFCS_FLAT);
-
- SetRect(&rc, 34, 2, 46, 14);
- DrawFrameControl(hdc, &rc, DFC_BUTTON,
- DFCS_BUTTONCHECK|DFCS_FLAT|DFCS_CHECKED);
-
- SelectObject(hdc, hbmOld);
- nIndex = ImageList_AddMasked(infoPtr->himlState, hbm,
- comctl32_color.clrWindow);
- TRACE("checkbox index %d\n", nIndex);
-
- DeleteObject(hbm);
- DeleteDC(hdc);
- ReleaseDC(0, hdcScreen);
-
- infoPtr->stateImageWidth = 16;
- infoPtr->stateImageHeight = 16;
-}
-
static LRESULT
TREEVIEW_Create(HWND hwnd, const CREATESTRUCTW *lpcs)
{
/* dragList */
infoPtr->scrollX = 0;
+ infoPtr->wheelRemainder = 0;
infoPtr->clrBk = CLR_NONE; /* use system color */
infoPtr->clrText = CLR_NONE; /* use system color */
infoPtr->hFont = infoPtr->hDefaultFont = CreateFontIndirectW(&lf);
infoPtr->hBoldFont = TREEVIEW_CreateBoldFont(infoPtr->hFont);
infoPtr->hUnderlineFont = TREEVIEW_CreateUnderlineFont(infoPtr->hFont);
+ infoPtr->hBoldUnderlineFont = TREEVIEW_CreateBoldUnderlineFont(infoPtr->hFont);
infoPtr->hcurHand = LoadCursorW(NULL, (LPWSTR)IDC_HAND);
infoPtr->uItemHeight = TREEVIEW_NaturalHeight(infoPtr);
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
hwnd, 0, 0, 0);
- if (infoPtr->dwStyle & TVS_CHECKBOXES)
- TREEVIEW_InitCheckboxes(infoPtr);
-
/* Make sure actual scrollbar state is consistent with uInternalStatus */
ShowScrollBar(hwnd, SB_VERT, FALSE);
ShowScrollBar(hwnd, SB_HORZ, FALSE);
DeleteObject(infoPtr->hDefaultFont);
DeleteObject(infoPtr->hBoldFont);
DeleteObject(infoPtr->hUnderlineFont);
+ DeleteObject(infoPtr->hBoldUnderlineFont);
Free(infoPtr);
return 0;
{
/* If it is non-NULL and different, it will be selected and visible. */
TREEVIEW_ITEM *newSelection = NULL;
-
TREEVIEW_ITEM *prevItem = infoPtr->selectedItem;
+ NMTVKEYDOWN nmkeydown;
TRACE("%lx\n", wParam);
+ nmkeydown.wVKey = wParam;
+ nmkeydown.flags = 0;
+ TREEVIEW_SendRealNotify(infoPtr, TVN_KEYDOWN, &nmkeydown.hdr);
+
if (prevItem == NULL)
return FALSE;
newSelection = TREEVIEW_GetNextListItem(infoPtr, prevItem);
break;
+ case VK_RETURN:
+ TREEVIEW_SendSimpleNotify(infoPtr, NM_RETURN);
+ break;
+
case VK_HOME:
newSelection = infoPtr->root->firstChild;
break;
return 0;
}
-static void TREEVIEW_ResetImageStateIndex(TREEVIEW_INFO *infoPtr, TREEVIEW_ITEM *item)
-{
- TREEVIEW_ITEM *child = item->firstChild;
-
- item->state &= ~TVIS_STATEIMAGEMASK;
- item->state |= INDEXTOSTATEIMAGEMASK(1);
-
- while (child)
- {
- TREEVIEW_ITEM *next = child->nextSibling;
- TREEVIEW_ResetImageStateIndex(infoPtr, child);
- child = next;
- }
-}
-
static LRESULT
TREEVIEW_StyleChanged(TREEVIEW_INFO *infoPtr, WPARAM wParam, LPARAM lParam)
{
infoPtr->dwStyle = dwNewStyle;
}
+ TREEVIEW_EndEditLabelNow(infoPtr, TRUE);
TREEVIEW_UpdateSubTree(infoPtr, infoPtr->root);
TREEVIEW_UpdateScrollBars(infoPtr);
TREEVIEW_Invalidate(infoPtr, NULL);
item = TREEVIEW_HitTestPoint(infoPtr, pt);
memset(&nmmouse, 0, sizeof(nmmouse));
- nmmouse.hdr.hwndFrom = infoPtr->hwnd;
- nmmouse.hdr.idFrom = GetWindowLongPtrW(infoPtr->hwnd, GWLP_ID);
- nmmouse.hdr.code = NM_SETCURSOR;
if (item)
{
nmmouse.dwItemSpec = (DWORD_PTR)item;
nmmouse.pt.x = 0;
nmmouse.pt.y = 0;
nmmouse.dwHitInfo = lParam;
- if (TREEVIEW_SendRealNotify(infoPtr, nmmouse.hdr.idFrom, &nmmouse.hdr))
+ if (TREEVIEW_SendRealNotify(infoPtr, NM_SETCURSOR, &nmmouse.hdr))
return 0;
if (item && (infoPtr->dwStyle & TVS_TRACKSELECT))