8
votes

Position de la fenêtre dans XLIB

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)?


0 commentaires

4 Réponses :


5
votes

Utilisez xtranslatecoordinates (ou équivalent XCB) pour traduire 0,0 sur la fenêtre sur les coordonnées de la fenêtre de racine.


0 commentaires

6
votes

Utilisation de XLIB:

XWindowAttributes xwa;
XGetWindowAttributes(display, window, &xwa);
printf("%d %d\n", xwa.x, xwa.y);


0 commentaires

14
votes

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 );


0 commentaires

3
votes

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


0 commentaires