]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphinview.cpp
Extracted the servicemenu code from KonqPopupMenu into KonqMenuActions, and used...
[dolphin.git] / src / dolphinview.cpp
index ad760fb134a55967ca9038af7f9c9ba08d12118b..51dbb708caeb8fdaf972ada0b5a2f2b9a9d53d81 100644 (file)
@@ -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<QIcon>(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"