Avoid unessarcy EventLoop nesting.
EventLoops are a very expensive use of stack memmory. Additionally
deep nesting as was done in ProgressDialog can cause all sorts fun
problems. Only one loop is needed for the dialog itself to emulate exec.
To reenter it use EventLoop::ProcessEvents not a new event loop. Cancel now works without crashing.