Hi,
one of our windows application is using an OWNERDRAW_FIXED listview. With
the current version of Wine I mentioned that when the listview is loosing
its focus, the selected item will be repainted in a wrong front (System 12
instead of my MS Shell Dlg 11)... after the focus comes back, the item is
redrawn again, now with correct font settings again.
After searching for a while my idea is that the LISTVIEW_ShowFocusRect
function is missing a SelectObject call to the font stored in the
item-structure for this particular listview item. So the hdc transfered over
WM_DRAWITEM to the application contains the wrong font.
I created the attached patch, which looks like this:
--- snipp ---
diff -u -u -r1.485 listview.c
--- dlls/comctl32/listview.c 25 May 2007 19:46:02 -0000 1.485
+++ dlls/comctl32/listview.c 30 May 2007 12:28:44 -0000
@@ -1770,6 +1770,9 @@
{
DRAWITEMSTRUCT dis;
LVITEMW item;
+
+ HFONT hFont = infoPtr->hFont ? infoPtr->hFont : infoPtr->hDefaultFont;
+ HFONT hOldFont = SelectObject(hdc, hFont);
item.iItem = infoPtr->nFocusedItem;
item.iSubItem = 0;
@@ -1788,6 +1791,8 @@
dis.itemData = item.lParam;
SendMessageW(infoPtr->hwndNotify, WM_DRAWITEM, dis.CtlID, (LPARAM)&dis);
+
+ SelectObject(hdc, hOldFont);
}
else
{
--- snipp ---
Before sending this to wine.patches, I wanted to ask if anyone here can tell
me if the above is ok or total bullshit.
Thanks and regards
Markus