내가 쓰는 응용 프로그램 (AllTray)의 특정 선택 항목에 게시 된 WM_DELETE_WINDOW
메시지를 가로 채고 싶습니다. 따라서받은 응용 프로그램 대신 해당 메시지를 처리 할 수 있습니다. 가능하다면 현재 GDK 레벨 via gdk_display_add_client_message_filter
에서 이것을 시도하고 있습니다 만, Xlib 솔루션이 있으면 만족할 것입니다. 그것 은 가능한 것 같아 것 같습니다,하지만 난 단지 내가 어떻게 성공적으로 그것을 이해하고있는 것 같지 않습니다.X11에서 WM_DELETE_WINDOW를 가로채는가?
현재, 나는 the first one 아무것도하지 않는다, 나는이 알아 낸 얻기 위해 사용하는 것을 시도하고있다 (C로 작성) 두 개의 프로그램을 가지고 있지만 윈도우를 생성하고 그 메시지를 잡으려고에 대한 WM_DELETE_WINDOW
및 the second one 시도를 알고 등록 그렇게하는 데 실패하는 것 같습니다. 그것은 정확하게 아무것도하지 않는 것처럼 보입니다. 이 문서가 잘못되었다는 것을 이해하고 있습니까? 아니면 내가해야 할 일이 있습니까? (또는 GDK를 완전히 사용하지 않아야합니까?)
배경은 다음과 같습니다. AllTray를 다시 쓰기 전에는 마우스 버튼을 X 버튼 자체에서 가로 챈 것을 시도하는 것처럼 보입니다. 일부 창 관리자의 경우이 작업은 제대로 작동하고 다른 작업은 전혀 작동하지 않는 경우도 있었고 다른 경우에는 사용자가 수동으로 구성하고 창이 닫히는 단추가 있던 AllTray를 지시해야했습니다. 내가 찾고있는 것은 LD_LIBRARY_PRELOAD
을 포함하지 않고 현재 표준을 따르는 모든 윈도우 관리자/응용 프로그램 조합에 사용할 수있는 솔루션이며 창이 닫히면 WM_DELETE_WINDOW
ClientMessage를 보냅니다.
업데이트 : 아직 답변을 찾고 있습니다. 지금 내가 취하는 경로는 창을 다시 만들고 그것을 관리하려고 시도하는 것이지만, 나는 그것을 작동시키지 못합니다. 보육을받을 때, 나는 어떤 식 으로든 그것을 되 찾을 수없는 것 같습니다. 나는 아주 근본적인 것을 놓치고 있을지 모르지만 실제로 화면으로 다시 가져 오는 방법을 실제로 내 자신의 창으로 보이게 만드는 방법을 알아낼 수는 없습니다.
업데이트 2 : 좋아, 그래서 나는 다른 벽돌 벽에 부딪쳤다. X 서버 설명서에서는 MapNotify 및 ReparentNotify 이벤트를 모두 수신하도록 윈도우의 이벤트 마스크에서 StructureNotifyMask를 설정한다고 설명합니다. 나는 어느 쪽인가받는 것에 흥미가있을 것이다. 현재 나의 생각은 이벤트 수신자 역할을하는 창을 작성한 다음 흥미로운 일들에 대한 이벤트를 얻었을 때 생성하고 보충함으로써 행동을 취하는 것입니다. 그러나 이것은 단순히 작동하지 않는 것 같습니다. 실제로 수신되는 유일한 이벤트는 PropertyNotify 이벤트입니다. 따라서이 경로는별로 좋지 않은 것 같습니다.
나는 자신의 최상위 내부 창을 보충하고 어떤 이벤트를 필터링 할 수있을 것이라고 생각합니까? 네가 현재 시도하고있는 방식이 효과가 있다고 생각하지 않는다. – wrt
이렇게하는 데 단점이 있습니까? 즉, 특히 XDND 같은 것을 간섭하게하는 요소가 무엇입니까? 휴대용 아이디어입니까? (예 : 응용 프로그램이나 창 관리자를 중단시키지 않습니까?) 나는 그것에 관한 정보를 거의 찾을 수없는 것 같습니다. 나는 또한 각각의 새로운 클라이언트 윈도우에 대해 하나의 새로운 "부모"윈도우를 만들어야한다는 것을 의미한다고 가정합니다. –