diff --git a/qrenderdoc/Widgets/Extended/RDTreeView.cpp b/qrenderdoc/Widgets/Extended/RDTreeView.cpp index 140503d39..fc2200932 100644 --- a/qrenderdoc/Widgets/Extended/RDTreeView.cpp +++ b/qrenderdoc/Widgets/Extended/RDTreeView.cpp @@ -67,7 +67,7 @@ void RDTreeViewDelegate::initStyleOption(QStyleOptionViewItem *option, const QMo } } -RDTipLabel::RDTipLabel() : QLabel(NULL) +RDTipLabel::RDTipLabel(QWidget *listener) : QLabel(NULL), mouseListener(listener) { int margin = style()->pixelMetric(QStyle::PM_ToolTipLabelFrameWidth, NULL, this); int opacity = style()->styleHint(QStyle::SH_ToolTipLabel_Opacity, NULL, this); @@ -94,6 +94,32 @@ void RDTipLabel::paintEvent(QPaintEvent *ev) QLabel::paintEvent(ev); } +void RDTipLabel::mousePressEvent(QMouseEvent *e) +{ + if(mouseListener) + sendListenerEvent(e); +} + +void RDTipLabel::sendListenerEvent(QMouseEvent *e) +{ + QMouseEvent *duplicate = + new QMouseEvent(e->type(), mouseListener->mapFromGlobal(e->globalPos()), e->windowPos(), + e->globalPos(), e->button(), e->buttons(), e->modifiers(), e->source()); + QCoreApplication::postEvent(mouseListener, duplicate); +} + +void RDTipLabel::mouseReleaseEvent(QMouseEvent *e) +{ + if(mouseListener) + sendListenerEvent(e); +} + +void RDTipLabel::mouseDoubleClickEvent(QMouseEvent *e) +{ + if(mouseListener) + sendListenerEvent(e); +} + void RDTipLabel::resizeEvent(QResizeEvent *e) { QStyleHintReturnMask frameMask; @@ -112,7 +138,7 @@ RDTreeView::RDTreeView(QWidget *parent) : QTreeView(parent) m_delegate = new RDTreeViewDelegate(this); QTreeView::setItemDelegate(m_delegate); - m_ElidedTooltip = new RDTipLabel(); + m_ElidedTooltip = new RDTipLabel(viewport()); m_ElidedTooltip->hide(); } diff --git a/qrenderdoc/Widgets/Extended/RDTreeView.h b/qrenderdoc/Widgets/Extended/RDTreeView.h index 7d916ef7f..178cd06dd 100644 --- a/qrenderdoc/Widgets/Extended/RDTreeView.h +++ b/qrenderdoc/Widgets/Extended/RDTreeView.h @@ -57,14 +57,20 @@ private: Q_OBJECT int m_TooltipMargin = 0; + QWidget *mouseListener; public: - explicit RDTipLabel(); + explicit RDTipLabel(QWidget *listener = NULL); int tipMargin() { return m_TooltipMargin; } protected: void paintEvent(QPaintEvent *); + void mousePressEvent(QMouseEvent *); + void mouseReleaseEvent(QMouseEvent *); + void mouseDoubleClickEvent(QMouseEvent *); void resizeEvent(QResizeEvent *); + + void sendListenerEvent(QMouseEvent *e); }; class RDTreeView : public QTreeView