]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/selectiontoggle.cpp
A few changes...
[dolphin.git] / src / selectiontoggle.cpp
index b9b79def01af8f2834936e2e85909ccac59d03c7..5c573811e7654c8a352607e6f4f61961cb7ad444 100644 (file)
@@ -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);