如何在X11(Ubuntu)中设置图标名称

时间:2018-05-01 20:12:53

标签: ubuntu x11

我用C ++编写了一个应用程序,使用的是内部工具包(没有Gnome或KDE)。当我在Ubuntu(18.04)上运行它,并按下alt-tab时,我可以看到我为应用程序设置的图标,但图标下方没有图标名称。参见附图:终端下面有一个终端图标和“终端”字样,但我自己的应用程序只有“未知”字样。

enter image description here

据推测,我需要设置许多可能的X11窗口属性中的一个,但我不知道哪一个。当与终端窗口一起使用时,xprops不会显示任何具有值“Terminal”的属性。我已经尝试将属性_NET_WM_ICON_NAME(可能的选择)设置为我选择的名称,但它没有帮助。

如何将“未知”一词更改为我选择的内容?再次 - 这个应用程序使用的是内部工具包,它既不是Gnome也不是KDE。

2 个答案:

答案 0 :(得分:1)

有一个函数:XSetWMName。它需要一个XTextProperty作为参数:

void VTXWidget::setName (const std::string &name)
{
  XTextProperty tp;
  char *props[1];

  props[0] = strdup (name.c_str ());
  if (0 == props[0])
  {
    return;
  }

  if (!XStringListToTextProperty (props, 1, &tp))
  {
    TR_ERR ("Failed to convert text property");
  }
  else
  {
    XSetWMName (m_display, m_window, &tp);
    XFree (tp.value);
  }

  free (props[0]);
}

答案 1 :(得分:1)

我有同样的问题。使用XSetClassHint解决了这个问题:



    XClassHint *class_hint = XAllocClassHint();
    
    if (class_hint)
    {
        class_hint->res_name = class_hint->res_class = (char *)application_name
        XSetClassHint(display, window, class_hint);
        XFree(class_hint);
    }