Comment obtenir la position de la fenêtre de niveau supérieur relatif à la fenêtre de la racine (c'est-à-dire un écran entier) à l'aide de la plaine OL 'XLIB (ou de tout nouveau XCB)? P>
4 Réponses :
Utilisez xtranslatecoordinates (ou équivalent XCB) pour traduire 0,0 sur la fenêtre sur les coordonnées de la fenêtre de racine. P>
Utilisation de XLIB:
XWindowAttributes xwa;
XGetWindowAttributes(display, window, &xwa);
printf("%d %d\n", xwa.x, xwa.y);
Les composants X, Y de la structure renvoyés par xgetwindowattributes sont relatifs à l'origine du parent de la fenêtre. Ce n'est pas la même chose que par rapport au haut à gauche de l'écran.
appeler xtranslatecoordinates qui passant la fenêtre racine et 0,0 donne des coordonnées de la fenêtre par rapport à l'écran. P>
J'ai trouvé que si j'écris que si j'écris : P>
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 );
C'est ce que vous feriez avec XCB:
auto geom = xcb_get_geometry(xcb_connection(), window); auto offset = xcb_translate_coordinate(xcb_connection(), window, rootwin, geom->x, geom->y); offset->dst_x // top-level window's x offset on the screen offset->dst_y // top-level window's y offset on the screen geom->width // top-level window's width geom->height // top-level window's height