首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在X11中,如何在创建窗口标题之前设置窗口标题?

在X11中,如何在创建窗口标题之前设置窗口标题?
EN

Stack Overflow用户
提问于 2010-08-06 02:00:02
回答 1查看 5.5K关注 0票数 4

上下文:

我在xmonad下使用glfw。显然,Glfw在创建窗口后设置了窗口标题,因此不允许xmonad正确地处理它。我想修改glfw源代码,以便在创建窗口之前设置窗口标题。

问题:

因此,我下载了glfw-2.6,并查看lib/x11/x11_window.c;引起麻烦的行是:

代码语言:javascript
复制
// Create a window
_glfwWin.Win = XCreateWindow(
    _glfwLibrary.Dpy,
    RootWindow( _glfwLibrary.Dpy, _glfwWin.VI->screen ),
    0, 0,                            // Upper left corner
    _glfwWin.Width, _glfwWin.Height, // Width, height
    0,                               // Borderwidth
    _glfwWin.VI->depth,              // Depth
    InputOutput,
    _glfwWin.VI->visual,
    CWBorderPixel | CWColormap | CWEventMask,
    &wa
);

随后的某一天:

代码语言:javascript
复制
_glfwPlatformSetWindowTitle( "GLFW Window" );

哪里

代码语言:javascript
复制
void _glfwPlatformSetWindowTitle( const char *title )
{
    // Set window & icon title
    XStoreName( _glfwLibrary.Dpy, _glfwWin.Win, title );
    XSetIconName( _glfwLibrary.Dpy, _glfwWin.Win, title );
}

现在,如果我在glfwPlatformSetWindowTitle调用之前移动CreateWindow调用,我就会得到一个分段错误--正如我应该的那样,因为_glfwWin.win不会被定义。

我不知道如何解决这个问题,因为要设置窗口标题,我需要初始化_glfwWin.Win,但是要初始化它,我需要创建窗口。

因此,我问:在X11中,在创建窗口之前设置窗口标题的正确方法是什么?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-08-07 02:52:31

这在X11中是不可能的,但也不是工作所必需的。一定是在某个地方引起了你看到的症状。窗口标题只是窗口上的一个属性,在有一个窗口供其打开之前,属性是不存在的。

您说“不允许xmonad正确地处理它”,这意味着它没有处理名称的更改;窗口管理器绝对必须在任何时候处理设置标题,包括在创建窗口很久之后更改标题。

规范所说的(http://www.x.org/docs/ICCCM/icccm.pdf)是:“当窗口从退出状态转换时,窗口管理器将检查这些属性的内容,并在窗口处于标志性或正常状态时监视某些属性的更改。”

“从退出状态的转换”是glfw调用XMapWindow()的点。此时,窗口将保持未映射,但WM将接收MapRequest。然后WM将读取属性等,然后映射窗口。我见过的所有窗口管理器也都会处理稍后对属性的更改,因为更改窗口标题是非常正常的。例如,web浏览器每个url上的页面标题。

如果xmonad不处理更改,那么它可能至少要等待映射,所以您可能只需要在XMapWindow()之前设置标题。实际上,所有的设置都应该在MapWindow之前完成,尽管规范只要求在它之前设置几个属性。通常,如果不取消映射,就不能更改必须在它之前的道具。

顺便说一句,除了拉丁语,_glfwPlatformSetWindowTitle什么也不干。现在的方法是使用_NET_WM_NAME ()设置XChangeProperty和_NET_WM_ICON_NAME (设置旧的拉丁语-1 WM_NAME也可以,但只是作为后盾)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3420505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档