I was about to merge, but spotted a potential bug: in the unlikely case `closing_call` (that's *not* quitting, which mislead me) is set when the idle callback runs, it would fail to rested the callback ID yet remove the callback. This could lead to failing to trigger the callback (if next run is `opening_session_files`, unlikely I guess -- didn't check), or trying to remove an invalid (or worse, reused) callback ID.
All I changed is that the ID is properly reset in this case too -- any time the callback returns `G_SOURCE_REMOVE`.