mirror of
https://github.com/Chatterino/chatterino2.git
synced 2024-11-21 22:24:07 +01:00
Middle mouse button can now also open links (#1644)
This commit is contained in:
parent
b4eb56f362
commit
7719816891
3 changed files with 62 additions and 15 deletions
|
@ -19,4 +19,9 @@ bool Link::isValid() const
|
||||||
return this->type != None;
|
return this->type != None;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Link::isUrl() const
|
||||||
|
{
|
||||||
|
return this->type == Url;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace chatterino
|
} // namespace chatterino
|
||||||
|
|
|
@ -28,6 +28,7 @@ public:
|
||||||
QString value;
|
QString value;
|
||||||
|
|
||||||
bool isValid() const;
|
bool isValid() const;
|
||||||
|
bool isUrl() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace chatterino
|
} // namespace chatterino
|
||||||
|
|
|
@ -1374,10 +1374,22 @@ void ChannelView::mousePressEvent(QMouseEvent *event)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Qt::MiddleButton: {
|
case Qt::MiddleButton: {
|
||||||
if (this->isScrolling_)
|
const MessageLayoutElement *hoverLayoutElement =
|
||||||
this->disableScrolling();
|
layout->getElementAt(relativePos);
|
||||||
|
|
||||||
|
if (hoverLayoutElement != nullptr &&
|
||||||
|
hoverLayoutElement->getLink().isUrl() &&
|
||||||
|
this->isScrolling_ == false)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
this->enableScrolling(event->screenPos());
|
{
|
||||||
|
if (this->isScrolling_)
|
||||||
|
this->disableScrolling();
|
||||||
|
else
|
||||||
|
this->enableScrolling(event->screenPos());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1389,6 +1401,16 @@ void ChannelView::mousePressEvent(QMouseEvent *event)
|
||||||
|
|
||||||
void ChannelView::mouseReleaseEvent(QMouseEvent *event)
|
void ChannelView::mouseReleaseEvent(QMouseEvent *event)
|
||||||
{
|
{
|
||||||
|
// find message
|
||||||
|
this->queueLayout();
|
||||||
|
|
||||||
|
std::shared_ptr<MessageLayout> layout;
|
||||||
|
QPoint relativePos;
|
||||||
|
int messageIndex;
|
||||||
|
|
||||||
|
bool foundMessage =
|
||||||
|
tryGetMessageAt(event->pos(), layout, relativePos, messageIndex);
|
||||||
|
|
||||||
// check if mouse was pressed
|
// check if mouse was pressed
|
||||||
if (event->button() == Qt::LeftButton)
|
if (event->button() == Qt::LeftButton)
|
||||||
{
|
{
|
||||||
|
@ -1439,25 +1461,35 @@ void ChannelView::mouseReleaseEvent(QMouseEvent *event)
|
||||||
}
|
}
|
||||||
else if (event->button() == Qt::MiddleButton)
|
else if (event->button() == Qt::MiddleButton)
|
||||||
{
|
{
|
||||||
if (event->screenPos() == this->lastMiddlePressPosition_)
|
if (this->isScrolling_)
|
||||||
this->enableScrolling(event->screenPos());
|
{
|
||||||
else
|
if (event->screenPos() == this->lastMiddlePressPosition_)
|
||||||
this->disableScrolling();
|
this->enableScrolling(event->screenPos());
|
||||||
|
else
|
||||||
|
this->disableScrolling();
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (foundMessage)
|
||||||
|
{
|
||||||
|
const MessageLayoutElement *hoverLayoutElement =
|
||||||
|
layout->getElementAt(relativePos);
|
||||||
|
|
||||||
|
if (hoverLayoutElement == nullptr ||
|
||||||
|
hoverLayoutElement->getLink().isUrl() == false)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// not left or right button
|
// not left or right button
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// find message
|
|
||||||
this->queueLayout();
|
|
||||||
|
|
||||||
std::shared_ptr<MessageLayout> layout;
|
|
||||||
QPoint relativePos;
|
|
||||||
int messageIndex;
|
|
||||||
|
|
||||||
// no message found
|
// no message found
|
||||||
if (!tryGetMessageAt(event->pos(), layout, relativePos, messageIndex))
|
if (!foundMessage)
|
||||||
{
|
{
|
||||||
// No message at clicked position
|
// No message at clicked position
|
||||||
return;
|
return;
|
||||||
|
@ -1548,6 +1580,14 @@ void ChannelView::handleMouseClick(QMouseEvent *event,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case Qt::MiddleButton: {
|
||||||
|
auto &link = hoveredElement->getLink();
|
||||||
|
if (!getSettings()->linksDoubleClickOnly)
|
||||||
|
{
|
||||||
|
this->handleLinkClick(event, link, layout);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:;
|
default:;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1730,7 +1770,8 @@ void ChannelView::showUserInfoPopup(const QString &userName)
|
||||||
void ChannelView::handleLinkClick(QMouseEvent *event, const Link &link,
|
void ChannelView::handleLinkClick(QMouseEvent *event, const Link &link,
|
||||||
MessageLayout *layout)
|
MessageLayout *layout)
|
||||||
{
|
{
|
||||||
if (event->button() != Qt::LeftButton)
|
if (event->button() != Qt::LeftButton &&
|
||||||
|
event->button() != Qt::MiddleButton)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue