Wine integration with native (Gtk, Qt, Cocoa/Carbon) themes
msclrhd at googlemail.com
Sat Nov 1 09:58:56 CDT 2008
2008/11/1 Roderick Colenbrander <thunderbird2k at 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.
More information about the wine-devel