Skip to content

x11: ensure WM class is not null even if display is initialized early

Vincent Bernat requested to merge vincentbernat/gtk:fix/wm_class2 into master

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.

  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 eff53c02 ("x11: set a default value for program_class")

Merge request reports