From: Vincent Bernat Date: Sat, 31 Jul 2021 10:29:47 +0000 (+0200) Subject: x11: ensure WM class is not null even if display is initialized early X-Git-Tag: archive/raspbian/4.4.1+ds1-2+rpi1^2~18^2~1^2~15^2 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=2ebde276d1ce27876a788e28d7445417681e22fe;p=gtk4.git x11: ensure WM class is not null even if display is initialized early With gtkmm, when using `Application()`, the display is initialized before we know the application name and therefore, the program class associated to the display is NULL. Instead of providing a default value, we set it equal to program name when NULL. Moreover, we give up on capitalizing the class name to keep the code super simple. Also, not using a capitalized name is consistent with `gdk_x11_display_open()`. If someone has a good reason to use a capitalized name, here is how to do it. ```c class_hint = XAllocClassHint (); class_hint->res_name = (char *) g_get_prgname (); if (display_x11->program_class) { class_hint->res_class = (char *) g_strdup (display_x11->program_class); } else if (class_hint->res_name && class_hint->res_name[0]) { class_hint->res_class = (char *) g_strdup (class_hint->res_name); class_hint->res_class[0] = g_ascii_toupper (class_hint->res_class[0]); } XSetClassHint (xdisplay, impl->xid, class_hint); g_free (class_hint->res_class); XFree (class_hint); ``` Fix eff53c023a26 ("x11: set a default value for program_class") --- diff --git a/gdk/x11/gdkdisplay-x11.c b/gdk/x11/gdkdisplay-x11.c index 30d040a132..33a3648f4e 100644 --- a/gdk/x11/gdkdisplay-x11.c +++ b/gdk/x11/gdkdisplay-x11.c @@ -204,9 +204,6 @@ static void gdk_x11_display_init (GdkX11Display *self) { self->monitors = g_list_store_new (GDK_TYPE_MONITOR); - self->program_class = g_strdup (g_get_prgname ()); - if (self->program_class && self->program_class[0]) - self->program_class[0] = g_ascii_toupper (self->program_class[0]); } static void diff --git a/gdk/x11/gdksurface-x11.c b/gdk/x11/gdksurface-x11.c index 505fbd2b9a..dd1d0d3bd2 100644 --- a/gdk/x11/gdksurface-x11.c +++ b/gdk/x11/gdksurface-x11.c @@ -1282,7 +1282,10 @@ _gdk_x11_display_create_surface (GdkDisplay *display, class_hint = XAllocClassHint (); class_hint->res_name = (char *) g_get_prgname (); - class_hint->res_class = (char *) display_x11->program_class; + if (display_x11->program_class) + class_hint->res_class = (char *) display_x11->program_class; + else + class_hint->res_class = class_hint->res_name; XSetClassHint (xdisplay, impl->xid, class_hint); XFree (class_hint);