mirror of
git://source.winehq.org/git/wine.git
synced 2024-09-01 01:33:38 +00:00
comctl32: Never release state image list.
This commit is contained in:
parent
0a23797f1b
commit
91fbef88bf
|
@ -1607,9 +1607,9 @@ static void test_htreeitem_layout(void)
|
||||||
|
|
||||||
static void test_TVS_CHECKBOXES(void)
|
static void test_TVS_CHECKBOXES(void)
|
||||||
{
|
{
|
||||||
HIMAGELIST himl;
|
HIMAGELIST himl, himl2;
|
||||||
|
HWND hTree, hTree2;
|
||||||
TVITEMA item;
|
TVITEMA item;
|
||||||
HWND hTree;
|
|
||||||
DWORD ret;
|
DWORD ret;
|
||||||
|
|
||||||
hTree = create_treeview_control(0);
|
hTree = create_treeview_control(0);
|
||||||
|
@ -1639,6 +1639,10 @@ static void test_TVS_CHECKBOXES(void)
|
||||||
himl = (HIMAGELIST)SendMessageA(hTree, TVM_GETIMAGELIST, TVSIL_STATE, 0);
|
himl = (HIMAGELIST)SendMessageA(hTree, TVM_GETIMAGELIST, TVSIL_STATE, 0);
|
||||||
ok(himl != NULL, "got %p\n", himl);
|
ok(himl != NULL, "got %p\n", himl);
|
||||||
|
|
||||||
|
himl2 = (HIMAGELIST)SendMessageA(hTree, TVM_GETIMAGELIST, TVSIL_STATE, 0);
|
||||||
|
ok(himl2 != NULL, "got %p\n", himl2);
|
||||||
|
ok(himl2 == himl, "got %p, expected %p\n", himl2, himl);
|
||||||
|
|
||||||
item.hItem = hRoot;
|
item.hItem = hRoot;
|
||||||
item.mask = TVIF_STATE;
|
item.mask = TVIF_STATE;
|
||||||
item.state = 0;
|
item.state = 0;
|
||||||
|
@ -1655,6 +1659,25 @@ static void test_TVS_CHECKBOXES(void)
|
||||||
expect(TRUE, ret);
|
expect(TRUE, ret);
|
||||||
ok(item.state == INDEXTOSTATEIMAGEMASK(1), "got 0x%x\n", item.state);
|
ok(item.state == INDEXTOSTATEIMAGEMASK(1), "got 0x%x\n", item.state);
|
||||||
|
|
||||||
|
/* create another control and check its checkbox list */
|
||||||
|
hTree2 = create_treeview_control(0);
|
||||||
|
fill_tree(hTree2);
|
||||||
|
|
||||||
|
/* set some index for a child */
|
||||||
|
item.hItem = hChild;
|
||||||
|
item.mask = TVIF_STATE;
|
||||||
|
item.state = INDEXTOSTATEIMAGEMASK(4);
|
||||||
|
item.stateMask = TVIS_STATEIMAGEMASK;
|
||||||
|
ret = SendMessageA(hTree2, TVM_SETITEMA, 0, (LPARAM)&item);
|
||||||
|
expect(TRUE, ret);
|
||||||
|
|
||||||
|
/* enabling check boxes set all items to 1 state image index */
|
||||||
|
SetWindowLongA(hTree2, GWL_STYLE, GetWindowLongA(hTree, GWL_STYLE) | TVS_CHECKBOXES);
|
||||||
|
himl2 = (HIMAGELIST)SendMessageA(hTree2, TVM_GETIMAGELIST, TVSIL_STATE, 0);
|
||||||
|
ok(himl2 != NULL, "got %p\n", himl2);
|
||||||
|
ok(himl != himl2, "got %p, expected %p\n", himl2, himl);
|
||||||
|
|
||||||
|
DestroyWindow(hTree2);
|
||||||
DestroyWindow(hTree);
|
DestroyWindow(hTree);
|
||||||
|
|
||||||
/* the same, but initially created with TVS_CHECKBOXES */
|
/* the same, but initially created with TVS_CHECKBOXES */
|
||||||
|
|
|
@ -66,14 +66,7 @@
|
||||||
|
|
||||||
WINE_DEFAULT_DEBUG_CHANNEL(treeview);
|
WINE_DEFAULT_DEBUG_CHANNEL(treeview);
|
||||||
|
|
||||||
enum StateListType
|
|
||||||
{
|
|
||||||
OriginInternal,
|
|
||||||
OriginUser
|
|
||||||
};
|
|
||||||
|
|
||||||
/* internal structures */
|
/* internal structures */
|
||||||
|
|
||||||
typedef struct _TREEITEM /* HTREEITEM is a _TREEINFO *. */
|
typedef struct _TREEITEM /* HTREEITEM is a _TREEINFO *. */
|
||||||
{
|
{
|
||||||
HTREEITEM parent; /* handle to parent or 0 if at root */
|
HTREEITEM parent; /* handle to parent or 0 if at root */
|
||||||
|
@ -162,7 +155,6 @@ typedef struct tagTREEVIEW_INFO
|
||||||
HIMAGELIST himlState;
|
HIMAGELIST himlState;
|
||||||
int stateImageHeight;
|
int stateImageHeight;
|
||||||
int stateImageWidth;
|
int stateImageWidth;
|
||||||
enum StateListType statehimlType;
|
|
||||||
HDPA items;
|
HDPA items;
|
||||||
|
|
||||||
DWORD lastKeyPressTimestamp;
|
DWORD lastKeyPressTimestamp;
|
||||||
|
@ -1793,11 +1785,8 @@ TREEVIEW_SetImageList(TREEVIEW_INFO *infoPtr, UINT type, HIMAGELIST himlNew)
|
||||||
infoPtr->himlState = himlNew;
|
infoPtr->himlState = himlNew;
|
||||||
|
|
||||||
if (himlNew)
|
if (himlNew)
|
||||||
{
|
|
||||||
ImageList_GetIconSize(himlNew, &infoPtr->stateImageWidth,
|
ImageList_GetIconSize(himlNew, &infoPtr->stateImageWidth,
|
||||||
&infoPtr->stateImageHeight);
|
&infoPtr->stateImageHeight);
|
||||||
infoPtr->statehimlType = OriginUser;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
infoPtr->stateImageWidth = 0;
|
infoPtr->stateImageWidth = 0;
|
||||||
|
@ -4970,7 +4959,6 @@ TREEVIEW_InitCheckboxes(TREEVIEW_INFO *infoPtr)
|
||||||
int nIndex;
|
int nIndex;
|
||||||
|
|
||||||
infoPtr->himlState = ImageList_Create(16, 16, ILC_COLOR | ILC_MASK, 3, 0);
|
infoPtr->himlState = ImageList_Create(16, 16, ILC_COLOR | ILC_MASK, 3, 0);
|
||||||
infoPtr->statehimlType = OriginInternal;
|
|
||||||
|
|
||||||
hdcScreen = GetDC(0);
|
hdcScreen = GetDC(0);
|
||||||
|
|
||||||
|
@ -5134,8 +5122,6 @@ TREEVIEW_Destroy(TREEVIEW_INFO *infoPtr)
|
||||||
|
|
||||||
CloseThemeData (GetWindowTheme (infoPtr->hwnd));
|
CloseThemeData (GetWindowTheme (infoPtr->hwnd));
|
||||||
|
|
||||||
if (infoPtr->statehimlType == OriginInternal)
|
|
||||||
ImageList_Destroy(infoPtr->himlState);
|
|
||||||
/* Deassociate treeview from the window before doing anything drastic. */
|
/* Deassociate treeview from the window before doing anything drastic. */
|
||||||
SetWindowLongPtrW(infoPtr->hwnd, 0, 0);
|
SetWindowLongPtrW(infoPtr->hwnd, 0, 0);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue