break desktop callback registration into superclass