SelectionToggle::SelectionToggle(QWidget* parent) :
QAbstractButton(parent),
m_isHovered(false),
+ m_leftMouseButtonPressed(false),
m_fadingValue(0),
m_icon(),
m_fadingTimeLine(0)
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);
}
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);