如何显示XCB窗口';Gnome中的s名称';s alt选项卡视图?
我有一个简单的XCB窗口。当我运行应用程序和alt选项卡时,Gnome的窗口列表将我的应用程序显示为“未知”。窗口的标题栏显示正确的标题 下面是我如何设置它的标题:如何显示XCB窗口';Gnome中的s名称';s alt选项卡视图?,c,gnome,xcb,C,Gnome,Xcb,我有一个简单的XCB窗口。当我运行应用程序和alt选项卡时,Gnome的窗口列表将我的应用程序显示为“未知”。窗口的标题栏显示正确的标题 下面是我如何设置它的标题: xcb_change_property(WindowGlobal::connection, XCB_PROP_MODE_REPLACE, WindowGlobal::window, XCB_ATOM_WM_NAME
xcb_change_property(WindowGlobal::connection,
XCB_PROP_MODE_REPLACE,
WindowGlobal::window,
XCB_ATOM_WM_NAME,
XCB_ATOM_STRING,
8,
strlen (title),
title );
以下是我的大多数窗口创建代码:
int visualID = screen->root_visual;
xcb_colormap_t colormap = xcb_generate_id( connection );
WindowGlobal::window = xcb_generate_id( connection );
WindowGlobal::windowWidth = width == 0 ? screen->width_in_pixels : width;
WindowGlobal::windowHeight = height == 0 ? screen->height_in_pixels : height;
xcb_create_colormap( connection, XCB_COLORMAP_ALLOC_NONE, colormap, screen->root, visualID );
const uint32_t eventmask = XCB_EVENT_MASK_EXPOSURE | XCB_EVENT_MASK_KEY_PRESS | XCB_EVENT_MASK_KEY_RELEASE |
XCB_EVENT_MASK_BUTTON_PRESS | XCB_EVENT_MASK_BUTTON_RELEASE | XCB_EVENT_MASK_POINTER_MOTION;
const uint32_t valuelist[] = { eventmask, colormap, 0 };
const uint32_t valuemask = XCB_CW_EVENT_MASK | XCB_CW_COLORMAP;
xcb_create_window(
connection,
XCB_COPY_FROM_PARENT,
WindowGlobal::window,
screen->root,
0, 0,
WindowGlobal::windowWidth, WindowGlobal::windowHeight,
0,
XCB_WINDOW_CLASS_INPUT_OUTPUT,
visualID,
valuemask,
valuelist
);
xcb_map_window( connection, WindowGlobal::window );
xcb_size_hints_t hints = {};
xcb_icccm_size_hints_set_min_size( &hints, WindowGlobal::windowWidth, WindowGlobal::windowHeight );
xcb_icccm_size_hints_set_max_size( &hints, WindowGlobal::windowWidth, WindowGlobal::windowHeight );
xcb_icccm_set_wm_size_hints( WindowGlobal::connection, WindowGlobal::window, XCB_ATOM_WM_NORMAL_HINTS, &hints );
xcb_atom_t protocols[] =
{
WindowGlobal::wm_delete_window
};
xcb_icccm_set_wm_protocols( WindowGlobal::connection, WindowGlobal::window,
WindowGlobal::wm_protocols, 1, protocols );
如何使XCB设置在Gnome窗口列表中显示的文本?XCB中的正确属性是
XCB\u ATOM\u WM\u CLASS
我在GitHub上看到过一些代码,其中两个字符串被一个“\0”
连接起来。
(我在GitHub和其他窗口管理器中看到了它)
这对我很有用:
xcb_change_property(WindowGlobal::connection,
XCB_PROP_MODE_REPLACE,
WindowGlobal::window,
XCB_ATOM_WM_CLASS,
XCB_ATOM_STRING,
8,
sizeof("title""\0""Title"),
"title\0Title" );
字符串的第二部分是gnome中显示的内容
以下是我看到的另一种常见方式:
char *res_name = "title";
char *res_class = "Title";
char *class_hint;
size_t class_len;
class_len = strlen(res_name) + 1 + strlen(res_class) + 1;
class_hint = (char *)malloc(class_len);
strcpy(class_hint, res_name);
strcpy(class_hint + strlen(res_name) + 1, res_class);
xcb_change_property (WindowGlobal::connection,
XCB_PROP_MODE_REPLACE,
WindowGlobal::window,
XCB_ATOM_WM_CLASS,
XCB_ATOM_STRING,
8,
class_len,
class_hint);
free(class_hint);
char*res\u类
是gnome中显示的
对于Xlib,您可以使用函数
XSetClassHint
。
在这里,您将使用由两个字符串组成的XClassHint
struct:
char*res\u name
和char*res\u class
我发现了这个:
resu name成员包含应用程序名称,resu class成员包含应用程序类。请注意,此属性中设置的名称可能与设置为WM_name的名称不同。也就是说,WM_NAME指定应该在标题栏中显示的内容,因此可以包含时间信息(例如,当前在编辑器缓冲区中的文件名)。另一方面,作为WM_类的一部分指定的名称是应用程序的正式名称,从资源数据库检索应用程序的资源时应使用该名称
我可以找到更多信息和。我不知道Gnome使用了什么,但是您是否尝试过设置
\u NET\u WM\u NAME
(使用类型UTF8\u STRING
)而不是WM\u NAME
(使用类型STRING
)或在之外设置WM_NAME
比UTF8旧,因此必须为UTF8发明新的属性。