void ViewWidget::mousePressEvent(QMouseEvent *event) { assert(event); /* Ignore right click events as they will open context menus when * used on trace labels. Those menus prevent ViewWidget::mouseReleaseEvent() * to be triggered upon button release, making mouse_down_item_ * hold the last reference to a view item that might have been deleted * from the context menu, preventing it from being freed as intended. */ if (event->button() & Qt::LeftButton) { mouse_down_point_ = event->pos(); mouse_down_item_ = get_mouse_over_item(event->pos()); mouse_left_press_event(event); } }
void ViewWidget::mouseMoveEvent(QMouseEvent *e) { assert(e); mouse_point_ = e->pos(); if (!e->buttons()) item_hover(get_mouse_over_item(e->pos())); else if (e->buttons() & Qt::LeftButton) { if (!item_dragging_) { if ((e->pos() - mouse_down_point_).manhattanLength() < QApplication::startDragDistance()) return; if (!accept_drag()) return; item_dragging_ = true; } // Do the drag drag_items(e->pos() - mouse_down_point_); } }