多段ポップアップができるようになりました。libghttpのproxy関連の機能をそのまま適用したproxy対応のコードを入れた。これでさっくり動いてしまう可能性は高いのですが、動かないと、私の凡ミスによる場合を除いて今後も使えるようになる見込みはありません。作者が全くproxyを使っていないもんで優先度は激低です。スレ一覧で新スレを新スレとして取り扱うために導入したフラグの使い方が腐っていたのを修正した。ネットワークアクセス周りコードの見直しを行い、OchushaNetworkBrokerクラスを導入した。この実装にあわせて、ネットワークアクセス時の各種イベントのコールバックを関数ポインタの直渡しからGLibのシグナルに変更した。OchushaAsyncBufferからuser_dataを取り除いた。容をおちゅ〜しゃのGUI担当部分で管理する構造体に保持していたが、Last-Modifiedヘッダの内容を取っておく価値があるかどうかは掲示板のシステム依存なので、libochushaの2ch依存実装部分で管理するように変更した。おちゅ〜しゃのGUI担当部分も以上の変更に対応して変更した。スレ一覧とスレのレンダリング時にそれぞれを実行しているスレッドが定期的に休憩を入れることにより、メインスレッドの実行しているUIのレスポンスを改善した。ThreadlistView内のleave_notify_eventに対するシグナルハンドラのシグニチャが間違っていたので修正した。いわゆる多段ポップアップを実装し、ポップアップを閉じるタイミングを調整した。昔の実装ではリンクからマウスポインタが出た瞬間にポップアップを閉じていたが、(ユーザ設定可能な)一定の時間内にポップアップウィンドウにポインタが入ったときにはそのポップアップを閉じないように変更し、更に、ポップアップに子ポップアップウィンドウが存在する場合にも親のポップアップウィンドウを閉じないようにした。ポップアップを閉じるタイミングの調整のために必要なので、view_enter_notifyとview_leave_notifyシグナルを発行するようにBBSThreadViewを変更した。本当はGtkWidgetの{enter,leave}_notify_eventがそのまま使えれば良いのだが、素のBBSThreadViewウィジェットにはシグナルが届かないようなので泥臭く処理している。メモリリーク探しを始めた。想定しているもの(無駄なのでfreeしていないもの)を除いて(g_new0やg_malloc、g_strdupなどにより)明示的に確保されたヒープメモリのリークは全て解決したつもり。何かリークしている気がしてならないので、恐らく、GTK+のウィジェット自体をリークしてしまっているのだろう。調査は後日やる気になってからとする。チューニングがまだなので、暇な時レンダリングの機能を一先ず無効化した。デバッグ出力にポインタを表示するときにintにキャストするのをやめて真っ当に%pなフォーマットを使うように変更した。