私が書いているアプリケーション ( AllTrayWM_DELETE_WINDOW
)の特定の選択されたウィンドウに投稿されたメッセージを傍受して、アプリケーションがそれを受信する代わりにそれに基づいて行動できるようにしたいと思います。私は現在、可能であれば GDK レベルでこれを試すことを検討していますが、Xlib ソリューションもあれば満足しています。それは可能であるように思われますが、私はそれを成功させる方法を理解していないようです.gdk_display_add_client_message_filter
現在、これを理解するために使用しようとしている 2 つのプログラム (C で記述)があります。そうすることに失敗しているようです。正確には何もしていないようです。これに関するドキュメントが間違っていることを理解していますか、それとも何か追加する必要がありますか (または、このために GDK を完全に使用しないようにする必要がありますか)?WM_DELETE_WINDOW
背景は次のとおりです。AllTray を書き直す前は、X ボタン自体のマウス クリックをインターセプトしようとする方法があったようです。一部のウィンドウ マネージャーでは、これは適切に機能し、他のウィンドウ マネージャーではまったく機能しませんでした。その他のウィンドウ マネージャーでは、ユーザーが手動で構成し、ウィンドウを閉じるボタンの場所を AllTray に指示する必要がありました。私が探しているのは、を含まず、現在の標準に準拠し、ウィンドウが閉じられたときに ClientMessageLD_LIBRARY_PRELOAD
を送信するウィンドウマネージャー/アプリケーションの組み合わせで機能するソリューションです。WM_DELETE_WINDOW
更新:私はまだ答えを探しています。私が現在取っているルートは、ウィンドウの親を変更して自分で管理しようとすることですが、うまく機能させることができません。再親化すると、それを元に戻すことはできないようです。非常に基本的なものが欠けている可能性がありますが、実際に自分のウィンドウに再び表示させて画面に戻す方法がわかりません。
更新 2 : わかりました、別のレンガの壁にぶつかりました。X サーバーのドキュメントには、ウィンドウのイベント マスクに StructureNotifyMask を設定して、MapNotify イベントと ReparentNotify イベントの両方を受け取るように記載されています。私はどちらかを受け取ることに興味があります。私が現在考えているのは、イベント レシーバーとして機能するウィンドウを作成し、興味深いことのイベントを取得したら、それらを作成して再ペアレント化することです。ただし、これは単に機能していないようです。実際に受け取るイベントは PropertyNotify イベントだけです。そのため、このルートもあまりうまくいっていないようです。