fix: don't clear message when closing reply (#6145)

This commit is contained in:
pajlada
2025-04-12 13:31:02 +02:00
committed by GitHub
parent 7c8274ed56
commit 9cde7f8231
2 changed files with 48 additions and 36 deletions
+1
View File
@@ -11,6 +11,7 @@
- Bugfix: Fixed scrolling now working on inputs in the settings. (#6128)
- Bugfix: Make reply-cancel button less coarse-grained. (#6106)
- Bugfix: Fixed missing BetterTTV live updates of emotes. (#6132)
- Bugfix: Fixed message contents being cleared when using the close button for replies. (#6145)
- Bugfix: Handle <kbd>CMD</kbd> + <kbd>BACKSPACE</kbd> behavior explicitly in main chat dialog input for macOS. (#6111)
- Bugfix: Fixed a small typo in the settings page. (#6134)
- Bugfix: Fixed some Twitch commands not getting tab-completed correctly. (#6143)
+47 -36
View File
@@ -190,10 +190,10 @@ void SplitInput::initLayout()
this->openEmotePopup();
});
// clear input and remove reply target
// remove reply target
QObject::connect(this->ui_.cancelReplyButton, &EffectLabel::leftClicked,
[this] {
this->clearInput();
this->setReply(nullptr);
});
// Forward selection change signal
@@ -1146,53 +1146,64 @@ void SplitInput::setReply(MessagePtr target)
this->ui_.textEdit->resetCompletion();
}
assert(target != nullptr);
this->replyTarget_ = std::move(target);
if (this->enableInlineReplying_)
if (target != nullptr)
{
this->ui_.replyMessage->setWidth(this->replyMessageWidth());
this->ui_.replyMessage->setMessage(this->replyTarget_);
this->replyTarget_ = std::move(target);
// add spacing between reply box and input box
this->ui_.vbox->setSpacing(this->marginForTheme());
if (!this->isHidden())
if (this->enableInlineReplying_)
{
// update maximum height to give space for message
this->setMaximumHeight(this->scaledMaxHeight());
}
this->ui_.replyMessage->setWidth(this->replyMessageWidth());
this->ui_.replyMessage->setMessage(this->replyTarget_);
// Only enable reply label if inline replying
auto replyPrefix = "@" + this->replyTarget_->displayName;
auto plainText = this->ui_.textEdit->toPlainText().trimmed();
// This makes it so if plainText contains "@StreamerFan" and
// we are replying to "@Streamer" we don't just leave "Fan"
// in the text box
if (plainText.startsWith(replyPrefix))
{
if (plainText.length() > replyPrefix.length())
// add spacing between reply box and input box
this->ui_.vbox->setSpacing(this->marginForTheme());
if (!this->isHidden())
{
if (plainText.at(replyPrefix.length()) == ',' ||
plainText.at(replyPrefix.length()) == ' ')
// update maximum height to give space for message
this->setMaximumHeight(this->scaledMaxHeight());
}
// Only enable reply label if inline replying
auto replyPrefix = "@" + this->replyTarget_->displayName;
auto plainText = this->ui_.textEdit->toPlainText().trimmed();
// This makes it so if plainText contains "@StreamerFan" and
// we are replying to "@Streamer" we don't just leave "Fan"
// in the text box
if (plainText.startsWith(replyPrefix))
{
if (plainText.length() > replyPrefix.length())
{
plainText.remove(0, replyPrefix.length() + 1);
if (plainText.at(replyPrefix.length()) == ',' ||
plainText.at(replyPrefix.length()) == ' ')
{
plainText.remove(0, replyPrefix.length() + 1);
}
}
else
{
plainText.remove(0, replyPrefix.length());
}
}
else
if (!plainText.isEmpty() && !plainText.startsWith(' '))
{
plainText.remove(0, replyPrefix.length());
replyPrefix.append(' ');
}
this->ui_.textEdit->setPlainText(replyPrefix + plainText + " ");
this->ui_.textEdit->moveCursor(QTextCursor::EndOfBlock);
this->ui_.textEdit->resetCompletion();
this->ui_.replyLabel->setText("Replying to @" +
this->replyTarget_->displayName);
}
if (!plainText.isEmpty() && !plainText.startsWith(' '))
}
else
{
this->replyTarget_.reset();
if (this->enableInlineReplying_)
{
replyPrefix.append(' ');
this->clearReplyTarget();
}
this->ui_.textEdit->setPlainText(replyPrefix + plainText + " ");
this->ui_.textEdit->moveCursor(QTextCursor::EndOfBlock);
this->ui_.textEdit->resetCompletion();
this->ui_.replyLabel->setText("Replying to @" +
this->replyTarget_->displayName);
}
}