【问题标题】:xcb: how to launch an application and show it into a windowxcb:如何启动应用程序并将其显示到窗口中
【发布时间】:2013-10-02 20:58:28
【问题描述】:

我正在尝试使用 xcb 库实现一个基本的窗口管理器。

我设法连接到 X 服务器,并获取了一些事件,但我不知道如何启动应用程序并在当前 X 会话中显示它。

我正在尝试遵循 xcb 教程: http://xcb.freedesktop.org/tutorial/

基本上我认为(并且可能我错了)一旦会话开始,使用我的“windowmanager”,如果我想启动一个应用程序,我只需要分叉它,然后启动应用程序,例如:

int child = fork();
if(child==0) {
    printf("Child");
    execve("/usr/bin/xterm", NULL, NULL);
}

但这似乎没有用。

我没有太多代码要显示,因为我只是想修改上面粘贴的教程中的 che 代码(我添加了一个无限循环,以及其他一些东西)。

那么如何启动 xterm、pcmanfm 等 x 应用程序并在当前 x 会话中显示它?

以及如何在新窗口中绘制应用程序?

最后一个问题: 我试图复制并粘贴 X 教程的 hello world 窗口示例,但它似乎没有加载任何窗口。代码在这里: http://www.x.org/releases/X11R7.7/doc/libxcb/tutorial/index.html#helloworld

【问题讨论】:

    标签: xorg window-managers xcb


    【解决方案1】:

    您不会“在新窗口中绘制应用程序”——您只需启动一个进程,它就会为自己创建一个窗口。检查是否为您的进程正确设置了 DISPLAY 变量。

    要管理窗口,您可以在根窗口上设置 SubstructureRedirect 掩码并响应来自(新)应用程序窗口的子结构/映射请求通知。

    【讨论】:

    • 好的,我用 execve 解决了问题(路径错误,我没有注意到与鼠标按钮的键绑定),但第二部分很有用,所以我更了解如何xcb 的工作原理。现在我有另一个问题,如果我想在窗户周围画一个装饰,我必须在其中一个活动期间这样做吗?哪个更好?
    • 大多数 WM 为标题栏/框架创建新窗口,并将应用程序窗口重新设置为框架窗口的子级。请参阅我的简单 WM 示例,如果尚未重新父级,则在 MapRequest 事件处理程序中发生重新父级 - github.com/sidorares/node-x11/blob/master/examples/…
    猜你喜欢
    • 2019-06-16
    • 2017-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-19
    • 2011-04-14
    • 1970-01-01
    相关资源
    最近更新 更多