rev 4360 - in trunk/packages/kdepim/debian: . patches

Christopher Martin chrsmrtn at costa.debian.org
Sat Aug 19 13:56:36 UTC 2006


Author: chrsmrtn
Date: 2006-08-19 13:56:29 +0000 (Sat, 19 Aug 2006)
New Revision: 4360

Added:
   trunk/packages/kdepim/debian/patches/01_kdepim_branch_r574589.diff
Removed:
   trunk/packages/kdepim/debian/patches/01_kdepim_branch_r574183.diff
Modified:
   trunk/packages/kdepim/debian/changelog
Log:
Just grab a few more fixes in the branch pull.


Modified: trunk/packages/kdepim/debian/changelog
===================================================================
--- trunk/packages/kdepim/debian/changelog	2006-08-19 13:53:31 UTC (rev 4359)
+++ trunk/packages/kdepim/debian/changelog	2006-08-19 13:56:29 UTC (rev 4360)
@@ -4,7 +4,7 @@
 
    +++ Changes by Fathi Boudra:
 
-  * Branch pull to revision 574183.
+  * Branch pull to revision 574589.
   * Added kdepim extra debug information from KDE bug #104956.
   * Removed autotools-dev from Build-Depends; automake1.9 depends on it.
 

Deleted: trunk/packages/kdepim/debian/patches/01_kdepim_branch_r574183.diff

Added: trunk/packages/kdepim/debian/patches/01_kdepim_branch_r574589.diff
===================================================================
--- trunk/packages/kdepim/debian/patches/01_kdepim_branch_r574589.diff	2006-08-19 13:53:31 UTC (rev 4359)
+++ trunk/packages/kdepim/debian/patches/01_kdepim_branch_r574589.diff	2006-08-19 13:56:29 UTC (rev 4360)
@@ -0,0 +1,2588 @@
+#DPATCHLEVEL=0
+--- akregator/src/akregator.desktop	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ akregator/src/akregator.desktop	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -58,7 +58,6 @@
+ Comment[fi]=RSS-syötelukija
+ Comment[fr]=Un lecteur de flux RSS pour KDE
+ Comment[ga]=Comhbhailitheoir RSS le haghaidh KDE
+-Comment[he]==קורא חדשות (RSS) עבור KDE
+ Comment[hu]=KDE-s hírolvasó RSS hírcsatornákhoz
+ Comment[is]=RSS fréttaforrit fyrir KDE
+ Comment[it]=Un concentratore KDE per RSS
+--- akregator/src/akregator_view.cpp	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ akregator/src/akregator_view.cpp	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -1394,7 +1394,10 @@
+     }
+     else
+     {
+-        // TODO: read selected page viewer
++        QString selectedText = static_cast<PageViewer *>(m_currentFrame->part())->selectedText();
++        
++        if (!selectedText.isEmpty())
++            SpeechClient::self()->slotSpeak(selectedText, "en");
+     }
+ }
+ 
+--- kresources/egroupware/xmlrpciface.cpp	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ kresources/egroupware/xmlrpciface.cpp	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -200,7 +200,14 @@
+   {
+       case QVariant::String:
+       case QVariant::CString:
+-      return "<value><string>" + arg.toString() + "</string></value>\r\n";
++        {
++        QString result = arg.toString();
++        result = result.replace( "&", "&amp;" );
++        result = result.replace( "\"", "&quot;" );
++        result = result.replace( "<", "&lt;" );
++        result = result.replace( ">", "&gt;" );
++        return "<value><string>" + result + "</string></value>\r\n";
++        }
+       case QVariant::Int:
+       return "<value><int>" + QString::number( arg.toInt() ) + "</int></value>\r\n";
+       case QVariant::Double:
+--- kresources/groupwise/soap/types.xsd	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ kresources/groupwise/soap/types.xsd	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -524,7 +524,7 @@
+ 					<xs:element name="officialVersion" type="xs:unsignedInt" minOccurs="0"/>
+ 					<xs:element name="currentVersion" type="xs:unsignedInt" minOccurs="0"/>
+ 					<xs:element name="versionNumber" type="xs:unsignedInt" minOccurs="0"/>
+-					<xs:element name="versionDescription" minOccurs="0"/>
++					<xs:element name="versionDescription" type="xs:string" minOccurs="0"/>
+ 					<xs:element name="fileSize" type="xs:unsignedInt" minOccurs="0"/>
+ 					<xs:element name="acl" type="tns:AccessControlList" minOccurs="0"/>
+ 				</xs:sequence>
+--- kmail/kmfoldersearch.h	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ kmail/kmfoldersearch.h	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -71,6 +71,7 @@
+   bool running() const { return mRunning; }
+   void stop();
+   int foundCount() const { return mFoundCount; }
++  int searchCount() const { return mSearchCount; }
+   QString currentFolder() const { return mLastFolder; }
+ 
+ public slots:
+@@ -101,6 +102,7 @@
+   SerNumList mSerNums;
+   QString mLastFolder;
+   int mFoundCount;
++  int mSearchCount;
+   QTimer *mProcessNextBatchTimer;
+ };
+ 
+@@ -162,7 +164,7 @@
+   virtual int updateIndex();
+ 
+   // Examine the message
+-  void slotSearchExamineMsgDone( KMFolder*, Q_UINT32 serNum, 
++  void slotSearchExamineMsgDone( KMFolder*, Q_UINT32 serNum,
+                                  const KMSearchPattern*, bool );
+ 
+ public:
+--- kmail/kmreadermainwin.rc	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ kmail/kmreadermainwin.rc	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -1,5 +1,5 @@
+ <!DOCTYPE kpartgui>
+-<kpartgui version="4" name="kmreadermainwin" >
++<kpartgui version="5" name="kmreadermainwin" >
+  <MenuBar>
+   <Menu noMerge="1" name="file" >
+    <text>&amp;File</text>
+@@ -33,6 +33,7 @@
+      <text>&amp;Forward</text>
+      <Action name="message_forward_as_attachment" />
+      <Action name="message_forward_inline" />
++     <Action name="message_forward_as_digest" />
+      <Action name="message_forward_redirect" />
+    </Menu>
+   </Menu>
+--- kmail/searchwindow.h	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ kmail/searchwindow.h	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -86,13 +86,13 @@
+    * @param curFolder The folder to use as the new base for searches.
+    */
+   void activateFolder( KMFolder* curFolder );
+-  
++
+   /**
+    * Provides access to the list of currently selected message in the listview.
+    * @return The list of currenty selected search result messages.
+    */
+   KMMessageList selectedMessages();
+-  
++
+   /**
+    * Provides access to the currently selected message.
+    * @return the currently selected message.
+@@ -115,13 +115,15 @@
+   virtual void slotContextMenuRequested( QListViewItem*, const QPoint &, int );
+   virtual void copySelectedToFolder( int menuId );
+   virtual void moveSelectedToFolder( int menuId );
+-  virtual void slotFolderActivated( KMFolder* );
++  virtual void slotFolderActivated();
+   void slotClearSelection();
+   void slotReplyToMsg();
+   void slotReplyAllToMsg();
+   void slotReplyListToMsg();
+-  void slotForwardMsg();
++  void slotForwardInlineMsg();
+   void slotForwardAttachedMsg();
++  void slotForwardDigestMsg();
++  void slotRedirectMsg();
+   void slotSaveMsg();
+   void slotSaveAttachments();
+   void slotPrintMsg();
+@@ -167,8 +169,8 @@
+   QWidget* mLastFocus; // to remember the position of the focus
+   QMap<int,KMFolder*> mMenuToFolder;
+   KAction *mReplyAction, *mReplyAllAction, *mReplyListAction, *mSaveAsAction,
+-    *mForwardAction, *mForwardAttachedAction, *mPrintAction, *mClearAction,
+-    *mSaveAtchAction;
++    *mForwardInlineAction, *mForwardAttachedAction, *mForwardDigestAction,
++    *mRedirectAction, *mPrintAction, *mClearAction, *mSaveAtchAction;
+   KActionMenu *mForwardActionMenu;
+   QValueList<QGuardedPtr<KMFolder> > mFolders;
+ 
+--- kmail/kmfilterdlg.cpp	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ kmail/kmfilterdlg.cpp	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -69,6 +69,12 @@
+ 	   "it is deleted, but you can always leave the "
+ 	   "dialog by clicking <em>Cancel</em> to discard the "
+ 	   "changes made.</p></qt>" );
++const char * _wt_filterlist_top =
++I18N_NOOP( "<qt><p>Click this button to move the currently-"
++	   "selected filter to the <em>top</em> of the list above.</p>"
++	   "<p>This is useful since the order of the filters in the list "
++	   "determines the order in which they are tried on messages: "
++	   "The topmost filter gets tried first.</p></qt>" );
+ const char * _wt_filterlist_up =
+ I18N_NOOP( "<qt><p>Click this button to move the currently-"
+ 	   "selected filter <em>up</em> one in the list above.</p>"
+@@ -85,6 +91,12 @@
+ 	   "The topmost filter gets tried first.</p>"
+ 	   "<p>If you have clicked this button accidentally, you can undo this "
+ 	   "by clicking on the <em>Up</em> button.</p></qt>" );
++const char * _wt_filterlist_bot =
++I18N_NOOP( "<qt><p>Click this button to move the currently-"
++	   "selected filter to the <em>bottom</em> of the list above.</p>"
++	   "<p>This is useful since the order of the filters in the list "
++	   "determines the order in which they are tried on messages: "
++	   "The topmost filter gets tried first.</p></qt>" );
+ const char * _wt_filterlist_rename =
+ I18N_NOOP( "<qt><p>Click this button to rename the currently-selected filter.</p>"
+ 	   "<p>Filters are named automatically, as long as they start with "
+@@ -268,7 +280,7 @@
+   	     this, SLOT(slotApplicableAccountsChanged()) );
+     connect( mAccountList, SIGNAL(spacePressed(QListViewItem*)),
+   	     this, SLOT(slotApplicableAccountsChanged()) );
+-    
++
+     // transfer changes from the 'stop processing here'
+     // check box to the filter
+     connect( mStopProcessingHere, SIGNAL(toggled(bool)),
+@@ -434,7 +446,7 @@
+       mFilter->setApplicability( KMFilter::ButImap );
+     else if ( mApplyOnForChecked->isChecked() )
+       mFilter->setApplicability( KMFilter::Checked );
+-      
++
+     mApplyOnForAll->setEnabled( mApplyOnIn->isChecked() );
+     mApplyOnForTraditional->setEnabled(  mApplyOnIn->isChecked() );
+     mApplyOnForChecked->setEnabled( mApplyOnIn->isChecked() );
+@@ -566,6 +578,10 @@
+   //----------- the first row of buttons
+   QHBox *hb = new QHBox(this);
+   hb->setSpacing(4);
++  mBtnTop = new KPushButton( QString::null, hb );
++  mBtnTop->setAutoRepeat( true );
++  mBtnTop->setIconSet( BarIconSet( "top", KIcon::SizeSmall ) );
++  mBtnTop->setMinimumSize( mBtnTop->sizeHint() * 1.2 );
+   mBtnUp = new KPushButton( QString::null, hb );
+   mBtnUp->setAutoRepeat( true );
+   mBtnUp->setIconSet( BarIconSet( "up", KIcon::SizeSmall ) );
+@@ -574,10 +590,18 @@
+   mBtnDown->setAutoRepeat( true );
+   mBtnDown->setIconSet( BarIconSet( "down", KIcon::SizeSmall ) );
+   mBtnDown->setMinimumSize( mBtnDown->sizeHint() * 1.2 );
++  mBtnBot = new KPushButton( QString::null, hb );
++  mBtnBot->setAutoRepeat( true );
++  mBtnBot->setIconSet( BarIconSet( "bottom", KIcon::SizeSmall ) );
++  mBtnBot->setMinimumSize( mBtnBot->sizeHint() * 1.2 );
++  QToolTip::add( mBtnTop, i18n("Top") );
+   QToolTip::add( mBtnUp, i18n("Up") );
+   QToolTip::add( mBtnDown, i18n("Down") );
++  QToolTip::add( mBtnBot, i18n("Bottom") );
++  QWhatsThis::add( mBtnTop, i18n(_wt_filterlist_top) );
+   QWhatsThis::add( mBtnUp, i18n(_wt_filterlist_up) );
+   QWhatsThis::add( mBtnDown, i18n(_wt_filterlist_down) );
++  QWhatsThis::add( mBtnBot, i18n(_wt_filterlist_bot) );
+ 
+   //----------- the second row of buttons
+   hb = new QHBox(this);
+@@ -606,10 +630,14 @@
+ 	   this, SLOT(slotSelected(int)) );
+   connect( mListBox, SIGNAL( doubleClicked ( QListBoxItem * )),
+            this, SLOT( slotRename()) );
++  connect( mBtnTop, SIGNAL(clicked()),
++	   this, SLOT(slotTop()) );
+   connect( mBtnUp, SIGNAL(clicked()),
+ 	   this, SLOT(slotUp()) );
+   connect( mBtnDown, SIGNAL(clicked()),
+ 	   this, SLOT(slotDown()) );
++  connect( mBtnBot, SIGNAL(clicked()),
++	   this, SLOT(slotBottom()) );
+   connect( mBtnNew, SIGNAL(clicked()),
+ 	   this, SLOT(slotNew()) );
+   connect( mBtnCopy, SIGNAL(clicked()),
+@@ -720,7 +748,7 @@
+ 		       "IMAP account. Such filters will only be applied "
+ 		       "when manually filtering and when filtering "
+ 		       "incoming online IMAP mail.");
+-    KMessageBox::information( this, str, QString::null, 
++    KMessageBox::information( this, str, QString::null,
+ 			      "filterDlgOnlineImapCheck" );
+   }
+   // allow usage of the filters again.
+@@ -811,6 +839,21 @@
+   enableControls();
+ }
+ 
++void KMFilterListBox::slotTop()
++{
++  if ( mIdxSelItem < 0 ) {
++    kdDebug(5006) << "KMFilterListBox::slotTop called while no filter is selected, ignoring." << endl;
++    return;
++  }
++  if ( mIdxSelItem == 0 ) {
++    kdDebug(5006) << "KMFilterListBox::slotTop called while the _topmost_ filter is selected, ignoring." << endl;
++    return;
++  }
++
++  swapFilters( mIdxSelItem, 0 );
++  enableControls();
++}
++
+ void KMFilterListBox::slotUp()
+ {
+   if ( mIdxSelItem < 0 ) {
+@@ -841,6 +884,21 @@
+   enableControls();
+ }
+ 
++void KMFilterListBox::slotBottom()
++{
++  if ( mIdxSelItem < 0 ) {
++    kdDebug(5006) << "KMFilterListBox::slotBottom called while no filter is selected, ignoring." << endl;
++    return;
++  }
++  if ( mIdxSelItem == (int)mListBox->count() - 1 ) {
++    kdDebug(5006) << "KMFilterListBox::slotBottom called while the _last_ filter is selected, ignoring." << endl;
++    return;
++  }
++
++  swapFilters( mIdxSelItem, mListBox->count()-1 );
++  enableControls();
++}
++
+ void KMFilterListBox::slotRename()
+ {
+   if ( mIdxSelItem < 0 ) {
+@@ -888,8 +946,10 @@
+   bool theLast = ( mIdxSelItem >= (int)mFilterList.count() - 1 );
+   bool aFilterIsSelected = ( mIdxSelItem >= 0 );
+ 
++  mBtnTop->setEnabled( aFilterIsSelected && !theFirst );
+   mBtnUp->setEnabled( aFilterIsSelected && !theFirst );
+   mBtnDown->setEnabled( aFilterIsSelected && !theLast );
++  mBtnBot->setEnabled( aFilterIsSelected && !theLast );
+   mBtnCopy->setEnabled( aFilterIsSelected );
+   mBtnDelete->setEnabled( aFilterIsSelected );
+   mBtnRename->setEnabled( aFilterIsSelected );
+@@ -983,7 +1043,20 @@
+   mIdxSelItem += movedOne - untouchedOne;
+ }
+ 
++void KMFilterListBox::swapFilters( int from, int to )
++{
++  QListBoxItem *item = mListBox->item( from );
++  mListBox->takeItem( item );
++  mListBox->insertItem( item, to );
+ 
++  KMFilter* filter = mFilterList.take( from );
++  mFilterList.insert( to, filter );
++
++  mIdxSelItem = to;
++  mListBox->setCurrentItem( mIdxSelItem );
++  mListBox->setSelected( mIdxSelItem, true );
++}
++
+ //=============================================================================
+ //
+ // class KMFilterActionWidget
+--- kmail/kmmainwin.rc	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ kmail/kmmainwin.rc	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -2,7 +2,7 @@
+      the same menu entries at the same place in KMail and Kontact  -->
+ 
+ <!DOCTYPE kpartgui>
+-<kpartgui version="88" name="kmmainwin" >
++<kpartgui version="89" name="kmmainwin" >
+  <MenuBar>
+   <Menu noMerge="1" name="file" >
+    <text>&amp;File</text>
+@@ -120,6 +120,7 @@
+      <text>&amp;Forward</text>
+      <Action name="message_forward_as_attachment" />
+      <Action name="message_forward_inline" />
++     <Action name="message_forward_as_digest" />
+      <Action name="message_forward_redirect" />
+    </Menu>
+    <Action name="send_again" />
+--- kmail/imapaccountbase.cpp	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ kmail/imapaccountbase.cpp	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -1144,14 +1144,16 @@
+      ImapAccountBase::JobIterator it = findJob(job);
+      if ( it == jobsEnd() ) return;
+      int errorCode = job->error();
++     KMFolder * const parent = (*it).parent;
++     const QString path = (*it).path;
+      if (errorCode && errorCode != KIO::ERR_CANNOT_OPEN_FOR_WRITING)
+      {
+        bool cont = handleJobError( job, i18n( "Error while uploading status of messages to server: " ) + '\n' );
+-       emit imapStatusChanged( (*it).parent, (*it).path, cont );
++       emit imapStatusChanged( parent, path, cont );
+      }
+      else
+      {
+-       emit imapStatusChanged( (*it).parent, (*it).path, true );
++       emit imapStatusChanged( parent, path, true );
+        removeJob(it);
+      }
+   }
+--- kmail/kmedit.cpp	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ kmail/kmedit.cpp	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -248,8 +248,6 @@
+                                                 col1, col2, col3, col4,
+                                                 mSpellConfig );
+ 
+-  connect( mSpellChecker, SIGNAL(activeChanged(const QString &)),
+-           mComposer, SLOT(slotStatusMessage(const QString &)));
+   connect( mSpellChecker, SIGNAL(newSuggestions(const QString&, const QStringList&, unsigned int)),
+            this, SLOT(addSuggestion(const QString&, const QStringList&, unsigned int)) );
+ }
+--- kmail/kmmessage.h	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ kmail/kmmessage.h	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -33,7 +33,7 @@
+ class KMMessagePart;
+ class KMMsgInfo;
+ class KMHeaders;
+-class KMForwardCommand;
++class KMForwardDigestCommand;
+ 
+ namespace KMime {
+   class CharFreq;
+@@ -66,7 +66,7 @@
+ /** This is a Mime Message. */
+ class KMMessage: public KMMsgBase, public KMail::ISubject
+ {
+-  friend class ::KMForwardCommand;    // needed for MIME Digest forward
++  friend class ::KMForwardDigestCommand; // needed for MIME Digest forward
+ 
+ public:
+   // promote some of KMMsgBase's methods to public:
+@@ -811,7 +811,7 @@
+   bool transferInProgress() const;
+   /** Set that the message shall not be deleted because it is still required */
+   void setTransferInProgress(bool value, bool force = false);
+-  
++
+   /** Returns an mbox message separator line for this message, i.e. a
+       string of the form
+       "From local at domain.invalid Sat Jun 12 14:00:00 2004\n".
+--- kmail/kmreadermainwin.cpp	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ kmail/kmreadermainwin.cpp	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -164,14 +164,14 @@
+ }
+ 
+ //-----------------------------------------------------------------------------
+-void KMReaderMainWin::slotForwardMsg()
++void KMReaderMainWin::slotForwardInlineMsg()
+ {
+    KMCommand *command = 0;
+    if ( mReaderWin->message() && mReaderWin->message()->parent() ) {
+-    command = new KMForwardCommand( this, mReaderWin->message(),
++    command = new KMForwardInlineCommand( this, mReaderWin->message(),
+         mReaderWin->message()->parent()->identity() );
+    } else {
+-    command = new KMForwardCommand( this, mReaderWin->message() );
++    command = new KMForwardInlineCommand( this, mReaderWin->message() );
+    }
+    command->start();
+ }
+@@ -190,6 +190,19 @@
+ }
+ 
+ //-----------------------------------------------------------------------------
++void KMReaderMainWin::slotForwardDigestMsg()
++{
++   KMCommand *command = 0;
++   if ( mReaderWin->message() && mReaderWin->message()->parent() ) {
++     command = new KMForwardDigestCommand( this, mReaderWin->message(),
++        mReaderWin->message()->parent()->identity() );
++   } else {
++     command = new KMForwardDigestCommand( this, mReaderWin->message() );
++   }
++   command->start();
++}
++
++//-----------------------------------------------------------------------------
+ void KMReaderMainWin::slotRedirectMsg()
+ {
+   KMCommand *command = new KMRedirectCommand( this, mReaderWin->message() );
+@@ -247,20 +260,32 @@
+   connect( mForwardActionMenu, SIGNAL( activated() ), this,
+            SLOT( slotForwardMsg() ) );
+ 
+-  mForwardAction = new KAction( i18n("&Inline..."), "mail_forward",
+-				SHIFT+Key_F, this, SLOT(slotForwardMsg()),
+-				actionCollection(), "message_forward_inline" );
+-  mForwardActionMenu->insert( mForwardAction );
+-
+   mForwardAttachedAction = new KAction( i18n("Message->Forward->","As &Attachment..."),
+-				       "mail_forward", Key_F, this,
+-					SLOT(slotForwardAttachedMsg()), actionCollection(),
++                                        "mail_forward", Key_F, this,
++					SLOT(slotForwardAttachedMsg()),
++                                        actionCollection(),
+ 					"message_forward_as_attachment" );
+   mForwardActionMenu->insert( mForwardAttachedAction );
+ 
++  mForwardInlineAction = new KAction( i18n("&Inline..."),
++                                      "mail_forward", SHIFT+Key_F, this,
++                                      SLOT(slotForwardInlineMsg()),
++                                      actionCollection(),
++                                      "message_forward_inline" );
++  mForwardActionMenu->insert( mForwardInlineAction );
++
++  mForwardDigestAction = new KAction( i18n("Message->Forward->","As Di&gest..."),
++                                      "mail_forward", 0, this,
++                                      SLOT(slotForwardDigestMsg()),
++                                      actionCollection(),
++                                      "message_forward_as_digest" );
++  mForwardActionMenu->insert( mForwardDigestAction );
++
+   mRedirectAction = new KAction( i18n("Message->Forward->","&Redirect..."),
+-				 Key_E, this, SLOT(slotRedirectMsg()),
+-				 actionCollection(), "message_forward_redirect" );
++				 "mail_forward", Key_E, this,
++                                 SLOT(slotRedirectMsg()),
++				 actionCollection(),
++                                 "message_forward_redirect" );
+   mForwardActionMenu->insert( mRedirectAction );
+ 
+   mReplyActionMenu = new KActionMenu( i18n("Message->","&Reply"),
+@@ -355,7 +380,9 @@
+       return;
+     }
+ 
+-    if( !aMsg.parent()->isSent() && !aMsg.parent()->isDrafts() ) {
++    if ( ! ( aMsg.parent() && ( aMsg.parent()->isSent() || aMsg.parent()->isDrafts() ) ) ) {
++      // add the reply and forward actions only if we are not in a sent-mail or drafts
++      // folder
+       mReplyActionMenu->plug( menu );
+       mForwardActionMenu->plug( menu );
+       menu->insertSeparator();
+--- kmail/searchwindow.cpp	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ kmail/searchwindow.cpp	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -270,15 +270,26 @@
+                                         "search_message_forward" );
+   connect( mForwardActionMenu, SIGNAL(activated()), this,
+            SLOT(slotForwardMsg()) );
+-  mForwardAction = new KAction( i18n("&Inline..."), "mail_forward",
+-                                0, this, SLOT(slotForwardMsg()),
+-                                ac, "search_message_forward_inline" );
+-  mForwardActionMenu->insert( mForwardAction );
+   mForwardAttachedAction = new KAction( i18n("Message->Forward->","As &Attachment..."),
+-                                       "mail_forward", 0, this,
++                                        "mail_forward", 0, this,
+                                         SLOT(slotForwardAttachedMsg()), ac,
+                                         "search_message_forward_as_attachment" );
+   mForwardActionMenu->insert( mForwardAttachedAction );
++  mForwardInlineAction = new KAction( i18n("&Inline..."),
++                                      "mail_forward", 0, this,
++                                      SLOT(slotForwardMsg()), ac,
++                                      "search_message_forward_inline" );
++  mForwardActionMenu->insert( mForwardInlineAction );
++  mForwardDigestAction = new KAction( i18n("Message->Forward->","As Di&gest..."),
++                                      "mail_forward", 0, this,
++                                      SLOT(slotForwardDigestMsg()), ac,
++                                      "search_message_forward_as_digest" );
++  mForwardActionMenu->insert( mForwardDigestAction );
++  mRedirectAction = new KAction( i18n("Message->Forward->","&Redirect..."),
++                                      "mail_forward", 0, this,
++                                      SLOT(slotRedirectMsg()), ac,
++                                      "search_message_forward_redirect" );
++  mForwardActionMenu->insert( mRedirectAction );
+   mSaveAsAction = KStdAction::saveAs( this, SLOT(slotSaveMsg()), ac, "search_file_save_as" );
+   mSaveAtchAction = new KAction( i18n("Save Attachments..."), "attach", 0,
+                                  this, SLOT(slotSaveAttachments()), ac, "search_save_attachments" );
+@@ -291,7 +302,7 @@
+           this, SLOT(folderInvalidated(KMFolder*)));
+ 
+   connect(mCbxFolders, SIGNAL(folderChanged(KMFolder*)),
+-          this, SLOT(slotFolderActivated(KMFolder*)));
++          this, SLOT(slotFolderActivated()));
+ 
+ }
+ 
+@@ -328,33 +339,33 @@
+ //-----------------------------------------------------------------------------
+ void SearchWindow::updStatus(void)
+ {
+-    QString genMsg, detailMsg;
+-    int numMatches = 0, count = 0;
++    QString genMsg, detailMsg, procMsg;
++    int numMatches = 0, numProcessed = 0;
+     KMSearch const *search = (mFolder) ? (mFolder->search()) : 0;
+     QString folderName;
+     if (search) {
+         numMatches = search->foundCount();
++        numProcessed = search->searchCount();
+         folderName = search->currentFolder();
+     }
+ 
+     if (mFolder && mFolder->search() && !mFolder->search()->running()) {
++        procMsg = i18n("%n message searched", "%n messages searched",
++                       numProcessed);
+         if(!mStopped) {
+-            genMsg = i18n("Done");
+-            detailMsg = i18n("%n match (%1)", "%n matches (%1)", numMatches)
+-                        .arg(i18n("%n message processed",
+-                                  "%n messages processed", count));
++            genMsg = i18n("Done.");
++            detailMsg = i18n("%n match in %1", "%n matches in %1",
++                             numMatches).arg(procMsg);
+         } else {
+-            genMsg = i18n("Search canceled");
+-            detailMsg = i18n("%n match so far (%1)",
+-                             "%n matches so far (%1)", numMatches)
+-                        .arg(i18n("%n message processed",
+-                                  "%n messages processed", count));
++            genMsg = i18n("Search canceled.");
++            detailMsg = i18n("%n match so far in %1", "%n matches so far in %1",
++                             numMatches).arg(procMsg);
+         }
+     } else {
++        procMsg = i18n("%n message", "%n messages", numProcessed);
+         genMsg = i18n("%n match", "%n matches", numMatches);
+-        detailMsg = i18n("Searching in %1 (message %2)")
+-                    .arg(folderName)
+-                    .arg(count);
++        detailMsg = i18n("Searching in %1. %2 searched so far")
++                    .arg(folderName).arg(procMsg);
+     }
+ 
+     mStatusBar->changeItem(genMsg, 0);
+@@ -377,10 +388,9 @@
+ 
+ 
+ //-----------------------------------------------------------------------------
+-void SearchWindow::slotFolderActivated( KMFolder* folder )
++void SearchWindow::slotFolderActivated()
+ {
+     mChkbxSpecificFolders->setChecked(true);
+-    mBtnSearch->setEnabled(folder);
+ }
+ 
+ //-----------------------------------------------------------------------------
+@@ -705,6 +715,8 @@
+     mReplyAllAction->setEnabled( single_actions );
+     mReplyListAction->setEnabled( single_actions );
+     mPrintAction->setEnabled( single_actions );
++    mForwardDigestAction->setEnabled( !single_actions );
++    mRedirectAction->setEnabled( single_actions );
+ }
+ 
+ //-----------------------------------------------------------------------------
+@@ -773,9 +785,9 @@
+ }
+ 
+ //-----------------------------------------------------------------------------
+-void SearchWindow::slotForwardMsg()
++void SearchWindow::slotForwardInlineMsg()
+ {
+-    KMCommand *command = new KMForwardCommand(this, selectedMessages());
++    KMCommand *command = new KMForwardInlineCommand(this, selectedMessages());
+     command->start();
+ }
+ 
+@@ -787,6 +799,20 @@
+ }
+ 
+ //-----------------------------------------------------------------------------
++void SearchWindow::slotForwardDigestMsg()
++{
++    KMCommand *command = new KMForwardDigestCommand(this, selectedMessages());
++    command->start();
++}
++
++//-----------------------------------------------------------------------------
++void SearchWindow::slotRedirectMsg()
++{
++    KMCommand *command = new KMRedirectCommand(this, message());
++    command->start();
++}
++
++//-----------------------------------------------------------------------------
+ void SearchWindow::slotSaveMsg()
+ {
+     KMSaveMsgCommand *saveCommand = new KMSaveMsgCommand(this,
+--- kmail/kmreaderwin.cpp	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ kmail/kmreaderwin.cpp	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -1103,6 +1103,13 @@
+           break;
+         }
+       }
++      if ( i == encodings.size() ) {
++        // the value of encoding is unknown => use Auto
++        kdWarning(5006) << "Unknown override character encoding \"" << encoding
++                        << "\". Using Auto instead." << endl;
++        mSelectEncodingAction->setCurrentItem( 0 );
++        mOverrideEncoding = QString::null;
++      }
+     }
+   }
+   update( true );
+--- kmail/kmmessage.cpp	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ kmail/kmmessage.cpp	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -86,7 +86,8 @@
+ 
+ //-----------------------------------------------------------------------------
+ KMMessage::KMMessage(DwMessage* aMsg)
+-  : mMsg(aMsg),
++  : KMMsgBase(),
++    mMsg(aMsg),
+     mNeedsAssembly(true),
+     mDecodeHTML(false),
+     mOverrideCodec(0),
+@@ -706,6 +707,8 @@
+                                            const QTextCodec*& codec,
+                                            bool& isHTML ) const
+ {
++  if ( !root ) return;
++
+   isHTML = false;
+   // initialy parse the complete message to decrypt any encrypted parts
+   {
+@@ -736,6 +739,7 @@
+   const QTextCodec * codec = 0;
+ 
+   partNode * root = partNode::fromMessage( this );
++  if ( !root ) return QString::null;
+   parseTextStringFromDwPart( root, parsedString, codec, isHTML );
+   delete root;
+ 
+@@ -3819,7 +3823,7 @@
+ //-----------------------------------------------------------------------------
+ QCString KMMessage::charset() const
+ {
+-  if ( mMsg->Headers().HasContentType() ) {  
++  if ( mMsg->Headers().HasContentType() ) {
+     DwMediaType &mType=mMsg->Headers().ContentType();
+     mType.Parse();
+     DwParameter *param=mType.FirstParameter();
+--- kmail/kmaccount.cpp	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ kmail/kmaccount.cpp	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -377,7 +377,12 @@
+ {
+   if (mTimer)
+     mTimer->stop();
+-  kmkernel->acctMgr()->singleCheckMail(this, false);
++
++  if ( kmkernel ) {
++    AccountManager *acctmgr = kmkernel->acctMgr();
++    if ( acctmgr )
++      acctmgr->singleCheckMail(this, false);
++  }
+ }
+ 
+ //-----------------------------------------------------------------------------
+--- kmail/kmcommands.cpp	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ kmail/kmcommands.cpp	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -847,7 +847,7 @@
+   if ( msg ) {
+     QCString str( msg->mboxMessageSeparator() );
+     str += KMFolderMbox::escapeFrom( msg->asString() );
+-    str += "\n";
++    str += '\n';
+     msg->setTransferInProgress(false);
+ 
+     mData = str;
+@@ -1124,143 +1124,72 @@
+ }
+ 
+ 
+-KMForwardCommand::KMForwardCommand( QWidget *parent,
++KMForwardInlineCommand::KMForwardInlineCommand( QWidget *parent,
+   const QPtrList<KMMsgBase> &msgList, uint identity )
+   : KMCommand( parent, msgList ),
+     mIdentity( identity )
+ {
+ }
+ 
+-KMForwardCommand::KMForwardCommand( QWidget *parent, KMMessage *msg,
+-                                    uint identity )
++KMForwardInlineCommand::KMForwardInlineCommand( QWidget *parent,
++  KMMessage *msg, uint identity )
+   : KMCommand( parent, msg ),
+     mIdentity( identity )
+ {
+ }
+ 
+-KMCommand::Result KMForwardCommand::execute()
++KMCommand::Result KMForwardInlineCommand::execute()
+ {
+   QPtrList<KMMessage> msgList = retrievedMsgs();
+ 
+-  if (msgList.count() >= 2) {
+-    // ask if they want a mime digest forward
++  if (msgList.count() >= 2) { // Multiple forward
+ 
+-    if (KMessageBox::questionYesNo( parentWidget(),
+-                                    i18n("Forward selected messages as "
+-                                         "a MIME digest?"), QString::null, i18n("Send Digest"), i18n("Send") )
+-        == KMessageBox::Yes) {
+-      uint id = 0;
+-      KMMessage *fwdMsg = new KMMessage;
+-      KMMessagePart *msgPart = new KMMessagePart;
+-      QString msgPartText;
+-      int msgCnt = 0; // incase there are some we can't forward for some reason
++    uint id = 0;
++    QCString msgText = "";
++    QPtrList<KMMessage> linklist;
++    for ( KMMessage *msg = msgList.first(); msg; msg = msgList.next() ) {
++      // set the identity
++      if (id == 0)
++        id = msg->headerField( "X-KMail-Identity" ).stripWhiteSpace().toUInt();
+ 
+-      // dummy header initialization; initialization with the correct identity
+-      // is done below
+-      fwdMsg->initHeader(id);
+-      fwdMsg->setAutomaticFields(true);
+-      fwdMsg->mMsg->Headers().ContentType().CreateBoundary(1);
+-      QCString boundary( fwdMsg->mMsg->Headers().ContentType().Boundary().c_str() );
+-      msgPartText = i18n("\nThis is a MIME digest forward. The content of the"
+-                         " message is contained in the attachment(s).\n\n\n");
+-      // iterate through all the messages to be forwarded
+-      for (KMMessage *msg = msgList.first(); msg; msg = msgList.next()) {
+-        // set the identity
+-        if (id == 0)
+-          id = msg->headerField("X-KMail-Identity").stripWhiteSpace().toUInt();
+-        // set the part header
+-        msgPartText += "--";
+-        msgPartText += QString::fromLatin1( boundary );
+-        msgPartText += "\nContent-Type: MESSAGE/RFC822";
+-        msgPartText += QString("; CHARSET=%1").arg(msg->charset());
+-        msgPartText += "\n";
+-        DwHeaders dwh;
+-        dwh.MessageId().CreateDefault();
+-        msgPartText += QString("Content-ID: %1\n").arg(dwh.MessageId().AsString().c_str());
+-        msgPartText += QString("Content-Description: %1").arg(msg->subject());
+-        if (!msg->subject().contains("(fwd)"))
+-          msgPartText += " (fwd)";
+-        msgPartText += "\n\n";
+-        // remove headers that shouldn't be forwarded
+-        msg->removePrivateHeaderFields();
+-        msg->removeHeaderField("BCC");
+-        // set the part
+-        msgPartText += msg->headerAsString();
+-        msgPartText += "\n";
+-        msgPartText += msg->body();
+-        msgPartText += "\n";     // eot
+-        msgCnt++;
+-        fwdMsg->link(msg, KMMsgStatusForwarded);
+-      }
+-      if ( id == 0 )
+-        id = mIdentity; // use folder identity if no message had an id set
+-      fwdMsg->initHeader(id);
+-      msgPartText += "--";
+-      msgPartText += QString::fromLatin1( boundary );
+-      msgPartText += "--\n";
+-      QCString tmp;
+-      msgPart->setTypeStr("MULTIPART");
+-      tmp.sprintf( "Digest; boundary=\"%s\"", boundary.data() );
+-      msgPart->setSubtypeStr( tmp );
+-      msgPart->setName("unnamed");
+-      msgPart->setCte(DwMime::kCte7bit);   // does it have to be 7bit?
+-      msgPart->setContentDescription(QString("Digest of %1 messages.").arg(msgCnt));
+-      // THIS HAS TO BE AFTER setCte()!!!!
+-      msgPart->setBodyEncoded(QCString(msgPartText.ascii()));
+-      KCursorSaver busy(KBusyPtr::busy());
+-      KMail::Composer * win = KMail::makeComposer( fwdMsg, id );
+-      win->addAttach(msgPart);
+-      win->show();
+-      return OK;
+-    } else {            // NO MIME DIGEST, Multiple forward
+-      uint id = 0;
+-      QCString msgText = "";
+-      QPtrList<KMMessage> linklist;
+-      for (KMMessage *msg = msgList.first(); msg; msg = msgList.next()) {
+-        // set the identity
+-        if (id == 0)
+-          id = msg->headerField("X-KMail-Identity").stripWhiteSpace().toUInt();
++      msgText += msg->createForwardBody();
++      linklist.append( msg );
++    }
++    if ( id == 0 )
++      id = mIdentity; // use folder identity if no message had an id set
++    KMMessage *fwdMsg = new KMMessage;
++    fwdMsg->initHeader( id );
++    fwdMsg->setAutomaticFields( true );
++    fwdMsg->setCharset( "utf-8" );
++    fwdMsg->setBody( msgText );
+ 
+-        msgText += msg->createForwardBody();
+-        linklist.append(msg);
+-      }
+-      if ( id == 0 )
+-        id = mIdentity; // use folder identity if no message had an id set
+-      KMMessage *fwdMsg = new KMMessage;
+-      fwdMsg->initHeader(id);
+-      fwdMsg->setAutomaticFields(true);
+-      fwdMsg->setCharset("utf-8");
+-      fwdMsg->setBody(msgText);
++    for ( KMMessage *msg = linklist.first(); msg; msg = linklist.next() )
++      fwdMsg->link( msg, KMMsgStatusForwarded );
+ 
+-      for (KMMessage *msg = linklist.first(); msg; msg = linklist.next())
+-        fwdMsg->link(msg, KMMsgStatusForwarded);
++    KCursorSaver busy( KBusyPtr::busy() );
++    KMail::Composer * win = KMail::makeComposer( fwdMsg, id );
++    win->setCharset("");
++    win->show();
+ 
+-      KCursorSaver busy(KBusyPtr::busy());
++  } else { // forward a single message at most
++
++    KMMessage *msg = msgList.getFirst();
++    if ( !msg || !msg->codec() )
++      return Failed;
++
++    KCursorSaver busy( KBusyPtr::busy() );
++    KMMessage *fwdMsg = msg->createForward();
++
++    uint id = msg->headerField( "X-KMail-Identity" ).stripWhiteSpace().toUInt();
++    if ( id == 0 )
++      id = mIdentity;
++    {
+       KMail::Composer * win = KMail::makeComposer( fwdMsg, id );
+-      win->setCharset("");
++      win->setCharset( fwdMsg->codec()->mimeName(), true );
++      win->setBody( QString::fromUtf8( msg->createForwardBody() ) );
+       win->show();
+-      return OK;
+     }
+   }
+-
+-  // forward a single message at most.
+-  KMMessage *msg = msgList.getFirst();
+-  if ( !msg || !msg->codec() )
+-    return Failed;
+-
+-  KCursorSaver busy(KBusyPtr::busy());
+-  KMMessage *fwdMsg = msg->createForward();
+-
+-  uint id = msg->headerField("X-KMail-Identity").stripWhiteSpace().toUInt();
+-  if ( id == 0 )
+-    id = mIdentity;
+-  {
+-    KMail::Composer * win = KMail::makeComposer( fwdMsg, id );
+-    win->setCharset( fwdMsg->codec()->mimeName(), true );
+-    win->setBody( QString::fromUtf8( msg->createForwardBody() ) );
+-    win->show();
+-  }
+-
+   return OK;
+ }
+ 
+@@ -1329,8 +1258,95 @@
+ }
+ 
+ 
++KMForwardDigestCommand::KMForwardDigestCommand( QWidget *parent,
++           const QPtrList<KMMsgBase> &msgList, uint identity, KMail::Composer *win )
++  : KMCommand( parent, msgList ), mIdentity( identity ),
++    mWin( QGuardedPtr<KMail::Composer>( win ))
++{
++}
++
++KMForwardDigestCommand::KMForwardDigestCommand( QWidget *parent,
++           KMMessage * msg, uint identity, KMail::Composer *win )
++  : KMCommand( parent, msg ), mIdentity( identity ),
++    mWin( QGuardedPtr< KMail::Composer >( win ))
++{
++}
++
++KMCommand::Result KMForwardDigestCommand::execute()
++{
++  QPtrList<KMMessage> msgList = retrievedMsgs();
++
++  if ( msgList.count() < 2 )
++    return Undefined; // must have more than 1 for a digest
++
++  uint id = 0;
++  KMMessage *fwdMsg = new KMMessage;
++  KMMessagePart *msgPart = new KMMessagePart;
++  QString msgPartText;
++  int msgCnt = 0; // incase there are some we can't forward for some reason
++
++  // dummy header initialization; initialization with the correct identity
++  // is done below
++  fwdMsg->initHeader( id );
++  fwdMsg->setAutomaticFields( true );
++  fwdMsg->mMsg->Headers().ContentType().CreateBoundary( 1 );
++  QCString boundary( fwdMsg->mMsg->Headers().ContentType().Boundary().c_str() );
++  msgPartText = i18n("\nThis is a MIME digest forward. The content of the"
++                     " message is contained in the attachment(s).\n\n\n");
++  // iterate through all the messages to be forwarded
++  for ( KMMessage *msg = msgList.first(); msg; msg = msgList.next() ) {
++    // set the identity
++    if ( id == 0 )
++      id = msg->headerField( "X-KMail-Identity" ).stripWhiteSpace().toUInt();
++    // set the part header
++    msgPartText += "--";
++    msgPartText += QString::fromLatin1( boundary );
++    msgPartText += "\nContent-Type: MESSAGE/RFC822";
++    msgPartText += QString( "; CHARSET=%1" ).arg( msg->charset() );
++    msgPartText += '\n';
++    DwHeaders dwh;
++    dwh.MessageId().CreateDefault();
++    msgPartText += QString( "Content-ID: %1\n" ).arg( dwh.MessageId().AsString().c_str() );
++    msgPartText += QString( "Content-Description: %1" ).arg( msg->subject() );
++    if ( !msg->subject().contains( "(fwd)" ) )
++      msgPartText += " (fwd)";
++    msgPartText += "\n\n";
++    // remove headers that shouldn't be forwarded
++    msg->removePrivateHeaderFields();
++    msg->removeHeaderField( "BCC" );
++    // set the part
++    msgPartText += msg->headerAsString();
++    msgPartText += '\n';
++    msgPartText += msg->body();
++    msgPartText += '\n';     // eot
++    msgCnt++;
++    fwdMsg->link( msg, KMMsgStatusForwarded );
++  }
++
++  if ( id == 0 )
++    id = mIdentity; // use folder identity if no message had an id set
++  fwdMsg->initHeader( id );
++  msgPartText += "--";
++  msgPartText += QString::fromLatin1( boundary );
++  msgPartText += "--\n";
++  QCString tmp;
++  msgPart->setTypeStr( "MULTIPART" );
++  tmp.sprintf( "Digest; boundary=\"%s\"", boundary.data() );
++  msgPart->setSubtypeStr( tmp );
++  msgPart->setName( "unnamed" );
++  msgPart->setCte( DwMime::kCte7bit );   // does it have to be 7bit?
++  msgPart->setContentDescription( QString( "Digest of %1 messages." ).arg( msgCnt ) );
++  // THIS HAS TO BE AFTER setCte()!!!!
++  msgPart->setBodyEncoded( QCString( msgPartText.ascii() ) );
++  KCursorSaver busy( KBusyPtr::busy() );
++  KMail::Composer * win = KMail::makeComposer( fwdMsg, id );
++  win->addAttach( msgPart );
++  win->show();
++  return OK;
++}
++
+ KMRedirectCommand::KMRedirectCommand( QWidget *parent,
+-  KMMessage *msg )
++                                      KMMessage *msg )
+   : KMCommand( parent, msg )
+ {
+ }
+--- kmail/messagecomposer.cpp	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ kmail/messagecomposer.cpp	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -2155,9 +2155,11 @@
+   }
+ 
+   mSignature = signature;
+-  Q_ASSERT( !mSignature.isNull() ); // if you hit this, check gpg-agent is running, then blame gpgme.
+-  if ( mSignature.isNull() ) {
+-    KMessageBox::error( mComposeWin, i18n( "The signing operation failed for an unknown reason." ) );
++  if ( mSignature.isEmpty() ) {
++    KMessageBox::sorry( mComposeWin,
++                        i18n( "The signing operation failed. "
++                              "Please make sure that the gpg-agent program "
++                              "is running." ) );
+   }
+ }
+ 
+--- kmail/kmfoldercachedimap.cpp	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ kmail/kmfoldercachedimap.cpp	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -1208,6 +1208,10 @@
+ 
+ void KMFolderCachedImap::slotImapStatusChanged(KMFolder* folder, const QString&, bool cont)
+ {
++  if ( mSyncState == SYNC_STATE_INITIAL ){
++      kdDebug(5006) << "IMAP status changed but reset " << endl;
++      return; // we were reset
++  }
+   if ( folder->storage() == this ) {
+     --mStatusFlagsJobs;
+     if ( mStatusFlagsJobs == 0 || !cont ) // done or aborting
+@@ -2010,6 +2014,7 @@
+ // called by KMAcctCachedImap::killAllJobs
+ void KMFolderCachedImap::resetSyncState()
+ {
++  if ( mSyncState == SYNC_STATE_INITIAL ) return;
+   mSubfoldersForSync.clear();
+   mSyncState = SYNC_STATE_INITIAL;
+   close();
+--- kmail/kmail_part.rc	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ kmail/kmail_part.rc	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -2,7 +2,7 @@
+      the same menu entries at the same place in KMail and Kontact  -->
+ 
+ <!DOCTYPE kpartgui>
+-<kpartgui version="6" name="kmail_part" >
++<kpartgui version="7" name="kmail_part" >
+  <MenuBar>
+   <Menu noMerge="1" name="file" >
+    <text>&amp;File</text>
+@@ -117,6 +117,7 @@
+      <text>&amp;Forward</text>
+      <Action name="message_forward_as_attachment" />
+      <Action name="message_forward_inline" />
++     <Action name="message_forward_as_digest" />
+      <Action name="message_forward_redirect" />
+    </Menu>
+    <Action name="send_again" />
+--- kmail/kmmainwidget.cpp	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ kmail/kmmainwidget.cpp	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -1276,14 +1276,16 @@
+ 
+ 
+ //-----------------------------------------------------------------------------
+-void KMMainWidget::slotForwardMsg()
++void KMMainWidget::slotForwardInlineMsg()
+ {
+   KMMessageList* selected = mHeaders->selectedMsgs();
+   KMCommand *command = 0L;
+   if(selected && !selected->isEmpty()) {
+-    command = new KMForwardCommand( this, *selected, mFolder->identity() );
++    command = new KMForwardInlineCommand( this, *selected,
++                                          mFolder->identity() );
+   } else {
+-    command = new KMForwardCommand( this, mHeaders->currentMsg(), mFolder->identity() );
++    command = new KMForwardInlineCommand( this, mHeaders->currentMsg(),
++                                          mFolder->identity() );
+   }
+ 
+   command->start();
+@@ -1304,7 +1306,20 @@
+   command->start();
+ }
+ 
++//-----------------------------------------------------------------------------
++void KMMainWidget::slotForwardDigestMsg()
++{
++  KMMessageList* selected = mHeaders->selectedMsgs();
++  KMCommand *command = 0L;
++  if(selected && !selected->isEmpty()) {
++    command = new KMForwardDigestCommand( this, *selected, mFolder->identity() );
++  } else {
++    command = new KMForwardDigestCommand( this, mHeaders->currentMsg(), mFolder->identity() );
++  }
+ 
++  command->start();
++}
++
+ //-----------------------------------------------------------------------------
+ void KMMainWidget::slotEditMsg()
+ {
+@@ -2463,15 +2478,31 @@
+ 
+   mForwardAttachedAction = new KAction( i18n("Message->Forward->","As &Attachment..."),
+ 				       "mail_forward", Key_F, this,
+-					SLOT(slotForwardAttachedMsg()), actionCollection(),
++					SLOT(slotForwardAttachedMsg()),
++                                        actionCollection(),
+ 					"message_forward_as_attachment" );
+   mForwardActionMenu->insert( forwardAttachedAction() );
+-  mForwardAction = new KAction( i18n("&Inline..."), "mail_forward",
+-				SHIFT+Key_F, this, SLOT(slotForwardMsg()),
+-				actionCollection(), "message_forward_inline" );
++  mForwardInlineAction = new KAction( i18n("&Inline..."), "mail_forward",
++                                      SHIFT+Key_F, this,
++                                      SLOT(slotForwardInlineMsg()),
++                                      actionCollection(),
++                                      "message_forward_inline" );
+ 
+-  mForwardActionMenu->insert( forwardAction() );
++  mForwardActionMenu->insert( forwardInlineAction() );
++  mForwardDigestAction = new KAction( i18n("Message->Forward->","As Di&gest..."),
++                                      "mail_forward", 0, this,
++                                      SLOT(slotForwardDigestMsg()),
++                                      actionCollection(),
++                                      "message_forward_as_digest" );
++  mForwardActionMenu->insert( forwardDigestAction() );
++  mRedirectAction = new KAction( i18n("Message->Forward->","&Redirect..."),
++                                 "mail_forward", Key_E, this,
++                                 SLOT(slotRedirectMsg()),
++				 actionCollection(),
++                                 "message_forward_redirect" );
++  mForwardActionMenu->insert( redirectAction() );
+ 
++
+   mSendAgainAction = new KAction( i18n("Send A&gain..."), 0, this,
+ 		      SLOT(slotResendMsg()), actionCollection(), "send_again" );
+ 
+@@ -2502,12 +2533,6 @@
+ 				  "reply_list" );
+   mReplyActionMenu->insert( mReplyListAction );
+ 
+-  mRedirectAction = new KAction( i18n("Message->Forward->","&Redirect..."),
+-                                 "mail_forward",
+-				 Key_E, this, SLOT(slotRedirectMsg()),
+-				 actionCollection(), "message_forward_redirect" );
+-  mForwardActionMenu->insert( redirectAction() );
+-
+   mNoQuoteReplyAction = new KAction( i18n("Reply Without &Quote..."), SHIFT+Key_R,
+     this, SLOT(slotNoQuoteReplyToMsg()), actionCollection(), "noquotereply" );
+ 
+@@ -2572,13 +2597,13 @@
+   mToggleTodoAction = new KToggleAction(i18n("Mark Message as &To-do"), "mail_todo",
+                                  0, this, SLOT(slotSetMsgStatusTodo()),
+                                  actionCollection(), "status_todo");
+-  mToggleTodoAction->setCheckedState( i18n("Mark Message as Not &To-do") );
++  mToggleTodoAction->setCheckedState( i18n("Remove &To-do Message Mark") );
+   mStatusMenu->insert( mToggleTodoAction );
+ 
+   mToggleSentAction = new KToggleAction(i18n("Mark Message as &Sent"), "kmmsgsent",
+                                  0, this, SLOT(slotSetMsgStatusSent()),
+                                  actionCollection(), "status_sent");
+-  mToggleSentAction->setCheckedState( i18n("Mark Message as Not &Sent") );
++  mToggleSentAction->setCheckedState( i18n("Remove &Sent Mark") );
+ 
+ 
+   //----- "Mark Thread" submenu
+@@ -2615,7 +2640,7 @@
+   mToggleThreadTodoAction = new KToggleAction(i18n("Mark Thread as &To-do"), "mail_todo",
+                                        0, this, SLOT(slotSetThreadStatusTodo()),
+                                        actionCollection(), "thread_todo");
+-  mToggleThreadTodoAction->setCheckedState( i18n("Mark Thread as Not &To-do") );
++  mToggleThreadTodoAction->setCheckedState( i18n("Remove &To-do Thread Mark") );
+   mThreadStatusMenu->insert( mToggleThreadTodoAction );
+ 
+   //------- "Watch and ignore thread" actions
+@@ -2876,7 +2901,7 @@
+ void KMMainWidget::slotShowMsgSrc()
+ {
+   if ( mMsgView )
+-    mMsgView->setUpdateAttachment( false );  
++    mMsgView->setUpdateAttachment( false );
+   KMMessage *msg = mHeaders->currentMsg();
+   if ( !msg )
+     return;
+@@ -2959,6 +2984,10 @@
+       allSelectedInCommonThread = true;
+     }
+ 
++    QListViewItem *curItemParent = mHeaders->currentItem();
++    bool parent_thread = 0;
++    if ( curItemParent && curItemParent->firstChild() != 0 ) parent_thread = 1;
++
+     bool mass_actions = count >= 1;
+     bool thread_actions = mass_actions && allSelectedInCommonThread &&
+                           mHeaders->isThreaded();
+@@ -2993,8 +3022,9 @@
+     mTrashAction->setEnabled( mass_actions && !mFolder->isReadOnly() );
+     mDeleteAction->setEnabled( mass_actions && !mFolder->isReadOnly() );
+     mFindInMessageAction->setEnabled( mass_actions );
+-    mForwardAction->setEnabled( mass_actions );
++    mForwardInlineAction->setEnabled( mass_actions );
+     mForwardAttachedAction->setEnabled( mass_actions );
++    mForwardDigestAction->setEnabled( count > 1 || parent_thread );
+ 
+     forwardMenu()->setEnabled( mass_actions );
+ 
+@@ -3014,7 +3044,7 @@
+ 
+     mSendAgainAction->setEnabled( single_actions &&
+              ( mHeaders->currentMsg() && mHeaders->currentMsg()->isSent() )
+-          || ( mFolder && mHeaders->currentMsg() && 
++          || ( mFolder && mHeaders->currentMsg() &&
+               ( kmkernel->folderIsDraftOrOutbox( mFolder )
+              || kmkernel->folderIsSentMailFolder( mFolder ) ) ) );
+     mSaveAsAction->setEnabled( mass_actions );
+--- kmail/kmcommands.h	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ kmail/kmcommands.h	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -460,15 +460,15 @@
+   QString mSelection;
+ };
+ 
+-class KDE_EXPORT KMForwardCommand : public KMCommand
++class KDE_EXPORT KMForwardInlineCommand : public KMCommand
+ {
+   Q_OBJECT
+ 
+ public:
+-  KMForwardCommand( QWidget *parent, const QPtrList<KMMsgBase> &msgList,
+-                    uint identity = 0 );
+-  KMForwardCommand( QWidget *parent, KMMessage * msg,
+-                    uint identity = 0 );
++  KMForwardInlineCommand( QWidget *parent, const QPtrList<KMMsgBase> &msgList,
++                          uint identity = 0 );
++  KMForwardInlineCommand( QWidget *parent, KMMessage * msg,
++                          uint identity = 0 );
+ 
+ private:
+   virtual Result execute();
+@@ -494,6 +494,23 @@
+   QGuardedPtr<KMail::Composer> mWin;
+ };
+ 
++class KDE_EXPORT KMForwardDigestCommand : public KMCommand
++{
++  Q_OBJECT
++
++public:
++  KMForwardDigestCommand( QWidget *parent, const QPtrList<KMMsgBase> &msgList,
++			    uint identity = 0, KMail::Composer *win = 0 );
++  KMForwardDigestCommand( QWidget *parent, KMMessage * msg,
++			    uint identity = 0, KMail::Composer *win = 0 );
++
++private:
++  virtual Result execute();
++
++  uint mIdentity;
++  QGuardedPtr<KMail::Composer> mWin;
++};
++
+ class KDE_EXPORT KMRedirectCommand : public KMCommand
+ {
+   Q_OBJECT
+--- kmail/kmcomposewin.cpp	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ kmail/kmcomposewin.cpp	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -1466,8 +1466,9 @@
+   statusBar()->insertItem("", 0, 1);
+   statusBar()->setItemAlignment(0, AlignLeft | AlignVCenter);
+ 
+-  statusBar()->insertItem(i18n(" Column: %1 ").arg("     "),2,0,true);
+-  statusBar()->insertItem(i18n(" Line: %1 ").arg("     "),1,0,true);
++  statusBar()->insertItem(i18n( " Spellcheck: %1 ").arg( "   " ), 3, 0, true );
++  statusBar()->insertItem(i18n( " Column: %1 ").arg("     "), 2, 0, true);
++  statusBar()->insertItem(i18n( " Line: %1 ").arg("     "), 1, 0, true);
+ }
+ 
+ 
+@@ -4125,8 +4126,16 @@
+ //-----------------------------------------------------------------------------
+ void KMComposeWin::slotAutoSpellCheckingToggled( bool on )
+ {
+-  if ( mEditor->autoSpellChecking(on) == -1 )
++  if ( mEditor->autoSpellChecking(on) == -1 ) {
+     mAutoSpellCheckingAction->setChecked(false); // set it to false again
++  }
++
++  QString temp;
++  if ( on )
++    temp = i18n( "Spellcheck: on" );
++  else
++    temp = i18n( "Spellcheck: off" );
++  statusBar()->changeItem( temp, 3 );
+ }
+ //-----------------------------------------------------------------------------
+ void KMComposeWin::slotSpellcheck()
+@@ -4298,24 +4307,30 @@
+   }
+ 
+   QString edtText = mEditor->text();
+-  bool appendNewSig = true;
++
++  if ( mOldSigText.isEmpty() ) {
++    const KPIM::Identity &id =
++      kmkernel->
++      identityManager()->
++      identityForUoidOrDefault( mMsg->headerField( "X-KMail-Identity" ).
++                                stripWhiteSpace().toUInt() );
++    mOldSigText = id.signatureText();
++  }
++
+   // try to truncate the old sig
+-  if( !mOldSigText.isEmpty() )
+-  {
+-    if( edtText.endsWith( mOldSigText ) )
+-      edtText.truncate( edtText.length() - mOldSigText.length() );
+-    else
+-      appendNewSig = false;
++  QString sigStr = mOldSigText + "\\s*$";  // because extra spaces are appended
++  QRegExp rx( sigStr );                    // to the signature in some cases.
++  if ( edtText.contains( rx ) ) {          // hey, that rhymes!
++    edtText.remove( rx );
+   }
++
+   // now append the new sig
+   mOldSigText = ident.signatureText();
+-  if( appendNewSig )
+-  {
+-    if( (!mOldSigText.isEmpty()) &&
+-                   (GlobalSettings::self()->autoTextSignature()=="auto") )
+-      edtText.append( mOldSigText );
+-    mEditor->setText( edtText );
++  if( ( !mOldSigText.isEmpty() ) &&
++      ( GlobalSettings::self()->autoTextSignature() == "auto" ) ) {
++    edtText.append( mOldSigText );
+   }
++  mEditor->setText( edtText );
+ 
+   // disable certain actions if there is no PGP user identity set
+   // for this profile
+@@ -4599,27 +4614,29 @@
+ 
+ void KMComposeWin::fontChanged( const QFont &f )
+ {
+-  QFontDatabase *fontdb = new QFontDatabase();
++  QFont fontTemp = f;
++  fontTemp.setBold( true );
++  fontTemp.setItalic( true );
++  QFontInfo fontInfo( fontTemp );
+ 
+-  if ( fontdb->bold(f.family(), "Bold") ) {
+-    textBoldAction->setChecked( f.bold() ); // if the user has the default font with bold, then show it in the buttonstate
+-    textBoldAction->setEnabled(true);
++  if ( fontInfo.bold() ) {
++    textBoldAction->setChecked( f.bold() );
++    textBoldAction->setEnabled( true ) ;
++  } else {
++    textBoldAction->setEnabled( false );
+   }
+-  else
+-    textBoldAction->setEnabled(false);
+ 
+-  if ( fontdb->italic(f.family(), "Italic") ) {
++  if ( fontInfo.italic() ) {
+     textItalicAction->setChecked( f.italic() );
+-    textItalicAction->setEnabled(true);
++    textItalicAction->setEnabled( true ) ;
++  } else {
++    textItalicAction->setEnabled( false );
+   }
+-  else
+-    textItalicAction->setEnabled(false);
+ 
+   textUnderAction->setChecked( f.underline() );
+ 
+   fontAction->setFont( f.family() );
+   fontSizeAction->setFontSize( f.pointSize() );
+-  delete fontdb;
+ }
+ 
+ void KMComposeWin::alignmentChanged( int a )
+--- kmail/configuredialog.cpp	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ kmail/configuredialog.cpp	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -2309,6 +2309,13 @@
+     }
+     i++;
+   }
++  if ( i == encodings.size() ) {
++    // the current value of overrideCharacterEncoding is an unknown encoding => reset to Auto
++    kdWarning(5006) << "Unknown override character encoding \"" << currentOverrideEncoding
++                    << "\". Resetting to Auto." << endl;
++    mOverrideCharsetCombo->setCurrentItem( 0 );
++    GlobalSettings::self()->setOverrideCharacterEncoding( QString::null );
++  }
+ }
+ 
+ void AppearancePage::ReaderTab::doLoadFromGlobalSettings()
+--- kmail/kmfolderimap.cpp	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ kmail/kmfolderimap.cpp	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -112,7 +112,7 @@
+   if (mOpenCount > 0) mOpenCount--;
+   if (mOpenCount > 0 && !aForced) return;
+   if (isSelected() && !aForced) {
+-      kdWarning(5006) << "Trying to close the selected folder " << label() << 
++      kdWarning(5006) << "Trying to close the selected folder " << label() <<
+           " - ignoring!" << endl;
+       return;
+   }
+@@ -320,7 +320,7 @@
+   if ( !mAccount->hasCapability("uidplus") ) {
+     // Remember the status with the MD5 as key
+     // so it can be transfered to the new message
+-    mMetaDataMap.insert( aMsg->msgIdMD5(), 
++    mMetaDataMap.insert( aMsg->msgIdMD5(),
+         new KMMsgMetaData(aMsg->status(), serNum) );
+   }
+ 
+@@ -349,7 +349,7 @@
+     if ( !uidplus ) {
+       // Remember the status with the MD5 as key
+       // so it can be transfered to the new message
+-      mMetaDataMap.insert( msg->msgIdMD5(), 
++      mMetaDataMap.insert( msg->msgIdMD5(),
+           new KMMsgMetaData(msg->status(), msg->getMsgSerNum()) );
+     }
+     msg->setTransferInProgress( false );
+@@ -367,7 +367,7 @@
+ //-----------------------------------------------------------------------------
+ int KMFolderImap::addMsg(KMMessage* aMsg, int* aIndex_ret)
+ {
+-  QPtrList<KMMessage> list; 
++  QPtrList<KMMessage> list;
+   list.append(aMsg);
+   QValueList<int> index;
+   int ret = addMsg(list, index);
+@@ -458,7 +458,7 @@
+     // transfer from local folders or other accounts
+     QPtrListIterator<KMMessage> it( msgList );
+     KMMessage* msg;
+-    while ( ( msg = it.current() ) != 0 ) 
++    while ( ( msg = it.current() ) != 0 )
+     {
+       ++it;
+       if ( !msg->transferInProgress() )
+@@ -505,7 +505,7 @@
+       mMetaDataMap.insert( msg->msgIdMD5(), new KMMsgMetaData(msg->status()) );
+     }
+   }
+-  
++
+   QValueList<ulong> uids;
+   getUids(msgList, uids);
+   QStringList sets = makeSets(uids, false);
+@@ -611,7 +611,7 @@
+   // start personal namespace listing and send it directly to slotListResult
+   for ( QStringList::Iterator it = personal.begin(); it != personal.end(); ++it )
+   {
+-    KMail::ListJob* job = new KMail::ListJob( mAccount, type, this, 
++    KMail::ListJob* job = new KMail::ListJob( mAccount, type, this,
+ 	mAccount->addPathToNamespace( *it ) );
+     job->setNamespace( *it );
+     connect( job, SIGNAL(receivedFolders(const QStringList&, const QStringList&,
+@@ -632,7 +632,7 @@
+         this, SLOT(slotCheckNamespace(const QStringList&, const QStringList&,
+             const QStringList&, const QStringList&, const ImapAccountBase::jobData&)));
+     job->start();
+-  }  
++  }
+ }
+ 
+ //-----------------------------------------------------------------------------
+@@ -644,13 +644,13 @@
+ {
+   kdDebug(5006) << "slotCheckNamespace - " << subfolderNames.join(",") << endl;
+ 
+-  // get a correct foldername: 
++  // get a correct foldername:
+   // strip / and make sure it does not contain the delimiter
+   QString name = jobData.path.mid( 1, jobData.path.length()-2 );
+   name.remove( mAccount->delimiterForNamespace( name ) );
+   if ( name.isEmpty() ) {
+     // happens when an empty namespace is defined
+-    slotListResult( subfolderNames, subfolderPaths, 
++    slotListResult( subfolderNames, subfolderPaths,
+         subfolderMimeTypes, subfolderAttributes, jobData );
+     return;
+   }
+@@ -658,9 +658,9 @@
+   folder()->createChildFolder();
+   KMFolderNode *node = 0;
+   for ( node = folder()->child()->first(); node;
+-        node = folder()->child()->next()) 
++        node = folder()->child()->next())
+   {
+-    if ( !node->isDir() && node->name() == name ) 
++    if ( !node->isDir() && node->name() == name )
+       break;
+   }
+   if ( subfolderNames.isEmpty() )
+@@ -680,9 +680,9 @@
+       kdDebug(5006) << "found namespace folder " << name << endl;
+       if ( !mAccount->listOnlyOpenFolders() )
+       {
+-        KMFolderImap* nsFolder = 
++        KMFolderImap* nsFolder =
+           static_cast<KMFolderImap*>(static_cast<KMFolder*>(node)->storage());
+-        nsFolder->slotListResult( subfolderNames, subfolderPaths, 
++        nsFolder->slotListResult( subfolderNames, subfolderPaths,
+             subfolderMimeTypes, subfolderAttributes, jobData );
+       }
+     } else
+@@ -692,17 +692,17 @@
+       KMFolder *fld = folder()->child()->createFolder( name );
+       if ( fld ) {
+         KMFolderImap* f = static_cast<KMFolderImap*> ( fld->storage() );
+-        f->initializeFrom( this, mAccount->addPathToNamespace( name ), 
++        f->initializeFrom( this, mAccount->addPathToNamespace( name ),
+             "inode/directory" );
+         f->close();
+         if ( !mAccount->listOnlyOpenFolders() )
+         {
+-          f->slotListResult( subfolderNames, subfolderPaths, 
++          f->slotListResult( subfolderNames, subfolderPaths,
+               subfolderMimeTypes, subfolderAttributes, jobData );
+         }
+       }
+       kmkernel->imapFolderMgr()->contentsChanged();
+-    }  
++    }
+   }
+ }
+ 
+@@ -748,8 +748,8 @@
+                                    const ImapAccountBase::jobData& jobData )
+ {
+   mSubfolderState = imapFinished;
+-  //kdDebug(5006) << label() << ": folderNames=" << subfolderNames << " folderPaths=" 
+-  //<< subfolderPaths << " mimeTypes=" << subfolderMimeTypes << endl;  
++  //kdDebug(5006) << label() << ": folderNames=" << subfolderNames << " folderPaths="
++  //<< subfolderPaths << " mimeTypes=" << subfolderMimeTypes << endl;
+ 
+   // don't react on changes
+   kmkernel->imapFolderMgr()->quiet(true);
+@@ -770,9 +770,9 @@
+     KMFolderImap* parent = findParent( subfolderPaths.first(), subfolderNames.first() );
+     if ( parent )
+     {
+-      kdDebug(5006) << "KMFolderImap::slotListResult - pass listing to " 
++      kdDebug(5006) << "KMFolderImap::slotListResult - pass listing to "
+         << parent->label() << endl;
+-      parent->slotListResult( subfolderNames, subfolderPaths, 
++      parent->slotListResult( subfolderNames, subfolderPaths,
+           subfolderMimeTypes, subfolderAttributes, jobData );
+       // cleanup
+       QStringList list;
+@@ -798,13 +798,13 @@
+     // create folders if necessary
+     for ( node = folder()->child()->first(); node;
+           node = folder()->child()->next() ) {
+-      if ( !node->isDir() && node->name() == subfolderNames[i] ) 
++      if ( !node->isDir() && node->name() == subfolderNames[i] )
+         break;
+     }
+     if ( node ) {
+       f = static_cast<KMFolderImap*>(static_cast<KMFolder*>(node)->storage());
+-    } 
+-    else if ( subfolderPaths[i].upper() != "/INBOX/" ) 
++    }
++    else if ( subfolderPaths[i].upper() != "/INBOX/" )
+     {
+       kdDebug(5006) << "create folder " << subfolderNames[i] << endl;
+       KMFolder *fld = folder()->child()->createFolder(subfolderNames[i]);
+@@ -829,12 +829,12 @@
+ 
+       f->initializeFrom( this, subfolderPaths[i], subfolderMimeTypes[i] );
+       f->setChildrenState( subfolderAttributes[i] );
+-      if ( mAccount->listOnlyOpenFolders() && 
+-           f->hasChildren() != FolderStorage::ChildrenUnknown ) 
++      if ( mAccount->listOnlyOpenFolders() &&
++           f->hasChildren() != FolderStorage::ChildrenUnknown )
+       {
+         settingsChanged = true;
+       }
+-      
++
+       if ( settingsChanged )
+       {
+         // tell the tree our information changed
+@@ -915,7 +915,7 @@
+ }
+ 
+ //-----------------------------------------------------------------------------
+-void KMFolderImap::checkFolders( const QStringList& subfolderNames, 
++void KMFolderImap::checkFolders( const QStringList& subfolderNames,
+     const QString& myNamespace )
+ {
+   QPtrList<KMFolder> toRemove;
+@@ -928,14 +928,14 @@
+       KMFolderImap* imapFld = static_cast<KMFolderImap*>( fld->storage() );
+       // as more than one namespace can be listed in the root folder we need to make sure
+       // that the folder is within the current namespace
+-      bool isInNamespace = ( myNamespace.isEmpty() || 
++      bool isInNamespace = ( myNamespace.isEmpty() ||
+           myNamespace == mAccount->namespaceForFolder( imapFld ) );
+-      kdDebug(5006) << node->name() << " in namespace " << myNamespace << ":" << 
++      kdDebug(5006) << node->name() << " in namespace " << myNamespace << ":" <<
+         isInNamespace << endl;
+       // ignore some cases
+       QString name = node->name();
+-      bool ignore = ( ( this == mAccount->rootFolder() ) && 
+-          ( imapFld->imapPath() == "/INBOX/" || 
++      bool ignore = ( ( this == mAccount->rootFolder() ) &&
++          ( imapFld->imapPath() == "/INBOX/" ||
+             mAccount->isNamespaceFolder( name ) ||
+ 	    !isInNamespace ) );
+       // additional sanity check for broken folders
+@@ -960,7 +960,7 @@
+ }
+ 
+ //-----------------------------------------------------------------------------
+-void KMFolderImap::initializeFrom( KMFolderImap* parent, QString folderPath, 
++void KMFolderImap::initializeFrom( KMFolderImap* parent, QString folderPath,
+                                    QString mimeType )
+ {
+   setAccount( parent->account() );
+@@ -1060,7 +1060,7 @@
+ //-----------------------------------------------------------------------------
+ ulong KMFolderImap::lastUid()
+ {
+-  if ( mLastUid > 0 ) 
++  if ( mLastUid > 0 )
+       return mLastUid;
+   open();
+   if (count() > 0)
+@@ -1083,7 +1083,7 @@
+   if (job->error()) {
+     if ( job->error() != KIO::ERR_ACCESS_DENIED ) {
+       // we suppress access denied messages because they are normally a result of
+-      // explicitely set ACLs. Do not save this information (e.g. setNoContent) so that 
++      // explicitely set ACLs. Do not save this information (e.g. setNoContent) so that
+       // we notice when this changes
+       mAccount->handleJobError( job, i18n("Error while querying the server status.") );
+     }
+@@ -1095,19 +1095,19 @@
+     int a = cstr.find("X-uidValidity: ");
+     int b = cstr.find("\r\n", a);
+     QString uidv;
+-    if ( (b - a - 15) >= 0 ) 
++    if ( (b - a - 15) >= 0 )
+         uidv = cstr.mid(a + 15, b - a - 15);
+     a = cstr.find("X-Access: ");
+     b = cstr.find("\r\n", a);
+     QString access;
+-    if ( (b - a - 10) >= 0 ) 
++    if ( (b - a - 10) >= 0 )
+         access = cstr.mid(a + 10, b - a - 10);
+     mReadOnly = access == "Read only";
+     a = cstr.find("X-Count: ");
+     b = cstr.find("\r\n", a);
+     int exists = -1;
+     bool ok = false;
+-    if ( (b - a - 9) >= 0 ) 
++    if ( (b - a - 9) >= 0 )
+         exists = cstr.mid(a + 9, b - a - 9).toInt(&ok);
+     if ( !ok ) exists = -1;
+     QString startUid;
+@@ -1275,7 +1275,7 @@
+         uid = (*it).items.remove(uid);
+         if ( msgBase->getMsgSerNum() > 0 ) {
+           saveMsgMetaData( static_cast<KMMessage*>(msgBase) );
+-        }        
++        }
+       }
+       else break;  // happens only, if deleted mails reappear on the server
+     }
+@@ -1382,6 +1382,8 @@
+ //-----------------------------------------------------------------------------
+ void KMFolderImap::flagsToStatus(KMMsgBase *msg, int flags, bool newMsg)
+ {
++  if ( !msg ) return;
++
+   const KMMsgStatus oldStatus = msg->status();
+   // Set flags if they are new
+   if ( (flags & 4) && (oldStatus & KMMsgStatusFlag) == 0 )
+@@ -1455,7 +1457,7 @@
+   (*it).cdata += QCString(data, data.size() + 1);
+   int pos = (*it).cdata.find("\r\n--IMAPDIGEST");
+   if ( pos == -1 ) {
+-    // if we do not find the pattern in the complete string we will not find 
++    // if we do not find the pattern in the complete string we will not find
+     // it in a substring.
+     return;
+   }
+@@ -1552,7 +1554,7 @@
+         if ( folder()->isSystemFolder() && imapPath() == "/INBOX/"
+             && kmkernel->filterMgr()->atLeastOneIncomingFilterAppliesTo( mAccount->id() ) )
+             mAccount->execFilters( msg->getMsgSerNum() );
+-        
++
+         if ( count() > 1 ) {
+           unGetMsg(count() - 1);
+         }
+@@ -2120,7 +2122,7 @@
+   // set the deleted flag for all messages in the folder
+   KURL url = mAccount->getUrl();
+   url.setPath( imapPath() + ";UID=1:*");
+-  if ( mAccount->makeConnection() == ImapAccountBase::Connected ) 
++  if ( mAccount->makeConnection() == ImapAccountBase::Connected )
+   {
+     KIO::SimpleJob *job = KIO::file_delete(url, FALSE);
+     KIO::Scheduler::assignJobToSlave(mAccount->slave(), job);
+@@ -2216,7 +2218,7 @@
+       createFolder( *it );
+     }
+   }
+-  mFoldersPendingCreation.clear();  
++  mFoldersPendingCreation.clear();
+ }
+ 
+ //-----------------------------------------------------------------------------
+@@ -2268,10 +2270,10 @@
+ //-----------------------------------------------------------------------------
+ bool KMFolderImap::isMoveable() const
+ {
+-  return ( hasChildren() == HasNoChildren && 
++  return ( hasChildren() == HasNoChildren &&
+       !folder()->isSystemFolder() ) ? true : false;
+ }
+- 
++
+ //-----------------------------------------------------------------------------
+ const ulong KMFolderImap::serNumForUID( ulong uid )
+ {
+--- kmail/configure.in.in	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ kmail/configure.in.in	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -6,8 +6,9 @@
+ 
+ missing_indexlib=ignore
+ AC_ARG_ENABLE(indexlib,
+-	AC_HELP_STRING([--enable-indexlib],[Enable full-text indexing in KMail.]),
+-	AC_DEFINE(HAVE_INDEXLIB,1,[Define if you want full-text indexing in KMail])
++	AC_HELP_STRING([--enable-indexlib],[Enable EXPERIMENTAL full-text indexing in KMail.
++ Use are your own risk!]),
++	AC_DEFINE(HAVE_INDEXLIB,1,[Define if you want EXPERIMENTAL full-text indexing in KMail])
+ 	missing_indexlib=no
+ 	)
+ 
+--- kmail/kmfoldersearch.cpp	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ kmail/kmfoldersearch.cpp	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -78,6 +78,7 @@
+     mRoot = 0;
+     mSearchPattern = 0;
+     mFoundCount = 0;
++    mSearchCount = 0;
+ 
+     mProcessNextBatchTimer = new QTimer();
+     connect(mProcessNextBatchTimer, SIGNAL(timeout()), this, SLOT(slotProcessNextBatch()));
+@@ -154,6 +155,7 @@
+     }
+ 
+     mFoundCount = 0;
++    mSearchCount = 0;
+     mRunning = true;
+     mRunByIndex = false;
+     // check if this query can be done with the index
+@@ -217,6 +219,7 @@
+                 account->ignoreJobsForFolder( folder );
+             }
+             folder->storage()->search( 0 );
++            mSearchCount += folder->count();
+             folder->close();
+         }
+     }
+@@ -282,6 +285,7 @@
+           SLOT( slotSearchFolderResult( KMFolder*, QValueList<Q_UINT32>,
+                                         const KMSearchPattern*, bool ) ) );
+       --mRemainingFolders;
++      mSearchCount += folder->count();
+       folder->close();
+       mOpenedFolders.remove( folder );
+       if ( mRemainingFolders <= 0 )
+@@ -940,18 +944,18 @@
+       unsigned int count = mFoldersCurrentlyBeingSearched[folder];
+       mFoldersCurrentlyBeingSearched.replace( folder, count+1 );
+     } else {
+-      connect( folder->storage(), 
++      connect( folder->storage(),
+               SIGNAL( searchDone( KMFolder*, Q_UINT32, const KMSearchPattern*, bool ) ),
+               this,
+-              SLOT( slotSearchExamineMsgDone( KMFolder*, Q_UINT32, 
++              SLOT( slotSearchExamineMsgDone( KMFolder*, Q_UINT32,
+                       const KMSearchPattern*, bool ) ) );
+       mFoldersCurrentlyBeingSearched.insert( folder, 1 );
+     }
+     folder->storage()->search( search()->searchPattern(), serNum );
+ }
+ 
+-void KMFolderSearch::slotSearchExamineMsgDone( KMFolder* folder, 
+-                                               Q_UINT32 serNum, 
++void KMFolderSearch::slotSearchExamineMsgDone( KMFolder* folder,
++                                               Q_UINT32 serNum,
+                                                const KMSearchPattern* pattern,
+                                                bool matches )
+ {
+@@ -1103,10 +1107,10 @@
+       unsigned int count = mFoldersCurrentlyBeingSearched[aFolder];
+       mFoldersCurrentlyBeingSearched.replace( aFolder, count+1 );
+     } else {
+-      connect( aFolder->storage(), 
++      connect( aFolder->storage(),
+               SIGNAL( searchDone( KMFolder*, Q_UINT32, const KMSearchPattern*, bool ) ),
+               this,
+-              SLOT( slotSearchExamineMsgDone( KMFolder*, Q_UINT32, 
++              SLOT( slotSearchExamineMsgDone( KMFolder*, Q_UINT32,
+                       const KMSearchPattern*, bool ) ) );
+       mFoldersCurrentlyBeingSearched.insert( aFolder, 1 );
+     }
+--- kmail/kmfilterdlg.h	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ kmail/kmfilterdlg.h	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -124,12 +124,18 @@
+   /** Called when the user clicks the 'Delete' button. Deletes the
+       current filter. */
+   void slotDelete();
++  /** Called when the user clicks the 'Top' button. Moves the current
++      filter to the top line. */
++  void slotTop();
+   /** Called when the user clicks the 'Up' button. Moves the current
+       filter up one line. */
+   void slotUp();
+   /** Called when the user clicks the 'Down' button. Moves the current
+       filter down one line. */
+   void slotDown();
++  /** Called when the user clicks the 'Bottom' button. Moves the current
++      filter to the bottom line. */
++  void slotBottom();
+   /** Called when the user clicks the 'Rename' button. Pops up a
+       dialog prompting to enter the new name. */
+   void slotRename();
+@@ -140,14 +146,16 @@
+   /** The listbox displaying the filter list. */
+   QListBox *mListBox;
+   /** The various action buttons. */
+-  QPushButton *mBtnNew, *mBtnCopy, *mBtnDelete, *mBtnUp, *mBtnDown, *mBtnRename;
++  QPushButton *mBtnNew, *mBtnCopy, *mBtnDelete, *mBtnRename;
++  QPushButton *mBtnTop, *mBtnUp, *mBtnDown, *mBtnBot;
+   /** The index of the currently selected item. */
+   int mIdxSelItem;
+   bool mShowLater;
+ private:
+   void enableControls();
+   void insertFilter( KMFilter* aFilter );
+-  void swapNeighbouringFilters( int untouchedOne, int movedOne);
++  void swapFilters( int from, int to );
++  void swapNeighbouringFilters( int untouchedOne, int movedOne );
+   bool bPopFilter;
+ };
+ 
+--- kmail/kmmainwidget.h	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ kmail/kmmainwidget.h	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -112,8 +112,9 @@
+   KAction *replyListAction() const { return mReplyListAction; }
+   KActionMenu * replyMenu() const { return mReplyActionMenu; }
+   KActionMenu *forwardMenu() const { return mForwardActionMenu; }
+-  KAction *forwardAction() const { return mForwardAction; }
++  KAction *forwardInlineAction() const { return mForwardInlineAction; }
+   KAction *forwardAttachedAction() const { return mForwardAttachedAction; }
++  KAction *forwardDigestAction() const { return mForwardDigestAction; }
+   KAction *redirectAction() const { return mRedirectAction; }
+   KAction *noQuoteReplyAction() const { return mNoQuoteReplyAction; }
+   KActionMenu *filterMenu() const { return mFilterMenu; }
+@@ -373,8 +374,9 @@
+   void slotReplyAuthorToMsg();
+   void slotReplyListToMsg();
+   void slotReplyAllToMsg();
+-  void slotForwardMsg();
++  void slotForwardInlineMsg();
+   void slotForwardAttachedMsg();
++  void slotForwardDigestMsg();
+   void slotRedirectMsg();
+   void slotNoQuoteReplyToMsg();
+   void slotSubjectFilter();
+@@ -407,9 +409,10 @@
+     *mSaveAttachmentsAction, *mOpenAction, *mViewSourceAction;
+   // Composition actions
+   KAction *mPrintAction, *mReplyAction, *mReplyAllAction, *mReplyAuthorAction,
+-      *mReplyListAction,
+-      *mForwardAction, *mForwardAttachedAction, *mRedirectAction,
+-      *mNoQuoteReplyAction;
++    *mReplyListAction,
++    *mForwardInlineAction, *mForwardAttachedAction, *mForwardDigestAction,
++    *mRedirectAction,
++    *mNoQuoteReplyAction;
+   KActionMenu *mReplyActionMenu;
+   KActionMenu *mForwardActionMenu;
+   // Filter actions
+--- kmail/networkaccount.h	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ kmail/networkaccount.h	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -25,6 +25,8 @@
+ #ifndef __KMAIL_NETWORKACCOUNT_H__
+ #define __KMAIL_NETWORKACCOUNT_H__
+ 
++#include <qguardedptr.h>
++
+ #include "kmaccount.h"
+ 
+ #include "sieveconfig.h"
+@@ -125,7 +127,7 @@
+ 
+   protected:
+     KMail::SieveConfig mSieveConfig;
+-    KIO::Slave * mSlave;
++    QGuardedPtr<KIO::Slave> mSlave;
+     QString mLogin, mPasswd, mAuth, mHost;
+     unsigned short int mPort;
+     bool mStorePasswd : 1;
+--- kmail/kmreadermainwin.h	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ kmail/kmreadermainwin.h	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -43,8 +43,9 @@
+   void slotReplyAllToMsg();
+   void slotReplyAuthorToMsg();
+   void slotReplyListToMsg();
+-  void slotForwardMsg();
++  void slotForwardInlineMsg();
+   void slotForwardAttachedMsg();
++  void slotForwardDigestMsg();
+   void slotRedirectMsg();
+   void slotShowMsgSrc();
+ 
+@@ -60,8 +61,8 @@
+   QMap<int,KMFolder*> mMenuToFolder;
+   // a few actions duplicated from kmmainwidget
+   KAction *mPrintAction, *mReplyAction, *mReplyAllAction, *mReplyAuthorAction,
+-          *mReplyListAction, *mForwardAction,
+-          *mForwardAttachedAction, *mRedirectAction,
++          *mReplyListAction, *mForwardInlineAction,
++          *mForwardAttachedAction, *mForwardDigestAction, *mRedirectAction,
+           *mViewSourceAction;
+   KActionMenu *mReplyActionMenu;
+   KActionMenu *mForwardActionMenu;
+--- kmail/kmsender.cpp	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ kmail/kmsender.cpp	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -173,7 +173,7 @@
+   }
+ 
+   //Ensure the message is correctly and fully parsed
+-  
++
+   /* The above was added by Marc and seems to be necessary to ensure
+    * the mail is in a sane state before sending. The unGet makes the
+    * attached unencrypted version of the mail (if there is one ) disappear.
+@@ -331,10 +331,10 @@
+         imapSentFolder =
+           kmkernel->imapFolderMgr()->findIdString( mCurrentMsg->fcc() );
+     }
+-    // No, or no usable sentFolder, and no, or no usable imapSentFolder, 
++    // No, or no usable sentFolder, and no, or no usable imapSentFolder,
+     // let's try the on in the identity
+     if ( ( sentFolder == 0 || sentFolder->isReadOnly() )
+-      && ( imapSentFolder == 0 || imapSentFolder->isReadOnly() ) 
++      && ( imapSentFolder == 0 || imapSentFolder->isReadOnly() )
+       && !id.fcc().isEmpty() )
+     {
+       sentFolder = kmkernel->folderMgr()->findIdString( id.fcc() );
+@@ -600,7 +600,7 @@
+   QStringList to, cc, bcc;
+   QString sender;
+   extractSenderToCCAndBcc( mCurrentMsg, &sender, &to, &cc, &bcc );
+-  
++
+   // MDNs are required to have an empty envelope from as per RFC2298.
+   if ( messageIsDispositionNotificationReport( mCurrentMsg ) && GlobalSettings::self()->sendMDNsWithEmptySender() )
+     sender = "<>";
+@@ -1052,13 +1052,15 @@
+   QString query = "headers=0&from=";
+   query += KURL::encode_string( sender );
+ 
+-  if ( !to.empty() )
+-    query += "&to=" + to.join( "&to=" );
+-  if ( !cc.empty() )
+-    query += "&cc=" + cc.join( "&cc=" );
+-  if ( !bcc.empty() )
+-    query += "&bcc=" + bcc.join( "&bcc=" );
++  QStringList::ConstIterator it;
+ 
++  for ( it = to.begin(); it != to.end(); ++it )
++    query += "&to=" + KURL::encode_string(*it);
++  for ( it = cc.begin(); it != cc.end(); ++it )
++    query += "&cc=" + KURL::encode_string(*it);
++  for ( it = bcc.begin(); it != bcc.end(); ++it )
++    query += "&bcc=" + KURL::encode_string(*it);
++
+   KMTransportInfo * ti = mSender->transportInfo();
+ 
+   if ( ti->specifyHostname )
+--- doc/kmail/menus.docbook	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ doc/kmail/menus.docbook	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -926,16 +926,24 @@
+ </menuchoice>
+ </term>
+ <listitem>
+-<para>Forwards the message to a new recipient. Using <guimenuitem>Inline</guimenuitem>,
+-the message's text and some important header fields will be copied to the body of the new message
+-with a text marking the forwarded part. Attachments will be forwarded
+-as attachments of the new message. Using <guimenuitem>As Attachment</guimenuitem>
+-the message and its attachments will become an attachment of the new message. The original message
+-headers will be included in the forwarded message, too.
+-<guimenuitem>Redirect</guimenuitem> works like forward, except that the message stays the same (even
+-the <guilabel>From:</guilabel> field). The user who redirected the message is added in special
+-header fields (<literal>Redirect-From</literal>, <literal>Redirect-Date</literal>, <literal>Redirect-To</literal>,
+-&etc;).</para>
++<para>Forwards the message to a new recipient.
++Using <guimenuitem>As Attachment</guimenuitem> the message and its attachments
++will become an attachment of the new message. The original message headers will
++be included in the forwarded message, too.
++
++Using <guimenuitem>Inline</guimenuitem>, the message's text and some important
++header fields will be copied to the body of the new message with a text marking
++the forwarded part. Attachments will be forwarded as attachments of the new
++message.
++
++<guimenuitem>As Digest</guimenuitem> concatenates the messages together as a
++MIME digest attachment.
++
++<guimenuitem>Redirect</guimenuitem> works like forward, except that the message
++stays the same (even the <guilabel>From:</guilabel> field). The user who
++redirected the message is added in special header fields (<literal>Redirect-From</literal>,
++<literal>Redirect-Date</literal>, <literal>Redirect-To</literal>, &etc;).
++</para>
+ </listitem>
+ </varlistentry>
+ 
+--- kmailcvt/filter_lnotes.cxx	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ kmailcvt/filter_lnotes.cxx	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -124,7 +124,6 @@
+                             addMessage_fastImport( inf, folder, tempfile->name() );
+ 
+                         tempfile->unlink();
+-                        delete tempfile;
+                         state = 0;
+ 
+                         int currentPercentage = (int) ( ( (float) f.at() / filenameInfo.size() ) * 100 );
+--- kaddressbook/xxport/kde2_xxport.desktop	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ kaddressbook/xxport/kde2_xxport.desktop	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -65,7 +65,7 @@
+ Comment[km]=កម្មវិធី​ជំនួយ​ដើម្បី​នាំចូល​សៀវភៅ​អាសយដ្ឋាន KDE 2 ចាស់ៗ
+ Comment[lt]=Priedas senosios KDE 2 adresų knygelės importui
+ Comment[ms]=Plug masuk untuk import buku alamat lama KDE 2
+-Comment[nb]=Tilleggsprogram for å importere adressebok fra KDE2
++Comment[nb]=Programtillegg for å importere adressebok fra KDE2
+ Comment[nds]=Moduul för't Importeren vun KDE2-Adressböker
+ Comment[nl]=Plugin voor het importeren van het oude KDE 2-adresboek
+ Comment[nn]=Programtillegg for å importera den gamle KDE 2 adresseboka
+--- kaddressbook/xxport/csv_xxport.desktop	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ kaddressbook/xxport/csv_xxport.desktop	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -64,7 +64,7 @@
+ Comment[km]=កម្មវិធី ជំនួយ​ដើម្បី​នាំចូល និង នាំចេញ​ទំនាក់ទំនង​ក្នុង​ទ្រង់ទ្រាយ​ជា CSV ។
+ Comment[lt]=Priedas, skirtas kontaktų eksportui ir importui CSV formatu
+ Comment[ms]=Plug masuk untuk import dan eksport alamat perhubungan di dalam format CSV
+-Comment[nb]=Tilleggsprogram for import/eksport av kontakter i CSV-format
++Comment[nb]=Programtillegg for import/eksport av kontakter i CSV-format
+ Comment[nds]=Moduul för't Im- un Exporteren vun Kontakten in't CSV-Formaat
+ Comment[nl]=Plugin voor het importeren en exporteren van contactpersonen in CSV-formaat
+ Comment[nn]=Programtillegg for å importera og eksportera kontaktar i CSV-format
+--- kaddressbook/xxport/vcard_xxport.desktop	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ kaddressbook/xxport/vcard_xxport.desktop	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -67,7 +67,7 @@
+ Comment[km]=កម្មវិធី​ជំនួយ​ដើម្បី​នាំចូល និង នាំចេញ​ទំនាក់ទំនង​ក្នុង​ទ្រង់ទ្រាយ​ជា vCard
+ Comment[lt]=Įskiepis kontaktų importavimui ir eksportavimui vCard formatu
+ Comment[ms]=Plugin untuk mengimpot dan mengekspot orang hubungan dalam format vCard 
+-Comment[nb]=Tilleggsprogram for import og eksport av kontakter i vCard-format
++Comment[nb]=Programtillegg for import og eksport av kontakter i vCard-format
+ Comment[nds]=Moduul för't Im-/Exporteren vun Kontakten in't vCard-Formaat
+ Comment[nl]=Plugin voor het importeren en exporteren van contactpersonen in vCard-formaat
+ Comment[nn]=Programtillegg for å importera og eksportera kontaktar i vCard-format
+--- kaddressbook/xxport/pab_xxport.desktop	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ kaddressbook/xxport/pab_xxport.desktop	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -22,7 +22,7 @@
+ Name[km]=កម្មវិធី​ជំនួយ KAB MS Exchange Personal Addressbook XXPort
+ Name[lt]=KAB MS Exchange asmeninės adresų knygelės XXPort priedas
+ Name[ms]=Plugin Buku Alamat Peribadi KAB MS Exchange  XXPort Plugin
+-Name[nb]=KAB-tilleggsprogram for import fra MS Exchange
++Name[nb]=KAB-programtillegg for import fra MS Exchange
+ Name[nds]=MSExchange-Importmoduul för KAdressbook
+ Name[nl]=KAB MS Exchange Personal Addressbook XXPort-plugin
+ Name[nn]=KAB MS Exchange personleg adressebok XXPort programtillegg
+@@ -64,7 +64,7 @@
+ Comment[km]=កម្មវិធី​ជំនួយ​ដើម្បី​នាំចូល​សៀវភៅ​អាសយដ្ឋាន​ផ្ទាល់​ខ្លួន​របស់ MS Exchange
+ Comment[lt]=Priedas leidžiantis importuoti MS Exchange asmenines adresų knygeles
+ Comment[ms]=Plugin untuk mengimpot Buku Alamat Peribadi MS Exchange 
+-Comment[nb]=Tilleggsprogram for import av personlige adressebøker fra MS Exchange
++Comment[nb]=Programtillegg for import av personlige adressebøker fra MS Exchange
+ Comment[nds]=Moduul för't Importeren vun persöönliche Adressböker ut MS Exchange
+ Comment[nl]=Plugin voor het importeren van MS Exchange-adresboeken
+ Comment[nn]=Programtillegg for å imortera MS Exchange personleg adressebok
+--- kaddressbook/xxport/opera_xxport.desktop	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ kaddressbook/xxport/opera_xxport.desktop	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -65,7 +65,7 @@
+ Comment[km]=កម្មវិធី​ជំនួយ​ដើម្បី​នាំចូល​ទំនាក់ទំនង​របស់ Opera
+ Comment[lt]=Priedas Opera kontaktų importui
+ Comment[ms]=Plug masuk untuk import alamat perhubungan Opera
+-Comment[nb]=Tilleggsprogram for å importere Opera-kontakter
++Comment[nb]=Programtillegg for å importere Opera-kontakter
+ Comment[nds]=Modul för't Importeren vun Opera-Kontakten
+ Comment[nl]=Plugin voor het importeren an Opera's contactpersonen
+ Comment[nn]=Programtillegg for å imortera Opera-kontaktar
+--- kaddressbook/xxport/gnokii_xxport.desktop	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ kaddressbook/xxport/gnokii_xxport.desktop	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -23,7 +23,7 @@
+ Name[km]=កម្មវិធី​ជំនួយ KAB Mobile Phone XXPort
+ Name[lt]=KAB mobilaus telefono XXPort priedas
+ Name[ms]=Plug masuk KAB Fon Mudah Alih XXPort
+-Name[nb]=KAB-tilleggsprogram for mobiltelefon
++Name[nb]=KAB-programtillegg for mobiltelefon
+ Name[nds]=Mobiltelefoon-Im-/Exportmoduul för KAdressbook
+ Name[nl]=KAB Mobiele Telefoon XXPort-plugin
+ Name[nn]=KAB Mobiltelefon XXPort programtillegg
+@@ -64,7 +64,7 @@
+ Comment[km]=កម្មវិធី​ជំនួយ​ទូរស័ព្ទ​ចល័ត​ដើម្បី​នាំចូល និង នាំចេញ​ធាតុ​សៀវភៅ​អាសយដ្ឋាន
+ Comment[lt]=Priedas skirtas importuoti ir eksportuoti adresų knygelės įrašus į mobiliuosius telefonus
+ Comment[ms]=Plug masuk Fon Mudah Alih untuk Import dan Eksport Input Buku Alamat
+-Comment[nb]=Tilleggsprogram for import/eksport av adressebok fra/til mobiltelefon
++Comment[nb]=Programtillegg for import/eksport av adressebok fra/til mobiltelefon
+ Comment[nds]=Mobiltelefoon-Moduul för't Im- un Exporteren vun KAdressbook-Indrääg
+ Comment[nl]=Mobiele-telefoon-plugin voor het importeren en exporteren van adresboekitems
+ Comment[nn]=Programtillegg for å importera og eksportera adressebokoppføringar i mobiltelefon
+--- kaddressbook/xxport/bookmark_xxport.desktop	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ kaddressbook/xxport/bookmark_xxport.desktop	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -64,7 +64,7 @@
+ Comment[km]=កម្មវិធី​ជំនួយ​ដើម្បី​នាំចេញ​អាសយដ្ឋាន​បណ្ដាញ​របស់​ទំនាក់ទំនង ជា​ចំណាំ
+ Comment[lt]=Priedas skirtas žiniatinklio adresų kontaktuose eksportavimui į žymeles
+ Comment[ms]= Plug masuk untuk eksport alamat web untuk perhubungan sebagai tanda laman
+-Comment[nb]=Tilleggsprogram som eksporterer kontaktenes nett-addresser som bokmerker
++Comment[nb]=Programtillegg som eksporterer kontaktenes nett-addresser som bokmerker
+ Comment[nds]=Moduul för't Exporteren vun Kontakt-Nettadressen as Leestekens
+ Comment[nl]=Plugin voor het exporteren van de webadressen van de contactpersonen als bladwijzers
+ Comment[nn]=Programtillegg for å eksportera nettadresser av kontaktar som bokmerker
+--- kaddressbook/xxport/ldif_xxport.desktop	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ kaddressbook/xxport/ldif_xxport.desktop	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -66,7 +66,7 @@
+ Comment[km]=កម្មវិធី​ជំនួយ​ដើម្បី​នាំចូល និង នាំចេញ​ទំនាក់ទំនង​ក្នុង​ទ្រង់ទ្រាយ​ជា Netscape និង Mozilla LDIF
+ Comment[lt]=Priedas, skirtas kontaktų importavimui ir eksportavimui Netscape ir Mozilla LDIFF formatu
+ Comment[ms]=Plug masuk untuk import dan eksport alamat perhubungan di dalam format LDIF Netscape dan Mozilla
+-Comment[nb]=Tilleggsprogram for import/eksport av kontakter i Netscape og Mozillas LDIF-format
++Comment[nb]=Programtillegg for import/eksport av kontakter i Netscape og Mozillas LDIF-format
+ Comment[nds]=Moduul för't Im- un Exporteren vun Kontakten in't LDIF-Formaat vun Netscape und Mozilla
+ Comment[nl]=Plugin voor het importeren en exporteren van contactpersonen in Netscape's en Mozilla's LDIF-formaat
+ Comment[nn]=Programtillegg for å importera og eksportera kontaktar i Netscape og Mozilla LDIF-format
+--- kaddressbook/xxport/eudora_xxport.desktop	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ kaddressbook/xxport/eudora_xxport.desktop	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -65,7 +65,7 @@
+ Comment[km]=កម្មវិធី​ជំនួយ​ដើម្បី​នាំចូល និង នាំចេញ​ទំនាក់ទំនង​របស់ Eudora
+ Comment[lt]=Priedas Eudora kontaktų importui ir eksportui
+ Comment[ms]=Plug masuk untuk import dan eksport alamat perhubungan Eudora
+-Comment[nb]=Tilleggsprogram for import/eksport av Eudora-kontakter
++Comment[nb]=Programtillegg for import/eksport av Eudora-kontakter
+ Comment[nds]=Moduul för't Im- un Exporteren vun Eudora-Kontakten
+ Comment[nl]=Plugin voor het importeren en exporteren van Eudora-contactpersonen
+ Comment[nn]=Programtillegg for å importera og eksportera Eudora-kontaktar
+--- kaddressbook/features/distributionlist.desktop	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ kaddressbook/features/distributionlist.desktop	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -26,7 +26,7 @@
+ Name[km]=កម្មវិធី​ជំនួយ​បញ្ជី​ចែកចាយ​របស់ KAB
+ Name[lt]=KAB platinimo sąrašo priedas
+ Name[ms]=Plugin Senarai Agihan KAB 
+-Name[nb]=KAB tilleggsprogram for distribusjonslister
++Name[nb]=KAB programtillegg for distribusjonslister
+ Name[nds]=Verdeellist-Moduul för KAdressbook
+ Name[nl]=KAB Distributielijst-plugin
+ Name[nn]=Programtillegg for KAB distribusjonsliste
+@@ -72,7 +72,7 @@
+ Comment[km]=កម្មវិធី​ជំនួយ​ដើម្បី​គ្រប់គ្រង​បញ្ជី​ចែកចាយ
+ Comment[lt]=Priedas platinimo sąrašų tvarkymui
+ Comment[ms]=Plug masuk untuk pengurusan senarai edaran
+-Comment[nb]=Tilleggsprogram for å håndtere distribusjonslister
++Comment[nb]=Programtillegg for å håndtere distribusjonslister
+ Comment[nds]=Moduul för't Plegen vun Verdeellisten
+ Comment[nl]=Plugin voor het beheren van distributielijsten
+ Comment[nn]=Programtillegg for handtering av distibusjonsliste
+--- kaddressbook/features/resourceselection.desktop	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ kaddressbook/features/resourceselection.desktop	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -68,7 +68,7 @@
+ Comment[km]=កម្មវិធី​ជំនួយ​ដើម្បី​គ្រប់គ្រង​សៀវភៅ​អាសយដ្ឋាន
+ Comment[lt]=Priedas adresų knygelių tvarkymui
+ Comment[ms]=Plugin untuk pengurusan buku alamat
+-Comment[nb]=Tilleggsprogram for å håndtere adressebøker
++Comment[nb]=Programtillegg for å håndtere adressebøker
+ Comment[nds]=Moduul för't Plegen vun Adressböker
+ Comment[nl]=Plugin voor het beheren van adresboeken
+ Comment[nn]=Programtillegg for handtering av adressebøker
+--- kaddressbook/features/resourceselection.cpp	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ kaddressbook/features/resourceselection.cpp	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -191,6 +191,7 @@
+   }
+ 
+   resource->setResourceName( i18n( "%1 address book" ).arg( type ) );
++  resource->setAddressBook(core()->addressBook());
+ 
+   KRES::ConfigDialog dlg( this, QString( "contact" ), resource );
+ 
+--- Makefile.am.in	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ Makefile.am.in	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -38,7 +38,7 @@
+ COMPILE_BEFORE_knotes = libkdepim
+ COMPILE_BEFORE_konsolekalendar = libkdepim
+ 
+-AUTOMAKE_OPTIONS = foreign 1.5
++AUTOMAKE_OPTIONS = foreign 1.6.1
+ DISTCLEANFILES = inst-apps
+ 
+ MAINTAINERCLEANFILES = subdirs configure.in acinclude.m4 SUBDIRS
+--- kitchensync/multisynk/konnectorpair.cpp	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ kitchensync/multisynk/konnectorpair.cpp	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -29,6 +29,7 @@
+   : mManager( new KonnectorManager ), mConfig( 0 )
+ {
+   mUid = KApplication::randomString( 10 );
++  mStrategy = ResolveManually;
+ }
+ 
+ KonnectorPair::~KonnectorPair()
+--- libkcal/resourcecachedconfig.cpp	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ libkcal/resourcecachedconfig.cpp	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -52,7 +52,7 @@
+            SLOT( slotIntervalStateChanged( int ) ) );
+   QHBox *intervalBox = new QHBox( mGroup );
+   new QLabel( i18n("Interval in minutes"), intervalBox );
+-  mIntervalSpin = new QSpinBox( intervalBox );
++  mIntervalSpin = new QSpinBox( 1,900, 1,intervalBox );
+   mIntervalSpin->setEnabled( false );
+ }
+ 
+@@ -92,7 +92,7 @@
+            SLOT( slotIntervalStateChanged( int ) ) );
+   QHBox *intervalBox = new QHBox( mGroup );
+   new QLabel( i18n("Interval in minutes"), intervalBox );
+-  mIntervalSpin = new QSpinBox( intervalBox );
++  mIntervalSpin = new QSpinBox( 1,900, 1,intervalBox );
+   mIntervalSpin->setEnabled( false );
+ 
+   new QRadioButton( i18n("Delayed after changes"), mGroup );
+--- libkcal/libical/zoneinfo/America/Argentina/Jujuy.ics	(.../tags/KDE/3.5.4/kdepim)	(revision 0)
++++ libkcal/libical/zoneinfo/America/Argentina/Jujuy.ics	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -0,0 +1,14 @@
++BEGIN:VCALENDAR
++PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
++VERSION:2.0
++BEGIN:VTIMEZONE
++TZID:/softwarestudio.org/Olson_20011030_5/America/Argentina/Jujuy
++X-LIC-LOCATION:America/Argentina/Jujuy
++BEGIN:STANDARD
++TZOFFSETFROM:-0300
++TZOFFSETTO:-0300
++TZNAME:ART
++DTSTART:19700101T000000
++END:STANDARD
++END:VTIMEZONE
++END:VCALENDAR
+--- libkcal/libical/zoneinfo/America/Argentina/Cordoba.ics	(.../tags/KDE/3.5.4/kdepim)	(revision 0)
++++ libkcal/libical/zoneinfo/America/Argentina/Cordoba.ics	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -0,0 +1,14 @@
++BEGIN:VCALENDAR
++PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
++VERSION:2.0
++BEGIN:VTIMEZONE
++TZID:/softwarestudio.org/Olson_20011030_5/America/Argentina/Cordoba
++X-LIC-LOCATION:America/Argentina/Cordoba
++BEGIN:STANDARD
++TZOFFSETFROM:-0300
++TZOFFSETTO:-0300
++TZNAME:ART
++DTSTART:19700101T000000
++END:STANDARD
++END:VTIMEZONE
++END:VCALENDAR
+--- libkcal/libical/zoneinfo/America/Argentina/Catamarca.ics	(.../tags/KDE/3.5.4/kdepim)	(revision 0)
++++ libkcal/libical/zoneinfo/America/Argentina/Catamarca.ics	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -0,0 +1,14 @@
++BEGIN:VCALENDAR
++PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
++VERSION:2.0
++BEGIN:VTIMEZONE
++TZID:/softwarestudio.org/Olson_20011030_5/America/Argentina/Catamarca
++X-LIC-LOCATION:America/Argentina/Catamarca
++BEGIN:STANDARD
++TZOFFSETFROM:-0300
++TZOFFSETTO:-0300
++TZNAME:ART
++DTSTART:19700101T000000
++END:STANDARD
++END:VTIMEZONE
++END:VCALENDAR
+--- libkcal/libical/zoneinfo/America/Argentina/Mendoza.ics	(.../tags/KDE/3.5.4/kdepim)	(revision 0)
++++ libkcal/libical/zoneinfo/America/Argentina/Mendoza.ics	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -0,0 +1,14 @@
++BEGIN:VCALENDAR
++PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
++VERSION:2.0
++BEGIN:VTIMEZONE
++TZID:/softwarestudio.org/Olson_20011030_5/America/Argentina/Mendoza
++X-LIC-LOCATION:America/Argentina/Mendoza
++BEGIN:STANDARD
++TZOFFSETFROM:-0300
++TZOFFSETTO:-0300
++TZNAME:ART
++DTSTART:19700101T000000
++END:STANDARD
++END:VTIMEZONE
++END:VCALENDAR
+--- libkcal/libical/zoneinfo/America/Argentina/Buenos_Aires.ics	(.../tags/KDE/3.5.4/kdepim)	(revision 0)
++++ libkcal/libical/zoneinfo/America/Argentina/Buenos_Aires.ics	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -0,0 +1,14 @@
++BEGIN:VCALENDAR
++PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
++VERSION:2.0
++BEGIN:VTIMEZONE
++TZID:/softwarestudio.org/Olson_20011030_5/America/Argentina/Buenos_Aires
++X-LIC-LOCATION:America/Argentina/Buenos_Aires
++BEGIN:STANDARD
++TZOFFSETFROM:-0300
++TZOFFSETTO:-0300
++TZNAME:ART
++DTSTART:19700101T000000
++END:STANDARD
++END:VTIMEZONE
++END:VCALENDAR
+--- libkcal/libical/zoneinfo/zones.tab	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ libkcal/libical/zoneinfo/zones.tab	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -55,6 +55,11 @@
+ +0181200 -0630400 America/Anguilla
+ +0170300 -0614800 America/Antigua
+ -0071200 -0481200 America/Araguaina
++-0343600 -0582700 America/Argentina/Buenos_Aires
++-0282800 -0654700 America/Argentina/Catamarca
++-0312400 -0641100 America/Argentina/Cordoba
++-0241100 -0651800 America/Argentina/Jujuy
++-0325300 -0684900 America/Argentina/Mendoza
+ +0123000 -0685800 America/Aruba
+ -0251600 -0574000 America/Asuncion
+ +0130600 -0593700 America/Barbados
+@@ -220,19 +225,17 @@
+ +0013300 +1102000 Asia/Kuching
+ +0292000 +0475900 Asia/Kuwait
+ +0221400 +1133500 Asia/Macao
+++0221400 +1133500 Asia/Macau
+ +0593400 +1504800 Asia/Magadan
+--0050700 +1192400 Asia/Makassar
+ +0143500 +1210000 Asia/Manila
+ +0233600 +0583500 Asia/Muscat
+ +0351000 +0332200 Asia/Nicosia
+ +0550200 +0825500 Asia/Novosibirsk
+ +0550000 +0732400 Asia/Omsk
+-+0511300 +0512100 Asia/Oral
+ +0113300 +1045500 Asia/Phnom_Penh
+ +0000200 +1092000 Asia/Pontianak
+ +0390100 +1254500 Asia/Pyongyang
+ +0251700 +0513200 Asia/Qatar
+-+0444800 +0652800 Asia/Qyzylorda
+ +0164700 +0961000 Asia/Rangoon
+ +0243800 +0464300 Asia/Riyadh
+ +0104500 +1064000 Asia/Saigon
+--- libkcal/libical/zoneinfo/Asia/Macau.ics	(.../tags/KDE/3.5.4/kdepim)	(revision 0)
++++ libkcal/libical/zoneinfo/Asia/Macau.ics	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -0,0 +1,14 @@
++BEGIN:VCALENDAR
++PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
++VERSION:2.0
++BEGIN:VTIMEZONE
++TZID:/softwarestudio.org/Olson_20011030_5/Asia/Macau
++X-LIC-LOCATION:Asia/Macau
++BEGIN:STANDARD
++TZOFFSETFROM:+0800
++TZOFFSETTO:+0800
++TZNAME:CST
++DTSTART:19700101T000000
++END:STANDARD
++END:VTIMEZONE
++END:VCALENDAR
+--- libkcal/resourcecached.h	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ libkcal/resourcecached.h	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -121,19 +121,11 @@
+     int saveInterval() const;
+ 
+     /**
+-      Set time of last load.
+-    */
+-    void setLastLoad( const QDateTime & );
+-    /**
+       Return time of last load.
+     */
+     QDateTime lastLoad() const;
+ 
+     /**
+-      Set time of last save.
+-    */
+-    void setLastSave( const QDateTime & );
+-    /**
+       Return time of last save.
+     */
+     QDateTime lastSave() const;
+--- kpilot/conduits/vcalconduit/todo-conduit.desktop	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ kpilot/conduits/vcalconduit/todo-conduit.desktop	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -69,7 +69,7 @@
+ Name[nds]=Opgaven (KOrganizer)
+ Name[nl]=Taken (KOrganizer)
+ Name[nn]=Oppgåveliste (KOrganizer)
+-Name[pl]=Do zrobienia (Organizator)
++Name[pl]=Do zrobienia (Korganizer)
+ Name[pt]=Por Fazer (KOrganizer)
+ Name[pt_BR]=Tarefas (KOrganizer)
+ Name[ru]=Задачи (KOrganizer)
+--- kpilot/conduits/vcalconduit/vcal-conduit.desktop	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ kpilot/conduits/vcalconduit/vcal-conduit.desktop	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -29,7 +29,7 @@
+ Name[nds]=Kalenner (KOrganizer)
+ Name[nl]=Agenda (KOrganizer)
+ Name[nn]=Kalender (KOrganizer)
+-Name[pl]=Kalendarz (Organizator)
++Name[pl]=Kalendarz (Korganizer)
+ Name[pt]=Calendário (KOrganizer)
+ Name[pt_BR]=Calendário (KOrganizer)
+ Name[ru]=Календарь (KOrganizer)
+--- kontact/plugins/newsticker/kcmkontactknt.cpp	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ kontact/plugins/newsticker/kcmkontactknt.cpp	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -79,7 +79,7 @@
+ 
+   mTitle->setText( title );
+   mURL->setText( url );
+-
++  mTitle->setFocus();
+   connect( mTitle, SIGNAL( textChanged( const QString& ) ),
+            this, SLOT( modified() ) );
+   connect( mURL, SIGNAL( textChanged( const QString& ) ),
+--- ktnef/gui/ktnef.desktop	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ ktnef/gui/ktnef.desktop	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -63,7 +63,7 @@
+ Comment[hu]=Nézegetőprogram TNEF-fájlokhoz
+ Comment[is]=Sýnir/lesari fyrir TNEF skrár
+ Comment[it]=Un visualizzatore/estrattore di file TNEF
+-Comment[ja]=TNEF ファイル用のビューア/extractor
++Comment[ja]=TNEF ファイルのためのビューア/展開ツール
+ Comment[km]=កម្មវិធី​មើល និង ស្រង់​ឯកសារ TNEF
+ Comment[lt]=TNEF bylų žiūryklė - išpakuotojas
+ Comment[ms]=Pemapar/pengekstrak untuk fail TNEF 
+--- korganizer/kogroupwareprefspage.ui	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ korganizer/kogroupwareprefspage.ui	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -84,6 +84,9 @@
+                                 <property name="name">
+                                     <cstring>publishDelay</cstring>
+                                 </property>
++                                <property name="minValue">
++                                    <number>1</number>
++                                </property>
+                                 <property name="whatsThis" stdset="0">
+                                     <string>Configure minimum the interval of time in minutes between each upload here. This configuration is only effective in case you choose to publish your information automatically.</string>
+                                 </property>
+@@ -591,6 +594,22 @@
+         <slot>slotChanged()</slot>
+     </connection>
+ </connections>
++<tabstops>
++    <tabstop>groupwareTab</tabstop>
++    <tabstop>publishEnable</tabstop>
++    <tabstop>publishDelay</tabstop>
++    <tabstop>publishDays</tabstop>
++    <tabstop>publishUrl</tabstop>
++    <tabstop>publishUser</tabstop>
++    <tabstop>publishPassword</tabstop>
++    <tabstop>publishSavePassword</tabstop>
++    <tabstop>retrieveEnable</tabstop>
++    <tabstop>fullDomainRetrieval</tabstop>
++    <tabstop>retrieveUrl</tabstop>
++    <tabstop>retrieveUser</tabstop>
++    <tabstop>retrievePassword</tabstop>
++    <tabstop>retrieveSavePassword</tabstop>
++</tabstops>
+ <includes>
+     <include location="global" impldecl="in declaration">kdepimmacros.h</include>
+     <include location="local" impldecl="in implementation">kogroupwareprefspage.ui.h</include>
+--- korganizer/plugins/projectview/projectview.desktop	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ korganizer/plugins/projectview/projectview.desktop	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -77,7 +77,7 @@
+ Comment[km]=កម្មវិធី​ជំនួយ​នេះ​ផ្ដល់​នូវ​ទិដ្ឋភាព​រៀបចំ​គម្រោង​សម្រាប់ korganizer (ដូចជា ទិដ្ឋភាព​ការងារ​ត្រូវ​ធ្វើ ឬ ទិដ្ឋភាព​ខែ​ជាដើម) ។ បើ​អ្នក​ធ្វើ​ឲ្យ​កម្មវិធី​ជំនួយ​នេះ​ប្រើ​បាន អ្នក​នឹង​អាច​ប្ដូរ​ទិដ្ឋភាព​គម្រោង ហើយ​មើល​ព្រឹត្តិការណ៍​របស់​អ្នក​ដូចជា​នៅ​ក្នុងកម្មវិធី​រៀបចំ​គម្រោង​អញ្ចឹង​ដែរ ។
+ Comment[lt]=Šis priedas pateikia KOrganizaer projekto planavimo vaizdą (panašiai kaip darbų ar mėnesio vaizdai). Jei įjungsite šį įskiepį, galėsite peršokti į projekto vaizdą ir peržiūrėti savo darbų sąrašą kaip projektą.
+ Comment[ms]=Plugin ini menyediakan paparan perancangan projek untuk KOrganizer (seperti tugasan atau paparan bulan). Jika plugin ini diaktifkan, anda boleh beralih ke paparan projek dan paparkan senarai tugasan seperti dalam perancang projek. 
+-Comment[nb]=Dette tilleggsprogrammet lager en prosjektplan-visning for KOrganizer (som i gjørelister og månedsvisninger). Slår du på dette tilleggsprogrammet kan du bytte til prosjektvisning og se på gjørelista som i en prosjektplan.
++Comment[nb]=Dette programtilleggmet lager en prosjektplan-visning for KOrganizer (som i gjørelister og månedsvisninger). Slår du på dette programtilleggmet kan du bytte til prosjektvisning og se på gjørelista som i en prosjektplan.
+ Comment[nds]=Mit dit Moduul kannst Du in KOrganizer en Projektplaan-Ansicht opropen (jüst as de Opgaven- oder Maandansichten). Wenn Du dit Moduul aktiveerst, kannst Du na de Projektansicht wesseln un Dien Opgavenlist as mit en Projektplaner ankieken.
+ Comment[nl]=Deze plugin biedt een projectweergave voor KOrganizer (net zoals een takenlijst of maandweergave). Wanneer u deze plugin aanzet, kunt u deze weergave aanzetten om uw takenlijst te bekijken als een projectplanner.
+ Comment[nn]=Dette programtillegget lagar ei prosjektplanvising for KOrganizer (slik som oppgåve- eller månadsvisingane). Dersom du brukar dette programtillegget, kan du visa oppgåvelista som i ein prosjektplanleggjar.
+--- korganizer/plugins/printing/whatsnext/whatsnextprint.desktop	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ korganizer/plugins/printing/whatsnext/whatsnextprint.desktop	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -56,7 +56,7 @@
+ Comment[km]=កម្មវិធី​ជំនួយ​នេះ​អនុញ្ញាត​ឲ្យ​អ្នក​បោះពុម្ព​បញ្ជី​នៃ​ព្រឹត្តិការណ៍ និង ការងារ​ត្រូវ​ធ្វើ​បន្តបន្ទាប់
+ Comment[lt]=Šis priedas leidžia spausdinti sąrašą visų artėjančių įvykių ir darbų.
+ Comment[ms]=Plugin ini membenarkan anda mencetak senarai semua peristiwa dan tugasan mendatang. 
+-Comment[nb]=Med dette tilleggsprogrammet kan du skrive ut en liste over kommende hendelser og ting som skal gjøres.
++Comment[nb]=Med dette programtilleggmet kan du skrive ut en liste over kommende hendelser og ting som skal gjøres.
+ Comment[nds]=Mit dit Moduul kann en List vun de direktemang nakamen Begeefnissen un Opgaven utdruckt warrn.
+ Comment[nl]=Deze plugin maakt het mogelijk om een lijst van alle komende evenementen en taken uit te printen.
+ Comment[nn]=Dette programtillegget lèt deg skriva ut ei liste over alle dei komande hendingane og oppføringane i hugselista.
+--- korganizer/plugins/printing/journal/journalprint.desktop	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ korganizer/plugins/printing/journal/journalprint.desktop	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -56,7 +56,7 @@
+ Comment[km]=កម្មវិធី​ជំនួយ​នេះ​អនុញ្ញាត​ឲ្យ​អ្នក​បោះពុម្ព​ធាតុ​ទិនានុប្បវត្តិ (ធាតុ​កំណត់ហេតុ​ប្រចាំ​ថ្ងៃ) ។
+ Comment[lt]=Šis priedas leidžia spausdinti dienyno įrašus.
+ Comment[ms]=Plugin ini membenarkan anda mencetak entri jurnal  (entri diari).
+-Comment[nb]=Med dette tilleggsprogrammet kan du skrive ut oppføringer i dagboka.
++Comment[nb]=Med dette programtilleggmet kan du skrive ut oppføringer i dagboka.
+ Comment[nds]=Mit dit Moduul köönt Daagbook-Indrääg utdruckt warrn.
+ Comment[nl]=Deze plugin maakt het mogelijk om journalen uit te printen (dagboekitems).
+ Comment[nn]=Dette programtillegget lèt deg skriva ut dagboksoppføringar.
+--- korganizer/plugins/printing/list/listprint.desktop	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ korganizer/plugins/printing/list/listprint.desktop	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -56,7 +56,7 @@
+ Comment[km]=កម្មវិធី​ជំនួយ​នេះ​អនុញ្ញាត​ឲ្យ​អ្នក​បោះពុម្ព​ព្រឹត្តិការណ៍ និង ការងារ​ត្រូវ​ធ្វើក្នុង​ទម្រង់​ជា​បញ្ជី ។
+ Comment[lt]=Šis priedas leidžia spausdinti įvykius ir darbus sąrašo forma.
+ Comment[ms]=Plugin ini membenarkan anda mencetak peristiwa dan tugasan dalam borang senarai.
+-Comment[nb]=Med dette tilleggsprogrammet kan du skrive ut hendelser og gjørelister på liste-form.
++Comment[nb]=Med dette programtilleggmet kan du skrive ut hendelser og gjørelister på liste-form.
+ Comment[nds]=Mit dit Moduul köönt Begeefnissen un Opgaven as Listen utdruckt warrn.
+ Comment[nl]=Deze plugin maakt het mogelijk om evenementen en taken in lijstvorm uit te printen.
+ Comment[nn]=Dette programtillegget lèt deg skriva ut hendingar og hugselister på listeform.
+--- korganizer/plugins/timespanview/timespanview.desktop	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ korganizer/plugins/timespanview/timespanview.desktop	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -56,7 +56,7 @@
+ Comment[km]=កម្មវិធី​ជំនួយ​នេះ​ផ្ដល់​នូវ​ទិដ្ឋភាព​រយៈពេល​សម្រាប់ korganizer (ដូចជា ទិដ្ឋភាព​ការងារ​ត្រូវ​ធ្វើ ឬ ទិដ្ឋភាព​ខែ​ជាដើម) ។ បើ​អ្នក​ធ្វើ​ឲ្យ​កម្មវិធី​ជំនួយ​នេះ​ប្រើ​បាន អ្នក​នឹង​អាច​ប្ដូរ​ទិដ្ឋភាព​រយៈពេល ហើយ​មើល​ព្រឹត្តិការណ៍​របស់​អ្នក​ដូចជា​នៅ​ក្នុងដ្យាក្រាម Gantt អញ្ចឹង​ដែរ ។
+ Comment[lt]=Šis priedas korganizer programoje sudaro galimybę apžvelgti laiko tarpą (pvz., darbų arba mėnesio peržiūra). Įgalinus šį priedą galėsite persijungti į laiko tarpo peržiūrą ir žiūrėti įvykius tarsi Gantt diagramoje.
+ Comment[ms]=Plugin ini menyediakan paparan kitar waktu  untuk korganizer (seperti tugasan atau paparan bulan). Jika plugin ini diaktifkan,anda boleh beralih ke paparan kitar masa dan paparkan peristiwa seperti dalam diagram Gantt. 
+-Comment[nb]=Dette tilleggsprogrammet lager en periodevisning for korganizer (slik som gjøreliste og månedsvisning). Hvis du slår på dette tilleggsprogrammet kan du bytte til periodevisning og se hendelser som i et Gantt-diagram.
++Comment[nb]=Dette programtilleggmet lager en periodevisning for korganizer (slik som gjøreliste og månedsvisning). Hvis du slår på dette programtilleggmet kan du bytte til periodevisning og se hendelser som i et Gantt-diagram.
+ Comment[nds]=Mit dit Moduul kannst Du in KOrganizer en Tietbruuk-Ansicht opropen (jüst as de Opgaven- oder Maandansichten). Wenn Du dit Moduul aktiveerst, kannst Du na de Tietbruukansicht wesseln un Dien Begeefnissen as Ganntt-Diagramm ankieken.
+ Comment[nl]=Deze plugin biedt een weergave voor KOrganizer (zoals de takenlijst en de maandweergave). Wanneer u deze plugin inschakelt kunt u kiezen voor een weergave waarin u uw evenementen in een Gantt-diagram kunt bekijken.
+ Comment[pl]=Ta wtyczka tworzy widok zakresu czasu w KOrganizerze (tak jak widok zadań do zrobienia lub widok miesiąca). Po włączeniu tej wtyczki możliwe jest przełączenie się na widok zakresu czasu i przeglądanie zdarzeń jak na diagramie Gantta.
+--- korganizer/plugins/hebrew/configdialog.cpp	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ korganizer/plugins/hebrew/configdialog.cpp	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -26,7 +26,7 @@
+ #include <kstandarddirs.h>
+ #include <ksimpleconfig.h>
+ 
+-ConfigDialog::ConfigDialog(QWidget * parent):KDialogBase(Plain, i18n("Configure Holidays"), Ok, Ok,
++ConfigDialog::ConfigDialog(QWidget * parent):KDialogBase(Plain, i18n("Configure Holidays"), Ok|Cancel, Ok,
+             parent)
+ {
+   QFrame *topFrame = plainPage();
+--- korganizer/korganizer_configfreebusy.desktop	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ korganizer/korganizer_configfreebusy.desktop	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -39,7 +39,7 @@
+ Name[nds]=Free/Bunnen
+ Name[nl]=Vrij/bezet
+ Name[nn]=Ledig/opptatt
+-Name[pl]=Wolny/Zajęty
++Name[pl]=Wolny/zajęty
+ Name[pt]=Livre/Ocupado
+ Name[pt_BR]=Livre/Ocupado
+ Name[ru]=Занятое время
+--- korganizer/korganizer.desktop	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ korganizer/korganizer.desktop	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -25,7 +25,7 @@
+ Comment[hu]=Határidőnapló és eseményszervező
+ Comment[is]=Dagbók og skipulag
+ Comment[it]=Programma di calendario e di agenda
+-Comment[ja]=カレンダー、スケジュールプログラム
++Comment[ja]=カレンダーとスケジュール管理プログラム
+ Comment[km]=កម្មវិធី​ប្រតិទិន និង កាលវិភាគ
+ Comment[lt]=Kalendoriaus ir planavimo programa
+ Comment[lv]=Kalendāra un Plānošanas Programma
+@@ -35,7 +35,7 @@
+ Comment[nb]=Et kalender- og tidsplanleggingsprogram
+ Comment[nds]=Kalenner un Tietplaner
+ Comment[nl]=Agenda- en afsprakenprogramma
+-Comment[nn]=Kalender- og planleggjingsprogram
++Comment[nn]=Kalender- og planleggingsprogram
+ Comment[nso]=Lenaneo la Peakanyo ya Tshupamabaka
+ Comment[pl]=Kalendarz i terminarz
+ Comment[pt]=Calendário e Programa de Escalonamento
+--- korganizer/resourceview.cpp	(.../tags/KDE/3.5.4/kdepim)	(revision 574589)
++++ korganizer/resourceview.cpp	(.../branches/KDE/3.5/kdepim)	(revision 574589)
+@@ -452,7 +452,7 @@
+ void ResourceView::editResource()
+ {
+   ResourceItem *item = currentItem();
+-
++  if (!item) return;
+   ResourceCalendar *resource = item->resource();
+ 
+   KRES::ConfigDialog dlg( this, QString("calendar"), resource,




More information about the pkg-kde-commits mailing list