]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphinview.cpp
assure that the decoration gets selected in the details-view even if the style has...
[dolphin.git] / src / dolphinview.cpp
index e790a051830ea9acc4a11107a3fc7fa5dd99c00b..edecf199a1c20d75999c9d0f17f1f3ec3331bb0a 100644 (file)
@@ -51,7 +51,6 @@
 #include "viewproperties.h"
 #include "dolphinsettings.h"
 #include "dolphin_generalsettings.h"
-#include "dolphincategorydrawer.h"
 
 DolphinView::DolphinView(QWidget* parent,
                          const KUrl& url,
@@ -62,6 +61,7 @@ DolphinView::DolphinView(QWidget* parent,
     m_active(true),
     m_loadingDirectory(false),
     m_initializeColumnView(false),
+    m_storedCategorizedSorting(false),
     m_mode(DolphinView::IconsView),
     m_topLayout(0),
     m_controller(0),
@@ -169,6 +169,18 @@ void DolphinView::setMode(Mode mode)
     props.setViewMode(m_mode);
 
     createView();
+
+    // Not all view modes support categorized sorting. Adjust the sorting model
+    // if changing the view mode results in a change of the categorized sorting
+    // capabilities.
+    m_storedCategorizedSorting = props.categorizedSorting();
+    const bool categorized = m_storedCategorizedSorting && supportsCategorizedSorting();
+    if (categorized != m_proxyModel->isCategorizedModel()) {
+        m_proxyModel->setCategorizedModel(categorized);
+        m_proxyModel->sort(m_proxyModel->sortColumn(), m_proxyModel->sortOrder());
+        emit categorizedSortingChanged();
+    }
+
     startDirLister(viewPropsUrl);
 
     emit modeChanged();
@@ -223,22 +235,15 @@ void DolphinView::setCategorizedSorting(bool categorized)
         return;
     }
 
-    if (!categorized && !supportsCategorizedSorting())
-    {
-        m_proxyModel->setCategorizedModel(categorized);
-        m_proxyModel->sort(m_proxyModel->sortColumn(), m_proxyModel->sortOrder());
-
-        emit categorizedSortingChanged();
-
-        return;
-    }
-
-    Q_ASSERT(m_iconsView != 0);
+    // setCategorizedSorting(true) may only get invoked
+    // if the view supports categorized sorting
+    Q_ASSERT(!categorized || supportsCategorizedSorting());
 
     ViewProperties props(viewPropertiesUrl());
     props.setCategorizedSorting(categorized);
     props.save();
 
+    m_storedCategorizedSorting = categorized;
     m_proxyModel->setCategorizedModel(categorized);
     m_proxyModel->sort(m_proxyModel->sortColumn(), m_proxyModel->sortOrder());
 
@@ -247,7 +252,14 @@ void DolphinView::setCategorizedSorting(bool categorized)
 
 bool DolphinView::categorizedSorting() const
 {
-    return m_proxyModel->isCategorizedModel();
+    // If all view modes would support categorized sorting, returning
+    // m_proxyModel->isCategorizedModel() would be the way to go. As
+    // currently only the icons view supports caterized sorting, we remember
+    // the stored view properties state in m_storedCategorizedSorting and
+    // return this state. The application takes care to disable the corresponding
+    // checkbox by checking DolphinView::supportsCategorizedSorting() to indicate
+    // that this setting is not applied to the current view mode.
+    return m_storedCategorizedSorting;
 }
 
 bool DolphinView::supportsCategorizedSorting() const
@@ -616,9 +628,11 @@ void DolphinView::applyViewProperties(const KUrl& url)
         emit showHiddenFilesChanged();
     }
 
-    const bool categorized = props.categorizedSorting();
-    if (categorized != categorizedSorting()) {
+    m_storedCategorizedSorting = props.categorizedSorting();
+    const bool categorized = m_storedCategorizedSorting && supportsCategorizedSorting();
+    if (categorized != m_proxyModel->isCategorizedModel()) {
         m_proxyModel->setCategorizedModel(categorized);
+        m_proxyModel->sort(m_proxyModel->sortColumn(), m_proxyModel->sortOrder());
         emit categorizedSortingChanged();
     }
 
@@ -804,22 +818,20 @@ void DolphinView::createView()
 
     // ... and recreate it representing the current mode
     switch (m_mode) {
-    case IconsView:
+    case IconsView: {
         m_iconsView = new DolphinIconsView(this, m_controller);
-        m_iconsView->setCategoryDrawer(new DolphinCategoryDrawer());
         view = m_iconsView;
         break;
+    }
 
     case DetailsView:
         m_detailsView = new DolphinDetailsView(this, m_controller);
         view = m_detailsView;
-        setCategorizedSorting(false);
         break;
 
     case ColumnView:
         m_columnView = new DolphinColumnView(this, m_controller);
         view = m_columnView;
-        setCategorizedSorting(false);
         break;
     }