DolphinDetailsView::DolphinDetailsView(QWidget* parent, DolphinController* controller) :
QTreeView(parent),
m_autoResize(true),
+ m_expandingTogglePressed(false),
+ m_keyPressed(false),
m_controller(controller),
m_selectionManager(0),
m_font(),
QTreeView::mousePressEvent(event);
+ m_expandingTogglePressed = false;
const QModelIndex index = indexAt(event->pos());
+ const bool updateState = index.isValid() &&
+ (index.column() == DolphinModel::Name) &&
+ (event->button() == Qt::LeftButton);
+ if (updateState) {
+ // TODO: See comment in DolphinIconsView::mousePressEvent(). Only update
+ // the state if no expanding/collapsing area has been hit:
+ const QRect rect = visualRect(index);
+ if (event->pos().x() >= rect.x() + indentation()) {
+ setState(QAbstractItemView::DraggingState);
+ } else {
+ m_expandingTogglePressed = true;
+ }
+ }
+
if (!index.isValid() || (index.column() != DolphinModel::Name)) {
+ if (QApplication::mouseButtons() & Qt::MidButton) {
+ m_controller->replaceUrlByClipboard();
+ }
+
const Qt::KeyboardModifiers modifier = QApplication::keyboardModifiers();
if (!(modifier & Qt::ShiftModifier) && !(modifier & Qt::ControlModifier)) {
clearSelection();
}
}
- if (event->button() == Qt::LeftButton) {
+ if ((event->button() == Qt::LeftButton) && !m_expandingTogglePressed) {
m_showElasticBand = true;
const QPoint pos(contentsPos());
// QTreeView::mouseMoveEvent(event);
QAbstractItemView::mouseMoveEvent(event);
}
+
+ if (m_expandingTogglePressed) {
+ // Per default QTreeView starts either a selection or a drag operation when dragging
+ // the expanding toggle button (Qt-issue - see TODO comment in DolphinIconsView::mousePressEvent()).
+ // Turn off this behavior in Dolphin to stay predictable:
+ clearSelection();
+ setState(QAbstractItemView::NoState);
+ }
}
void DolphinDetailsView::mouseReleaseEvent(QMouseEvent* event)
{
QTreeView::mouseReleaseEvent(event);
+ m_expandingTogglePressed = false;
if (m_showElasticBand) {
updateElasticBand();
m_showElasticBand = false;
void DolphinDetailsView::startDrag(Qt::DropActions supportedActions)
{
DragAndDropHelper::startDrag(this, supportedActions);
+ m_showElasticBand = false;
}
void DolphinDetailsView::dragEnterEvent(QDragEnterEvent* event)
{
QTreeView::keyPressEvent(event);
m_controller->handleKeyPressEvent(event);
+ m_keyPressed = true;
+}
+
+void DolphinDetailsView::keyReleaseEvent(QKeyEvent* event)
+{
+ QTreeView::keyReleaseEvent(event);
+ m_keyPressed = false;
}
void DolphinDetailsView::resizeEvent(QResizeEvent* event)
// Stay consistent with QListView: When changing the current index by key presses,
// also change the selection.
- if (QApplication::mouseButtons() == Qt::NoButton) {
+ if (m_keyPressed) {
selectionModel()->select(current, QItemSelectionModel::ClearAndSelect);
}
}