X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/197abb4be8500fed28eeb0a9bc1c2ca5135a9f67..e9b697bdf6b8de3a40ac2d4689a9b20a6d7cf550:/src/selectiontoggle.cpp diff --git a/src/selectiontoggle.cpp b/src/selectiontoggle.cpp index b9b79def0..5c573811e 100644 --- a/src/selectiontoggle.cpp +++ b/src/selectiontoggle.cpp @@ -34,6 +34,7 @@ SelectionToggle::SelectionToggle(QWidget* parent) : QAbstractButton(parent), m_isHovered(false), + m_leftMouseButtonPressed(false), m_fadingValue(0), m_icon(), m_fadingTimeLine(0) @@ -89,9 +90,27 @@ void SelectionToggle::setVisible(bool visible) bool SelectionToggle::eventFilter(QObject* obj, QEvent* event) { - if ((obj == parent()) && (event->type() == QEvent::Leave)) { - hide(); + if (obj == parent()) { + switch (event->type()) { + case QEvent::Leave: + hide(); + break; + + case QEvent::MouseMove: + if (m_leftMouseButtonPressed) { + // Don't forward mouse move events to the viewport, + // otherwise a rubberband selection will be shown when + // clicking on the selection toggle and moving the mouse + // above the viewport. + return true; + } + break; + + default: + break; + } } + return QAbstractButton::eventFilter(obj, event); } @@ -118,6 +137,18 @@ void SelectionToggle::leaveEvent(QEvent* event) update(); } +void SelectionToggle::mousePressEvent(QMouseEvent* event) +{ + QAbstractButton::mousePressEvent(event); + m_leftMouseButtonPressed = (event->buttons() & Qt::LeftButton); +} + +void SelectionToggle::mouseReleaseEvent(QMouseEvent* event) +{ + QAbstractButton::mouseReleaseEvent(event); + m_leftMouseButtonPressed = (event->buttons() & Qt::LeftButton); +} + void SelectionToggle::paintEvent(QPaintEvent* event) { QPainter painter(this);