Geany blocks upon GeanyVC spawning an external diff viewer.
This means that you can't do any work in Geany until you close the external diff viewer. This seriously reduces the usefulness of the otherwise great feature of being able to use an external diff viewer.
The external diff viewer is spawned here: https://github.com/geany/geany-plugins/blob/master/geanyvc/src/externdiff.c#L122
Looks like the problem might simply be solved by calling g_spawn_async instead of g_spawn_sync.
In theory yes, but due to structure of code there needs some extra handling code for temporally file created here -> https://github.com/geany/geany-plugins/blob/master/geanyvc/src/geanyvc.c#L602 ff
This seriously reduces the usefulness of the otherwise great feature of being able to use an external diff viewer.
Not sure what your workflow is. Geany does block, but the external diff tool is not getting blocked. Moreover, you may as well make edits to the current version of the file being diff'ed directly from an external diff tool (e.g. meld).
For the most part, GeanyVC uses external diff tool indeed more like a side-by-side diff viewer. Once done inspecting the diffs, the user is assumed to close the external diff tool and get back to Geany, just as it's done with internal Diff tab. Another external diff is just two clicks away.
Also GeanyVC's external diff use foregoes whatever repository "smarts" such an external diff tool may have. Some tools in fact may have merge, selective patch, etc. abilities directly supporting the underlying VCS type. This may be quite versatile indeed. If that's what you mean in your workflow, then you may just launch such a diff tool directly with the repo's base dir and use it stand-alone.
The current GeanyVC approach to create a local BASE~ copy of file under diff forces the diff tool into file-diff-mode (as opposed to version-diff-mode). This is more universal and allows GeanyVC to use the external diff tool even with those VCS that are not supported by the external tool.