Nikolay Sivov : comctl32: Use selected image for listbox/ editbox for selected item only.
Alexandre Julliard
julliard at winehq.org
Tue May 14 15:34:11 CDT 2013
Module: wine
Branch: master
Commit: 4625c399c6d4127196d3578a7b27ef68bcd417af
URL: http://source.winehq.org/git/wine.git/?a=commit;h=4625c399c6d4127196d3578a7b27ef68bcd417af
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Tue May 14 10:48:13 2013 +0400
comctl32: Use selected image for listbox/editbox for selected item only.
---
dlls/comctl32/comboex.c | 34 ++++++++++++++--------------------
1 files changed, 14 insertions(+), 20 deletions(-)
diff --git a/dlls/comctl32/comboex.c b/dlls/comctl32/comboex.c
index 0f3ed4a..cc6115a 100644
--- a/dlls/comctl32/comboex.c
+++ b/dlls/comctl32/comboex.c
@@ -1316,7 +1316,7 @@ static LRESULT COMBOEX_DrawItem (COMBOEX_INFO *infoPtr, DRAWITEMSTRUCT const *di
UINT xbase, x, y;
INT len;
COLORREF nbkc, ntxc, bkc, txc;
- int drawimage, drawstate, xioff;
+ int drawimage, drawstate, xioff, selected;
TRACE("DRAWITEMSTRUCT: CtlType=0x%08x CtlID=0x%08x\n",
dis->CtlType, dis->CtlID);
@@ -1417,36 +1417,30 @@ static LRESULT COMBOEX_DrawItem (COMBOEX_INFO *infoPtr, DRAWITEMSTRUCT const *di
drawimage = -2;
drawstate = ILD_NORMAL;
+ selected = infoPtr->selected == dis->itemID;
+
if (item->mask & CBEIF_IMAGE)
drawimage = item->iImage;
+ if (item->mask & CBEIF_SELECTEDIMAGE && selected)
+ drawimage = item->iSelectedImage;
if (dis->itemState & ODS_COMBOEXLBOX) {
/* drawing listbox entry */
- if (dis->itemState & ODS_SELECTED) {
- if (item->mask & CBEIF_SELECTEDIMAGE)
- drawimage = item->iSelectedImage;
+ if (dis->itemState & ODS_SELECTED)
drawstate = ILD_SELECTED;
- }
} else {
/* drawing combo/edit entry */
if (IsWindowVisible(infoPtr->hwndEdit)) {
/* if we have an edit control, the slave the
* selection state to the Edit focus state
*/
- if (infoPtr->flags & WCBE_EDITFOCUSED) {
- if (item->mask & CBEIF_SELECTEDIMAGE)
- drawimage = item->iSelectedImage;
+ if (infoPtr->flags & WCBE_EDITFOCUSED)
drawstate = ILD_SELECTED;
- }
- } else {
+ } else
/* if we don't have an edit control, use
* the requested state.
*/
- if (dis->itemState & ODS_SELECTED) {
- if (item->mask & CBEIF_SELECTEDIMAGE)
- drawimage = item->iSelectedImage;
+ if (dis->itemState & ODS_SELECTED)
drawstate = ILD_SELECTED;
- }
- }
}
if (infoPtr->himl && !(infoPtr->dwExtStyle & CBES_EX_NOEDITIMAGEINDENT)) {
@@ -1469,17 +1463,17 @@ static LRESULT COMBOEX_DrawItem (COMBOEX_INFO *infoPtr, DRAWITEMSTRUCT const *di
if (drawimage == I_IMAGECALLBACK) {
NMCOMBOBOXEXW 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.iItem = dis->itemID;
COMBOEX_NotifyItem(infoPtr, CBEN_GETDISPINFOW, &nmce);
- if (drawstate == ILD_NORMAL) {
+ if (!selected) {
if (nmce.ceItem.mask & CBEIF_DI_SETITEM) item->iImage = 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;
- drawimage = nmce.ceItem.iSelectedImage;
- } else ERR("Bad draw state = %d\n", drawstate);
+ drawimage = nmce.ceItem.iSelectedImage;
+ }
}
if (overlay == I_IMAGECALLBACK) {
More information about the wine-cvs
mailing list