kdelibs/kdelibs-4.2.1-kde#917170.patch

131 lines
5.0 KiB
Diff

Index: kio/kio/copyjob.h
===================================================================
--- kio/kio/copyjob.h (revision 917169)
+++ kio/kio/copyjob.h (revision 917170)
@@ -245,6 +245,7 @@
protected:
CopyJob(CopyJobPrivate &dd);
+ void emitResult();
private:
Q_PRIVATE_SLOT(d_func(), void slotStart())
Index: kio/kio/copyjob.cpp
===================================================================
--- kio/kio/copyjob.cpp (revision 917169)
+++ kio/kio/copyjob.cpp (revision 917170)
@@ -153,7 +153,7 @@
QList<CopyInfo> dirs;
KUrl::List dirsToRemove;
KUrl::List m_srcList;
- KUrl::List m_skippedSourceUrls;
+ KUrl::List m_successSrcList;
KUrl::List::const_iterator m_currentStatSrc;
bool m_bCurrentSrcIsDir;
bool m_bCurrentOperationIsLink;
@@ -770,10 +770,6 @@
void CopyJobPrivate::skip( const KUrl & sourceUrl )
{
- // If this is one if toplevel sources,
- // remove it from d->m_srcList, for a correct FilesRemoved() signal
- // But don't do it right away, we have iterators into that list (#157601)
- m_skippedSourceUrls.append( sourceUrl );
dirsToRemove.removeAll( sourceUrl );
}
@@ -857,6 +853,7 @@
{
//this is required for the undo feature
emit q->copyingDone( q, (*it).uSource, (*it).uDest, (*it).mtime, true, false );
+ m_successSrcList.append((*it).uSource);
m_directoriesCopied.append( *it );
dirs.erase( it );
}
@@ -1118,6 +1115,7 @@
emit q->copyingDone( q, (*it).uSource, (*it).uDest, (*it).mtime, false, false );
if (m_mode == CopyJob::Move)
org::kde::KDirNotify::emitFileMoved( (*it).uSource.url(), (*it).uDest.url() );
+ m_successSrcList.append((*it).uSource);
}
// remove from list, to move on to next file
files.erase( it );
@@ -1372,7 +1370,7 @@
KIO::Job * newjob = 0;
if ( m_mode == CopyJob::Link ) {
// User requested that a symlink be made
- JobFlags flags = bOverwrite ? Overwrite : DefaultFlags;
+ const JobFlags flags = bOverwrite ? Overwrite : DefaultFlags;
newjob = linkNextFile(uSource, uDest, flags);
if (!newjob)
return;
@@ -1384,7 +1382,7 @@
(uSource.pass() == uDest.pass()))
// Copying a symlink - only on the same protocol/host/etc. (#5601, downloading an FTP file through its link),
{
- JobFlags flags = bOverwrite ? Overwrite : DefaultFlags;
+ const JobFlags flags = bOverwrite ? Overwrite : DefaultFlags;
KIO::SimpleJob *newJob = KIO::symlink( (*it).linkDest, uDest, flags | HideProgressInfo /*no GUI*/ );
Scheduler::scheduleJob(newJob);
newjob = newJob;
@@ -1509,23 +1507,6 @@
// but then we need to jump to the else part below. Maybe with a recursive call?
#endif
} else {
- // Finished - tell the world
- if ( !m_bOnlyRenames )
- {
- KUrl url( m_globalDest );
- if ( m_globalDestinationState != DEST_IS_DIR || m_asMethod )
- url.setPath( url.directory() );
- //kDebug(7007) << "KDirNotify'ing FilesAdded " << url;
- org::kde::KDirNotify::emitFilesAdded( url.url() );
-
- Q_FOREACH(const KUrl& url, m_skippedSourceUrls)
- m_srcList.removeAll(url);
-
- if ( m_mode == CopyJob::Move && !m_srcList.isEmpty() ) {
- //kDebug(7007) << "KDirNotify'ing FilesRemoved " << m_srcList.toStringList();
- org::kde::KDirNotify::emitFilesRemoved( m_srcList.toStringList() );
- }
- }
if (m_reportTimer)
m_reportTimer->stop();
--m_processedFiles; // undo the "start at 1" hack
@@ -1535,6 +1516,27 @@
}
}
+void CopyJob::emitResult()
+{
+ Q_D(CopyJob);
+ // Before we go, tell the world about the changes that were made.
+ // Even if some error made us abort midway, we might still have done
+ // part of the job so we better update the views! (#118583)
+ if (!d->m_bOnlyRenames) {
+ KUrl url(d->m_globalDest);
+ if (d->m_globalDestinationState != DEST_IS_DIR || d->m_asMethod)
+ url.setPath(url.directory());
+ //kDebug(7007) << "KDirNotify'ing FilesAdded " << url;
+ org::kde::KDirNotify::emitFilesAdded( url.url() );
+
+ if (d->m_mode == CopyJob::Move && !d->m_successSrcList.isEmpty()) {
+ kDebug(7007) << "KDirNotify'ing FilesRemoved" << d->m_successSrcList.toStringList();
+ org::kde::KDirNotify::emitFilesRemoved(d->m_successSrcList.toStringList());
+ }
+ }
+ Job::emitResult();
+}
+
void CopyJobPrivate::slotProcessedSize( KJob*, qulonglong data_size )
{
Q_Q(CopyJob);
@@ -1801,6 +1803,7 @@
kDebug(7007) << "Renaming succeeded, move on";
++m_processedFiles;
emit q->copyingDone( q, *m_currentStatSrc, dest, -1 /*mtime unknown, and not needed*/, true, true );
+ m_successSrcList.append(*m_currentStatSrc);
statNextSrc();
}
}