X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/f577c2a2226f528284e9447a9fd54ce357667863..f9f4dbf005f63d9e1d14acbe21beab6e0fc26b36:/src/dolphindetailsview.cpp diff --git a/src/dolphindetailsview.cpp b/src/dolphindetailsview.cpp index 998d3c870..ba82fc901 100644 --- a/src/dolphindetailsview.cpp +++ b/src/dolphindetailsview.cpp @@ -28,8 +28,8 @@ #include "dolphin_detailsmodesettings.h" #include -#include +#include #include #include #include @@ -38,6 +38,7 @@ DolphinDetailsView::DolphinDetailsView(QWidget* parent, DolphinController* controller) : QTreeView(parent), m_controller(controller), + m_dragging(false), m_showElasticBand(false), m_elasticBandOrigin(), m_elasticBandDestination() @@ -154,8 +155,18 @@ void DolphinDetailsView::contextMenuEvent(QContextMenuEvent* event) void DolphinDetailsView::mousePressEvent(QMouseEvent* event) { + m_controller->triggerActivation(); + QTreeView::mousePressEvent(event); + const QModelIndex index = indexAt(event->pos()); + if (!index.isValid() || (index.column() != KDirModel::Name)) { + const Qt::KeyboardModifiers modifier = QApplication::keyboardModifiers(); + if (!(modifier & Qt::ShiftModifier) && !(modifier & Qt::ControlModifier)) { + clearSelection(); + } + } + if (event->button() == Qt::LeftButton) { m_showElasticBand = true; @@ -178,9 +189,10 @@ void DolphinDetailsView::mouseMoveEvent(QMouseEvent* event) void DolphinDetailsView::mouseReleaseEvent(QMouseEvent* event) { QTreeView::mouseReleaseEvent(event); - updateElasticBand(); - m_showElasticBand = false; - m_controller->triggerActivation(); + if (m_showElasticBand) { + updateElasticBand(); + m_showElasticBand = false; + } } void DolphinDetailsView::dragEnterEvent(QDragEnterEvent* event) @@ -188,8 +200,37 @@ void DolphinDetailsView::dragEnterEvent(QDragEnterEvent* event) if (event->mimeData()->hasUrls()) { event->acceptProposedAction(); } - updateElasticBand(); - m_showElasticBand = false; + + if (m_showElasticBand) { + updateElasticBand(); + m_showElasticBand = false; + } + m_dragging = true; +} + +void DolphinDetailsView::dragLeaveEvent(QDragLeaveEvent* event) +{ + QTreeView::dragLeaveEvent(event); + + // TODO: remove this code when the issue #160611 is solved in Qt 4.4 + m_dragging = false; + setDirtyRegion(m_dropRect); +} + +void DolphinDetailsView::dragMoveEvent(QDragMoveEvent* event) +{ + QTreeView::dragMoveEvent(event); + + // TODO: remove this code when the issue #160611 is solved in Qt 4.4 + setDirtyRegion(m_dropRect); + const QModelIndex index = indexAt(event->pos()); + if (!index.isValid() || (index.column() != KDirModel::Name)) { + m_dragging = false; + } else { + m_dragging = true; + m_dropRect = visualRect(index); + setDirtyRegion(m_dropRect); + } } void DolphinDetailsView::dropEvent(QDropEvent* event) @@ -202,6 +243,7 @@ void DolphinDetailsView::dropEvent(QDropEvent* event) event->source()); } QTreeView::dropEvent(event); + m_dragging = false; } void DolphinDetailsView::paintEvent(QPaintEvent* event) @@ -222,6 +264,12 @@ void DolphinDetailsView::paintEvent(QPaintEvent* event) style()->drawControl(QStyle::CE_RubberBand, &opt, &painter); painter.restore(); } + + // TODO: remove this code when the issue #160611 is solved in Qt 4.4 + if (m_dragging) { + const QBrush& brush = m_viewOptions.palette.brush(QPalette::Normal, QPalette::Highlight); + DolphinController::drawHoverIndication(viewport(), m_dropRect, brush); + } } void DolphinDetailsView::setSortIndicatorSection(DolphinView::Sorting sorting)