]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/kitemlistcontroller.cpp
When Esc is pressed, clear the selection and cancel the keyboard search
[dolphin.git] / src / kitemviews / kitemlistcontroller.cpp
index c0f565b4dd94ec34a703f8b926b563dd77a9c4b6..1f93a6357e34f4373acb5825b81745e6c2684c01 100644 (file)
@@ -41,7 +41,7 @@
 #include <QMimeData>
 #include <QTimer>
 
-KItemListController::KItemListController(QObject* parent) :
+KItemListController::KItemListController(KItemModelBase* model, KItemListView* view, QObject* parent) :
     QObject(parent),
     m_singleClickActivation(KGlobalSettings::singleClick()),
     m_selectionTogglePressed(false),
@@ -65,10 +65,20 @@ KItemListController::KItemListController(QObject* parent) :
     m_autoActivationTimer->setSingleShot(true);
     m_autoActivationTimer->setInterval(-1);
     connect(m_autoActivationTimer, SIGNAL(timeout()), this, SLOT(slotAutoActivationTimeout()));
+
+    setModel(model);
+    setView(view);
 }
 
 KItemListController::~KItemListController()
 {
+    setView(0);
+    delete m_view;
+    m_view = 0;
+
+    setModel(0);
+    delete m_model;
+    m_model = 0;
 }
 
 void KItemListController::setModel(KItemModelBase* model)
@@ -79,6 +89,9 @@ void KItemListController::setModel(KItemModelBase* model)
 
     KItemModelBase* oldModel = m_model;
     m_model = model;
+    if (m_model) {
+        m_model->setParent(this);
+    }
 
     if (m_view) {
         m_view->setModel(m_model);
@@ -116,6 +129,7 @@ void KItemListController::setView(KItemListView* view)
         m_view->setController(this);
         m_view->setModel(m_model);
         connect(m_view, SIGNAL(scrollOffsetChanged(qreal,qreal)), this, SLOT(slotViewScrollOffsetChanged(qreal,qreal)));
+        updateExtendedSelectionRegion();
     }
 
     emit viewChanged(m_view, oldView);
@@ -129,6 +143,7 @@ KItemListView* KItemListController::view() const
 void KItemListController::setSelectionBehavior(SelectionBehavior behavior)
 {
     m_selectionBehavior = behavior;
+    updateExtendedSelectionRegion();
 }
 
 KItemListController::SelectionBehavior KItemListController::selectionBehavior() const
@@ -359,6 +374,13 @@ bool KItemListController::keyPressEvent(QKeyEvent* event)
         break;
     }
 
+    case Qt::Key_Escape:
+        if (m_selectionBehavior != SingleSelection) {
+            m_selectionManager->clearSelection();
+        }
+        m_keyboardManager->cancelSearch();
+        break;
+
     default:
         m_keyboardManager->addKeys(event->text());
         return false;
@@ -1159,4 +1181,16 @@ qreal KItemListController::keyboardAnchorPos(int index) const
     return 0;
 }
 
+void KItemListController::updateExtendedSelectionRegion()
+{
+    if (m_view) {
+        const bool extend = (m_selectionBehavior != MultiSelection);
+        KItemListStyleOption option = m_view->styleOption();
+        if (option.extendedSelectionRegion != extend) {
+            option.extendedSelectionRegion = extend;
+            m_view->setStyleOption(option);
+        }
+    }
+}
+
 #include "kitemlistcontroller.moc"