diff --git a/kmfoldermbox.cpp b/kmfoldermbox.cpp index badc3777a..8c011b94c 100644 --- a/kmfoldermbox.cpp +++ b/kmfoldermbox.cpp @@ -1053,7 +1053,8 @@ int KMFolderMbox::compact() if(!(msgs++ % 10)) { msgStr = i18n("Compacting folder: one message done", "Compacting folder: %n messages done", msgs); - emit statusMsg(msgStr); + if (!kernel->shuttingDown()) + emit statusMsg(msgStr); } mi = (KMMsgInfo*)mMsgList[idx]; msize = mi->msgSize(); diff --git a/kmkernel.cpp b/kmkernel.cpp index bf9071912..bebfba0e4 100644 --- a/kmkernel.cpp +++ b/kmkernel.cpp @@ -783,11 +783,81 @@ bool KMKernel::doSessionManagement() return false; // no, we were not restored } +void KMKernel::closeAllKMTopLevelWidgets() +{ + QPtrListIterator it(*KMainWindow::memberList); + KMainWindow *window = 0; + while ((window = it.current()) != 0) { + ++it; + if (window->inherits("KMTopLevelWidget")) + window->close(TRUE); + } +} + +void KMKernel::notClosedByUser() +{ + if (!closed_by_user) // already closed + return; + closed_by_user = false; + the_shuttingDown = true; + closeAllKMTopLevelWidgets(); + + delete the_acctMgr; + the_acctMgr = 0; + delete the_filterMgr; + the_filterMgr = 0; + delete the_msgSender; + the_msgSender = 0; + delete the_filterActionDict; + the_filterActionDict = 0; + delete the_undoStack; + the_undoStack = 0; + delete the_popFilterMgr; + the_popFilterMgr = 0; + + QStringList strList; + QValueList > folders; + KMFolder *folder; + the_folderMgr->createFolderList(&strList, &folders); + for (int i = 0; folders.at(i) != folders.end(); i++) + { + folder = *folders.at(i); + if (!folder || folder->isDir()) continue; + folder->close(TRUE); + } + strList.clear(); + folders.clear(); + the_searchFolderMgr->createFolderList(&strList, &folders); + for (int i = 0; folders.at(i) != folders.end(); i++) + { + folder = *folders.at(i); + if (!folder || folder->isDir()) continue; + folder->close(TRUE); + } + folderMgr()->writeMsgDict(msgDict()); + imapFolderMgr()->writeMsgDict(msgDict()); + delete the_msgIndex; + the_msgIndex = 0; + delete the_folderMgr; + the_folderMgr = 0; + delete the_imapFolderMgr; + the_imapFolderMgr = 0; + delete the_searchFolderMgr; + the_searchFolderMgr = 0; + delete the_msgDict; + the_msgDict = 0; + delete mConfigureDialog; + mConfigureDialog = 0; + delete mWin; + mWin = 0; +} + void KMKernel::cleanup(void) { dumpDeadLetters(); mDeadLetterTimer->stop(); the_shuttingDown = TRUE; + closeAllKMTopLevelWidgets(); delete the_acctMgr; the_acctMgr = 0; @@ -1208,70 +1278,6 @@ void KMKernel::slotShowConfigurationDialog() mConfigureDialog->raise(); } -void KMKernel::notClosedByUser() -{ - if (!closed_by_user) // already closed - return; - closed_by_user = false; - the_shuttingDown = true; - QPtrListIterator it(*KMainWindow::memberList); - KMainWindow *window = 0; - while ((window = it.current()) != 0) { - ++it; - if (window->inherits("KMTopLevelWidget")) - window->close(TRUE); - } - - delete the_acctMgr; - the_acctMgr = 0; - delete the_filterMgr; - the_filterMgr = 0; - delete the_msgSender; - the_msgSender = 0; - delete the_filterActionDict; - the_filterActionDict = 0; - delete the_undoStack; - the_undoStack = 0; - delete the_popFilterMgr; - the_popFilterMgr = 0; - - QStringList strList; - QValueList > folders; - KMFolder *folder; - the_folderMgr->createFolderList(&strList, &folders); - for (int i = 0; folders.at(i) != folders.end(); i++) - { - folder = *folders.at(i); - if (!folder || folder->isDir()) continue; - folder->close(TRUE); - } - strList.clear(); - folders.clear(); - the_searchFolderMgr->createFolderList(&strList, &folders); - for (int i = 0; folders.at(i) != folders.end(); i++) - { - folder = *folders.at(i); - if (!folder || folder->isDir()) continue; - folder->close(TRUE); - } - folderMgr()->writeMsgDict(msgDict()); - imapFolderMgr()->writeMsgDict(msgDict()); - delete the_msgIndex; - the_msgIndex = 0; - delete the_folderMgr; - the_folderMgr = 0; - delete the_imapFolderMgr; - the_imapFolderMgr = 0; - delete the_searchFolderMgr; - the_searchFolderMgr = 0; - delete the_msgDict; - the_msgDict = 0; - delete mConfigureDialog; - mConfigureDialog = 0; - delete mWin; - mWin = 0; -} - void KMKernel::emergencyExit( const QString& reason ) { QString mesg = i18n("KMail encountered a fatal error and will " diff --git a/kmkernel.h b/kmkernel.h index 45c76b964..02c9ea278 100644 --- a/kmkernel.h +++ b/kmkernel.h @@ -117,6 +117,8 @@ public: void testDir(const char *_name); void recoverDeadLetters(void); void initFolders(KConfig* cfg); + void closeAllKMTopLevelWidgets(); + void notClosedByUser(); void cleanup(void); void quit(); void transferMail(void); @@ -168,7 +170,6 @@ public: bool shuttingDown() { return the_shuttingDown; } void setShuttingDown(bool flag) { the_shuttingDown = flag; } void serverReady (bool flag) { the_server_is_ready = flag; } - void notClosedByUser(); void emergencyExit( const QString& reason );