X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/4bccabca1bd705f24a35ed1ea31fc6d185c2b442..d009bf5eae4760e4ced150ff08a6351fb96f640e:/src/dolphinview.cpp diff --git a/src/dolphinview.cpp b/src/dolphinview.cpp index 5ae81f31d..034b81d3f 100644 --- a/src/dolphinview.cpp +++ b/src/dolphinview.cpp @@ -362,6 +362,7 @@ int DolphinView::selectedItemsCount() const void DolphinView::setContentsPosition(int x, int y) { QAbstractItemView* view = m_viewAccessor.itemView(); + Q_ASSERT(view != 0); view->horizontalScrollBar()->setValue(x); view->verticalScrollBar()->setValue(y); @@ -370,8 +371,10 @@ void DolphinView::setContentsPosition(int x, int y) QPoint DolphinView::contentsPosition() const { - const int x = m_viewAccessor.itemView()->horizontalScrollBar()->value(); - const int y = m_viewAccessor.itemView()->verticalScrollBar()->value(); + QAbstractItemView* view = m_viewAccessor.itemView(); + Q_ASSERT(view != 0); + const int x = view->horizontalScrollBar()->value(); + const int y = view->verticalScrollBar()->value(); return QPoint(x, y); } @@ -828,20 +831,6 @@ void DolphinView::mouseReleaseEvent(QMouseEvent* event) setActive(true); } -void DolphinView::wheelEvent(QWheelEvent* event) -{ - if (event->modifiers() & Qt::ControlModifier) { - const int delta = event->delta(); - const int level = zoomLevel(); - if (delta > 0) { - setZoomLevel(level + 1); - } else if (delta < 0) { - setZoomLevel(level - 1); - } - event->accept(); - } -} - bool DolphinView::eventFilter(QObject* watched, QEvent* event) { switch (event->type()) { @@ -867,6 +856,24 @@ bool DolphinView::eventFilter(QObject* watched, QEvent* event) } break; + case QEvent::Wheel: + if (watched == m_viewAccessor.itemView()->viewport()) { + // Ctrl+wheel events should cause icon zooming, but not if the left mouse button is pressed + // (the user is probably trying to scroll during a selection in that case) + QWheelEvent* wheelEvent = static_cast(event); + if (wheelEvent->modifiers() & Qt::ControlModifier && !(wheelEvent->buttons() & Qt::LeftButton)) { + const int delta = wheelEvent->delta(); + const int level = zoomLevel(); + if (delta > 0) { + setZoomLevel(level + 1); + } else if (delta < 0) { + setZoomLevel(level - 1); + } + return true; + } + } + break; + default: break; } @@ -1261,6 +1268,7 @@ void DolphinView::applyViewProperties() void DolphinView::createView() { deleteView(); + Q_ASSERT(m_viewAccessor.itemView() == 0); m_viewAccessor.createView(this, m_controller, m_mode); @@ -1306,9 +1314,14 @@ void DolphinView::deleteView() m_topLayout->removeWidget(view); view->close(); + // disconnect all signal/slots disconnect(view); m_controller->disconnect(view); view->disconnect(); + disconnect(view->verticalScrollBar(), SIGNAL(valueChanged(int)), + this, SLOT(emitContentsMoved())); + disconnect(view->horizontalScrollBar(), SIGNAL(valueChanged(int)), + this, SLOT(emitContentsMoved())); m_viewAccessor.deleteView(); } @@ -1417,8 +1430,9 @@ void DolphinView::ViewAccessor::deleteView() m_iconsView = 0; m_detailsView = 0; - if (m_columnsContainer) + if (m_columnsContainer != 0) { m_columnsContainer->deleteLater(); + } m_columnsContainer = 0; }