Хочется получить активное окно, а именно его ид чтоб сделать скриншот (QPixmap::grabWindget()) и его заголовок. Делаю так:
Display *display = XOpenDisplay(NULL);
Window win, root, parent, *children;
int revert = RevertToParent;
int screen = DefaultScreen(display);
unsigned int nchild;
XGetInputFocus(display, &win, &revert);
if (win != RootWindow(display, screen)) {
parent = win;
do {
win = parent;
XQueryTree(display, win, &root, &parent, &children, &nchild);
XFree(children);
} while(parent != RootWindow(display, screen));
}
Atom nameAtom = XInternAtom(display, "_NET_WM_VISIBLE_NAME", false);
Atom atomType = XInternAtom(display, "UTF8_STRING", false);
Atom actualType;
int format;
unsigned long nitems, after;
unsigned char *data = 0;
int status = XGetWindowProperty(display, win, nameAtom, 0, 65536,
false, /*AnyPropertyType*/ atomType, &actualType, &format,
&nitems, &after, &data);
std::cout << "Returned status: " << status << std::endl;
if (data) {
std::cout << "Active window name: " << data << std::endl;
XFree(data);
}
Дальше заметил что идентификатор окна который возвращает xprop не совпадает с моим win, если его использовать в коде для получения имени - всё работает нормально, а если в коде скриншутера - снимается что-то совсем странное.
Так вот, как разобраться в этих идентификаторах и ЧЯДНТ? И почему апи иксов такое говно?