2012-02-21 78 views
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

感謝的!

回答

0

錯誤與請求X_GetProperty例如。 XGetProperty。

您的錯誤不是來自XDestroyWindow()調用,而是您的應用程序的後續使用窗口。

+0

謝謝!這解決了問題! – MichaelE1000 2012-02-21 16:18:20

+1

順便提一下,您可以使用XSynchronize(display,True)臨時使所有調用同步,這會導致性能下降,但對調試很有用,因爲崩潰會在實際導致問題的調用中發生。 – 2012-02-21 16:33:47

相關問題