Just for completeness - there is an alternative that doesn't require you to modify B and C. You can install an event filter on the application object to intercept all events in your application. Then you can check if the target of the event is your own descendant and if so, steal the event. But this solution is slower than the one suggested earlier.
Bookmarks