Hi, This fixes one problem encoutered with MetaStock. This program dies handling a WM_COMPAREITEM message when adding strings to a listbox. Exhanging in the message the item in the listbox and the item to be added fixes that. Spotted that easily by comparing SPY++ logs under win2K and under wine, great. For the changelog: controls/ : listbox.c Compare the two items in LISTBOX_FindStringPos() in the same order as in Windows. Rein. -- Rein Klazes rklazes@xs4all.nl
--- wine/controls/listbox.c 2003-03-15 07:54:11.000000000 +0100 +++ mywine/controls/listbox.c 2003-04-08 16:11:49.000000000 +0200 @@ -810,7 +810,7 @@ { index = (min + max) / 2; if (HAS_STRINGS(descr)) - res = lstrcmpiW( descr->items[index].str, str ); + res = lstrcmpiW( str, descr->items[index].str); else { COMPAREITEMSTRUCT cis; @@ -819,15 +819,17 @@ cis.CtlType = ODT_LISTBOX; cis.CtlID = id; cis.hwndItem = hwnd; - cis.itemID1 = index; - cis.itemData1 = descr->items[index].data; - cis.itemID2 = -1; - cis.itemData2 = (DWORD)str; + /* note that some application (MetaStock) expects the second item + * to be in the listbox */ + cis.itemID1 = -1; + cis.itemData1 = (DWORD)str; + cis.itemID2 = index; + cis.itemData2 = descr->items[index].data; cis.dwLocaleId = descr->locale; res = SendMessageW( descr->owner, WM_COMPAREITEM, id, (LPARAM)&cis ); } if (!res) return index; - if (res > 0) max = index; + if (res < 0) max = index; else min = index + 1; } return exact ? -1 : max;