X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=pv%2Fview%2Fheader.cpp;h=fdfd896f2ac877339412ed415722cb5789101ba7;hb=bcaa184ed439d801cb1a56b877bb2763246150da;hp=5e978a70252565cf47f4a3bb95712707a813842d;hpb=68b21a71797051fb48ed272bc2a6b4893bdbf517;p=pulseview.git diff --git a/pv/view/header.cpp b/pv/view/header.cpp index 5e978a70..fdfd896f 100644 --- a/pv/view/header.cpp +++ b/pv/view/header.cpp @@ -108,6 +108,19 @@ void Header::clear_selection() update(); } +void Header::show_popup(const shared_ptr &item) +{ + using pv::widgets::Popup; + + Popup *const p = item->create_popup(&_view); + if (!p) + return; + + const QPoint pt(width() - BaselineOffset, item->get_y()); + p->set_position(mapToGlobal(pt), Popup::Right); + p->show(); +} + void Header::paintEvent(QPaintEvent*) { // The trace labels are not drawn with the arrows exactly on the @@ -187,8 +200,6 @@ void Header::mousePressEvent(QMouseEvent *event) void Header::mouseReleaseEvent(QMouseEvent *event) { - using pv::widgets::Popup; - assert(event); if (event->button() == Qt::LeftButton) { if (_dragging) @@ -197,15 +208,8 @@ void Header::mouseReleaseEvent(QMouseEvent *event) { const shared_ptr mouse_over_row_item = get_mouse_over_row_item(event->pos()); - if (mouse_over_row_item) { - const int w = width() - BaselineOffset; - Popup *const p = - mouse_over_row_item->create_popup(&_view); - p->set_position(mapToGlobal(QPoint(w, - mouse_over_row_item->get_y())), - Popup::Right); - p->show(); - } + if (mouse_over_row_item) + show_popup(mouse_over_row_item); } _dragging = false; @@ -264,9 +268,14 @@ void Header::leaveEvent(QEvent*) void Header::contextMenuEvent(QContextMenuEvent *event) { const shared_ptr r = get_mouse_over_row_item(_mouse_point); + if (!r) + return; + + QMenu *const menu = r->create_context_menu(this); + if (!menu) + return; - if (r) - r->create_context_menu(this)->exec(event->globalPos()); + menu->exec(event->globalPos()); } void Header::keyPressEvent(QKeyEvent *e)