I think you need to look at event propogation. The object that dispatches an event will be sitting on the display tree. The event propagates up the tree to the roots. Your canvas should be attached to the application, but even then it sits lower in the tree branches than the event dispatcher, so it won't see the event being dispatched because the event is not propagated to the children of the object that dispatches it but to the parent of the object that dispatches it.
So, your canvas is a child of the application, but dispatching the event from the application means that the canvas doesn't see it because events are notified up the tree using the parent link, not the child links.
You may wish to investigate how the display list and event propagation works and then the MVC pattern.
The Display List doesn't allow this to happen, and it's a good thing it doesn't. It provides at least a little guidance to newer developers that child components should not concern themselves with what's going on higher up on the display list. Trying to do so results in an inflexible, tightly coupled application.
Instead, you can do one of several things:
- Your child components can supply properties and/or methods that the parent can call based on whatever happened.
- You can use a Model that the parent changes and the child is bound to.
- You can provide a separate EventDispatcher to all components that they use for communication (known as an event bus).