From bcd159e5e9a20d289bbdd50494a512ffa730342e Mon Sep 17 00:00:00 2001 From: Michael Nottebrock Date: Tue, 1 May 2007 15:03:55 +0000 Subject: - Allow the '!' character in account passwords again (broken after the recent invalid-UTF8-codes fix). - Fix KDE Bug 126715 (frequent KMail crashes when sorting mail into IMAP folders). --- deskutils/kdepim3/Makefile | 2 +- deskutils/kdepim3/files/patch-kdepim-bug-126715 | 253 +++++++++++++++++++++++ deskutils/kdepim3/files/patch-kmail-utf8.diff | 15 ++ deskutils/kdepim4/Makefile | 2 +- deskutils/kdepim4/files/patch-kdepim-bug-126715 | 253 +++++++++++++++++++++++ deskutils/kdepim4/files/patch-kmail-utf8.diff | 15 ++ deskutils/kdepim44/Makefile | 2 +- deskutils/kdepim44/files/patch-kdepim-bug-126715 | 253 +++++++++++++++++++++++ deskutils/kdepim44/files/patch-kmail-utf8.diff | 15 ++ 9 files changed, 807 insertions(+), 3 deletions(-) create mode 100644 deskutils/kdepim3/files/patch-kdepim-bug-126715 create mode 100644 deskutils/kdepim3/files/patch-kmail-utf8.diff create mode 100644 deskutils/kdepim4/files/patch-kdepim-bug-126715 create mode 100644 deskutils/kdepim4/files/patch-kmail-utf8.diff create mode 100644 deskutils/kdepim44/files/patch-kdepim-bug-126715 create mode 100644 deskutils/kdepim44/files/patch-kmail-utf8.diff (limited to 'deskutils') diff --git a/deskutils/kdepim3/Makefile b/deskutils/kdepim3/Makefile index a743bcd0b80f..97eb74d0d2ce 100644 --- a/deskutils/kdepim3/Makefile +++ b/deskutils/kdepim3/Makefile @@ -7,7 +7,7 @@ PORTNAME= kdepim PORTVERSION= ${KDE_VERSION} -PORTREVISION= 2 +PORTREVISION= 3 CATEGORIES= deskutils mail news palm kde MASTER_SITES= ${MASTER_SITE_KDE} MASTER_SITE_SUBDIR= stable/${PORTVERSION:S/.0//}/src diff --git a/deskutils/kdepim3/files/patch-kdepim-bug-126715 b/deskutils/kdepim3/files/patch-kdepim-bug-126715 new file mode 100644 index 000000000000..e87079a41bbc --- /dev/null +++ b/deskutils/kdepim3/files/patch-kdepim-bug-126715 @@ -0,0 +1,253 @@ +--- 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( 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 ( 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 ( 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& 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(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(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* s_mainWidgetList; ++ bool mOpenedImapFolder; + }; + + #endif diff --git a/deskutils/kdepim3/files/patch-kmail-utf8.diff b/deskutils/kdepim3/files/patch-kmail-utf8.diff new file mode 100644 index 000000000000..89b2346b9dd5 --- /dev/null +++ b/deskutils/kdepim3/files/patch-kmail-utf8.diff @@ -0,0 +1,15 @@ +Index: kmaccount.cpp +=================================================================== +--- kmail/kmaccount.cpp (revision 656120) ++++ kmail/kmaccount.cpp (working copy) +@@ -399,7 +399,9 @@ QString KMAccount::encryptStr(const QStr + { + QString result; + for (uint i = 0; i < aStr.length(); i++) +- result += (aStr[i].unicode() < 0x20) ? aStr[i] : ++ /* yes, no typo. can't encode ' ' or '!' because ++ they're the unicode BOM. stupid scrambling. stupid. */ ++ result += (aStr[i].unicode() <= 0x21 ) ? aStr[i] : + QChar(0x1001F - aStr[i].unicode()); + return result; + } diff --git a/deskutils/kdepim4/Makefile b/deskutils/kdepim4/Makefile index a743bcd0b80f..97eb74d0d2ce 100644 --- a/deskutils/kdepim4/Makefile +++ b/deskutils/kdepim4/Makefile @@ -7,7 +7,7 @@ PORTNAME= kdepim PORTVERSION= ${KDE_VERSION} -PORTREVISION= 2 +PORTREVISION= 3 CATEGORIES= deskutils mail news palm kde MASTER_SITES= ${MASTER_SITE_KDE} MASTER_SITE_SUBDIR= stable/${PORTVERSION:S/.0//}/src diff --git a/deskutils/kdepim4/files/patch-kdepim-bug-126715 b/deskutils/kdepim4/files/patch-kdepim-bug-126715 new file mode 100644 index 000000000000..e87079a41bbc --- /dev/null +++ b/deskutils/kdepim4/files/patch-kdepim-bug-126715 @@ -0,0 +1,253 @@ +--- 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( 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 ( 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 ( 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& 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(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(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* s_mainWidgetList; ++ bool mOpenedImapFolder; + }; + + #endif diff --git a/deskutils/kdepim4/files/patch-kmail-utf8.diff b/deskutils/kdepim4/files/patch-kmail-utf8.diff new file mode 100644 index 000000000000..89b2346b9dd5 --- /dev/null +++ b/deskutils/kdepim4/files/patch-kmail-utf8.diff @@ -0,0 +1,15 @@ +Index: kmaccount.cpp +=================================================================== +--- kmail/kmaccount.cpp (revision 656120) ++++ kmail/kmaccount.cpp (working copy) +@@ -399,7 +399,9 @@ QString KMAccount::encryptStr(const QStr + { + QString result; + for (uint i = 0; i < aStr.length(); i++) +- result += (aStr[i].unicode() < 0x20) ? aStr[i] : ++ /* yes, no typo. can't encode ' ' or '!' because ++ they're the unicode BOM. stupid scrambling. stupid. */ ++ result += (aStr[i].unicode() <= 0x21 ) ? aStr[i] : + QChar(0x1001F - aStr[i].unicode()); + return result; + } diff --git a/deskutils/kdepim44/Makefile b/deskutils/kdepim44/Makefile index a743bcd0b80f..97eb74d0d2ce 100644 --- a/deskutils/kdepim44/Makefile +++ b/deskutils/kdepim44/Makefile @@ -7,7 +7,7 @@ PORTNAME= kdepim PORTVERSION= ${KDE_VERSION} -PORTREVISION= 2 +PORTREVISION= 3 CATEGORIES= deskutils mail news palm kde MASTER_SITES= ${MASTER_SITE_KDE} MASTER_SITE_SUBDIR= stable/${PORTVERSION:S/.0//}/src diff --git a/deskutils/kdepim44/files/patch-kdepim-bug-126715 b/deskutils/kdepim44/files/patch-kdepim-bug-126715 new file mode 100644 index 000000000000..e87079a41bbc --- /dev/null +++ b/deskutils/kdepim44/files/patch-kdepim-bug-126715 @@ -0,0 +1,253 @@ +--- 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( 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 ( 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 ( 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& 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(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(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* s_mainWidgetList; ++ bool mOpenedImapFolder; + }; + + #endif diff --git a/deskutils/kdepim44/files/patch-kmail-utf8.diff b/deskutils/kdepim44/files/patch-kmail-utf8.diff new file mode 100644 index 000000000000..89b2346b9dd5 --- /dev/null +++ b/deskutils/kdepim44/files/patch-kmail-utf8.diff @@ -0,0 +1,15 @@ +Index: kmaccount.cpp +=================================================================== +--- kmail/kmaccount.cpp (revision 656120) ++++ kmail/kmaccount.cpp (working copy) +@@ -399,7 +399,9 @@ QString KMAccount::encryptStr(const QStr + { + QString result; + for (uint i = 0; i < aStr.length(); i++) +- result += (aStr[i].unicode() < 0x20) ? aStr[i] : ++ /* yes, no typo. can't encode ' ' or '!' because ++ they're the unicode BOM. stupid scrambling. stupid. */ ++ result += (aStr[i].unicode() <= 0x21 ) ? aStr[i] : + QChar(0x1001F - aStr[i].unicode()); + return result; + } -- cgit v1.2.3