The code in xlgui/playlist.py:Playlist is a bit of a mess wrt how it handles updates and its internal playlist object. Ideally, this should be implemented as a pure MVC model using the internal Playlist for the model, and with the gui playlist's methods serving as part of either the view or control on top. For example, currently, changes to the set of displayed tracks are taken care of purely in the gui code, in several different spots, some of which react partially to changes on the backend. Ideally, this would be rewritten so control methods like DnD just change the backend, and then the events sent by the backend are reacted to be the view methods. This may require adding some events to the backend playlist. (consider porting backend playlist to use gobject signals at the same time.)
I think we should either convert all out to gobject signals or keep using the custom event model in the non-gui code. At least now there's some semblance of a reason for the old event system, porting the backend to gobject signals will remove even that.