XCB를 사용하여 활성 창 (입력 포커스가있는 창)을 얻는 적절한 방법은 무엇입니까?XCB를 사용하여 활성 창의 프레임 가져 오기
reply = xcb_get_input_focus_reply(connection, xcb_get_input_focus(connection), nullptr);
std::cout << "WId: " << reply->focus;
이것은 때로는 때로는 효과가없는 것으로 보입니다.
또한 누군가가 _NET_ACTIVE_WINDOW 루트 창 속성을 쿼리하는 것에 대해 언급했지만 어떻게 완료되었는지 그리고 항상 XCB에서 지원되는지 알 수 없습니다.
편집 : xcb_get_input_focus 만 한 부분이접근 방법과 위의 reply-> 초점을 얻기 후에, 당신은 xcb_query_tree를 통해 부모 창을 따라야합니다.
이 코드는 버그입니다. 이 모든 작업을 위해 서버를 잡아야합니다. 그렇지 않으면 트리를 통과하는 동안 입력 포커스가 변경 될 수 있습니다. XGrabServer/xcb_grab_server를 참조하십시오. –
참고로 [입력] (https://github.com/i3/i3/blob/next/i3-input/main.c#L320)에서 서버가 입력 포커스 작업을 수행하는 곳을 볼 수 있습니다. –
실제로 이것을 지적 해 주셔서 감사합니다. 기본적으로 처음에는 서버를'xcb_grab_server (conn)'해야하고, 끝났을 때'xcb_ungrab_server (conn)'를 써야하고 부모를 찾았습니까? –