diff --git a/src/timeline/InputBar.cpp b/src/timeline/InputBar.cpp
index 5ef38ac7..b1580f97 100644
--- a/src/timeline/InputBar.cpp
+++ b/src/timeline/InputBar.cpp
@@ -123,6 +123,20 @@ InputBar::insertMimeData(const QMimeData *md)
}
void
+InputBar::setText(QString newText)
+{
+ if (history_.empty())
+ history_.push_front(newText);
+ else
+ history_.front() = newText;
+ history_index_ = 0;
+
+ if (history_.size() == INPUT_HISTORY_SIZE)
+ history_.pop_back();
+
+ emit textChanged(newText);
+}
+void
InputBar::updateState(int selectionStart_, int selectionEnd_, int cursorPosition_, QString text_)
{
if (text_.isEmpty())
@@ -202,6 +216,10 @@ InputBar::send()
if (text().trimmed().isEmpty())
return;
+ nhlog::ui()->debug("Send: {}", text().toStdString());
+
+ auto wasEdit = !room->edit().isEmpty();
+
if (text().startsWith('/')) {
int command_end = text().indexOf(' ');
if (command_end == -1)
@@ -217,12 +235,10 @@ InputBar::send()
message(text());
}
- nhlog::ui()->debug("Send: {}", text().toStdString());
-
- if (history_.size() == INPUT_HISTORY_SIZE)
- history_.pop_back();
- history_.push_front("");
- history_index_ = 0;
+ if (!wasEdit) {
+ history_.push_front("");
+ setText("");
+ }
}
void
@@ -278,12 +294,10 @@ InputBar::message(QString msg, MarkdownOverride useMarkdown)
if (!room->reply().isEmpty()) {
text.relations.relations.push_back(
{mtx::common::RelationType::InReplyTo, room->reply().toStdString()});
- room->resetReply();
}
text.relations.relations.push_back(
{mtx::common::RelationType::Replace, room->edit().toStdString()});
- room->resetEdit();
} else if (!room->reply().isEmpty()) {
auto related = room->relatedInfo(room->reply());
@@ -313,7 +327,6 @@ InputBar::message(QString msg, MarkdownOverride useMarkdown)
text.relations.relations.push_back(
{mtx::common::RelationType::InReplyTo, related.related_event});
- room->resetReply();
}
room->sendMessageEvent(text, mtx::events::EventType::RoomMessage);
@@ -336,12 +349,10 @@ InputBar::emote(QString msg)
if (!room->reply().isEmpty()) {
emote.relations.relations.push_back(
{mtx::common::RelationType::InReplyTo, room->reply().toStdString()});
- room->resetReply();
}
if (!room->edit().isEmpty()) {
emote.relations.relations.push_back(
{mtx::common::RelationType::Replace, room->edit().toStdString()});
- room->resetEdit();
}
room->sendMessageEvent(emote, mtx::events::EventType::RoomMessage);
@@ -372,12 +383,10 @@ InputBar::image(const QString &filename,
if (!room->reply().isEmpty()) {
image.relations.relations.push_back(
{mtx::common::RelationType::InReplyTo, room->reply().toStdString()});
- room->resetReply();
}
if (!room->edit().isEmpty()) {
image.relations.relations.push_back(
{mtx::common::RelationType::Replace, room->edit().toStdString()});
- room->resetEdit();
}
room->sendMessageEvent(image, mtx::events::EventType::RoomMessage);
@@ -403,12 +412,10 @@ InputBar::file(const QString &filename,
if (!room->reply().isEmpty()) {
file.relations.relations.push_back(
{mtx::common::RelationType::InReplyTo, room->reply().toStdString()});
- room->resetReply();
}
if (!room->edit().isEmpty()) {
file.relations.relations.push_back(
{mtx::common::RelationType::Replace, room->edit().toStdString()});
- room->resetEdit();
}
room->sendMessageEvent(file, mtx::events::EventType::RoomMessage);
@@ -435,12 +442,10 @@ InputBar::audio(const QString &filename,
if (!room->reply().isEmpty()) {
audio.relations.relations.push_back(
{mtx::common::RelationType::InReplyTo, room->reply().toStdString()});
- room->resetReply();
}
if (!room->edit().isEmpty()) {
audio.relations.relations.push_back(
{mtx::common::RelationType::Replace, room->edit().toStdString()});
- room->resetEdit();
}
room->sendMessageEvent(audio, mtx::events::EventType::RoomMessage);
@@ -466,12 +471,10 @@ InputBar::video(const QString &filename,
if (!room->reply().isEmpty()) {
video.relations.relations.push_back(
{mtx::common::RelationType::InReplyTo, room->reply().toStdString()});
- room->resetReply();
}
if (!room->edit().isEmpty()) {
video.relations.relations.push_back(
{mtx::common::RelationType::Replace, room->edit().toStdString()});
- room->resetEdit();
}
room->sendMessageEvent(video, mtx::events::EventType::RoomMessage);
diff --git a/src/timeline/InputBar.h b/src/timeline/InputBar.h
index 696a0dd9..4cb6da7b 100644
--- a/src/timeline/InputBar.h
+++ b/src/timeline/InputBar.h
@@ -41,7 +41,7 @@ public slots:
QString text() const;
QString previousText();
QString nextText();
- void setText(QString newText) { emit textChanged(newText); }
+ void setText(QString newText);
void send();
void paste(bool fromMouse);
diff --git a/src/timeline/TimelineModel.h b/src/timeline/TimelineModel.h
index c4df300f..e02539bb 100644
--- a/src/timeline/TimelineModel.h
+++ b/src/timeline/TimelineModel.h
@@ -355,4 +355,6 @@ TimelineModel::sendMessageEvent(const T &content, mtx::events::EventType eventTy
msgCopy.content = content;
msgCopy.type = eventType;
emit newMessageToSend(msgCopy);
+ resetReply();
+ resetEdit();
}
|