Details view related fixes: all columns except the name column should act as viewport.

svn path=/trunk/KDE/kdebase/apps/; revision=821229
This commit is contained in:
Peter Penz 2008-06-16 21:56:20 +00:00
parent 989cc7e0bf
commit 8103ead940
4 changed files with 37 additions and 13 deletions

View file

@ -169,7 +169,7 @@ void DolphinController::triggerItem(const QModelIndex& index)
} else { } else {
m_itemView->clearSelection(); m_itemView->clearSelection();
if (!openTab) { if (!openTab) {
emit itemEntered(item); emit itemEntered(KFileItem());
} }
} }
} }

View file

@ -187,6 +187,7 @@ void DolphinDetailsView::mousePressEvent(QMouseEvent* event)
{ {
m_controller->requestActivation(); m_controller->requestActivation();
const QModelIndex current = currentIndex();
QTreeView::mousePressEvent(event); QTreeView::mousePressEvent(event);
m_expandingTogglePressed = false; m_expandingTogglePressed = false;
@ -214,6 +215,9 @@ void DolphinDetailsView::mousePressEvent(QMouseEvent* event)
if (!(modifier & Qt::ShiftModifier) && !(modifier & Qt::ControlModifier)) { if (!(modifier & Qt::ShiftModifier) && !(modifier & Qt::ControlModifier)) {
clearSelection(); clearSelection();
} }
// restore the current index, other columns are handled as viewport area
selectionModel()->setCurrentIndex(current, QItemSelectionModel::Current);
} }
if ((event->button() == Qt::LeftButton) && !m_expandingTogglePressed) { if ((event->button() == Qt::LeftButton) && !m_expandingTogglePressed) {
@ -269,7 +273,18 @@ void DolphinDetailsView::mouseMoveEvent(QMouseEvent* event)
void DolphinDetailsView::mouseReleaseEvent(QMouseEvent* event) 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; m_expandingTogglePressed = false;
if (m_showElasticBand) { if (m_showElasticBand) {
updateElasticBand(); updateElasticBand();
@ -444,12 +459,9 @@ void DolphinDetailsView::synchronizeSortingState(int column)
void DolphinDetailsView::slotEntered(const QModelIndex& index) void DolphinDetailsView::slotEntered(const QModelIndex& index)
{ {
const QPoint pos = viewport()->mapFromGlobal(QCursor::pos()); if (index.column() == DolphinModel::Name) {
const int nameColumnWidth = header()->sectionSize(DolphinModel::Name);
if (pos.x() < nameColumnWidth) {
m_controller->emitItemEntered(index); m_controller->emitItemEntered(index);
} } else {
else {
m_controller->emitViewportEntered(); m_controller->emitViewportEntered();
} }
} }

View file

@ -94,6 +94,14 @@ void InfoSidebarPage::setSelection(const KFileItemList& selection)
return; return;
} }
if ((selection.count() == 0) && (m_selection.count() == 0)) {
// The selection has not really changed, only the current index.
// QItemSelectionModel emits a signal in this case and it is less
// expensive doing the check this way instead of patching
// DolphinView::emitSelectionChanged().
return;
}
m_selection = selection; m_selection = selection;
const int count = selection.count(); const int count = selection.count();

View file

@ -76,15 +76,19 @@ bool ToolTipManager::eventFilter(QObject* watched, QEvent* event)
void ToolTipManager::requestToolTip(const QModelIndex& index) void ToolTipManager::requestToolTip(const QModelIndex& index)
{ {
KToolTip::hideTip(); if (index.column() == DolphinModel::Name) {
KToolTip::hideTip();
const QRect rect = m_view->visualRect(index); const QRect rect = m_view->visualRect(index);
m_pos = m_view->viewport()->mapToGlobal(rect.bottomRight()); m_pos = m_view->viewport()->mapToGlobal(rect.bottomRight());
const QModelIndex dirIndex = m_proxyModel->mapToSource(index); const QModelIndex dirIndex = m_proxyModel->mapToSource(index);
m_item = m_dolphinModel->itemForIndex(dirIndex); m_item = m_dolphinModel->itemForIndex(dirIndex);
m_timer->start(500); m_timer->start(500);
} else {
hideToolTip();
}
} }
void ToolTipManager::hideToolTip() void ToolTipManager::hideToolTip()