X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/e0bd6f137d90fea9854427f57f8945ecf38991eb..61a4e8691d600a1d105142ce44570c4107600a04:/src/dolphinview.cpp diff --git a/src/dolphinview.cpp b/src/dolphinview.cpp index 47664da62..4c2c5f02d 100644 --- a/src/dolphinview.cpp +++ b/src/dolphinview.cpp @@ -83,8 +83,7 @@ DolphinView::DolphinView(DolphinMainWindow* mainWindow, m_statusBar(0), m_dirModel(0), m_dirLister(0), - m_proxyModel(0), - m_previewJob(0) + m_proxyModel(0) { hide(); setFocusPolicy(Qt::StrongFocus); @@ -178,11 +177,6 @@ DolphinView::DolphinView(DolphinMainWindow* mainWindow, DolphinView::~DolphinView() { - if (m_previewJob != 0) { - m_previewJob->doKill(); - m_previewJob = 0; - } - delete m_dirLister; m_dirLister = 0; } @@ -211,6 +205,14 @@ void DolphinView::setMode(Mode mode) m_mode = mode; + if (isColumnViewActive()) { + // When changing the mode in the column view, it makes sense + // to go back to the root URL of the column view automatically. + // Otherwise there it would not be possible to turn off the column view + // without focusing the first column. + setUrl(m_dirLister->url()); + } + ViewProperties props(m_urlNavigator->url()); props.setViewMode(m_mode); @@ -229,12 +231,11 @@ void DolphinView::setShowPreview(bool show) { ViewProperties props(m_urlNavigator->url()); props.setShowPreview(show); - props.save(); m_controller->setShowPreview(show); - emit showPreviewChanged(); - reload(); + + startDirLister(m_urlNavigator->url(), true); } bool DolphinView::showPreview() const @@ -250,12 +251,11 @@ void DolphinView::setShowHiddenFiles(bool show) ViewProperties props(m_urlNavigator->url()); props.setShowHiddenFiles(show); - props.save(); m_dirLister->setShowingDotFiles(show); emit showHiddenFilesChanged(); - reload(); + startDirLister(m_urlNavigator->url(), true); } bool DolphinView::showHiddenFiles() const @@ -463,7 +463,7 @@ void DolphinView::setAdditionalInfo(KFileItemDelegate::AdditionalInformation inf m_fileItemDelegate->setAdditionalInformation(info); emit additionalInfoChanged(info); - reload(); + startDirLister(m_urlNavigator->url(), true); } KFileItemDelegate::AdditionalInformation DolphinView::additionalInfo() const @@ -590,7 +590,6 @@ void DolphinView::rename(const KUrl& source, const QString& newName) default: // the renaming operation has been canceled - reload(); return; } } else { @@ -608,7 +607,6 @@ void DolphinView::rename(const KUrl& source, const QString& newName) } else { m_statusBar->setMessage(i18n("Renaming of file '%1' to '%2' failed.", source.fileName(), destFileName), DolphinStatusBar::Error); - reload(); } } @@ -802,24 +800,31 @@ void DolphinView::updateItemCount() void DolphinView::generatePreviews(const KFileItemList& items) { if (m_controller->showPreview()) { - if (m_previewJob != 0) { - m_previewJob->doKill(); - } - m_previewJob = KIO::filePreview(items, 128); - connect(m_previewJob, SIGNAL(gotPreview(const KFileItem*, const QPixmap&)), - this, SLOT(showPreview(const KFileItem*, const QPixmap&))); - connect(m_previewJob, SIGNAL(result(KJob*)), - this, SLOT(slotPreviewResult(KJob*))); + + // Must turn QList to QList... + QList itemsToPreview; + foreach( KFileItem* it, items ) + itemsToPreview.append( *it ); + + KIO::PreviewJob* job = KIO::filePreview(itemsToPreview, 128); + connect(job, SIGNAL(gotPreview(const KFileItem&, const QPixmap&)), + this, SLOT(showPreview(const KFileItem&, const QPixmap&))); } } -void DolphinView::showPreview(const KFileItem* item, const QPixmap& pixmap) +void DolphinView::showPreview(const KFileItem& item, const QPixmap& pixmap) { - Q_ASSERT(item != 0); - const QModelIndex idx = m_dirModel->indexForItem(*item); + Q_ASSERT(!item.isNull()); + if (item.url().directory() != m_dirLister->url().path()) { + // the preview job is still working on items of an older URL, hence + // the item is not part of the directory model anymore + return; + } + + const QModelIndex idx = m_dirModel->indexForItem(item); if (idx.isValid() && (idx.column() == 0)) { const QMimeData* mimeData = QApplication::clipboard()->mimeData(); - if (KonqMimeData::decodeIsCutSelection(mimeData) && isCutItem(*item)) { + if (KonqMimeData::decodeIsCutSelection(mimeData) && isCutItem(item)) { KIconEffect iconEffect; const QPixmap cutPixmap = iconEffect.apply(pixmap, K3Icon::Desktop, K3Icon::DisabledState); m_dirModel->setData(idx, QIcon(cutPixmap), Qt::DecorationRole); @@ -890,11 +895,6 @@ void DolphinView::startDirLister(const KUrl& url, bool reload) m_blockContentsMovedSignal = true; m_dirLister->stop(); - if (m_previewJob != 0) { - m_previewJob->doKill(); - m_previewJob = 0; - } - bool openDir = true; bool keepOldDirs = isColumnViewActive(); if (keepOldDirs) { @@ -1163,12 +1163,6 @@ void DolphinView::updateCutItems() applyCutItemEffect(); } -void DolphinView::slotPreviewResult(KJob* job) -{ - Q_UNUSED(job); - m_previewJob = 0; -} - void DolphinView::createView() { // delete current view