author | sandman <sandman> | 2002-07-28 00:44:43 (UTC) |
---|---|---|
committer | sandman <sandman> | 2002-07-28 00:44:43 (UTC) |
commit | 72081cbfef03a69ed6f9ca7826854b6cf10dc2fe (patch) (side-by-side diff) | |
tree | 43e67bdc7cbb972f431b3912e2f068df3d2c97bf /core/launcher/desktop.cpp | |
parent | 4baf36396739502c5471950e29f18954cca4517b (diff) | |
download | opie-72081cbfef03a69ed6f9ca7826854b6cf10dc2fe.zip opie-72081cbfef03a69ed6f9ca7826854b6cf10dc2fe.tar.gz opie-72081cbfef03a69ed6f9ca7826854b6cf10dc2fe.tar.bz2 |
Workaround for a weird Qt/E bug, resulting in qpe hanging if clipboard
applet is loaded and qpe is terminated via shutdown applet.
-rw-r--r-- | core/launcher/desktop.cpp | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/core/launcher/desktop.cpp b/core/launcher/desktop.cpp index e58b08c..f90da1a 100644 --- a/core/launcher/desktop.cpp +++ b/core/launcher/desktop.cpp @@ -665,48 +665,54 @@ void Desktop::styleChange( QStyle &s ) void DesktopApplication::shutdown() { if ( type() != GuiServer ) return; ShutdownImpl *sd = new ShutdownImpl( 0, 0, WDestructiveClose ); connect( sd, SIGNAL(shutdown(ShutdownImpl::Type)), this, SLOT(shutdown(ShutdownImpl::Type)) ); sd->showMaximized(); } void DesktopApplication::shutdown( ShutdownImpl::Type t ) { switch ( t ) { case ShutdownImpl::ShutdownSystem: execlp("shutdown", "shutdown", "-h", "now", (void*)0); break; case ShutdownImpl::RebootSystem: execlp("shutdown", "shutdown", "-r", "now", (void*)0); break; case ShutdownImpl::RestartDesktop: restart(); break; case ShutdownImpl::TerminateDesktop: prepareForTermination(FALSE); + + // This is a workaround for a Qt bug + // clipboard applet has to stop its poll timer, or Qt/E + // will hang on quit() right before it emits aboutToQuit() + emit aboutToQuit ( ); + quit(); break; } } void DesktopApplication::restart() { prepareForTermination(TRUE); #ifdef Q_WS_QWS for ( int fd = 3; fd < 100; fd++ ) close( fd ); #if defined(QT_DEMO_SINGLE_FLOPPY) execl( "/sbin/init", "qpe", 0 ); #elif defined(QT_QWS_CASSIOPEIA) execl( "/bin/sh", "sh", 0 ); #else execl( (qpeDir()+"/bin/qpe").latin1(), "qpe", 0 ); #endif exit(1); #endif } void Desktop::startTransferServer() |