diff --git a/src/FallbackAuth.cpp b/src/FallbackAuth.cpp
index dc16b7cb..d5f8c861 100644
--- a/src/FallbackAuth.cpp
+++ b/src/FallbackAuth.cpp
@@ -19,8 +19,8 @@ FallbackAuth::FallbackAuth(const QString &session, const QString &authType, QObj
void
FallbackAuth::openFallbackAuth()
{
- const auto url = QString("https://%1:%2/_matrix/client/r0/auth/%4/"
- "fallback/web?session=%3")
+ const auto url = QStringLiteral("https://%1:%2/_matrix/client/r0/auth/%4/"
+ "fallback/web?session=%3")
.arg(QString::fromStdString(http::client()->server()))
.arg(http::client()->port())
.arg(m_session, m_authType);
diff --git a/src/ReCaptcha.cpp b/src/ReCaptcha.cpp
index a1d0c56f..9a89bb4d 100644
--- a/src/ReCaptcha.cpp
+++ b/src/ReCaptcha.cpp
@@ -19,8 +19,8 @@ ReCaptcha::ReCaptcha(const QString &session, const QString &context, QObject *pa
void
ReCaptcha::openReCaptcha()
{
- const auto url = QString("https://%1:%2/_matrix/client/r0/auth/m.login.recaptcha/"
- "fallback/web?session=%3")
+ const auto url = QStringLiteral("https://%1:%2/_matrix/client/r0/auth/m.login.recaptcha/"
+ "fallback/web?session=%3")
.arg(QString::fromStdString(http::client()->server()))
.arg(http::client()->port())
.arg(m_session);
diff --git a/src/Utils.cpp b/src/Utils.cpp
index 498bad9a..b4d45472 100644
--- a/src/Utils.cpp
+++ b/src/Utils.cpp
@@ -1110,10 +1110,10 @@ utils::getFormattedQuoteBody(const RelatedInfo &related, const QString &html)
}
}
};
- return QString("<mx-reply><blockquote><a "
- "href=\"https://matrix.to/#/%1/%2\">In reply "
- "to</a> <a href=\"https://matrix.to/#/%3\">%4</a><br"
- "/>%5</blockquote></mx-reply>")
+ return QStringLiteral("<mx-reply><blockquote><a "
+ "href=\"https://matrix.to/#/%1/%2\">In reply "
+ "to</a> <a href=\"https://matrix.to/#/%3\">%4</a><br"
+ "/>%5</blockquote></mx-reply>")
.arg(related.room,
QString::fromStdString(related.related_event),
related.quoted_user,
diff --git a/src/timeline/InputBar.cpp b/src/timeline/InputBar.cpp
index e0dfe9b9..1636bcd1 100644
--- a/src/timeline/InputBar.cpp
+++ b/src/timeline/InputBar.cpp
@@ -75,7 +75,7 @@ MediaUpload::thumbnailDataUrl() const
buffer.open(QIODevice::WriteOnly);
thumbnail_.save(&buffer, "PNG");
QString base64 = QString::fromUtf8(byteArray.toBase64());
- return QString("data:image/png;base64,") + base64;
+ return QStringLiteral("data:image/png;base64,") + base64;
}
bool
@@ -241,7 +241,7 @@ InputBar::updateTextContentProperties(const QString &t, bool charDeleted)
}
}
- auto roomMention = containsRoomMention(t);
+ auto roomMention = containsRoomMention(t) && this->room->permissions()->canPingRoom();
if (roomMention != this->containsAtRoom_) {
if (roomMention)
diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp
index b41d1e0c..03606d90 100644
--- a/src/timeline/TimelineModel.cpp
+++ b/src/timeline/TimelineModel.cpp
@@ -1162,12 +1162,12 @@ TimelineModel::syncState(const mtx::responses::State &s)
void
TimelineModel::addEvents(const mtx::responses::Timeline &timeline)
{
- if (timeline.events.empty())
- return;
-
if (timeline.limited)
setPaginationInProgress(false);
+ if (timeline.events.empty())
+ return;
+
events.handleSync(timeline);
using namespace mtx::events;
@@ -2034,7 +2034,11 @@ TimelineModel::copyMedia(const QString &eventId) const
clipContents->setImageData(img);
}
- QGuiApplication::clipboard()->setMimeData(clipContents);
+ // Qt uses COM for clipboard management on windows and our HTTP threads do not
+ // initialize it, so run in the event loop
+ QTimer::singleShot(0, ChatPage::instance(), [clipContents] {
+ QGuiApplication::clipboard()->setMimeData(clipContents);
+ });
return;
} catch (const std::exception &e) {
|