Я пытаюсь получить контроль над Xterm с Xlib. Для этого я делаю Xterm со странным названием. После того, как я перечислил все окна и проверил их имена. Но что-то прослушивается, nammes моего Xterm не появляется, когда они перечислены. Вот код для всего окна:Имена тестовых окон Xlib
void CMD::getWindowTerminal()
{
Atom a = XInternAtom(m_display, "_NET_CLIENT_LIST", true);
Atom actualType;
int format;
unsigned long numItems, bytesAfter;
unsigned char *data = 0;
int status = XGetWindowProperty(m_display, m_root_win, a, 0L, (~0L), false,
AnyPropertyType, &actualType, &format, &numItems,
&bytesAfter, &data);
if (status >= Success && numItems)
{
long *array = (long*) data;
for (unsigned long k = 0; k < numItems; k++)
{
// get window Id:
Window w = (Window) array[k];
char* name = '\0';
status = XFetchName(m_display, w, &name);
if (status >= Success)
{
std::cout << w << " " << name << std::endl;
if (name == NULL)
{
m_window_terminal = w;
std::cout << "TERMINAL FOUND" << std::endl;
}
}
XFree(name);
}
XFree(data);
}
}
После перезагрузки Xterm появится в списке. Когда программа закрыта, мне нужно освободить память используемого окна? Если мне нужно, как я могу это сделать? Благодарю. – loustak
После некоторого теста с вами код, иногда он не нашел консольную причину, я думаю, что X-сервер делает это окно, но не обновляет список окон. Нет? – loustak
Что такое ситуация? Ваш код иногда не находит окно, или делает мое, или делает то и другое? Насколько вы уверены, что окно полностью построено, когда выполняется его поиск? – Wintermute