X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/c273b0ae1be6b0d55cf951e7c7befaefb03f3517..1d3ccf2ada8f2d6f58b962eb19e49df647373477:/src/dolphinview.cpp diff --git a/src/dolphinview.cpp b/src/dolphinview.cpp index b3148e7d9..64722e1e2 100644 --- a/src/dolphinview.cpp +++ b/src/dolphinview.cpp @@ -64,26 +64,27 @@ DolphinView::DolphinView(DolphinMainWindow* mainWindow, const KUrl& url, Mode mode, bool showHiddenFiles) : - QWidget(parent), - m_showProgress(false), - m_blockContentsMovedSignal(false), - m_mode(mode), - m_iconSize(0), - m_folderCount(0), - m_fileCount(0), - m_mainWindow(mainWindow), - m_topLayout(0), - m_urlNavigator(0), - m_controller(0), - m_iconsView(0), - m_detailsView(0), - m_columnView(0), - m_fileItemDelegate(0), - m_filterBar(0), - m_statusBar(0), - m_dirModel(0), - m_dirLister(0), - m_proxyModel(0) + QWidget(parent), + m_showProgress(false), + m_blockContentsMovedSignal(false), + m_initializeColumnView(false), + m_mode(mode), + m_iconSize(0), + m_folderCount(0), + m_fileCount(0), + m_mainWindow(mainWindow), + m_topLayout(0), + m_urlNavigator(0), + m_controller(0), + m_iconsView(0), + m_detailsView(0), + m_columnView(0), + m_fileItemDelegate(0), + m_filterBar(0), + m_statusBar(0), + m_dirModel(0), + m_dirLister(0), + m_proxyModel(0) { hide(); setFocusPolicy(Qt::StrongFocus); @@ -205,6 +206,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); @@ -225,9 +234,9 @@ void DolphinView::setShowPreview(bool show) props.setShowPreview(show); m_controller->setShowPreview(show); - emit showPreviewChanged(); - reload(); + + startDirLister(m_urlNavigator->url(), true); } bool DolphinView::showPreview() const @@ -243,12 +252,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 @@ -456,7 +464,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 @@ -583,7 +591,6 @@ void DolphinView::rename(const KUrl& source, const QString& newName) default: // the renaming operation has been canceled - reload(); return; } } else { @@ -601,7 +608,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(); } } @@ -645,6 +651,14 @@ void DolphinView::changeDirectory(const KUrl& url) m_mode = mode; createView(); emit modeChanged(); + + if (m_mode == ColumnView) { + // The mode has been changed to the Column View. When starting the dir + // lister with DolphinView::startDirLister() it is important to give a + // hint that the dir lister may not keep the current directory + // although this is the default for showing a hierarchy. + m_initializeColumnView = true; + } } const bool showHiddenFiles = props.showHiddenFiles(); @@ -795,19 +809,31 @@ void DolphinView::updateItemCount() void DolphinView::generatePreviews(const KFileItemList& items) { if (m_controller->showPreview()) { - KIO::PreviewJob* job = KIO::filePreview(items, 128); - connect(job, SIGNAL(gotPreview(const KFileItem*, const QPixmap&)), - this, SLOT(showPreview(const KFileItem*, const QPixmap&))); + + // 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); @@ -879,7 +905,9 @@ void DolphinView::startDirLister(const KUrl& url, bool reload) m_dirLister->stop(); bool openDir = true; - bool keepOldDirs = isColumnViewActive(); + bool keepOldDirs = isColumnViewActive() && !m_initializeColumnView; + m_initializeColumnView = false; + if (keepOldDirs) { if (reload) { keepOldDirs = false;