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
