mirror of
https://github.com/reactos/reactos.git
synced 2026-06-01 00:40:26 +08:00
[COMCTL32] Sync with Wine Staging 1.9.23. CORE-12409
svn path=/trunk/; revision=73335
This commit is contained in:
@@ -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,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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_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 ((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;
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user