Skip to content
Snippets Groups Projects
Commit 9c06ba5d authored by Konstantinos Sideris's avatar Konstantinos Sideris
Browse files

Open user profile on matrix.to links

parent e9ee2997
No related branches found
No related tags found
No related merge requests found
......@@ -3,6 +3,8 @@
## [Unreleased]
### Features
- Support for sending & receiving markdown formatted messages. (#283)
- Context menu option to show the raw text message of an event. (#437)
- Clicking on a user pill link will open the user profile.
### Improvements
- Update Polish translation (#430)
......
......@@ -16,6 +16,7 @@
*/
#include <QContextMenuEvent>
#include <QDesktopServices>
#include <QFontDatabase>
#include <QMenu>
#include <QTimer>
......@@ -35,6 +36,7 @@
#include "timeline/widgets/VideoItem.h"
#include "dialogs/RawMessage.h"
#include "mtx/identifiers.hpp"
constexpr int MSG_RIGHT_MARGIN = 7;
constexpr int MSG_PADDING = 20;
......@@ -61,8 +63,47 @@ TextLabel::TextLabel(const QString &text, QWidget *parent)
&TextLabel::adjustHeight);
document()->setDocumentMargin(0);
setFocusPolicy(Qt::NoFocus);
setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
setFixedHeight(0);
connect(this, &TextLabel::linkActivated, this, [](const QUrl &url) {
auto parts = url.toString().split('/');
auto defaultHandler = [](const QUrl &url) { QDesktopServices::openUrl(url); };
if (url.host() != "matrix.to" || parts.isEmpty())
return defaultHandler(url);
try {
using namespace mtx::identifiers;
parse<User>(parts.last().toStdString());
} catch (const std::exception &) {
return defaultHandler(url);
}
auto user_id = parts.last();
auto room_id = ChatPage::instance()->currentRoom();
MainWindow::instance()->openUserProfile(user_id, room_id);
});
}
void
TextLabel::mousePressEvent(QMouseEvent *e)
{
link_ = (e->button() & Qt::LeftButton) ? anchorAt(e->pos()) : QString();
QTextBrowser::mousePressEvent(e);
}
void
TextLabel::mouseReleaseEvent(QMouseEvent *e)
{
if (e->button() & Qt::LeftButton && !link_.isEmpty() && anchorAt(e->pos()) == link_) {
emit linkActivated(link_);
return;
}
QTextBrowser::mouseReleaseEvent(e);
}
StatusIndicator::StatusIndicator(QWidget *parent)
......
......@@ -105,8 +105,18 @@ public:
void wheelEvent(QWheelEvent *event) override { event->ignore(); }
protected:
void mousePressEvent(QMouseEvent *e) override;
void mouseReleaseEvent(QMouseEvent *e) override;
private slots:
void adjustHeight(const QSizeF &size) { setFixedHeight(size.height()); }
signals:
void linkActivated(const QUrl &link);
private:
QString link_;
};
class UserProfileFilter : public QObject
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment