Set clipping region to client window before owner-drawn painting.
diff --git a/controls/listbox.c b/controls/listbox.c
index befb412..de53175 100644
--- a/controls/listbox.c
+++ b/controls/listbox.c
@@ -484,6 +484,8 @@
if (IS_OWNERDRAW(descr))
{
DRAWITEMSTRUCT dis;
+ RECT r;
+ HRGN hrgn;
if (!item)
{
@@ -493,6 +495,16 @@
FIXME("called with an out of bounds index %d(%d) in owner draw, Not good.\n",index,descr->nb_items);
return;
}
+
+ /* some programs mess with the clipping region when
+ drawing the item, *and* restore the previous region
+ after they are done, so a region has better to exist
+ else everything ends clipped */
+ GetClientRect(wnd->hwndSelf, &r);
+ hrgn = CreateRectRgnIndirect(&r);
+ SelectClipRgn( hdc, hrgn);
+ DeleteObject( hrgn );
+
dis.CtlType = ODT_LISTBOX;
dis.CtlID = wnd->wIDmenu;
dis.hwndItem = wnd->hwndSelf;
@@ -924,16 +936,6 @@
rect.right += descr->horz_pos;
}
- if (IS_OWNERDRAW(descr))
- {
- RECT r;
- HRGN hrgn;
- GetClientRect(wnd->hwndSelf, &r);
- hrgn = CreateRectRgnIndirect(&r);
- SelectClipRgn( hdc, hrgn);
- DeleteObject( hrgn );
- }
-
if (descr->font) oldFont = SelectObject( hdc, descr->font );
hbrush = SendMessageA( descr->owner, WM_CTLCOLORLISTBOX,
hdc, (LPARAM)wnd->hwndSelf );