X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/29402a79bc09945ccd96201cbb42027b4c581a00..b5eca6dc2aaa6f90d7dc2fe27ab9ccc45aee77f2:/src/dolphinview.cpp diff --git a/src/dolphinview.cpp b/src/dolphinview.cpp index ad760fb13..51dbb708c 100644 --- a/src/dolphinview.cpp +++ b/src/dolphinview.cpp @@ -98,8 +98,8 @@ DolphinView::DolphinView(QWidget* parent, this, SLOT(updateSorting(DolphinView::Sorting))); connect(m_controller, SIGNAL(sortOrderChanged(Qt::SortOrder)), this, SLOT(updateSortOrder(Qt::SortOrder))); - connect(m_controller, SIGNAL(itemTriggered(const QModelIndex&)), - this, SLOT(triggerItem(const QModelIndex&))); + connect(m_controller, SIGNAL(itemTriggered(const KFileItem&)), + this, SLOT(triggerItem(const KFileItem&))); connect(m_controller, SIGNAL(activated()), this, SLOT(activate())); connect(m_controller, SIGNAL(itemEntered(const KFileItem&)), @@ -122,7 +122,7 @@ const KUrl& DolphinView::url() const KUrl DolphinView::rootUrl() const { - return isColumnViewActive() ? m_dirLister->url() : url(); + return isColumnViewActive() ? m_columnView->rootUrl() : url(); } void DolphinView::setActive(bool active) @@ -133,12 +133,29 @@ void DolphinView::setActive(bool active) m_active = active; - updateViewportColor(); + QColor color = KColorScheme(QPalette::Active, KColorScheme::View).background().color(); + if (active) { + // TODO: emitting urlChanged() is a hack, as the URL hasn't really changed. It + // bypasses the problem when having a split view and changing the active view to + // update the some URL dependent states. A nicer approach should be no big deal... + emit urlChanged(url()); + emit selectionChanged(selectedItems()); + } else { + color.setAlpha(150); + } + + QWidget* viewport = itemView()->viewport(); + QPalette palette; + palette.setColor(viewport->backgroundRole(), color); + viewport->setPalette(palette); + update(); if (active) { emit activated(); } + + m_controller->indicateActivationChange(active); } bool DolphinView::isActive() const @@ -159,8 +176,9 @@ void DolphinView::setMode(Mode mode) // 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()); - m_controller->setUrl(m_dirLister->url()); + const KUrl root = rootUrl(); + setUrl(root); + m_controller->setUrl(root); } const KUrl viewPropsUrl = viewPropertiesUrl(); @@ -432,10 +450,14 @@ void DolphinView::reload() void DolphinView::refresh() { + const bool oldActivationState = m_active; + m_active = true; + createView(); applyViewProperties(m_controller->url()); reload(); - updateViewportColor(); + + setActive(oldActivationState); } void DolphinView::updateView(const KUrl& url, const KUrl& rootUrl) @@ -457,6 +479,7 @@ void DolphinView::updateView(const KUrl& url, const KUrl& rootUrl) // that the view properties have been changed or deleted in the meantime, so // it cannot be asserted that really a column view has been created: if (itemView() == m_columnView) { + m_columnView->setRootUrl(rootUrl); m_columnView->showColumn(url); } } else { @@ -484,10 +507,8 @@ void DolphinView::activate() setActive(true); } -void DolphinView::triggerItem(const QModelIndex& index) +void DolphinView::triggerItem(const KFileItem& item) { - Q_ASSERT(index.isValid()); - const Qt::KeyboardModifiers modifier = QApplication::keyboardModifiers(); if ((modifier & Qt::ShiftModifier) || (modifier & Qt::ControlModifier)) { // items are selected by the user, hence don't trigger the @@ -495,8 +516,6 @@ void DolphinView::triggerItem(const QModelIndex& index) return; } - const KFileItem item = m_dolphinModel->itemForIndex(m_proxyModel->mapToSource(index)); - if (item.isNull()) { return; } @@ -558,10 +577,14 @@ void DolphinView::loadDirectory(const KUrl& url, bool reload) m_dirLister->stop(); m_dirLister->openUrl(url, reload ? KDirLister::Reload : KDirLister::NoFlags); - if (isColumnViewActive() && reload) { - // reloading the directory lister is not enough in the case of the + if (isColumnViewActive()) { + // adjusting the directory lister is not enough in the case of the // column view, as each column has its own directory lister internally... - m_columnView->reload(); + if (reload) { + m_columnView->reload(); + } else { + m_columnView->showColumn(url); + } } } @@ -576,7 +599,7 @@ KUrl DolphinView::viewPropertiesUrl() const void DolphinView::applyViewProperties(const KUrl& url) { - if (isColumnViewActive() && m_dirLister->url().isParentOf(url)) { + if (isColumnViewActive() && rootUrl().isParentOf(url)) { // The column view is active, hence don't apply the view properties // of sub directories (represented by columns) to the view. The // view always represents the properties of the first column. @@ -882,8 +905,6 @@ void DolphinView::applyCutItemEffect() const KFileItem item = *it; if (isCutItem(item)) { const QModelIndex index = m_dolphinModel->indexForItem(item); - // Huh? the item is already known - //const KFileItem item = m_dolphinModel->itemForIndex(index); const QVariant value = m_dolphinModel->data(index, Qt::DecorationRole); if (value.type() == QVariant::Icon) { const QIcon icon(qvariant_cast(value)); @@ -906,20 +927,4 @@ void DolphinView::applyCutItemEffect() } } -void DolphinView::updateViewportColor() -{ - QColor color = KColorScheme(QPalette::Active, KColorScheme::View).background().color(); - if (m_active) { - emit urlChanged(url()); // Hmm, this is a hack; the url hasn't really changed. - emit selectionChanged(selectedItems()); - } else { - color.setAlpha(0); - } - - QWidget* viewport = itemView()->viewport(); - QPalette palette; - palette.setColor(viewport->backgroundRole(), color); - viewport->setPalette(palette); -} - #include "dolphinview.moc"