The correct solution would be XACE. Eamon Walsh worked on XACE and the SELinux module for it and had an impressive demo of a multi-level desktop where an unclassified process couldn't screen scrape or gather input intended for secret and top secret x applications (this can also be used for normal type enforcement examples as well). The problem with this though is that most X frameworks are not written to handle permission failures. So several applications had to be modified to survive permission denials in the event that they did something wrong.