> > > > I personally believe that nested event loops are always evil. > > In this case I'd completely stop the export, let the gui pop up > > the dialog, and on confirmation re-initiate the export process > > with a 'force' flag or such. > > I think the necessity of bidirectional core-gui communication would > be gone, if the core were driven by the gui, not the other way round:
Yes, this would give us a clean solution with a asymmetric, master/slave (gui/worker) thread organization. But I've tried the "wait for the gui response" ansatz, because I hope that I have to change less code. And I assume your idea would end in a redesign of several part of LyX. > In core (pseudo code): > > Result Buffer::export(File file) > { > // No Gui code here. > if (file.exists()) > return FileExistsError; > doTheExport(); > return EverythingOk; > } > > In gui: > > void Foo::export(File file) > { > if (file.exists()) { > ConfirmOverwriteDialog dialog; > if (dialog.exec() == NotConfirmed) > return; > file.remove(); > } > if (buffer.export() != EverythingOk) { > ProblemDialog dialog; > dialog.exec(); > } > } > > and in the server: > > void Bar::export(File) > { > if (file.exists()) { > if (!forceFlagWasGiven()) > return FileExistsError; > file.remove(); > } > if (buffer.export() != EverythingOk) > bark(); > } > > Andre' -- GMX DSL Doppel-Flat ab 19,99 €/mtl.! Jetzt auch mit gratis Notebook-Flat! http://portal.gmx.net/de/go/dsl