gpui: Fix window title special characters display on X11 (#9994)

Maxime Forveille and Mikayla Maki created

Before:

![image](https://github.com/zed-industries/zed/assets/13511978/f12a144a-5c41-44e9-8422-aa73ea54fb9c)

After:

![image](https://github.com/zed-industries/zed/assets/13511978/45e9b701-77a8-4e63-9481-dab895a347f7)

Release Notes:

- Fixed window title special characters display on X11.

---------

Co-authored-by: Mikayla Maki <mikayla@zed.dev>

Change summary

crates/gpui/src/platform/linux/x11/window.rs | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)

Detailed changes

crates/gpui/src/platform/linux/x11/window.rs 🔗

@@ -33,8 +33,10 @@ use super::X11Display;
 
 x11rb::atom_manager! {
     pub XcbAtoms: AtomsCookie {
+        UTF8_STRING,
         WM_PROTOCOLS,
         WM_DELETE_WINDOW,
+        _NET_WM_NAME,
         _NET_WM_STATE,
         _NET_WM_STATE_MAXIMIZED_VERT,
         _NET_WM_STATE_MAXIMIZED_HORZ,
@@ -76,7 +78,7 @@ pub struct Callbacks {
 
 pub(crate) struct X11WindowState {
     raw: RawWindow,
-
+    atoms: XcbAtoms,
     bounds: Bounds<i32>,
     scale_factor: f32,
     renderer: BladeRenderer,
@@ -238,6 +240,7 @@ impl X11WindowState {
             bounds: params.bounds.map(|v| v.0),
             scale_factor: 1.0,
             renderer: BladeRenderer::new(gpu, gpu_extent),
+            atoms: *atoms,
 
             input_handler: None,
         }
@@ -442,6 +445,16 @@ impl PlatformWindow for X11Window {
                 title.as_bytes(),
             )
             .unwrap();
+
+        self.xcb_connection
+            .change_property8(
+                xproto::PropMode::REPLACE,
+                self.x_window,
+                self.state.borrow().atoms._NET_WM_NAME,
+                self.state.borrow().atoms.UTF8_STRING,
+                title.as_bytes(),
+            )
+            .unwrap();
     }
 
     // todo(linux)