0
X11有問題。我創建了一個普通的窗口,當我點擊一個按鈕時,我想打開一個子窗口並使用cairo在其上繪製一些東西。如果我想關閉之前打開的窗口,則無效的X11-Window-ID。 (C/C++)
這是我如何創建窗口:
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的通話我加告訴我,窗口ID應該是有效的:
Window created: 37748751
Tried to destroy window: 37748751
感謝的!
謝謝!這解決了問題! – MichaelE1000 2012-02-21 16:18:20
順便提一下,您可以使用XSynchronize(display,True)臨時使所有調用同步,這會導致性能下降,但對調試很有用,因爲崩潰會在實際導致問題的調用中發生。 – 2012-02-21 16:33:47