Hum, didn't I comment on this?
Looks mostly good, but for the part where a plugin might want to react to that signal to restore the non-project values, in which case Geany still behaving like a project is open might be problematic. I don't think plugins from GP would currently suffer from that, but show knows. For example Project Organizer checks for the Geany project there, but fortunately it also check for its internal project pointer which is reset to NULL just before, but it's close to affect it.
So maybe we should have a `project-before-close` signal instead, although it ain't so pretty.