Though forward declarations of the implementations are ok, it is cleaner to have proper header files for each variant (default, kwin, quartz right now). Of course these new header files are not installed and must be kept private for build only.