On 21 February 2010 23:12, Kenneth Robinette support@securenetterm.com 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&am...
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