我遇到X11问题。我创建了一个普通的窗口,当我点击一个按钮时,我想打开一个子窗口并使用cairo在其上绘制一些东西。
这是我创建窗口的方式:
printf("createCairoSurface called\n");
printf("Window created: %i\n", (int)appWindow);
cairo_surface_t* new_surface = cairo_xlib_surface_create(display, appWindow, DefaultVisual(display, 0), width, height);
在这几行代码之前,我使用XCreateWindow创建一个普通窗口并更改一些属性,以便我的窗口像面板一样定位。
但是当我尝试使用以下代码关闭/销毁窗口时,应用程序崩溃并且我收到BadWindow错误。
Window window = (Window)static_cast(cairo_xlib_surface_get_drawable(surface));
printf("Tried to destroy window: %i\n", (int)window);
XDestroyWindow(display, window);
X Error of failed request: BadWindow (invalid Window parameter)
Major opcode of failed request: 20 (X_GetProperty)
Resource id in failed request: 0x240000f
Serial number of failed request: 344
Current serial number in output stream: 344
即使如此,我添加的printf-calls也告诉我窗口id应该是有效的:
Window created: 37748751
Tried to destroy window: 37748751
感谢的!
答案 0 :(得分:0)
错误与请求X_GetProperty有关,例如。 XGetProperty。
您的错误不是来自XDestroyWindow()调用,而是供应用程序稍后使用Window。