2008/11/1 Roderick Colenbrander thunderbird2k@gmx.net:
In the end we need to support a bunch of different theme engines GTK, QT, Cocoa and perhaps later on more. In theory it would be possible to create a different uxtheme backend for each different toolkit. One major issue is the language which each of these toolktis is written in. GTK would be fine as it is C but QT and Cocoa require respectively C++ and Objective C. Alexandre doesn't want such languages in (although he might make an exception for the winecocoa driver if it is really, really needed).
I mentioned that in my email. The idea that wine would host the XP msstyles theme (the fallback behaviour for uxtheme), and a GTK plugin to support GTK themes. Then other projects can provide a Qt and Cocoa plugin, so they can be written in the toolkit's language.
While using a language different than C is a definitive no, I think Alexandre might allow the use of other languages in helper programs. The best way would be to write a separate program (which would have backends for all the needed toolkits) which generates a .msstyles theme (or if Vista uses a newer and better format, lets directly move to that format). The main issue would then be on how to sync themes. I guess that would need to be done at wine startup.
The problem with the Vista theme is that it is binary and completely undocumented, making it very difficult to reverse engineer.
Moving forward, we'll probably need to be able to support both XP and Vista themes (possibly Windows 7 and later as well if the theme format has changed). I don't know if moving the processing of that into a separate process would help, though.
When syncing themes, you can have uxtheme.dll loading the correct engine if enabled (see my "Use the native theme" option idea in my previous discussion on improving winecfg). Then, if the system theme changes, the WM_THEMECHANGED message needs to be sent to all top-level applications so they can refresh themselves to use that new theme. How that happens and where needs to be figured out.
And yes, the bugs in uxtheme and the various controls need fixing.
- Reece