Window position in Xlib

痴心易碎 提交于 2019-12-05 00:35:51

问题


How to get top-level window position relative to root window (i.e. whole screen) using plain ol' xlib (or brand new XCB)?


回答1:


The x,y components of the structure returned by XGetWindowAttributes are relative to the origin of the window's parent. That's not the same as relative to the top left of the screen.

Calling XTranslateCoordinates passing the root window and 0,0 gives coordinates of the window relative to the screen.

I found that if I write:

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

The values displayed by the printf are those which, if passed to XMoveWindow, keep the window at its current position. Thus those coordinates are reasonably considered to be the position of the window.




回答2:


Using Xlib:

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

There are also lots of other informations that come with XWindowAttributes. See here.




回答3:


Use XTranslateCoordinates (or xcb equivalent) to translate 0,0 on the window to root window coordinates.




回答4:


This is what you would do with 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


来源:https://stackoverflow.com/questions/3806872/window-position-in-xlib

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!