On 21 February 2010 23:12, Kenneth Robinette <[email protected]> wrote:
> I am testing a SSH file transfer program which makes use of the Microsoft 
> IShellBrowser and ICommDlgBrowser interfaces for the "local" file system 
> view.  The interface listview header (detail view) does not get painted 
> correctly when a theme is enabled under Wine.  If a theme is not selected, 
> the problem does not happen.  This can be seen using an example program 
> available for general public download at:
>
> http://www.codeproject.com/KB/shell/explorer.aspx?df=100&forumid=2239&exp=0&select=583589&tid=583589
>
> I traced the problem through the comctl32 listview.c module:
>
> LISTVIEW_NCPaint()
> which then calls
> DrawThemeBackground (theme, dc, 0, 0, &r, 0);
>
> located in the uxtheme.dll draw.c module.
>
> If I replace the uxtheme.dll with the native version, the problem goes away.
>
> In reviewing the DrawThemeBackground() fuction, it calls:
>
> DrawThemeBackgoundEx()
>
> which then calls:
>
> UXTHEME_DrawBorderBackground()
>
> when the bgtype is BT_BORDERFILL
>
> The UXTHEME_DrawBorderBackgound() calls two internal functions:
>
> UXTHEME_DrawBorderRectangle()
> and
> UXTHEME_DrawBackgroundFill()
>
> The problem seems related to UXTHEME_DrawBackgroundFill().  If I comment this 
> call out, everything appears to work correctly.  It would appear that the 
> UXTHEME_DrawBackgroundFill() is being called incorrectly.
>
> Suggestions?

File a bug. Include a screenshot of native and wine versions.

Have you tested other themes and applications to see if that change
breaks anything?

NOTE: The change should really check for BT_BORDERFILL bgtype and then
only call UXTHEME_DrawBorderRectangle().

What is really needed is a small application that calls each theme
drawing function for the different part/state combinations so that
wine and native can be compared with different themes.

Thanks for helping wine,
- Reece


Reply via email to