현재 저는 작은 프로젝트를위한 (C++) 윈도우 클래스를 개발하고 있습니다. 목표는 종속성을 최소한으로 유지하는 것입니다. Win32/WinAPI에 대한 구현은 가정 된 것처럼 작동하지만, Linux/XCB의 경우에는 어려움을 겪고 있습니다.최대화/최소화에 어떤 이벤트가 사용됩니까?
"_NET_WM_STATE"속성을 확인할 수 있지만 문서가 창이 최대화되거나 최소화 될 때 발생하는 이벤트를 지정하지 않는다는 것을 알고 있습니다. 확장 창 관리자 힌트 사양은 이벤트를 정의하지는 않습니다.
그렇다면 최대화/최소화 이벤트를 가로채는 방법은 무엇입니까?
편집 : 내 코드는 기본적으로 그렇게 보이지만 작동하지 않습니다 : 이
// xcb_generic_event_t* msg;
// xcb_intern_atom_reply_t* wmStateMinimized;
case XCB_PROPERTY_NOTIFY: {
xcb_property_notify_event_t* data{reinterpret_cast<xcb_property_notify_event_t*>(msg)};
if(data->atom == wmStateMinimized->atom)
eventQueue.emplace(Event::Minimized);
} break;
나는 또한이 (.으로는 작동하지 않습니다, 나는 이하의 조건이 있다면 만난 적이있는 의미) 이벤트가 제공하는 원자를 확인했습니다. 그것들은 'wmStateMinimized'가 제공하는 원자와 다르다. 'wmStateMinimized'의 원자는 창 관리자가 제공한다.
EDIT 2 보통, xcb_property_notify_event_t 는 변경되지 값 그 자체 된 원자를 공급한다. 그래서 만약이 다음과 같아야합니다
if(data->atom == wmState->atom)
꼭 제대로 값을 검색하는 방법을 알아낼.
최대화/최소화에 대한 특정 이벤트는 없습니다. 속성 변경을 감시하려면 PropertyNotify 이벤트에 가입해야합니다. 이것은 PropertyChangeMask에 의해 제어됩니다. –
감사합니다. 응용 프로그램에서 얻을 수있는 이벤트 코드를 인쇄하여 알아 냈습니다. – Julien
AFAIK, X11에서 최대화 최소화는 창 관리자가 처리했습니다. 필자가 쓴 몇 가지 X11 응용 프로그램에서는 결코 명시 적으로 처리하지 못했습니다. 그러나이 [SO post] (http://stackoverflow.com/questions/4530786/xlib-create-window-in-mimized-or-maximized-state)는 독자가 흥미로울 수 있습니다. – user3078414