How about an easy solution. Trigger project A if there is a change in the repository for A or B. Project B will never be triggered by a SCM change, but always after A was build. This might cost you a little bit more space on disk and a little bit more time for checkout. But it is simple and straight forward. No timer, it will only build when triggered through SCM.
You could opt for shared workspace, but I would opt out from this option since you need to synchronize the two jobs, so that they never run in parallel. I would instead use the clone workspace plugin, to copy the workspace from A to B (you will only get the last one (by default, the last successful one), but you will get it even if there is a currently a new build.
Depending on who is responsible for the two projects (distinct teams or one team for both) you can also combine the two builds into one job.