[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