[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kmail-devel
Subject:    Patch for review
From:       Severin Greimel <greimel-kde () fs-pw ! uni-muenchen ! de>
Date:       2003-11-11 11:52:04
[Download RAW message or body]

Hi,

here's a patch I'd like you to review.

First, it addresses the handling of IMAP account system folders 
(inbox, sent-mail, etc.):

- Give them the appropriate icons
- Since IMAP account sent-mail folders can have subfolders, use
  the sent-mail icon for these, too

Second, as far as I can tell, the setting of the mUserWhoField of 
KMFolder didn't work correctly for local folders, because 
KMFolder::setUserWhoField() depends on KMKernel::the_inboxFolder 
and the like to be initialized. But this initialization happens 
in KMKernel::initFolders(), which gets called after the 
KMFolderMgr calls in KMKernel::init() have already caused 
KMFolder::setUserWhoField() to be called. I fixed this by 
calling KMFolder::setUserWhoField() again for these folders in 
KMKernel::initFolders(). (Maybe I should have rephrased that 
paragraph somehow...)

Third, there is a possibly troublesome change. I've taken away 
the "folderIsXYFolder" methods from KMKernel, and given them to 
KMFolder. It may well be that this is too much of a design 
change and that I'm still lacking the big picture that led to 
the current design, but it seemed sensible to me.

And finally, small changes regarding i18n and the addition of a 
RMB menu item "Synchronize" for disconnected IMAP accounts.

I'd appreciate any feedback. I admit that I've been looking into 
the KMail code for not more than three days now, so if you think 
I should not bother you with patches without getting more into 
it first, I'd appreciate that information as well :)

Thanks,

Severin

["kmail.diff" (text/x-diff)]

Index: actionscheduler.cpp
===================================================================
RCS file: /home/kde/kdepim/kmail/actionscheduler.cpp,v
retrieving revision 1.2
diff -u -3 -p -r1.2 actionscheduler.cpp
--- actionscheduler.cpp	29 Oct 2003 02:19:14 -0000	1.2
+++ actionscheduler.cpp	11 Nov 2003 11:36:16 -0000
@@ -558,7 +558,7 @@ void ActionScheduler::moveMessage()
   mSrcFolder->addMsg( msg );
   mIgnore = false;
 
-  if (msg && kmkernel->folderIsTrash( folder ))
+  if (msg && folder->isTrashFolder())
     KMFilterAction::sendMDN( msg, KMime::MDN::Deleted );
 
   KMCommand *cmd = new KMMoveCommand( folder, msg );
Index: kmcommands.cpp
===================================================================
RCS file: /home/kde/kdepim/kmail/kmcommands.cpp,v
retrieving revision 1.86
diff -u -3 -p -r1.86 kmcommands.cpp
--- kmcommands.cpp	11 Nov 2003 01:49:41 -0000	1.86
+++ kmcommands.cpp	11 Nov 2003 11:36:18 -0000
@@ -500,7 +500,7 @@ void KMEditMsgCommand::execute()
 {
   KMMessage *msg = retrievedMessage();
   if (!msg || !msg->parent() ||
-      !kmkernel->folderIsDraftOrOutbox( msg->parent() ))
+      !msg->parent()->isDraftOrOutboxFolder() )
     return;
 
   msg->parent()->removeMsg( msg->parent()->find( msg ) );
Index: kmfiltermgr.cpp
===================================================================
RCS file: /home/kde/kdepim/kmail/kmfiltermgr.cpp,v
retrieving revision 1.58
diff -u -3 -p -r1.58 kmfiltermgr.cpp
--- kmfiltermgr.cpp	6 Nov 2003 09:25:56 -0000	1.58
+++ kmfiltermgr.cpp	11 Nov 2003 11:36:18 -0000
@@ -134,7 +134,7 @@ bool KMFilterMgr::beginFiltering(KMMsgBa
 int KMFilterMgr::moveMessage(KMMessage *msg) const
 {
   if (MessageProperty::filterFolder(msg)->moveMsg( msg ) == 0) {
-    if ( kmkernel->folderIsTrash( MessageProperty::filterFolder( msg )))
+    if ( MessageProperty::filterFolder( msg )->isTrashFolder() )
       KMFilterAction::sendMDN( msg, KMime::MDN::Deleted );
   } else {
     kdDebug(5006) << "KMfilterAction - couldn't move msg" << endl;
Index: kmfoldercachedimap.cpp
===================================================================
RCS file: /home/kde/kdepim/kmail/kmfoldercachedimap.cpp,v
retrieving revision 1.33
diff -u -3 -p -r1.33 kmfoldercachedimap.cpp
--- kmfoldercachedimap.cpp	3 Nov 2003 10:42:25 -0000	1.33
+++ kmfoldercachedimap.cpp	11 Nov 2003 11:36:19 -0000
@@ -114,7 +114,7 @@ KMFolderCachedImap::KMFolderCachedImap( 
   if (mImapPath.isEmpty()) mImapPath = config->readEntry("ImapPath");
   if (aName == "INBOX" && mImapPath == "/INBOX/")
   {
-    //mLabel = i18n("inbox");
+    mLabel = i18n("inbox");
   }
   mIsSystemFolder = false;
   mNoContent = config->readBoolEntry("NoContent", FALSE);
@@ -353,6 +353,31 @@ int KMFolderCachedImap::rename( const QS
   CachedImapJob *job = new CachedImapJob( aName, CachedImapJob::tRenameFolder, this \
);  job->start();
   return 0;
+}
+
+//-----------------------------------------------------------------------------
+bool KMFolderCachedImap::isInboxFolder()
+{
+  if ( QString( type() ) == "In" ) return true;
+
+  if( mImapPath == "/INBOX/" ) {
+    setType("In");
+    return true;
+  }
+
+  return false;
+}
+
+bool KMFolderCachedImap::isTrashFolder()
+{
+  if ( QString( type() ) == "Tr" ) return true;
+
+  if (account() && account()->trash() == idString()) {
+    setType("Tr");
+    return true;
+  }
+
+  return false;
 }
 
 void KMFolderCachedImap::setLastUid( ulong uid )
Index: kmfolder.cpp
===================================================================
RCS file: /home/kde/kdepim/kmail/kmfolder.cpp,v
retrieving revision 1.293
diff -u -3 -p -r1.293 kmfolder.cpp
--- kmfolder.cpp	11 Nov 2003 07:14:21 -0000	1.293
+++ kmfolder.cpp	11 Nov 2003 11:36:19 -0000
@@ -777,12 +777,102 @@ const char* KMFolder::type() const
   return KMFolderNode::type();
 }
 
+bool KMFolder::isInboxFolder()
+{
+  if ( QString( type() ) == "In" ) return true;
+
+  if ( this == kmkernel->inboxFolder() ) {
+    setType("In");
+    return true;
+  }
+
+  return false;
+}
+
+bool KMFolder::isOutboxFolder()
+{
+  if ( QString( type() ) == "Out" ) return true;
+
+  if ( this == kmkernel->outboxFolder() ) {
+    setType( "Out" );
+    return true;
+  }
+
+  return false;
+}
+
+bool KMFolder::isSentMailFolder( bool includeSubFolders )
+{
+  if ( (includeSubFolders && QString( type() ) == "StS") || QString( type() ) == \
"St" ) +    return true;
+
+  if ( this == kmkernel->sentFolder() ) {
+    setType("St");
+    return true;
+  }
+
+  QString idString = this->idString();
+
+  if ( idString.isEmpty() ) return false;
+
+  // search the identities if the folder matches the sent-folder
+  const IdentityManager * im = kmkernel->identityManager();
+  for( IdentityManager::ConstIterator it = im->begin(); it != im->end(); ++it )
+    if ( (*it).fcc() == idString ) {
+      setType("St");
+      return true;
+    }
+
+  return false;
+}
+
+bool KMFolder::isDraftsFolder()
+{
+  if ( QString( type() ) == "Df" ) return true;
+
+  if ( this == kmkernel->draftsFolder() ) {
+    setType("Df");
+    return true;
+  }
+
+  QString idString = this->idString();
+  if ( idString.isEmpty() ) return false;
+
+  // search the identities if the folder matches the draft folder
+  const IdentityManager * im = kmkernel->identityManager();
+  for( IdentityManager::ConstIterator it = im->begin(); it != im->end(); ++it )
+    if ( (*it).drafts() == idString ) {
+      setType("Df");
+      return true;
+    }
+
+  return false;
+
+}
+
+bool KMFolder::isDraftOrOutboxFolder()
+{
+  return ( isDraftsFolder() || isOutboxFolder() );
+}
+
+bool KMFolder::isTrashFolder()
+{
+  if ( QString( type() ) == "Tr" ) return true;
+
+  if (this == kmkernel->trashFolder() ) {
+    setType("Tr");
+    return true;
+  }
+
+  return false;
+}
+
 
 //-----------------------------------------------------------------------------
 QString KMFolder::label() const
 {
   if (mIsSystemFolder && !mLabel.isEmpty()) return mLabel;
-  if (mIsSystemFolder) return i18n(name().latin1());
+  if (mIsSystemFolder) return i18n(name().utf8());
   return name();
 }
 
@@ -1027,17 +1117,7 @@ void KMFolder::setUserWhoField(const QSt
   if ( whoField.isEmpty() )
   {
     // default setting
-    const KMIdentity & identity =
-      kmkernel->identityManager()->identityForUoidOrDefault( mIdentity );
-
-    if ( mIsSystemFolder && folderType() != KMFolderTypeImap )
-    {
-      // local system folders
-      if ( this == kmkernel->inboxFolder() || this == kmkernel->trashFolder() ) \
                mWhoField = "From";
-      if ( this == kmkernel->outboxFolder() || this == kmkernel->sentFolder() || \
                this == kmkernel->draftsFolder() ) mWhoField = "To";
-
-    } else if ( identity.drafts() == idString() || identity.fcc() == idString() ) {
-      // drafts or sent of the identity
+    if ( isOutboxFolder() || isDraftsFolder() || isSentMailFolder() ) {
       mWhoField = "To";
     } else {
       mWhoField = "From";
Index: kmfolderimap.cpp
===================================================================
RCS file: /home/kde/kdepim/kmail/kmfolderimap.cpp,v
retrieving revision 1.143
diff -u -3 -p -r1.143 kmfolderimap.cpp
--- kmfolderimap.cpp	8 Nov 2003 14:19:35 -0000	1.143
+++ kmfolderimap.cpp	11 Nov 2003 11:36:20 -0000
@@ -109,6 +109,31 @@ KMMessage* KMFolderImap::getMsg(int idx)
 }
 
 //-----------------------------------------------------------------------------
+bool KMFolderImap::isInboxFolder()
+{
+  if ( QString( type() ) == "In" ) return true;
+
+  if( mImapPath == "/INBOX/" ) {
+    setType("In");
+    return true;
+  }
+
+  return false;
+}
+
+bool KMFolderImap::isTrashFolder()
+{
+  if ( QString( type() ) == "Tr" ) return true;
+
+  if (account() && account()->trash() == idString()) {
+    setType("Tr");
+    return true;
+  }
+
+  return false;
+}
+
+//-----------------------------------------------------------------------------
 void KMFolderImap::setAccount(KMAcctImap *aAccount)
 {
   mAccount = aAccount;
Index: kmfoldermaildir.cpp
===================================================================
RCS file: /home/kde/kdepim/kmail/kmfoldermaildir.cpp,v
retrieving revision 1.70
diff -u -3 -p -r1.70 kmfoldermaildir.cpp
--- kmfoldermaildir.cpp	19 Oct 2003 17:07:54 -0000	1.70
+++ kmfoldermaildir.cpp	11 Nov 2003 11:36:20 -0000
@@ -340,7 +340,7 @@ if( fileD0.open( IO_WriteOnly ) ) {
   msgParent = aMsg->parent();
   if (msgParent)
   {
-    if (msgParent==this && !kmkernel->folderIsDraftOrOutbox(this))
+    if (msgParent==this && !isDraftOrOutboxFolder())
         return 0;
 
     idx = msgParent->find(aMsg);
Index: kmfoldermbox.cpp
===================================================================
RCS file: /home/kde/kdepim/kmail/kmfoldermbox.cpp,v
retrieving revision 1.88
diff -u -3 -p -r1.88 kmfoldermbox.cpp
--- kmfoldermbox.cpp	2 Nov 2003 22:54:15 -0000	1.88
+++ kmfoldermbox.cpp	11 Nov 2003 11:36:21 -0000
@@ -898,7 +898,7 @@ int KMFolderMbox::addMsg(KMMessage* aMsg
   {
     if (msgParent==this)
     {
-        if (kmkernel->folderIsDraftOrOutbox(this))
+        if (isDraftOrOutboxFolder())
           //special case for Edit message.
           {
             kdDebug(5006) << "Editing message in outbox or drafts" << endl;
Index: kmfoldertree.cpp
===================================================================
RCS file: /home/kde/kdepim/kmail/kmfoldertree.cpp,v
retrieving revision 1.269
diff -u -3 -p -r1.269 kmfoldertree.cpp
--- kmfoldertree.cpp	30 Oct 2003 17:17:58 -0000	1.269
+++ kmfoldertree.cpp	11 Nov 2003 11:36:21 -0000
@@ -62,6 +62,14 @@ KMFolderTreeItem::KMFolderTreeItem( KFol
     mFolder( folder )
 {
   init();
+
+  if( parent -> type() == SentMail ) {
+    setType(SentMail);
+    folder -> setType( "StS" );
+    if ( folder->userWhoField().isEmpty() )
+      folder->setUserWhoField( QString::null );
+  }
+
   setPixmap( 0, normalIcon() );
 }
 
@@ -98,11 +106,12 @@ QPixmap KMFolderTreeItem::normalIcon(int
       default:
         icon = "folder";break;
     }
+  } else if ( type() == SentMail ) {
+    icon = "folder_sent_mail";
   } else if ( mFolder->isSystemFolder() ) {
     switch ( type() ) {
       case Inbox: icon = "folder_inbox"; break;
       case Outbox: icon = "folder_outbox"; break;
-      case SentMail: icon = "folder_sent_mail"; break;
       case Trash: icon = "trashcan_empty"; break;
       default: icon = kmkernel->iCalIface().folderPixmap( type() ); break;
       case Drafts: icon = "edit";break;
@@ -159,20 +168,25 @@ void KMFolderTreeItem::init()
 
   if ( depth() == 0 )
     setType(Root);
-  else if (mFolder->isSystemFolder()) {
-    if (mFolder == kmkernel->inboxFolder()
-	|| mFolder->folderType() == KMFolderTypeImap)
-      setType(Inbox);
-    else if (mFolder == kmkernel->outboxFolder())
-      setType(Outbox);
-    else if (mFolder == kmkernel->sentFolder())
-      setType(SentMail);
-    else if (mFolder == kmkernel->draftsFolder())
-      setType(Drafts);
-    else if (mFolder == kmkernel->trashFolder())
-      setType(Trash);
-    else if(kmkernel->iCalIface().isResourceImapFolder(mFolder))
-      setType(kmkernel->iCalIface().folderType(mFolder));
+  else if ( mFolder->isInboxFolder() ) {
+    mFolder -> setSystemFolder( TRUE );
+    setType(Inbox);
+  } else if ( mFolder->isOutboxFolder() ) {
+    mFolder -> setSystemFolder( TRUE );
+    setType(Outbox);
+  } else if ( mFolder->isSentMailFolder( false ) ) {
+    mFolder -> setSystemFolder( TRUE );
+    setType(SentMail);
+  } else if ( mFolder->isSentMailFolder() ) {
+    setType(SentMail);
+  } else if ( mFolder->isTrashFolder() ) {
+    mFolder -> setSystemFolder( TRUE );
+    setType(Trash);
+  } else if ( mFolder->isDraftsFolder() ) {
+    mFolder -> setSystemFolder( TRUE );
+    setType(Drafts);
+  } else if(kmkernel->iCalIface().isResourceImapFolder(mFolder)) {
+    setType(kmkernel->iCalIface().folderType(mFolder));
   } else
     setRenameEnabled(0, false);
 }
@@ -975,6 +989,9 @@ void KMFolderTree::rightButtonPressed(QL
       folderMenu->insertItem(SmallIcon("mail_get"), i18n("Check &Mail"),
         this,
         SLOT(slotCheckMail()));
+    } else if (fti->folder()->folderType() == KMFolderTypeCachedImap) {
+      folderMenu->insertItem(SmallIcon("mail_get"), i18n("&Synchronize"),
+                             fti->folder(), SLOT(processNewMail()));
     }
   } else {
     if ((fti->folder() == kmkernel->outboxFolder()) && (fti->folder()->count()) )
@@ -1010,7 +1027,7 @@ void KMFolderTree::rightButtonPressed(QL
       folderMenu->insertSeparator();
 
       itemId = folderMenu->insertItem(SmallIcon("edittrash"),
-        (kmkernel->folderIsTrash(fti->folder())) ? i18n("&Empty") :
+        (fti->folder()->isTrashFolder()) ? i18n("&Empty") :
                              i18n("&Move All Messages to Trash"), mMainWidget,
                              SLOT(slotEmptyFolder()));
       folderMenu->setItemEnabled( itemId, fti->folder()->count() > 0 );
Index: kmheaders.cpp
===================================================================
RCS file: /home/kde/kdepim/kmail/kmheaders.cpp,v
retrieving revision 1.586
diff -u -3 -p -r1.586 kmheaders.cpp
--- kmheaders.cpp	10 Nov 2003 00:47:03 -0000	1.586
+++ kmheaders.cpp	11 Nov 2003 11:36:23 -0000
@@ -941,7 +941,7 @@ void KMHeaders::setFolder (KMFolder *aFo
     mSortInfo.removed = 0;
     mFolder = aFolder;
     mSortInfo.dirty = true;
-    mOwner->editAction()->setEnabled(mFolder ?  \
(kmkernel->folderIsDraftOrOutbox(mFolder)): false ); +    \
mOwner->editAction()->setEnabled(mFolder ? mFolder->isDraftOrOutboxFolder() : false \
                );
     mOwner->replyListAction()->setEnabled(mFolder ? mFolder->isMailingList() :
       false);
     if (mFolder)
@@ -2207,7 +2207,7 @@ void KMHeaders::selectMessage(QListViewI
     emit activated(mFolder->getMsg(idx));
   }
 
-//  if (kmkernel->folderIsDraftOrOutbox(mFolder))
+//  if (mFolder->isDraftOrOutboxFolder())
 //    setOpen(lvi, !lvi->isOpen());
 }
 
@@ -2436,7 +2436,7 @@ void KMHeaders::slotRMB()
   QPopupMenu *msgCopyMenu = new QPopupMenu(menu);
   KMCopyCommand::folderToPopupMenu( false, this, &mMenuToFolder, msgCopyMenu );
 
-  bool out_folder = kmkernel->folderIsDraftOrOutbox(mFolder);
+  bool out_folder = mFolder->isDraftOrOutboxFolder();
   if ( out_folder )
      mOwner->editAction()->plug(menu);
   else {
Index: kmkernel.cpp
===================================================================
RCS file: /home/kde/kdepim/kmail/kmkernel.cpp,v
retrieving revision 1.220
diff -u -3 -p -r1.220 kmkernel.cpp
--- kmkernel.cpp	10 Nov 2003 19:25:50 -0000	1.220
+++ kmkernel.cpp	11 Nov 2003 11:36:24 -0000
@@ -672,6 +672,8 @@ void KMKernel::initFolders(KConfig* cfg)
   }
 
   the_inboxFolder->setSystemFolder(TRUE);
+  if ( the_inboxFolder->userWhoField().isEmpty() )
+    the_inboxFolder->setUserWhoField( QString::null );
   // inboxFolder->open();
 
   the_outboxFolder = the_folderMgr->findOrCreate(cfg->readEntry("outboxFolder", \
"outbox")); @@ -679,32 +681,36 @@ void KMKernel::initFolders(KConfig* cfg)
     emergencyExit( i18n("You do not have read/write permission to your outbox \
folder.") );  }
 
-  the_outboxFolder->setType("Out");
   the_outboxFolder->setSystemFolder(TRUE);
+  if ( the_outboxFolder->userWhoField().isEmpty() )
+    the_outboxFolder->setUserWhoField( QString::null );
   the_outboxFolder->open();
 
   the_sentFolder = the_folderMgr->findOrCreate(cfg->readEntry("sentFolder", \
"sent-mail"));  if (the_sentFolder->canAccess() != 0) {
     emergencyExit( i18n("You do not have read/write permission to your sent-mail \
folder.") );  }
-  the_sentFolder->setType("St");
   the_sentFolder->setSystemFolder(TRUE);
+  if ( the_sentFolder->userWhoField().isEmpty() )
+    the_sentFolder->setUserWhoField( QString::null );
   // the_sentFolder->open();
 
   the_trashFolder  = the_folderMgr->findOrCreate(cfg->readEntry("trashFolder", \
"trash"));  if (the_trashFolder->canAccess() != 0) {
     emergencyExit( i18n("You do not have read/write permission to your trash \
folder.") );  }
-  the_trashFolder->setType("Tr");
   the_trashFolder->setSystemFolder(TRUE);
+  if ( the_trashFolder->userWhoField().isEmpty() )
+    the_trashFolder->setUserWhoField( QString::null );
   // the_trashFolder->open();
 
   the_draftsFolder = the_folderMgr->findOrCreate(cfg->readEntry("draftsFolder", \
"drafts"));  if (the_draftsFolder->canAccess() != 0) {
     emergencyExit( i18n("You do not have read/write permission to your drafts \
folder.") );  }
-  the_draftsFolder->setType("Df");
   the_draftsFolder->setSystemFolder(TRUE);
+  if ( the_draftsFolder->userWhoField().isEmpty() )
+    the_draftsFolder->setUserWhoField( QString::null );
   the_draftsFolder->open();
 }
 
@@ -1406,52 +1412,6 @@ KMKernel::setCanExpire(bool expire) {
 bool
 KMKernel::canExpire() {
   return allowedToExpire;
-}
-
-/**
- * Returns true if the folder is either the outbox or one of the drafts-folders
- */
-bool KMKernel::folderIsDraftOrOutbox(const KMFolder * folder)
-{
-  assert( folder );
-  if ( folder == the_outboxFolder || folder == the_draftsFolder )
-    return true;
-
-  QString idString = folder->idString();
-  if ( idString.isEmpty() ) return false;
-
-  // search the identities if the folder matches the drafts-folder
-  const IdentityManager * im = identityManager();
-  for( IdentityManager::ConstIterator it = im->begin(); it != im->end(); ++it )
-    if ( (*it).drafts() == idString ) return true;
-  return false;
-}
-
-bool KMKernel::folderIsTrash(KMFolder * folder)
-{
-  assert(folder);
-  if (folder == the_trashFolder) return true;
-  if (folder->folderType() != KMFolderTypeImap) return false;
-  KMFolderImap *fi = static_cast<KMFolderImap*>(folder);
-  if (fi->account() && fi->account()->trash() == fi->idString())
-    return true;
-  return false;
-}
-
-bool KMKernel::folderIsSentMailFolder( const KMFolder * folder )
-{
-  assert( folder );
-  if ( folder == the_sentFolder )
-    return true;
-
-  QString idString = folder->idString();
-  if ( idString.isEmpty() ) return false;
-
-  // search the identities if the folder matches the sent-folder
-  const IdentityManager * im = identityManager();
-  for( IdentityManager::ConstIterator it = im->begin(); it != im->end(); ++it )
-    if ( (*it).fcc() == idString ) return true;
-  return false;
 }
 
 IdentityManager * KMKernel::identityManager() {
Index: kmmainwidget.cpp
===================================================================
RCS file: /home/kde/kdepim/kmail/kmmainwidget.cpp,v
retrieving revision 1.113
diff -u -3 -p -r1.113 kmmainwidget.cpp
--- kmmainwidget.cpp	8 Nov 2003 16:03:01 -0000	1.113
+++ kmmainwidget.cpp	11 Nov 2003 11:36:25 -0000
@@ -851,7 +851,7 @@ void KMMainWidget::slotEmptyFolder()
   KMMessage* msg;
 
   if (!mFolder) return;
-  bool isTrash = kmkernel->folderIsTrash(mFolder);
+  bool isTrash = mFolder->isTrashFolder();
 
   if (mConfirmEmpty)
   {
@@ -1100,7 +1100,7 @@ void KMMainWidget::slotToggleSubjectThre
 //-----------------------------------------------------------------------------
 void KMMainWidget::slotMessageQueuedOrDrafted()
 {
-  if (!kmkernel->folderIsDraftOrOutbox(mFolder))
+  if (!mFolder->isDraftOrOutboxFolder())
       return;
   if (mMsgView)
     mMsgView->update(true);
@@ -1859,7 +1859,7 @@ void KMMainWidget::slotMsgActivated(KMMe
     return;
   }
 
-  if (kmkernel->folderIsDraftOrOutbox(mFolder))
+  if (mFolder->isDraftOrOutboxFolder())
   {
     slotEditMsg();
     return;
@@ -1921,7 +1921,7 @@ void KMMainWidget::slotMsgPopup(KMMessag
       return;
     }
 
-    bool out_folder = kmkernel->folderIsDraftOrOutbox(mFolder);
+    bool out_folder = mFolder->isDraftOrOutboxFolder();
     if ( out_folder ) {
       mEditAction->plug(menu);
     }
@@ -2818,7 +2818,7 @@ void KMMainWidget::updateMessageActions(
 
     bool single_actions = count == 1;
     mEditAction->setEnabled( single_actions &&
-    kmkernel->folderIsDraftOrOutbox(mFolder));
+    mFolder->isDraftOrOutboxFolder());
 
     filterMenu()->setEnabled( single_actions );
     bounceAction()->setEnabled( single_actions );
@@ -2834,8 +2834,8 @@ void KMMainWidget::updateMessageActions(
 
     mSendAgainAction->setEnabled( single_actions &&
              ( mHeaders->currentMsg() && mHeaders->currentMsg()->isSent() )
-          || ( mFolder && kmkernel->folderIsDraftOrOutbox( mFolder ) )
-          || ( mFolder && kmkernel->folderIsSentMailFolder( mFolder ) )
+          || ( mFolder && mFolder->isDraftOrOutboxFolder() )
+          || ( mFolder && mFolder->isSentMailFolder() )
              );
     mSaveAsAction->setEnabled( mass_actions );
     bool mails = mFolder && mFolder->count();
@@ -2895,7 +2895,7 @@ void KMMainWidget::updateFolderMenu()
   mEmptyFolderAction->setEnabled( mFolder ? ( !mFolder->noContent()
                                              && ( mFolder->count() > 0 ) )
                                          : false );
-  mEmptyFolderAction->setText( (mFolder && kmkernel->folderIsTrash(mFolder))
+  mEmptyFolderAction->setText( (mFolder && mFolder->isTrashFolder())
     ? i18n("E&mpty Trash") : i18n("&Move All Messages to Trash") );
   mRemoveFolderAction->setEnabled( (mFolder && !mFolder->isSystemFolder()) );
   mExpireFolderAction->setEnabled( mFolder && mFolder->isAutoExpire() );
Index: kmfoldercachedimap.h
===================================================================
RCS file: /home/kde/kdepim/kmail/kmfoldercachedimap.h,v
retrieving revision 1.13
diff -u -3 -p -r1.13 kmfoldercachedimap.h
--- kmfoldercachedimap.h	3 Nov 2003 10:42:25 -0000	1.13
+++ kmfoldercachedimap.h	11 Nov 2003 11:36:26 -0000
@@ -90,6 +90,9 @@ public:
   void setImapPath(const QString &path) { mImapPath = path; }
   QString imapPath() { return mImapPath; }
 
+  virtual bool isInboxFolder();
+  virtual bool isTrashFolder();
+
   /** The highest UID in the folder */
   void setLastUid( ulong uid );
   ulong lastUid();
Index: kmfolder.h
===================================================================
RCS file: /home/kde/kdepim/kmail/kmfolder.h,v
retrieving revision 1.132
diff -u -3 -p -r1.132 kmfolder.h
--- kmfolder.h	9 Nov 2003 22:53:53 -0000	1.132
+++ kmfolder.h	11 Nov 2003 11:36:26 -0000
@@ -286,6 +286,13 @@ public:
   /** Type of the folder. Inherited. */
   virtual const char* type() const;
 
+  virtual bool isInboxFolder();
+  virtual bool isOutboxFolder();
+  virtual bool isSentMailFolder( bool includeSubFolders = TRUE );
+  virtual bool isDraftsFolder();
+  virtual bool isDraftOrOutboxFolder();
+  virtual bool isTrashFolder();
+
   virtual QCString protocol() const = 0;
 
   /** Returns TRUE if accounts are associated with this folder. */
Index: kmfolderimap.h
===================================================================
RCS file: /home/kde/kdepim/kmail/kmfolderimap.h,v
retrieving revision 1.52
diff -u -3 -p -r1.52 kmfolderimap.h
--- kmfolderimap.h	12 Oct 2003 14:11:06 -0000	1.52
+++ kmfolderimap.h	11 Nov 2003 11:36:26 -0000
@@ -92,6 +92,9 @@ public:
   void setImapPath(const QString &path) { mImapPath = path; }
   QString imapPath() { return mImapPath; }
 
+  virtual bool isInboxFolder();
+  virtual bool isTrashFolder();
+
   /** The highest UID in the folder */
   ulong lastUid();
 
Index: kmkernel.h
===================================================================
RCS file: /home/kde/kdepim/kmail/kmkernel.h,v
retrieving revision 1.84
diff -u -3 -p -r1.84 kmkernel.h
--- kmkernel.h	6 Nov 2003 09:25:56 -0000	1.84
+++ kmkernel.h	11 Nov 2003 11:36:26 -0000
@@ -137,12 +137,6 @@ public:
 	       const KURL &messageFile, const KURL::List &attach);
   void byteArrayToRemoteFile(const QByteArray&, const KURL&,
 			     bool overwrite = FALSE);
-  bool folderIsDraftOrOutbox(const KMFolder *);
-  bool folderIsTrash(KMFolder *);
-  /**
-   * Returns true if the folder is one of the sent-mail folders.
-   */
-  bool folderIsSentMailFolder( const KMFolder * );
 
   KInstance *xmlGuiInstance() { return mXmlGuiInstance; }
   void setXmlGuiInstance( KInstance *instance ) { mXmlGuiInstance = instance; }



_______________________________________________
KMail Developers mailing list
kmail@kde.org
https://mail.kde.org/mailman/listinfo/kmail

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic