if (KGlobalSettings::singleClick()) {
connect(this, SIGNAL(clicked(const QModelIndex&)),
controller, SLOT(triggerItem(const QModelIndex&)));
- if (DolphinSettings::instance().generalSettings()->showSelectionToggle()) {
- m_selectionManager = new SelectionManager(this);
- connect(m_selectionManager, SIGNAL(selectionChanged()),
- this, SLOT(requestActivation()));
- connect(m_controller, SIGNAL(urlChanged(const KUrl&)),
- m_selectionManager, SLOT(reset()));
- }
} else {
connect(this, SIGNAL(doubleClicked(const QModelIndex&)),
controller, SLOT(triggerItem(const QModelIndex&)));
}
+
+ if (DolphinSettings::instance().generalSettings()->showSelectionToggle()) {
+ m_selectionManager = new SelectionManager(this);
+ connect(m_selectionManager, SIGNAL(selectionChanged()),
+ this, SLOT(requestActivation()));
+ connect(m_controller, SIGNAL(urlChanged(const KUrl&)),
+ m_selectionManager, SLOT(reset()));
+ }
+
connect(this, SIGNAL(entered(const QModelIndex&)),
this, SLOT(slotEntered(const QModelIndex&)));
connect(this, SIGNAL(viewportEntered()),
{
m_controller->requestActivation();
+ const QModelIndex current = currentIndex();
QTreeView::mousePressEvent(event);
m_expandingTogglePressed = false;
if (!(modifier & Qt::ShiftModifier) && !(modifier & Qt::ControlModifier)) {
clearSelection();
}
+
+ // restore the current index, other columns are handled as viewport area
+ selectionModel()->setCurrentIndex(current, QItemSelectionModel::Current);
}
if ((event->button() == Qt::LeftButton) && !m_expandingTogglePressed) {
void DolphinDetailsView::mouseReleaseEvent(QMouseEvent* event)
{
- QTreeView::mouseReleaseEvent(event);
+ const QModelIndex index = indexAt(event->pos());
+ if (index.isValid() && (index.column() == DolphinModel::Name)) {
+ QTreeView::mouseReleaseEvent(event);
+ } else {
+ // don't change the current index if the cursor is released
+ // above any other column than the name column, as the other
+ // columns act as viewport
+ const QModelIndex current = currentIndex();
+ QTreeView::mouseReleaseEvent(event);
+ selectionModel()->setCurrentIndex(current, QItemSelectionModel::Current);
+ }
+
m_expandingTogglePressed = false;
if (m_showElasticBand) {
updateElasticBand();
void DolphinDetailsView::keyPressEvent(QKeyEvent* event)
{
- m_keyPressed = true;
+ // If the Control modifier is pressed, a multiple selection
+ // is done and DolphinDetailsView::currentChanged() may not
+ // not change the selection in a custom way.
+ m_keyPressed = !(event->modifiers() & Qt::ControlModifier);
+
QTreeView::keyPressEvent(event);
m_controller->handleKeyPressEvent(event);
}
void DolphinDetailsView::slotEntered(const QModelIndex& index)
{
- const QPoint pos = viewport()->mapFromGlobal(QCursor::pos());
- const int nameColumnWidth = header()->sectionSize(DolphinModel::Name);
- if (pos.x() < nameColumnWidth) {
+ if (index.column() == DolphinModel::Name) {
m_controller->emitItemEntered(index);
- }
- else {
+ } else {
m_controller->emitViewportEntered();
}
}