This is mainly just moving code around, in preparation for further changes to
the "windowing" API.