summaryrefslogblamecommitdiff
path: root/deskutils/kdepim44/files/patch-kdepim-bug-126715
blob: e87079a41bbcbc07ead446e97d31f13d7109abf9 (plain) (tree)




























































































































































































































































                                                                                         
--- kmail/kmailicalifaceimpl.cpp	2007/03/09 17:06:16	640993
+++ kmail/kmailicalifaceimpl.cpp	2007/03/21 06:57:39	644873
@@ -555,6 +555,7 @@
 #endif
     }
   }
+  f->close();
   return aMap;
 }
 
--- kmail/kmcomposewin.cpp	2007/03/19 16:40:22	644271
+++ kmail/kmcomposewin.cpp	2007/03/21 06:57:39	644873
@@ -3928,12 +3928,11 @@
   if ( imapTheFolder && imapTheFolder->noContent() )
     imapTheFolder = 0;
 
-  if ( theFolder == 0 ) {
+  if ( theFolder == 0 )
     theFolder = ( mSaveIn==KMComposeWin::Drafts ?
                   kmkernel->draftsFolder() : kmkernel->templatesFolder() );
-  } else {
-    theFolder->open();
-  }
+
+  theFolder->open();
   kdDebug(5006) << k_funcinfo << "theFolder=" << theFolder->name() << endl;
   if ( imapTheFolder )
     kdDebug(5006) << k_funcinfo << "imapTheFolder=" << imapTheFolder->name() << endl;
@@ -3951,6 +3950,7 @@
     (static_cast<KMFolderImap*>( imapTheFolder->storage() ))->getFolder();
   }
 
+  theFolder->close();
   return sentOk;
 }
 
--- kmail/kmfolderimap.cpp	2007/03/16 21:54:53	643329
+++ kmail/kmfolderimap.cpp	2007/03/21 06:57:39	644873
@@ -109,13 +109,13 @@
 void KMFolderImap::close(bool aForced)
 {
   if (mOpenCount <= 0 ) return;
-  if (mOpenCount > 0) mOpenCount--;
-  if (mOpenCount > 0 && !aForced) return;
+  if (mOpenCount - 1 > 0 && !aForced) return;
   if (isSelected() && !aForced) {
       kdWarning(5006) << "Trying to close the selected folder " << label() <<
-          " - ignoring!" << endl;
+        " - ignoring! " << kdBacktrace() << endl;
       return;
   }
+  if (mOpenCount > 0) mOpenCount--;
   // FIXME is this still needed?
   if (mAccount)
     mAccount->ignoreJobsForFolder( folder() );
@@ -695,7 +695,6 @@
         KMFolderImap* f = static_cast<KMFolderImap*> ( fld->storage() );
         f->initializeFrom( this, mAccount->addPathToNamespace( name ),
             "inode/directory" );
-        f->close();
         if ( !mAccount->listOnlyOpenFolders() )
         {
           f->slotListResult( subfolderNames, subfolderPaths,
@@ -811,7 +810,6 @@
       KMFolder *fld = folder()->child()->createFolder(subfolderNames[i]);
       if ( fld ) {
         f = static_cast<KMFolderImap*> ( fld->storage() );
-        f->close();
         settingsChanged = true;
       } else {
         kdWarning(5006) << "can't create folder " << subfolderNames[i] << endl;
@@ -876,7 +874,6 @@
     if ( f )
     {
       f->folder()->setLabel( i18n("inbox") );
-      f->close();
     }
     kmkernel->imapFolderMgr()->contentsChanged();
   }
@@ -996,7 +993,6 @@
 {
   if (!mAccount) {
     emit folderComplete(this, false);
-    close();
     return;
   }
   KURL url = mAccount->getUrl();
@@ -1012,7 +1008,6 @@
     kdDebug(5006) << "KMFolderImap::checkValidity - got no connection" << endl;
     emit folderComplete(this, FALSE);
     mContentState = imapNoInformation;
-    close();
     return;
   } else if ( connectionState == ImapAccountBase::Connecting ) {
     // We'll wait for the connectionResult signal from the account. If it
@@ -1025,7 +1020,6 @@
   // Only check once at a time.
   if (mCheckingValidity) {
     kdDebug(5006) << "KMFolderImap::checkValidity - already checking" << endl;
-    close();
     return;
   }
   // otherwise we already are inside a mailcheck
@@ -1045,6 +1039,7 @@
   if ( account()->mailCheckProgressItem() ) {
     account()->mailCheckProgressItem()->setStatus( folder()->prettyURL() );
   }
+  open();
   ImapAccountBase::jobData jd( url.url() );
   KIO::SimpleJob *job = KIO::get(url, FALSE, FALSE);
   KIO::Scheduler::assignJobToSlave(mAccount->slave(), job);
@@ -1144,6 +1139,7 @@
       mMailCheckProgressItem->setCompletedItems( 0 );
     }
     reallyGetFolder(startUid);
+    close();
   }
 }
 
@@ -1178,6 +1174,7 @@
     mCheckFlags = TRUE;
   }
   checkValidity();
+  close();
 }
 
 
@@ -1189,7 +1186,6 @@
   {
     mContentState = imapNoInformation;
     emit folderComplete(this, FALSE);
-    close();
     return;
   }
   quiet(true);
@@ -1199,6 +1195,7 @@
       mMailCheckProgressItem->setStatus( i18n("Retrieving message status") );
     url.setPath(imapPath() + ";SECTION=UID FLAGS");
     KIO::SimpleJob *job = KIO::listDir(url, FALSE);
+    open();
     KIO::Scheduler::assignJobToSlave(mAccount->slave(), job);
     ImapAccountBase::jobData jd( url.url(), folder() );
     jd.cancellable = true;
@@ -1218,6 +1215,7 @@
     KIO::Scheduler::assignJobToSlave(mAccount->slave(), newJob);
     ImapAccountBase::jobData jd( url.url(), folder() );
     jd.cancellable = true;
+    open();
     mAccount->insertJob(newJob, jd);
     connect(newJob, SIGNAL(result(KIO::Job *)),
             this, SLOT(slotGetLastMessagesResult(KIO::Job *)));
@@ -1310,6 +1308,9 @@
   else sets = makeSets( (*it).items );
   mAccount->removeJob(it); // don't use *it below
 
+  if ( sets.isEmpty() )
+    close();
+
   // Now kick off the getting of envelopes for the new mails in the folder
   for (QStringList::Iterator i = sets.begin(); i != sets.end(); ++i)
   {
@@ -1812,6 +1813,7 @@
 
 void KMFolderImap::setStatus(QValueList<int>& ids, KMMsgStatus status, bool toggle)
 {
+  open();
   FolderStorage::setStatus(ids, status, toggle);
   if (mReadOnly) return;
 
@@ -1855,6 +1857,7 @@
     quiet( false );
     reallyGetFolder( QString::null );
   }
+  close();
 }
 
 //-----------------------------------------------------------------------------
--- kmail/kmheaders.cpp	2007/01/05 18:17:45	620346
+++ kmail/kmheaders.cpp	2007/03/21 06:57:39	644873
@@ -15,6 +15,7 @@
 #include "kmmsgdict.h"
 #include "kmdebug.h"
 #include "kmfoldertree.h"
+#include "kmfolderimap.h"
 #include "folderjob.h"
 using KMail::FolderJob;
 #include "actionscheduler.h"
@@ -215,6 +216,11 @@
   {
     writeFolderConfig();
     writeSortOrder();
+    if (mFolder->folderType() == KMFolderTypeImap)
+    {
+      KMFolderImap *imap = static_cast<KMFolderImap*>(mFolder->storage());
+      imap->setSelected( false );
+    }
     mFolder->close();
   }
   writeConfig();
--- kmail/kmmainwidget.cpp	2007/03/20 20:20:57	644741
+++ kmail/kmmainwidget.cpp	2007/03/21 06:57:39	644873
@@ -164,6 +164,7 @@
   mJob = 0;
   mConfig = config;
   mGUIClient = aGUIClient;
+  mOpenedImapFolder = false;
 
   mCustomReplyActionMenu = 0;
   mCustomReplyAllActionMenu = 0;
@@ -1875,8 +1876,11 @@
   folderSelected( mFolder );
   updateFolderMenu();
   // opened() before the getAndCheckFolder() in folderSelected
-  if ( mFolder && mFolder->folderType() == KMFolderTypeImap )
+  if ( mFolder && mFolder->folderType() == KMFolderTypeImap && mOpenedImapFolder )
+  {
     mFolder->close();
+    mOpenedImapFolder = false;
+  }
 }
 
 //-----------------------------------------------------------------------------
@@ -1930,6 +1934,12 @@
            this, SLOT( updateMarkAsReadAction() ) );
     disconnect( mFolder, SIGNAL( msgRemoved( KMFolder * ) ),
            this, SLOT( updateMarkAsReadAction() ) );
+    if ( mOpenedImapFolder && newFolder && mFolder->folderType() == KMFolderTypeImap ) {
+      mFolder->close();
+      KMFolderImap *imap = static_cast<KMFolderImap*>(mFolder->storage());
+      imap->setSelected( false );
+      mOpenedImapFolder = false;
+  }
   }
 
   mFolder = aFolder;
@@ -1944,6 +1954,7 @@
     if ( newFolder && !mFolder->noContent() )
     {
       imap->open(); // will be closed in the folderSelected slot
+      mOpenedImapFolder = true;
       // first get new headers before we select the folder
       imap->setSelected( true );
       connect( imap, SIGNAL( folderComplete( KMFolderImap*, bool ) ),
--- kmail/kmmainwidget.h	2006/12/16 03:44:17	614049
+++ kmail/kmmainwidget.h	2007/03/21 06:57:39	644873
@@ -531,6 +531,7 @@
   KXMLGUIClient *mGUIClient;
 
   static QValueList<KMMainWidget*>* s_mainWidgetList;
+  bool mOpenedImapFolder;
 };
 
 #endif