Top > OOoBasic > Window > Listeners

ウィンドウとリスナー Edit

ウィンドウとリスナーの密接な関係。

フレームに入ったウィンドウやサブフレームを正しく閉じないと OOo 終了時にクラッシュすることになります。

概要 Edit

ウィンドウの種類に依存しますが、複数のリスナーがウィンドウに関する動作の通知を受けることができます。 ウィンドウはフレームに入れて利用することが多いので、ウィンドウがフレームに入っている時にはそのフレームのリスナーも扱う必要があります。

  • com.sun.star.lang.XEventListener
  • com.sun.star.awt.XWindowListener
  • com.sun.star.awt.XTopWindowListener
  • com.sun.star.util.XCloseListener
  • com.sun.star.frame.XFrameActionListener

ウィンドウが閉じられるとき Edit

フレームに入ったウィンドウが閉じられるとき、どのリスナーを利用すれば安全にそのウィンドウ、フレームおよびコンポーネントを閉じることができるかという話。

ここでのウィンドウは二種類に分けられます。

  • トップウィンドウ (デスクトップ環境で独立して表示されるもの)
  • サブウィンドウ (他のドキュメントなどの子ウィンドウとして表示されるもの) サブウィンドウはその親ウィンドウが閉じられるときに閉じられることになります。

トップウィンドウで初期化したフレーム (独立したトップウィンドウ) の各ブロードキャスタに XCloseListener、XTopWindowListener、XEventListener、XFrameActionListener をすべて追加、フレームを閉じるとき次のような順でイベントを受け取ります。(ウィンドウのバツボタンを押したとき)

windowClosing... (XTopWindowListener)
FrameAction ('FRAME_UI_DEACTIVATING') (XFrameActionListener)
FrameAction ('FRAME_DEACTIVATING') (XFrameActionListener)
queryClosing... (XCloseListener)
notifyClosing... (XCloseListener)
disposing... (XEventListener)

XTopWindowListener の windowClosed メソッドが呼ばれてませんが…不明。

サブウィンドウでは、サブウィンドウが閉じられる前に親ウィンドウが閉じられると、次の様に OOo がクラッシュします。

queryClosing...: parent
FrameAction ('COMPONENT_DETACHING') : parent
notifyClosing...: parent
/opt/openoffice.org2.4/program/soffice: line 254:  
7473 セグメンテーション違反です               "$sd_prog/$sd_binary" "$@"

この場合、親ウィンドウの queryClosing メソッドが呼ばれたときにサブウィンドウを close メソッドで閉じてやります。


Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes