I’ve been pulling my hair out porting my positively ancient RoutePlanner program from GNOME 1 to GNOME 2 and trying to do it the “right” way—eschewing the old, working (but deprecated), humanly-comprehensible GtkCList widget for GtkTreeView [sic] and its friends. Actually, I would have stuck with GtkCList, but apparently the automated Glade conversion script decided to convert all of my widgets to use GtkTreeView. Damn annoying.
No doubt all this abstraction (separating the list into column view, overall view, iterator, storage, and selection objects) is a wonderful idea on paper, but in practice it’s a recipe for a giant headache, especially when trying to translate between the mostly-complete C API documentation and the virtually-undocumented Python API.