From f989182f329c923ed48974051d5e4ed88674a5b3 Mon Sep 17 00:00:00 2001 From: reuk Date: Tue, 17 Aug 2021 12:21:55 +0100 Subject: [PATCH] Linux windowing: Display utf-8 native window titles correctly --- .../Standalone/juce_StandaloneFilterApp.cpp | 2 +- .../juce_gui_basics/native/x11/juce_linux_X11_Symbols.cpp | 1 + .../juce_gui_basics/native/x11/juce_linux_X11_Symbols.h | 4 ++++ .../native/x11/juce_linux_XWindowSystem.cpp | 8 ++++++-- 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterApp.cpp b/modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterApp.cpp index cb099283a2..04b416b621 100644 --- a/modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterApp.cpp +++ b/modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterApp.cpp @@ -67,7 +67,7 @@ public: appProperties.setStorageParameters (options); } - const String getApplicationName() override { return JucePlugin_Name; } + const String getApplicationName() override { return CharPointer_UTF8 (JucePlugin_Name); } const String getApplicationVersion() override { return JucePlugin_VersionString; } bool moreThanOneInstanceAllowed() override { return true; } void anotherInstanceStarted (const String&) override {} diff --git a/modules/juce_gui_basics/native/x11/juce_linux_X11_Symbols.cpp b/modules/juce_gui_basics/native/x11/juce_linux_X11_Symbols.cpp index ad5b0e462a..0be22fa56b 100644 --- a/modules/juce_gui_basics/native/x11/juce_linux_X11_Symbols.cpp +++ b/modules/juce_gui_basics/native/x11/juce_linux_X11_Symbols.cpp @@ -188,6 +188,7 @@ bool X11Symbols::loadAllSymbols() makeSymbolBinding (xUngrabServer, "XUngrabServer"), makeSymbolBinding (xUnlockDisplay, "XUnlockDisplay"), makeSymbolBinding (xUnmapWindow, "XUnmapWindow"), + makeSymbolBinding (xutf8TextListToTextProperty, "Xutf8TextListToTextProperty"), makeSymbolBinding (xWarpPointer, "XWarpPointer"))) return false; diff --git a/modules/juce_gui_basics/native/x11/juce_linux_X11_Symbols.h b/modules/juce_gui_basics/native/x11/juce_linux_X11_Symbols.h index 070bce1443..f7ab58bca7 100644 --- a/modules/juce_gui_basics/native/x11/juce_linux_X11_Symbols.h +++ b/modules/juce_gui_basics/native/x11/juce_linux_X11_Symbols.h @@ -449,6 +449,10 @@ public: (char**, int, XTextProperty*), Status) + JUCE_GENERATE_FUNCTION_WITH_DEFAULT (Xutf8TextListToTextProperty, xutf8TextListToTextProperty, + (::Display*, char**, int, XICCEncodingStyle, XTextProperty*), + int) + JUCE_GENERATE_FUNCTION_WITH_DEFAULT (XSync, xSync, (::Display*, Bool), void) diff --git a/modules/juce_gui_basics/native/x11/juce_linux_XWindowSystem.cpp b/modules/juce_gui_basics/native/x11/juce_linux_XWindowSystem.cpp index 115401b537..ca8668aa09 100644 --- a/modules/juce_gui_basics/native/x11/juce_linux_XWindowSystem.cpp +++ b/modules/juce_gui_basics/native/x11/juce_linux_XWindowSystem.cpp @@ -1606,12 +1606,16 @@ void XWindowSystem::setTitle (::Window windowH, const String& title) const { jassert (windowH != 0); - XTextProperty nameProperty; + XTextProperty nameProperty{}; char* strings[] = { const_cast (title.toRawUTF8()) }; XWindowSystemUtilities::ScopedXLock xLock; - if (X11Symbols::getInstance()->xStringListToTextProperty (strings, 1, &nameProperty)) + if (X11Symbols::getInstance()->xutf8TextListToTextProperty (display, + strings, + numElementsInArray (strings), + XUTF8StringStyle, + &nameProperty) >= 0) { X11Symbols::getInstance()->xSetWMName (display, windowH, &nameProperty); X11Symbols::getInstance()->xSetWMIconName (display, windowH, &nameProperty);