제가 답변 주신 내용을 100% 이해는 잘 못하고 있습니다만
그냥 드는 단순한 생각으로 이렇게 생각했던 것이었습니다.
일단 Leafpad 두 개를 띄워놓고 나비 로그를 보면
두 Leafpad 윈도우 사이를 왔다 갔다 할 때도
nabi_handler_unset_ic_focus, nabi_handler_set_ic_focus 이 연달아 불려지고
한 Leafpad 윈도우에서 자식 위젯(예:메뉴->검색->찾기 )에 포커스가 갈 때도 연달아 불려지는 것을 보고
nabi_handler_unset_ic_focus 에
void nabi_ic_flush(NabiIC *ic) 함수를 삽입해 보았고
두 Leafpad 윈도우 사이를 왔다 갔다 할 때는 잘 동작을 했고
다만 한 Leafpad 윈도우에서 자식 위젯(예:메뉴->검색->찾기 )에 포커스가 갈 때만 flush 가 안돼서
이 둘의 차이점을 알 수 있으면 이 문제를 해결할 수 있지 않을까 생각했습니다.
(유효한 XIC를 알 수 없다면 백업해 두는 방법도 포함)
말씀하시는 뜻이 nabi_handler_unset_ic_focus 가 불려질 때는 이미 XIC가 유효하지 않다는 뜻인가요?
그리고 XTestFakeKeyEvent 처럼 fake reset을 발생시킬 방법이 존재할 수 없는 것인가요?