Comment identifier de haut niveau X11 windows à l'aide de la xlib?

Que j'essaie de faire une liste de tout le haut niveau du bureau de windows dans une session X11. Fondamentalement, je veux obtenir une liste de toutes les fenêtres qui apparaissent dans la fenêtre des gestionnaires de demande de commutation de l'INTERFACE utilisateur (généralement ouvert lorsque l'utilisateur appuie sur les touches ALT+TAB).

Je n'ai jamais fait de toute X11 programmation avant, mais jusqu'à présent, j'ai réussi à énumérer l'intégralité de la liste de la fenêtre, avec un code qui ressemble à quelque chose comme ceci:

void CSoftwareInfoLinux::enumerateWindows(Display *display, Window rootWindow)
{
Window parent;
Window *children;
Window *child;
quint32 nNumChildren;
XTextProperty wmName;
XTextProperty wmCommand;
int status = XGetWMName(display, rootWindow, &wmName);
if (status && wmName.value && wmName.nitems)
{
int i;
char **list;
status = XmbTextPropertyToTextList(display, &wmName, &list, &i);
if (status >= Success && i && *list)
{
qDebug() << "Found window with name:" << (char*) *list;
}
status = XGetCommand(display, rootWindow, &list, &i);
if (status >= Success && i && *list)
{
qDebug() << "... and Command:" << i << (char*) *list;
}
Window tf;
status = XGetTransientForHint(display, rootWindow, &tf);
if (status >= Success && tf)
{
qDebug() << "TF set!";
}
XWMHints *pHints = XGetWMHints(display, rootWindow);
if (pHints)
{
qDebug() << "Flags:" << pHints->flags
<< "Window group:" << pHints->window_group;
}
}
status = XQueryTree(display, rootWindow, &rootWindow, &parent, &children, &nNumChildren);
if (status == 0)
{
//Could not query window tree further, aborting
return;
}
if (nNumChildren == 0)
{
//No more children found. Aborting
return;
}
for (int i = 0; i < nNumChildren; i++)
{
enumerateWindows(display, children[i]);
}
XFree((char*) children);
}

enumerateWindows() est appelé d'abord avec la fenêtre racine.

Cela fonctionne, dans la mesure où il imprime des informations sur des centaines de windows - ce que j'ai besoin, c'est de travailler la propriété de qui je peux interroger pour déterminer si une donnée Window est une application de Bureau de la fenêtre (pas sûr de ce que la terminologie officielle est), ou pas.

Quelqu'un peut jeter quelque lumière sur ce point? Tous les documents de référence que j'ai trouvé pour X11 programmation a été terriblement sec et difficile à comprendre. Peut-être quelqu'un pourrait point être à une meilleure ressource?

InformationsquelleAutor Thomi | 2009-07-29