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

List:       kde-commits
Subject:    KDE/kdepim/kmail
From:       Bruno Virlet <bruno.virlet () gmail ! com>
Date:       2007-07-23 16:49:13
Message-ID: 1185209353.849868.18333.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 691440 by bvirlet:

Forward port revision 689897

 M  +5 -1      copyfolderjob.cpp  
 M  +1 -1      kmfolder.cpp  
 M  +5 -0      kmfoldermgr.cpp  
 M  +3 -0      kmfoldermgr.h  
 M  +28 -2     kmfoldertree.cpp  
 M  +3 -0      kmfoldertree.h  


--- trunk/KDE/kdepim/kmail/copyfolderjob.cpp #691439:691440
@@ -66,7 +66,10 @@
   if ( mNewFolder )
     mNewFolder->setMoveInProgress( false );
   if ( mStorage )
-    mStorage->close( "copyfolder" );
+  {
+    mStorage->folder()->setMoveInProgress( false );
+    mStorage->close("copyfolder");
+  }
 }
 
 /*
@@ -237,6 +240,7 @@
   }
 
   mNewFolder->setMoveInProgress( true );
+  mStorage->folder()->setMoveInProgress( true );
 
   // inherit the folder type
   // FIXME we should probably copy over most if not all settings
--- trunk/KDE/kdepim/kmail/kmfolder.cpp #691439:691440
@@ -299,7 +299,7 @@
 
 bool KMFolder::noContent() const
 {
-  return mStorage->noContent();
+  return mStorage ? mStorage->noContent() : true;
 }
 
 void KMFolder::setNoContent( bool aNoContent )
--- trunk/KDE/kdepim/kmail/kmfoldermgr.cpp #691439:691440
@@ -552,6 +552,9 @@
   RenameJob* job = new RenameJob( folder->storage(), newName, newParent );
   connect( job, SIGNAL( renameDone( const QString&, bool ) ),
       this, SLOT( slotRenameDone( const QString&, bool ) ) );
+  connect( job, SIGNAL( renameDone( const QString&, bool ) ),
+ 	   this, SIGNAL( folderMoveOrCopyOperationFinished() ) );
+
   job->start();
 }
 
@@ -560,6 +563,8 @@
 {
   kDebug(5006) << "Copy folder: " << folder->prettyUrl() << endl;
   CopyFolderJob* job = new CopyFolderJob( folder->storage(), newParent );
+  connect( job, SIGNAL( folderCopyComplete( bool ) ),
+	   this, SIGNAL( folderMoveOrCopyOperationFinished() ) );
   job->start();
 }
 
--- trunk/KDE/kdepim/kmail/kmfoldermgr.h #691439:691440
@@ -165,6 +165,9 @@
   /** Emitted when a field of the header of a specific message changed. */
   void msgHeaderChanged(KMFolder*, int idx);
 
+  /** Emitted when a folder has been moved or copied */
+  void folderMoveOrCopyOperationFinished();
+
 protected:
 
   /** Auxillary function to facilitate removal of a folder */
--- trunk/KDE/kdepim/kmail/kmfoldertree.cpp #691439:691440
@@ -264,6 +264,11 @@
   repaint();
 }
 
+//----------------------------------------------------------------------------
+void KMFolderTree::slotFolderMoveOrCopyOperationFinished()
+{
+  setDragEnabled( true );
+}
 
 //-----------------------------------------------------------------------------
 bool KMFolderTreeItem::acceptDrag(QDropEvent* e) const
@@ -272,7 +277,7 @@
     return false; // nothing can be dragged into search folders
 
   if ( KPIM::MailList::canDecode( e->mimeData() ) ) {
-    if ( !mFolder || mFolder->isReadOnly() ||
+    if ( !mFolder || mFolder->moveInProgress() || mFolder->isReadOnly() ||
         (mFolder->noContent() && childCount() == 0) ||
         (mFolder->noContent() && isOpen()) ) {
       return false;
@@ -390,6 +395,9 @@
   connect(kmkernel->folderMgr(), SIGNAL(folderRemoved(KMFolder*)),
           this, SLOT(slotFolderRemoved(KMFolder*)));
 
+  connect(kmkernel->folderMgr(), SIGNAL(folderMoveOrCopyOperationFinished()),
+	  this, SLOT(slotFolderMoveOrCopyOperationFinished()));
+
   connect(kmkernel->imapFolderMgr(), SIGNAL(changed()),
           this, SLOT(doFolderListChanged()));
 
@@ -827,6 +835,11 @@
     doFolderSelected( qlvi );
   }
   removeFromFolderToItemMap( aFolder );
+
+  if ( dropItem == fti ) { // The removed item is the dropItem
+    dropItem = 0; // it becomes invalid
+  }
+
   delete fti;
   updateCopyActions();
 }
@@ -1409,6 +1422,9 @@
     dropItem = i;
     autoopen_timer.start( autoopenTime );
   }
+  else
+    dropItem = 0;
+
   e->setAccepted( acceptDrag(e) );
 }
 
@@ -1475,7 +1491,14 @@
     Q3ListViewItem *item = itemAt( contentsToViewport(e->pos()) );
     KMFolderTreeItem *fti = static_cast<KMFolderTreeItem*>(item);
     int action = -1;
-
+    // Check that each pointer is not null
+    for ( QList<QPointer<KMFolder> >::ConstIterator it = \
mCopySourceFolders.constBegin(); +	  it != mCopySourceFolders.constEnd(); ++it ) {
+      if ( ! (*it) ) {
+	fti = 0;
+	break;
+      }
+    }
     if (fti && mCopySourceFolders.count() == 1)
     {
       KMFolder *source = mCopySourceFolders.first();
@@ -2024,6 +2047,9 @@
 {
   kDebug(5006) << k_funcinfo << "source: " << sources << " destination: " << \
destination << " move: " << move << endl;  
+  // Disable drag during copy operation since it prevents from many crashes
+  setDragEnabled( false );
+
   KMFolderDir* parent = &(kmkernel->folderMgr()->dir());
   if ( destination )
     parent = destination->createChildFolder();
--- trunk/KDE/kdepim/kmail/kmfoldertree.h #691439:691440
@@ -274,6 +274,9 @@
   /** called, when a folder has been deleted */
   void slotFolderRemoved(KMFolder *);
 
+  /** called, when a folder has been moved or copied, successfully or not */
+  void slotFolderMoveOrCopyOperationFinished();
+
   /** Updates the folder tree (delayed), causing a "blink" */
   void refresh();
 


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

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