Comment obtenir la position de la fenêtre de niveau supérieur par rapport à la fenêtre racine (c'est-à-dire l'intégralité de l'écran) à l'aide de plain ol 'xlib (ou tout nouveau XCB)?Position de la fenêtre dans Xlib
Répondre
Utilisez XTranslateCoordinates (ou l'équivalent xcb) pour traduire 0,0 sur la fenêtre en coordonnées de la fenêtre racine.
En utilisant Xlib:
XWindowAttributes xwa;
XGetWindowAttributes(display, window, &xwa);
printf("%d %d\n", xwa.x, xwa.y);
Il y a aussi beaucoup d'autres informations qui viennent avec XWindowAttributes
. Voir here.
Les composants x, y de la structure renvoyée par XGetWindowAttributes sont relatifs à l'origine du parent de la fenêtre. Ce n'est pas la même chose par rapport à la partie supérieure gauche de l'écran.
Appel de XTranslateCoordinates en passant la fenêtre racine et 0,0 donne les coordonnées de la fenêtre par rapport à l'écran.
Je trouve que si j'écris:
int x, y;
Window child;
XWindowAttributes xwa;
XTranslateCoordinates(display, window, root_window, 0, 0, &x, &y, &child);
XGetWindowAttributes(display, window, &xwa);
printf("%d %d\n", x - xwa.x, y - xwa.y);
Les valeurs affichées par le printf sont ceux qui, si elle est adoptée à XMoveWindow, garder la fenêtre à sa position actuelle. Ainsi, ces coordonnées sont raisonnablement considérées comme la position de la fenêtre.
c'est la réponse qui a fonctionné pour moi aussi – thinlizzy