如何在 X11 中设置图标名称 (Ubuntu)
How to set icon name in X11 (Ubuntu)
我使用 in-house 工具包(没有 Gnome 或 KDE)用 C++ 编写了一个应用程序。当我在Ubuntu(18.04)上运行它,然后按alt-tab,我可以看到我为应用程序设置的图标,但是图标下面没有图标名称。见附图:终端有一个终端图标和下面的单词"Terminal",但我自己的应用程序只有单词"Unknown"。
大概我需要设置许多可能的 X11 window 属性之一,但我不知道是哪一个。 xprops 在与终端 window 一起使用时,不会显示任何具有值 "Terminal" 的属性。我已经尝试将 属性 _NET_WM_ICON_NAME(一个可能的选择)设置为我选择的名称,但它没有帮助。
如何将 "Unknown" 一词更改为我选择的内容?再次重申——这个应用程序使用了一个 in-house 工具包,它既不是 Gnome 也不是 KDE。
有一个函数: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]);
}
我遇到了同样的问题。使用 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);
}
我使用 in-house 工具包(没有 Gnome 或 KDE)用 C++ 编写了一个应用程序。当我在Ubuntu(18.04)上运行它,然后按alt-tab,我可以看到我为应用程序设置的图标,但是图标下面没有图标名称。见附图:终端有一个终端图标和下面的单词"Terminal",但我自己的应用程序只有单词"Unknown"。
大概我需要设置许多可能的 X11 window 属性之一,但我不知道是哪一个。 xprops 在与终端 window 一起使用时,不会显示任何具有值 "Terminal" 的属性。我已经尝试将 属性 _NET_WM_ICON_NAME(一个可能的选择)设置为我选择的名称,但它没有帮助。
如何将 "Unknown" 一词更改为我选择的内容?再次重申——这个应用程序使用了一个 in-house 工具包,它既不是 Gnome 也不是 KDE。
有一个函数: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]);
}
我遇到了同样的问题。使用 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);
}