0
私はX11に問題があります。私は通常のウィンドウを作成しました。ボタンをクリックすると、サブウィンドウを開き、カイロを使ってサブウィンドウを描画します。以前に開いたウィンドウを閉じたい場合は無効な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 created: 37748751
Tried to destroy window: 37748751
感謝の:でも私は、ウィンドウIDが有効でなければならないことを教えて追加のprintfの呼び出しので
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
!
ありがとうございました!これは問題を解決しました! – MichaelE1000
ちなみに、XSynchronize(display、True)を使用すると、一時的にすべてのコールを同期させることができますが、パフォーマンスは低下しますが、実際に問題を引き起こしているコールでクラッシュが発生するため、デバッグには効果的です。 –