fixes issue #2556

Fixes it in two ways:

1) changes the closure of `on_dpi` to be over a weakref, not `self`
2) cleans up the call back when the quiver is removed