merge SVN commit 647870 by coolo:

do not munge with open counts, but simply close and let
ticket owners reopen on closed( ) signal

svn path=/branches/KDE/3.5/kdepim/; revision=650963
wilder-work
Allen Winter 19 years ago
parent cb3c23e413
commit 16e53873f8
  1. 19
      folderstorage.cpp
  2. 3
      folderstorage.h
  3. 1
      kmfolder.cpp
  4. 4
      kmfolder.h
  5. 8
      kmfoldermbox.cpp
  6. 11
      kmheaders.cpp
  7. 2
      kmheaders.h

@ -84,6 +84,8 @@ FolderStorage::FolderStorage( KMFolder* folder, const char* aName )
mHasChildren = HasNoChildren;
mContentsType = KMail::ContentsTypeMail;
connect(this, SIGNAL(closed(KMFolder*)), mFolder, SIGNAL(closed()));
}
//-----------------------------------------------------------------------------
@ -627,7 +629,7 @@ int FolderStorage::rename(const QString& newName, KMFolderDir *newParent)
QString oldLoc, oldIndexLoc, oldIdsLoc, newLoc, newIndexLoc, newIdsLoc;
QString oldSubDirLoc, newSubDirLoc;
QString oldName;
int rc=0, openCount=mOpenCount;
int rc=0;
KMFolderDir *oldParent;
assert(!newName.isEmpty());
@ -697,11 +699,6 @@ int FolderStorage::rename(const QString& newName, KMFolderDir *newParent)
}
}
if (openCount > 0)
{
open("rename");
mOpenCount = openCount;
}
writeConfig();
// delete the old entry as we get two entries with the same ID otherwise
@ -711,6 +708,7 @@ int FolderStorage::rename(const QString& newName, KMFolderDir *newParent)
emit locationChanged( oldLoc, newLoc );
emit nameChanged();
kmkernel->folderMgr()->contentsChanged();
emit closed(folder()); // let the ticket owners regain
return rc;
}
@ -738,6 +736,7 @@ void FolderStorage::remove()
KConfig* config = KMKernel::config();
config->deleteGroup( "Folder-" + folder()->idString() );
emit closed(folder());
emit removed(folder(), (rc ? false : true));
}
@ -745,8 +744,6 @@ void FolderStorage::remove()
//-----------------------------------------------------------------------------
int FolderStorage::expunge()
{
int openCount = mOpenCount;
assert(!folder()->name().isEmpty());
clearIndex( true, mExportsSernums ); // delete and remove from dict, if needed
@ -764,12 +761,6 @@ int FolderStorage::expunge()
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() );

@ -421,6 +421,9 @@ signals:
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 * );

@ -481,6 +481,7 @@ int KMFolder::canAccess()
void KMFolder::close( const char *owner, bool force )
{
// do not emit closed() in here - as this would regain too early
mStorage->close( owner, force );
}

@ -540,6 +540,10 @@ signals:
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();

@ -264,7 +264,7 @@ void KMFolderMbox::close(const char *owner, bool aForced)
if (mOpenCount <= 0 || !mStream) { mOpenCount = 0; return; }
if (mOpenCount > 0) mOpenCount--;
if (mOpenCount > 0 && !aForced) { assert(mStream); return; }
#if 0 // removed hack that prevented closing system folders (see kmail-devel discussion about mail expiring)
if ( (folder() != kmkernel->inboxFolder())
&& folder()->isSystemFolder() && !aForced )
@ -1269,17 +1269,11 @@ int KMFolderMbox::compact( bool silent )
{
// 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();

@ -673,6 +673,8 @@ void KMHeaders::setFolder( KMFolder *aFolder, bool forceJumpToUnread )
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()));
@ -706,6 +708,8 @@ void KMHeaders::setFolder( KMFolder *aFolder, bool forceJumpToUnread )
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*)),
@ -2562,6 +2566,13 @@ void KMHeaders::folderCleared()
emit selected(0);
}
void KMHeaders::folderClosed()
{
mFolder->open( "kmheaders" );
folderCleared();
}
bool KMHeaders::writeSortOrder()
{
QString sortFile = KMAIL_SORT_FILE(mFolder);

@ -221,6 +221,8 @@ public slots:
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 */

Loading…
Cancel
Save