Re: calling `_vispy_set_current` - I don't consider it a hack. I thought that we actually needed it. The context is perhaps made current on initialization, but I wonder what happens if we have multiple windows and actually try to draw stuff to them. But maybe we only need it for glfw, so the current location of the call seems good.

Re: calling `swap_buffers` - we could consider moving that into the backend as well. On the other hand, paint event handlers are inserted at the front of the handlers, so this is going to be called at the right moment unless the user explicitly puts is handler at the end.

We should not call neither swap_buffers nor make_current in update(), since an update only posts a new paint event, not handle it yet.

> this is not the same error as the one that caused me to add the bool() check, but it's similar

Got something similar like this. Feels like a context not being set correctly. I wonder whether the above stuff fixes it.

Re: multiple apps - My use-case was rather specific for running the tests with PySide running interactively in my IDE. The nose tests worked fine. Also I narrowed it down to the initialization of the QGLWidget, so not much we can do there. 

Current status of tests is rather messy when I run it here... When I run the nose tests, I get a bunch of windows that stay open, and afterwards my OS says that the application crashed...