diff -Nur kdepim-3.5.7/kmail/folderstorage.cpp kdepim-3.5.7.new/kmail/folderstorage.cpp --- kdepim-3.5.7/kmail/folderstorage.cpp 2007-06-05 15:19:40.000000000 +0300 +++ kdepim-3.5.7.new/kmail/folderstorage.cpp 2007-06-05 15:22:24.000000000 +0300 @@ -84,8 +84,6 @@ mHasChildren = HasNoChildren; mContentsType = KMail::ContentsTypeMail; - - connect(this, SIGNAL(closed(KMFolder*)), mFolder, SIGNAL(closed())); } //----------------------------------------------------------------------------- @@ -630,7 +628,7 @@ QString oldLoc, oldIndexLoc, oldIdsLoc, newLoc, newIndexLoc, newIdsLoc; QString oldSubDirLoc, newSubDirLoc; QString oldName; - int rc=0; + int rc=0, openCount=mOpenCount; KMFolderDir *oldParent; assert(!newName.isEmpty()); @@ -700,6 +698,11 @@ } } + if (openCount > 0) + { + open("rename"); + mOpenCount = openCount; + } writeConfig(); // delete the old entry as we get two entries with the same ID otherwise @@ -709,7 +712,6 @@ emit locationChanged( oldLoc, newLoc ); emit nameChanged(); kmkernel->folderMgr()->contentsChanged(); - emit closed(folder()); // let the ticket owners regain return rc; } @@ -737,7 +739,6 @@ KConfig* config = KMKernel::config(); config->deleteGroup( "Folder-" + folder()->idString() ); - emit closed(folder()); emit removed(folder(), (rc ? false : true)); } @@ -745,6 +746,8 @@ //----------------------------------------------------------------------------- int FolderStorage::expunge() { + int openCount = mOpenCount; + assert(!folder()->name().isEmpty()); clearIndex( true, mExportsSernums ); // delete and remove from dict, if needed @@ -762,6 +765,12 @@ mDirty = false; needsCompact = false; //we're cleared and truncated no need to compact + if (openCount > 0) + { + open("expunge"); + mOpenCount = openCount; + } + mUnreadMsgs = 0; mTotalMsgs = 0; emit numUnreadMsgsChanged( folder() ); diff -Nur kdepim-3.5.7/kmail/folderstorage.h kdepim-3.5.7.new/kmail/folderstorage.h --- kdepim-3.5.7/kmail/folderstorage.h 2007-05-14 10:54:39.000000000 +0300 +++ kdepim-3.5.7.new/kmail/folderstorage.h 2007-06-05 15:24:10.000000000 +0300 @@ -418,9 +418,6 @@ emmitted first. */ void expunged( KMFolder* ); - /** Emitted when the folder was closed and ticket owners have to reopen */ - void closed( KMFolder* ); - /** Emitted when the serial numbers of this folder were invalidated. */ void invalidated( KMFolder * ); diff -Nur kdepim-3.5.7/kmail/kmfolder.cpp kdepim-3.5.7.new/kmail/kmfolder.cpp --- kdepim-3.5.7/kmail/kmfolder.cpp 2007-06-05 15:19:40.000000000 +0300 +++ kdepim-3.5.7.new/kmail/kmfolder.cpp 2007-06-05 15:26:11.000000000 +0300 @@ -476,7 +476,6 @@ void KMFolder::close( const char *owner, bool force ) { - // do not emit closed() in here - as this would regain too early mStorage->close( owner, force ); } diff -Nur kdepim-3.5.7/kmail/kmfolder.h kdepim-3.5.7.new/kmail/kmfolder.h --- kdepim-3.5.7/kmail/kmfolder.h 2007-05-14 10:54:39.000000000 +0300 +++ kdepim-3.5.7.new/kmail/kmfolder.h 2007-06-05 15:27:08.000000000 +0300 @@ -537,10 +537,6 @@ folder changed. */ void changed(); - /** Emitted when the folder is closed for real - ticket holders should - * discard any messages */ - void closed(); - /** Emitted when the contents of a folder have been cleared (new search in a search folder, for example) */ void cleared(); diff -Nur kdepim-3.5.7/kmail/kmfoldermbox.cpp kdepim-3.5.7.new/kmail/kmfoldermbox.cpp --- kdepim-3.5.7/kmail/kmfoldermbox.cpp 2007-05-14 10:54:39.000000000 +0300 +++ kdepim-3.5.7.new/kmail/kmfoldermbox.cpp 2007-06-05 15:27:40.000000000 +0300 @@ -1246,11 +1246,17 @@ { // This is called only when the user explicitely requests compaction, // so we don't check needsCompact. + int openCount = mOpenCount; KMail::MboxCompactionJob* job = new KMail::MboxCompactionJob( folder(), true /*immediate*/ ); int rc = job->executeNow( silent ); // Note that job autodeletes itself. + if (openCount > 0) + { + open("mboxcompact"); + mOpenCount = openCount; + } // If this is the current folder, the changed signal will ultimately call // KMHeaders::setFolderInfoStatus which will override the message, so save/restore it QString statusMsg = BroadcastStatus::instance()->statusMsg(); diff -Nur kdepim-3.5.7/kmail/kmheaders.cpp kdepim-3.5.7.new/kmail/kmheaders.cpp --- kdepim-3.5.7/kmail/kmheaders.cpp 2007-06-05 15:19:40.000000000 +0300 +++ kdepim-3.5.7.new/kmail/kmheaders.cpp 2007-06-05 15:28:12.000000000 +0300 @@ -673,8 +673,6 @@ this, SLOT(folderCleared())); disconnect(mFolder, SIGNAL(expunged( KMFolder* )), this, SLOT(folderCleared())); - disconnect(mFolder, SIGNAL(closed()), - this, SLOT(folderClosed())); disconnect( mFolder, SIGNAL( statusMsg( const QString& ) ), BroadcastStatus::instance(), SLOT( setStatusMsg( const QString& ) ) ); disconnect(mFolder, SIGNAL(viewConfigChanged()), this, SLOT(reset())); @@ -708,8 +706,6 @@ this, SLOT(folderCleared())); connect(mFolder, SIGNAL(expunged( KMFolder* )), this, SLOT(folderCleared())); - connect(mFolder, SIGNAL(closed()), - this, SLOT(folderClosed())); connect(mFolder, SIGNAL(statusMsg(const QString&)), BroadcastStatus::instance(), SLOT( setStatusMsg( const QString& ) ) ); connect(mFolder, SIGNAL(numUnreadMsgsChanged(KMFolder*)), @@ -2565,13 +2561,6 @@ emit selected(0); } - -void KMHeaders::folderClosed() -{ - mFolder->open( "kmheaders" ); - folderCleared(); -} - bool KMHeaders::writeSortOrder() { QString sortFile = KMAIL_SORT_FILE(mFolder); diff -Nur kdepim-3.5.7/kmail/kmheaders.h kdepim-3.5.7.new/kmail/kmheaders.h --- kdepim-3.5.7/kmail/kmheaders.h 2007-05-14 10:54:39.000000000 +0300 +++ kdepim-3.5.7.new/kmail/kmheaders.h 2007-06-05 15:28:35.000000000 +0300 @@ -221,8 +221,6 @@ void msgChanged(); /** For when the folder has been cleared */ void folderCleared(); - /** For when the folder has been cleared */ - void folderClosed(); /** For when the message with the given message id has been added to a folder */ void msgAdded(int); /** For when the message with the given id has been removed for a folder */