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.
Showing with 19 additions and 10 deletions