From ee522aa82e54cd28fb5ce8f366e937a62597b698 Mon Sep 17 00:00:00 2001 From: Torsten Schulz Date: Sun, 18 Feb 2024 12:05:46 +0100 Subject: [PATCH] Fixed problems with smileys --- src/app.cpp | 22 +++++++++++++--------- src/app.h | 4 ++-- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/src/app.cpp b/src/app.cpp index 9305521..6d65ba6 100644 --- a/src/app.cpp +++ b/src/app.cpp @@ -3,7 +3,6 @@ #include #include #include -#include #include #include #include @@ -412,9 +411,9 @@ Wt::WContainerWidget* App::createInputContainer(Wt::WVBoxLayout* layout) { auto inputLine = createInputLine(inputLayout); inputLine->setFocus(); createSendImageButton(inputLayout); - auto cursorPosition = std::make_shared(0); - createSmileyButton(inputLayout, inputLine, cursorPosition); - createSmileyBar(inputContainer, inputLine, cursorPosition); + messageCursorPosition_ = std::make_shared(0); + createSmileyButton(inputLayout, inputLine, messageCursorPosition_); + createSmileyBar(inputContainer, inputLine, messageCursorPosition_); createSendButton(inputLayout, inputLine); return inputContainer; } @@ -539,6 +538,7 @@ void App::sendMessage(Wt::WLineEdit *inputLine) { } inputLine->setValueText(""); auto sendString = Wt::WString(utf8String.substr(0, 250)); + *messageCursorPosition_ = 0; server_.addMessage(sessionId(), currentConversationWith_, Broadcast::Message(sessionId(), sendString)); } @@ -762,11 +762,15 @@ std::unique_ptr App::createSmileysBar(Wt::WLineEdit *input auto item = smileyBar->addNew(code, Wt::TextFormat::UnsafeXHTML); item->setToolTip(smiley.second.tooltip); item->clicked().connect([=]() { - auto currentText = inputLine->text().toUTF8(); - currentText.insert(*cursorPosition, smiley.first); - inputLine->setText(currentText); - inputLine->setFocus(); - *cursorPosition += currentText.length() - 1; + try { + auto currentText = inputLine->text().toUTF8(); + currentText.insert(*cursorPosition, smiley.first); + inputLine->setText(currentText); + inputLine->setFocus(); + *cursorPosition += smiley.first.length(); + } catch (const std::exception &e) { + std::cout << e.what() << std::endl; + } }); } smileyBar->setStyleClass("smiley-bar"); diff --git a/src/app.h b/src/app.h index b4a85fb..2ae2e1f 100644 --- a/src/app.h +++ b/src/app.h @@ -47,7 +47,7 @@ private: {";p", Smiley("1F61C", "Twinkle tongue")}, {"O)", Smiley("1F607", "Angel")}, {":*", Smiley("1F617", "Kiss")}, - {"<3", Smiley("1FA77", "Heart")}, + {"(h)", Smiley("1FA77", "Heart")}, {"xD", Smiley("1F602", "Laughing hard")}, {":@", Smiley("1F635", "Confused")}, {":O", Smiley("1F632", "Surprised")}, @@ -87,7 +87,7 @@ private: std::vector searchResults_; std::string currentConversationWith_{""}; bool inboxOpen_{false}; - int messageCursorPosition_{-1}; + std::shared_ptr messageCursorPosition_; std::unique_ptr messageReceived_; Search searchFields; Wt::WTimer *loginTimer_;