]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphincolumnwidget.cpp
Forwardport 773570:
[dolphin.git] / src / dolphincolumnwidget.cpp
index 4bcf018040134dc85472b7f8d224d44e0a22aeb6..c2ba385ad0b635878c18f337c153a3f2fe9fc6ab 100644 (file)
@@ -26,7 +26,9 @@
 #include "dolphinsortfilterproxymodel.h"
 #include "dolphinsettings.h"
 #include "dolphin_columnmodesettings.h"
+#include "dolphin_generalsettings.h"
 #include "draganddrophelper.h"
+#include "selectionmanager.h"
 
 #include <kcolorscheme.h>
 #include <kdirlister.h>
@@ -64,7 +66,7 @@ DolphinColumnWidget::DolphinColumnWidget(QWidget* parent,
     setMouseTracking(true);
     viewport()->setAttribute(Qt::WA_Hover);
     setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
-    setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
+    setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
     setSelectionBehavior(SelectItems);
     setSelectionMode(QAbstractItemView::ExtendedSelection);
     setDragDropMode(QAbstractItemView::DragDrop);
@@ -89,7 +91,7 @@ DolphinColumnWidget::DolphinColumnWidget(QWidget* parent,
     m_font.setBold(settings->boldFont());
 
     const int iconSize = settings->iconSize();
-    m_decorationSize = QSize(iconSize, iconSize);
+    setDecorationSize(QSize(iconSize, iconSize));
 
     KFileItemDelegate* delegate = new KFileItemDelegate(this);
     setItemDelegate(delegate);
@@ -118,6 +120,15 @@ DolphinColumnWidget::DolphinColumnWidget(QWidget* parent,
     m_proxyModel->setFilterCaseSensitivity(Qt::CaseInsensitive);
 
     setModel(m_proxyModel);
+    const bool useSelManager = KGlobalSettings::singleClick() &&
+                               DolphinSettings::instance().generalSettings()->showSelectionToggle();
+    if (useSelManager) {
+        SelectionManager* selManager = new SelectionManager(this);
+        connect(selManager, SIGNAL(selectionChanged()),
+                this, SLOT(requestActivation()));
+        connect(m_view->m_controller, SIGNAL(urlChanged(const KUrl&)),
+                selManager, SLOT(reset()));
+}
     new KMimeTypeResolver(this, m_dolphinModel);
     m_iconManager = new IconManager(this, m_proxyModel);
     m_iconManager->setShowPreview(m_view->m_controller->dolphinView()->showPreview());
@@ -136,6 +147,7 @@ DolphinColumnWidget::~DolphinColumnWidget()
 
 void DolphinColumnWidget::setDecorationSize(const QSize& size)
 {
+    setIconSize(size);
     m_decorationSize = size;
     doItemsLayout();
 }
@@ -172,7 +184,6 @@ void DolphinColumnWidget::setShowHiddenFiles(bool show)
 
 void DolphinColumnWidget::setShowPreview(bool show)
 {
-    kDebug() << "-------------- column widget: show" << show;
     m_iconManager->setShowPreview(show);
 
     m_dirLister->stop();
@@ -304,12 +315,7 @@ void DolphinColumnWidget::paintEvent(QPaintEvent* event)
 
 void DolphinColumnWidget::mousePressEvent(QMouseEvent* event)
 {
-    m_view->m_controller->requestActivation();
-    if (!m_active) {
-        m_view->requestActivation(this);
-        m_view->m_controller->triggerUrlChangeRequest(m_url);
-    }
-
+    requestActivation();
     QListView::mousePressEvent(event);
 }
 
@@ -367,6 +373,16 @@ void DolphinColumnWidget::slotEntered(const QModelIndex& index)
     m_view->m_controller->emitItemEntered(item);
 }
 
+void DolphinColumnWidget::requestActivation()
+{
+    m_view->m_controller->requestActivation();
+    if (!m_active) {
+        m_view->requestActivation(this);
+        m_view->m_controller->triggerUrlChangeRequest(m_url);
+        selectionModel()->clear();
+    }
+}
+
 void DolphinColumnWidget::activate()
 {
     setFocus(Qt::OtherFocusReason);
@@ -382,6 +398,9 @@ void DolphinColumnWidget::activate()
                 this, SLOT(triggerItem(const QModelIndex&)));
     }
 
+    if (selectionModel() && selectionModel()->currentIndex().isValid())
+        selectionModel()->setCurrentIndex(selectionModel()->currentIndex(), QItemSelectionModel::SelectCurrent);
+
     updateBackground();
 }
 
@@ -400,7 +419,9 @@ void DolphinColumnWidget::deactivate()
                    this, SLOT(triggerItem(const QModelIndex&)));
     }
 
+    const QModelIndex current = selectionModel()->currentIndex();
     selectionModel()->clear();
+    selectionModel()->setCurrentIndex(current, QItemSelectionModel::NoUpdate);
     updateBackground();
 }