link clicking and hovering in message body now works!

This commit is contained in:
Blue 2022-04-29 00:29:44 +03:00
parent eac87e713f
commit 7ba94e9deb
Signed by: blue
GPG key ID: 9B203B252A63EE38
4 changed files with 105 additions and 120 deletions

View file

@ -51,7 +51,8 @@ FeedView::FeedView(QWidget* parent):
progress(),
dividerFont(),
dividerMetrics(dividerFont),
mousePressed(false)
mousePressed(false),
anchorHovered(false)
{
horizontalScrollBar()->setRange(0, 0);
verticalScrollBar()->setSingleStep(approximateSingleMessageHeight);
@ -408,6 +409,18 @@ void FeedView::verticalScrollbarValueChanged(int value)
QAbstractItemView::verticalScrollbarValueChanged(vo);
}
void FeedView::setAnchorHovered(bool hovered)
{
if (anchorHovered != hovered) {
anchorHovered = hovered;
if (anchorHovered) {
setCursor(Qt::PointingHandCursor);
} else {
setCursor(Qt::ArrowCursor);
}
}
}
void FeedView::mouseMoveEvent(QMouseEvent* event)
{
if (!isVisible()) {
@ -418,6 +431,22 @@ void FeedView::mouseMoveEvent(QMouseEvent* event)
//qDebug() << event;
QAbstractItemView::mouseMoveEvent(event);
if (specialDelegate) {
QPoint point = event->localPos().toPoint();
QModelIndex index = indexAt(point);
if (index.isValid()) {
QRect rect = visualRect(index);
MessageDelegate* del = static_cast<MessageDelegate*>(itemDelegate());
if (rect.contains(point)) {
setAnchorHovered(del->isAnchorHovered(point, index, rect));
} else {
setAnchorHovered(false);
}
} else {
setAnchorHovered(false);
}
}
}
void FeedView::mousePressEvent(QMouseEvent* event)
@ -487,6 +516,7 @@ void FeedView::setItemDelegate(QAbstractItemDelegate* delegate)
elementMargin = MessageDelegate::margin;
connect(del, &MessageDelegate::buttonPushed, this, &FeedView::onMessageButtonPushed);
connect(del, &MessageDelegate::invalidPath, this, &FeedView::onMessageInvalidPath);
connect(del, &MessageDelegate::openLink, &QDesktopServices::openUrl);
} else {
specialDelegate = false;
elementMargin = 0;