閉じるボタンでウィンドウを閉じる処理は、ウィンドウマネージャとのやり取りでもちょっと特殊で、WM_PROTOCOLSプロパティというものに、条件となるイベントのプロパティWM_DELETE_WINDOWを設定する必要がある。
Manpage of XSetWMProtocols
ウィンドウマネージャとのやりとり
まず、XInternAtomという関数で、WM_DELETE_WINDOWのアトムを取得する。
アトムは、WindowsAPIのRegisterClassでも出てきたが、識別子(ID)だと思えばいい。
(Falseって型が用意されてるのか。)
これをXSetWMProtocolsにセットする。
こうすると、
閉じるボタンを押すと、ClientMessageというイベントが飛んでくる。
event.xclient.data.l[0]がWM_DELETE_WINDOWのアトムなら、
"WM_DELETE_WINDOW!!"をターミナルに出力しつつ、終了するようにしている。
右上の閉じるボタンを押すと、
"WM_DELETE_WINDOW!!"を出力して終了する。