Calls to Gio.AppInfo.get_all() can perform quite a bit of I/O on the
calling thread. This can potentially stall the compositor if the disk
controller is saturated.
Instead we can call the new ShellAppCache which contains cached information
and performs all update I/O on a thread.
Notifications of changes work very similar to GAppInfoMonitor via the
ShellAppCache::changed() signal.