comctl32: Use selected image for listbox/editbox for selected item only.
This commit is contained in:
parent
97caa729b6
commit
4625c399c6
|
@ -1316,7 +1316,7 @@ static LRESULT COMBOEX_DrawItem (COMBOEX_INFO *infoPtr, DRAWITEMSTRUCT const *di
|
||||||
UINT xbase, x, y;
|
UINT xbase, x, y;
|
||||||
INT len;
|
INT len;
|
||||||
COLORREF nbkc, ntxc, bkc, txc;
|
COLORREF nbkc, ntxc, bkc, txc;
|
||||||
int drawimage, drawstate, xioff;
|
int drawimage, drawstate, xioff, selected;
|
||||||
|
|
||||||
TRACE("DRAWITEMSTRUCT: CtlType=0x%08x CtlID=0x%08x\n",
|
TRACE("DRAWITEMSTRUCT: CtlType=0x%08x CtlID=0x%08x\n",
|
||||||
dis->CtlType, dis->CtlID);
|
dis->CtlType, dis->CtlID);
|
||||||
|
@ -1417,37 +1417,31 @@ static LRESULT COMBOEX_DrawItem (COMBOEX_INFO *infoPtr, DRAWITEMSTRUCT const *di
|
||||||
|
|
||||||
drawimage = -2;
|
drawimage = -2;
|
||||||
drawstate = ILD_NORMAL;
|
drawstate = ILD_NORMAL;
|
||||||
|
selected = infoPtr->selected == dis->itemID;
|
||||||
|
|
||||||
if (item->mask & CBEIF_IMAGE)
|
if (item->mask & CBEIF_IMAGE)
|
||||||
drawimage = item->iImage;
|
drawimage = item->iImage;
|
||||||
|
if (item->mask & CBEIF_SELECTEDIMAGE && selected)
|
||||||
|
drawimage = item->iSelectedImage;
|
||||||
if (dis->itemState & ODS_COMBOEXLBOX) {
|
if (dis->itemState & ODS_COMBOEXLBOX) {
|
||||||
/* drawing listbox entry */
|
/* drawing listbox entry */
|
||||||
if (dis->itemState & ODS_SELECTED) {
|
if (dis->itemState & ODS_SELECTED)
|
||||||
if (item->mask & CBEIF_SELECTEDIMAGE)
|
|
||||||
drawimage = item->iSelectedImage;
|
|
||||||
drawstate = ILD_SELECTED;
|
drawstate = ILD_SELECTED;
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
/* drawing combo/edit entry */
|
/* drawing combo/edit entry */
|
||||||
if (IsWindowVisible(infoPtr->hwndEdit)) {
|
if (IsWindowVisible(infoPtr->hwndEdit)) {
|
||||||
/* if we have an edit control, the slave the
|
/* if we have an edit control, the slave the
|
||||||
* selection state to the Edit focus state
|
* selection state to the Edit focus state
|
||||||
*/
|
*/
|
||||||
if (infoPtr->flags & WCBE_EDITFOCUSED) {
|
if (infoPtr->flags & WCBE_EDITFOCUSED)
|
||||||
if (item->mask & CBEIF_SELECTEDIMAGE)
|
|
||||||
drawimage = item->iSelectedImage;
|
|
||||||
drawstate = ILD_SELECTED;
|
drawstate = ILD_SELECTED;
|
||||||
}
|
} else
|
||||||
} else {
|
|
||||||
/* if we don't have an edit control, use
|
/* if we don't have an edit control, use
|
||||||
* the requested state.
|
* the requested state.
|
||||||
*/
|
*/
|
||||||
if (dis->itemState & ODS_SELECTED) {
|
if (dis->itemState & ODS_SELECTED)
|
||||||
if (item->mask & CBEIF_SELECTEDIMAGE)
|
|
||||||
drawimage = item->iSelectedImage;
|
|
||||||
drawstate = ILD_SELECTED;
|
drawstate = ILD_SELECTED;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (infoPtr->himl && !(infoPtr->dwExtStyle & CBES_EX_NOEDITIMAGEINDENT)) {
|
if (infoPtr->himl && !(infoPtr->dwExtStyle & CBES_EX_NOEDITIMAGEINDENT)) {
|
||||||
IMAGEINFO iinfo;
|
IMAGEINFO iinfo;
|
||||||
|
@ -1469,17 +1463,17 @@ static LRESULT COMBOEX_DrawItem (COMBOEX_INFO *infoPtr, DRAWITEMSTRUCT const *di
|
||||||
if (drawimage == I_IMAGECALLBACK) {
|
if (drawimage == I_IMAGECALLBACK) {
|
||||||
NMCOMBOBOXEXW nmce;
|
NMCOMBOBOXEXW nmce;
|
||||||
ZeroMemory(&nmce, sizeof(nmce));
|
ZeroMemory(&nmce, sizeof(nmce));
|
||||||
nmce.ceItem.mask = (drawstate == ILD_NORMAL) ? CBEIF_IMAGE : CBEIF_SELECTEDIMAGE;
|
nmce.ceItem.mask = selected ? CBEIF_SELECTEDIMAGE : CBEIF_IMAGE;
|
||||||
nmce.ceItem.lParam = item->lParam;
|
nmce.ceItem.lParam = item->lParam;
|
||||||
nmce.ceItem.iItem = dis->itemID;
|
nmce.ceItem.iItem = dis->itemID;
|
||||||
COMBOEX_NotifyItem(infoPtr, CBEN_GETDISPINFOW, &nmce);
|
COMBOEX_NotifyItem(infoPtr, CBEN_GETDISPINFOW, &nmce);
|
||||||
if (drawstate == ILD_NORMAL) {
|
if (!selected) {
|
||||||
if (nmce.ceItem.mask & CBEIF_DI_SETITEM) item->iImage = nmce.ceItem.iImage;
|
if (nmce.ceItem.mask & CBEIF_DI_SETITEM) item->iImage = nmce.ceItem.iImage;
|
||||||
drawimage = nmce.ceItem.iImage;
|
drawimage = nmce.ceItem.iImage;
|
||||||
} else if (drawstate == ILD_SELECTED) {
|
} else {
|
||||||
if (nmce.ceItem.mask & CBEIF_DI_SETITEM) item->iSelectedImage = nmce.ceItem.iSelectedImage;
|
if (nmce.ceItem.mask & CBEIF_DI_SETITEM) item->iSelectedImage = nmce.ceItem.iSelectedImage;
|
||||||
drawimage = nmce.ceItem.iSelectedImage;
|
drawimage = nmce.ceItem.iSelectedImage;
|
||||||
} else ERR("Bad draw state = %d\n", drawstate);
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (overlay == I_IMAGECALLBACK) {
|
if (overlay == I_IMAGECALLBACK) {
|
||||||
|
|
Loading…
Reference in New Issue