Неверный X11-Window-ID, если я хочу закрыть окно, которое я открыл раньше. (C / C ++) - PullRequest
0 голосов
/ 21 февраля 2012

У меня проблема с 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, которые я добавил, говорят мне, что идентификатор окна должен быть действительным:

Window created: 37748751
Tried to destroy window: 37748751

Спасибо'S!

1 Ответ

0 голосов
/ 21 февраля 2012

Ошибка связана с запросом X_GetProperty, например. XGetProperty.

Ваша ошибка не из-за вызова XDestroyWindow (), а для последующего использования Window вашим приложением.

...