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
This commit is contained in:
Harley Acheson 2021-07-01 18:08:29 -07:00 committed by Jeroen Bakker
parent 933c6b7d8a
commit d6facd44b5
Notes: blender-bot 2024-01-31 11:35:08 +01:00
Referenced by issue #88449: Blender LTS: Maintenance Task 2.93
Referenced by issue #88449, Blender LTS: Maintenance Task 2.93
Referenced by issue #88909, More than one Render Window instances will be created after hitting F12 multiple times
1 changed files with 7 additions and 3 deletions

View File

@ -376,9 +376,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