From b39d66adde52eb72bd93c2ecd75135fdfc9ca05b Mon Sep 17 00:00:00 2001 From: Harley Acheson Date: Thu, 1 Jul 2021 18:08:29 -0700 Subject: Fix T88909: Win32 getTitle() UTF8 Support In the Win32 platform our setTitle() can properly assign a Unicode utf-8 window title. Unfortunately our getTitle() will only read regular 8-bit character strings. This means that we can never compare what we set to what we get. This patch updates getTitle() to use Unicode-aware GetWindowTextLengthW and GetWindowTextW. see T88909 for an example of this affecting user experience. Differential Revision: https://developer.blender.org/D11782 Reviewed by Ray Molenkamp --- intern/ghost/intern/GHOST_WindowWin32.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'intern/ghost') diff --git a/intern/ghost/intern/GHOST_WindowWin32.cpp b/intern/ghost/intern/GHOST_WindowWin32.cpp index 1b73b765b49..762ee6bc0eb 100644 --- a/intern/ghost/intern/GHOST_WindowWin32.cpp +++ b/intern/ghost/intern/GHOST_WindowWin32.cpp @@ -306,9 +306,13 @@ void GHOST_WindowWin32::setTitle(const char *title) std::string GHOST_WindowWin32::getTitle() const { - char buf[s_maxTitleLength]; /* CHANGE + never used yet. */ - ::GetWindowText(m_hWnd, buf, s_maxTitleLength); - return std::string(buf); + std::wstring wtitle(::GetWindowTextLengthW(m_hWnd) + 1, L'\0'); + ::GetWindowTextW(m_hWnd, &wtitle[0], wtitle.capacity()); + + std::string title(count_utf_8_from_16(wtitle.c_str()) + 1, '\0'); + conv_utf_16_to_8(wtitle.c_str(), &title[0], title.capacity()); + + return title; } void GHOST_WindowWin32::getWindowBounds(GHOST_Rect &bounds) const -- cgit v1.2.3