使用XCB獲取活動窗口(具有輸入焦點的窗口)的正確方法是什麼?使用XCB獲取活動窗口的WId
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。 –
作爲參考,可以看一下[this](https://github.com/i3/i3/blob/next/i3-input/main.c#L320),其中服務器是在輸入焦點操作周圍抓取的。 –
感謝您指出這一點,確實是一個有效的觀點。 所以基本上我需要'xcb_grab_server(conn)'服務器在開始時和'xcb_ungrab_server(conn)'當我完成並找到父項? –