Default background erase code does not respect WM_CLIPSIBLINGS

Troy Rollo wine at troy.rollo.name
Wed Aug 23 23:18:37 CDT 2006


The attached program demonstrates a bug in the default background-erase code 
in send_erase (dlls/user/painting.c). The code includes a top level window 
with WS_CLIPCHILDREN | WS_CLIPSIBLINGS, and two overlapping child windows - 
one that draws nothing and has a white background (first child), and the 
other being a standard drop-down list (second child).

When the window is first created the second child is completely visible, 
having drawn over the first child. Click anywhere in the grey area of the 
window and the second child disappears. Click again and only half of it 
reappears (you may see the other half reappear briefly but be overwritten by 
the first child).

The second child is correctly redrawn if you cover the window and expose it 
again.

Under Windows, the same code results in the second window (being at the top of 
the Z order) appearing intact on the second click.

This looks like one of those cases where there are probably a lot of wrong 
ways to fix it and only one right way, and so needs to be fixed by somebody 
familiar with the code involved.

-- 
Troy Rollo - wine at troy.rollo.name
-------------- next part --------------
A non-text attachment was scrubbed...
Name: drawtest.c
Type: text/x-csrc
Size: 2600 bytes
Desc: not available
Url : http://www.winehq.org/pipermail/wine-devel/attachments/20060824/7c7dde0e/drawtest-0001.c


More information about the wine-devel mailing list