我有这个简单的代码,使用 X11 绘制一个小窗口:
int main(int, char*[])
{
Display* display = XOpenDisplay(NULL);
Window window = XCreateSimpleWindow(
display, XDefaultRootWindow(display),
100, 100, 200, 200, 4, 0, 0);
XEvent event;
XMapWindow(display, window);
XSelectInput(display, window, KeyPressMask | ButtonPressMask | ExposureMask);
while (True) {
XNextEvent(display, &event);
}
return 0;
}
一切正常,窗口绘制没有问题。
问题是我真的很想了解 X11 是如何工作的,所以我正在阅读标头的源代码,但我无法找到
XMapWindow()
的定义 - 我需要帮助。
这是我在
Xlib.h
头文件中找到的唯一模拟。
extern int XMapWindow(
Display* /* display */,
Window /* w */
);
您可以在
libX11源中找到
XMapWindow()
的实现,特别是在src/MapWindow.c:XMapWindow()中。
归结为一些锁定和
_XGetRequest(dpy, X_MapWindow, SIZEOF(xResourceReq))
调用。 这是在 src/XlibInt.c:_XGetRequest() 中定义的,正如您可以通过名称猜到的那样,它将 X_MapWindow 请求添加到发送到 X 服务器的请求队列中。
X 服务器(管理实际显示)如何对其进行操作,取决于 X 服务器的实现。