20 XWindowAttributes windowAttributes = {};
22 && XGetWindowAttributes(display, window, &windowAttributes) != 0
23 && windowAttributes.depth > 0;
49QList<QCapturableWindow> QX11CapturableWindows::windows()
const
51 auto display =
this->display();
56 Atom atom = XInternAtom(display,
"_NET_CLIENT_LIST",
true);
59 unsigned long windowsCount = 0;
60 unsigned long bytesAfter = 0;
61 unsigned char *data =
nullptr;
62 const int status = XGetWindowProperty(display, XDefaultRootWindow(display), atom, 0L, (~0L),
63 false, AnyPropertyType, &actualType, &format,
64 &windowsCount, &bytesAfter, &data);
66 if (status < Success || !data)
69 QList<QCapturableWindow> result;
71 auto freeDataGuard = qScopeGuard([data]() { XFree(data); });
72 auto windows =
reinterpret_cast<XID *>(data);
73 for (
unsigned long i = 0; i < windowsCount; i++) {
74 XID windowId = windows[i];
78 result.push_back(QCapturableWindowPrivate::create(
79 static_cast<QCapturableWindowPrivate::Id>(windowId),
80 qGetX11WindowTitle(display, windowId).value_or(QString())));
93 std::call_once(m_displayOnceFlag, [
this]() { m_display = XOpenDisplay(
nullptr); });