Written primarily by Paul Davis. Porting to gtkmm2 and sigc++2 work done by Taybin Rutkin.