This is a lot nicer than the big switch full of code. This stuff has a bit
of a "please generate me instead" vibe to it, but I need to mess around with
it some more to figure out what the needs are.
This patch also unbreaks global cursor tracking, which was forgotten in the
big messaging refactoring.