+bool SelectionManager::eventFilter(QObject* watched, QEvent* event)
+{
+ if (watched == m_view->viewport()) {
+ switch (event->type()) {
+ case QEvent::Leave:
+ m_toggle->hide();
+ break;
+
+ case QEvent::MouseButtonPress: {
+ // Set the toggle invisible, if a mouse button has been pressed
+ // outside the toggle boundaries. This e.g. assures, that the toggle
+ // gets invisible during dragging items.
+ const QRect toggleBounds(m_toggle->mapToGlobal(QPoint(0, 0)), m_toggle->size());
+ m_toggle->setVisible(toggleBounds.contains(QCursor::pos()));
+ break;
+ }
+
+ default:
+ break;
+ }
+ } else if (watched == m_toggle) {
+ switch (event->type()) {
+ case QEvent::Hide:
+ // If the toggle button gets hidden, the cursor is not above the item
+ // anymore and the shape must get restored
+ restoreCursor();
+ break;
+
+ case QEvent::Enter:
+ QApplication::changeOverrideCursor(Qt::ArrowCursor);
+ break;
+
+ case QEvent::Leave:
+ QApplication::changeOverrideCursor(Qt::PointingHandCursor);
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ return QObject::eventFilter(watched, event);
+}
+