diff --git a/src/mumble/MainWindow.cpp b/src/mumble/MainWindow.cpp
index 3c7ae7ae9..d8bc9cc4e 100644
--- a/src/mumble/MainWindow.cpp
+++ b/src/mumble/MainWindow.cpp
@@ -814,7 +814,14 @@ void MainWindow::on_qleChat_returnPressed() {
Channel *c = pmModel->getChannel(qtvPlayers->currentIndex());
MumbleProto::TextMessage mptm;
- mptm.set_message(u8(qleChat->text()));
+ QString qsText;
+
+ qsText = qleChat->text();
+ if (! Qt::mightBeRichText(qsText)) {
+ qsText = TextMessage::autoFormat(qsText);
+ }
+
+ mptm.set_message(u8(qsText));
if (p == NULL || p->uiSession == g.uiSession) {
// Channel tree message
@@ -822,16 +829,16 @@ void MainWindow::on_qleChat_returnPressed() {
c = ClientPlayer::get(g.uiSession)->cChannel;
mptm.add_channel_id(c->iId);
- g.l->log(Log::TextMessage, tr("To %1: %2").arg(c->qsName).arg(qleChat->text()), tr("Message to %1").arg(c->qsName));
+ g.l->log(Log::TextMessage, tr("To channel %1: %2").arg(c->qsName).arg(qsText), tr("Message to channel %1").arg(c->qsName));
}
else {
// Player message
mptm.add_session(p->uiSession);
- g.l->log(Log::TextMessage, tr("To %1: %2").arg(p->qsName).arg(qleChat->text()), tr("Message to %1").arg(p->qsName));
+ g.l->log(Log::TextMessage, tr("To %1: %2").arg(p->qsName).arg(qsText), tr("Message to %1").arg(p->qsName));
}
g.sh->sendMessage(mptm);
- qleChat->setText(QString());
+ qleChat->clear();
}
void MainWindow::on_qmConfig_aboutToShow() {
@@ -1073,7 +1080,7 @@ void MainWindow::on_qaChannelSendMessage_triggered() {
mptm.add_channel_id(id);
mptm.set_message(u8(texm->message()));
g.sh->sendMessage(mptm);
- g.l->log(Log::TextMessage, tr("To tree %1: %2").arg(c->qsName).arg(texm->message()), tr("Message to tree %1").arg(c->qsName));
+ g.l->log(Log::TextMessage, tr("To channel %1: %2").arg(c->qsName).arg(texm->message()), tr("Message to channel %1").arg(c->qsName));
}
delete texm;
}
diff --git a/src/mumble/TextMessage.cpp b/src/mumble/TextMessage.cpp
index b22807277..1d2b1509c 100644
--- a/src/mumble/TextMessage.cpp
+++ b/src/mumble/TextMessage.cpp
@@ -41,6 +41,42 @@ void TextMessage::on_qcbRawMessage_stateChanged(int) {
on_qteEdit_textChanged();
}
+QString TextMessage::autoFormat(QString qsPlain) {
+ QRegExp qr;
+ qr.setMinimal(true);
+ qr.setPatternSyntax(QRegExp::RegExp2);
+ qr.setCaseSensitivity(Qt::CaseInsensitive);
+
+ qr.setPattern(QLatin1String("[\\r\\n]+"));
+ qsPlain.replace(qr, QLatin1String("
"));
+
+ qr.setPattern(QLatin1String("\\*(\\w+)\\*"));
+ qsPlain.replace(qr, QLatin1String("\\1"));
+
+ qr.setPattern(QLatin1String("\"([^\"]+)\""));
+ qsPlain.replace(qr, QLatin1String("\"\\1\""));
+
+ qr.setPattern(QLatin1String("[a-z]+://[^ <$]*"));
+ qr.setMinimal(false);
+
+ int idx = 0;
+ do {
+ idx = qr.indexIn(qsPlain, idx);
+ if (idx >= 0) {
+ QString url = qr.capturedTexts().at(0);
+ QUrl u(url);
+ if (u.isValid()) {
+ int len = qr.matchedLength();
+ QString replacement = QString::fromLatin1("%1").arg(url);
+ qsPlain.replace(idx, len, replacement);
+ idx += replacement.length();
+ } else {
+ idx++;
+ }
+ }
+ } while (idx >= 0);
+ return qsPlain;
+}
void TextMessage::on_qteEdit_textChanged() {
qsRep = qteEdit->toPlainText();
@@ -49,39 +85,7 @@ void TextMessage::on_qteEdit_textChanged() {
}
if (! Qt::mightBeRichText(qsRep) && !qcbRawMessage->isChecked()) {
- QRegExp qr;
- qr.setMinimal(true);
- qr.setPatternSyntax(QRegExp::RegExp2);
- qr.setCaseSensitivity(Qt::CaseInsensitive);
-
- qr.setPattern(QLatin1String("[\\r\\n]+"));
- qsRep.replace(qr, QLatin1String("
"));
-
- qr.setPattern(QLatin1String("\\*(\\w+)\\*"));
- qsRep.replace(qr, QLatin1String("\\1"));
-
- qr.setPattern(QLatin1String("\"([^\"]+)\""));
- qsRep.replace(qr, QLatin1String("\"\\1\""));
-
- qr.setPattern(QLatin1String("[a-z]+://[^ <$]*"));
- qr.setMinimal(false);
-
- int idx = 0;
- do {
- idx = qr.indexIn(qsRep, idx);
- if (idx >= 0) {
- QString url = qr.capturedTexts().at(0);
- QUrl u(url);
- if (u.isValid()) {
- int len = qr.matchedLength();
- QString replacement = QString::fromLatin1("%1").arg(url);
- qsRep.replace(idx, len, replacement);
- idx += replacement.length();
- } else {
- idx++;
- }
- }
- } while (idx >= 0);
+ qsRep = autoFormat(qsRep);
}
qtbPreview->setHtml(qsRep);
diff --git a/src/mumble/TextMessage.h b/src/mumble/TextMessage.h
index 36d859bef..de4a000e8 100644
--- a/src/mumble/TextMessage.h
+++ b/src/mumble/TextMessage.h
@@ -44,6 +44,7 @@ class TextMessage : public QDialog, public Ui::TextMessage {
TextMessage(QWidget *parent = NULL);
QString message();
bool eventFilter(QObject *obj, QEvent *event);
+ static QString autoFormat(QString qsPlain);
public slots:
void on_qteEdit_textChanged();
void on_qcbRawMessage_stateChanged(int);