user32: Add tests and fix for the edit control parent notification

Dmitry Timoshkov dmitry at codeweavers.com
Fri Aug 8 07:01:36 CDT 2008


"Ilya Shpigor" <shpigor at etersoft.ru> wrote:

> - /* why do we notify to es->hwndParent, and we send this one to GetParent()? */
> -        hbrush = (HBRUSH)SendMessageW(GetParent(es->hwndSelf), msg, (WPARAM)hdc, (LPARAM)es->hwndSelf);
> +        /* We must send all notifies to es->hwndParent. 
> +         * If es->hwndParent don't response, we call 
> +         * DefWindowProcW of the current parent.
> +         */
> +
> +        hbrush = (HBRUSH)SendMessageW(es->hwndParent, msg, (WPARAM)hdc, (LPARAM)es->hwndSelf);
>          if (!hbrush)
>              hbrush = (HBRUSH)DefWindowProcW(GetParent(es->hwndSelf), msg, (WPARAM)hdc, (LPARAM)es->hwndSelf);
>          return hbrush;

If you have changed the target in the SendMessage call, shouldn't you do
the same for DefWindowProc?

> +    SendMessage( hwEdit, WM_PAINT, (WPARAM)GetDC( hwEdit ), 0 );
> +    syscolor = GetPixel( GetDC( hwEdit ), PIXEL_X, PIXEL_Y );
> +
> +    SetParent( hwEdit, hwParent2 );
> +    DestroyWindow( hwParent1 );
> +
> +    SendMessage( hwEdit, WM_PAINT, (WPARAM)GetDC( hwEdit ), 0 );
> +    editcolor = GetPixel( GetDC( hwEdit ), PIXEL_X, PIXEL_Y );
> +
> +    ok( editcolor == syscolor, "Child color is wrong, child = %04x\n", editcolor );
> +
> +    DestroyWindow( hwEdit );
> +    DestroyWindow( hwParent2 );
> +}

You are leaking a DC in the test. From your fix it looks like you need to
test the message sequences instead of the pixel color (which is not reliable).
Same applies to your other patch.

-- 
Dmitry.



More information about the wine-devel mailing list