]> git.lizzy.rs Git - minetest.git/commitdiff
Use utf-8 for the Irrlicht clipboard (#11538)
authorDS <vorunbekannt75@web.de>
Mon, 23 Aug 2021 12:09:50 +0000 (14:09 +0200)
committerGitHub <noreply@github.com>
Mon, 23 Aug 2021 12:09:50 +0000 (14:09 +0200)
src/gui/guiChatConsole.cpp
src/gui/guiEditBox.cpp

index 85617d8623d8038b513f3fe038fd1a42a8ee3bc5..049e21a16076e5f9b51816ab865e7349b8843d51 100644 (file)
@@ -338,7 +338,7 @@ void GUIChatConsole::drawText()
                                        false,
                                        false,
                                        &AbsoluteClippingRect);
-                       } else 
+                       } else
 #endif
                        {
                                // Otherwise use standard text
@@ -580,8 +580,7 @@ bool GUIChatConsole::OnEvent(const SEvent& event)
                        const c8 *text = os_operator->getTextFromClipboard();
                        if (!text)
                                return true;
-                       std::basic_string<unsigned char> str((const unsigned char*)text);
-                       prompt.input(std::wstring(str.begin(), str.end()));
+                       prompt.input(utf8_to_wide(text));
                        return true;
                }
                else if(event.KeyInput.Key == KEY_KEY_X && event.KeyInput.Control)
index 43afb6e3e46a82f882094872e0fb8ead9160da91..8459107cd1b80fbe59ba6c0d77d1f2117e1839d7 100644 (file)
@@ -25,6 +25,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "IGUIFont.h"
 
 #include "porting.h"
+#include "util/string.h"
 
 GUIEditBox::~GUIEditBox()
 {
@@ -517,8 +518,7 @@ void GUIEditBox::onKeyControlC(const SEvent &event)
        const s32 realmbgn = m_mark_begin < m_mark_end ? m_mark_begin : m_mark_end;
        const s32 realmend = m_mark_begin < m_mark_end ? m_mark_end : m_mark_begin;
 
-       core::stringc s;
-       s = Text.subString(realmbgn, realmend - realmbgn).c_str();
+       std::string s = stringw_to_utf8(Text.subString(realmbgn, realmend - realmbgn));
        m_operator->copyToClipboard(s.c_str());
 }
 
@@ -567,29 +567,28 @@ bool GUIEditBox::onKeyControlV(const SEvent &event, s32 &mark_begin, s32 &mark_e
 
        // add new character
        if (const c8 *p = m_operator->getTextFromClipboard()) {
+               core::stringw inserted_text = utf8_to_stringw(p);
                if (m_mark_begin == m_mark_end) {
                        // insert text
                        core::stringw s = Text.subString(0, m_cursor_pos);
-                       s.append(p);
+                       s.append(inserted_text);
                        s.append(Text.subString(
                                        m_cursor_pos, Text.size() - m_cursor_pos));
 
                        if (!m_max || s.size() <= m_max) {
                                Text = s;
-                               s = p;
-                               m_cursor_pos += s.size();
+                               m_cursor_pos += inserted_text.size();
                        }
                } else {
                        // replace text
 
                        core::stringw s = Text.subString(0, realmbgn);
-                       s.append(p);
+                       s.append(inserted_text);
                        s.append(Text.subString(realmend, Text.size() - realmend));
 
                        if (!m_max || s.size() <= m_max) {
                                Text = s;
-                               s = p;
-                               m_cursor_pos = realmbgn + s.size();
+                               m_cursor_pos = realmbgn + inserted_text.size();
                        }
                }
        }