From kde-core-devel Mon May 23 11:31:50 2005 From: Matthias Ettrich Date: Mon, 23 May 2005 11:31:50 +0000 To: kde-core-devel Subject: Re: Qt4 & enter/exit modal functions Message-Id: <200505231331.50734.ettrich () trolltech ! com> X-MARC-Message: https://marc.info/?l=kde-core-devel&m=111684829317602 On Monday 16 May 2005 14:26, Lars Knoll wrote: > On Sunday 15 May 2005 13:52, Hamish Rodda wrote: > > Hi, > > > > In the course of porting kdelibs to Qt4, we've come across the > > no-longer-available qt_enter_modal and qt_leave_modal functions, which > > were internal to qt and accessed via defines in the files which wanted to > > use them. > > > > The functionality seems to have been moved to QApplicationPrivate > > (enterModal and leaveModal), and the quick & dirty patch to change our > > code to this is attached. However, this introduces a dependancy on > > internal headers which is no good if the internal headers ever have a BIC > > change during KDE4. > > > > So, does anyone know a better way to do this? And, is it ok to commit > > this in the interim, because it holds back quite a bit from > > compilation... > > What about using QEventLoop::processEvents(QEventLoop::ExcludeUserInput)? > Would that be enough for you? The KDE code fakes a modal event using private API and then calls QApplication::enter_loop(). enter_loop() is an obsolete function, it does the following: QEventLoop eventLoop; eventLoop.exec(); Hamish, if you drop the idea of faking a modal widget and simply do QEventLoop eventLoop; connect(this, SIGNAL(leaveModality()), &eventLoop, SLOT(quit())); eventLoop.exec(QEventLoop::ExcludeUserInputEvents); you should get exactly want you want. Emit the leaveModality() signal when you are done, and the temporary event loop will terminate. Matthias