XtChangeManagedSet(3) 子ウィジェットのマネージとマネージ解除を行う

Other Alias

XtManageChildren, XtManageChild, XtUnmanageChildren, XtUnmanageChild, XtIsManaged

書式

typedef Widget *WidgetList;

void XtManageChildren(children, num_children)

      WidgetList children;

      Cardinal num_children;

void XtManageChild(child)

      Widget child;

void XtUnmanageChildren(children, num_children)

      WidgetList children;

      Cardinal num_children;

void XtUnmanageChild(child)

      Widget child;

void XtChangeManagedSet(unmanage_children, num_unmanage_children, manage_children, num_manage_children, post_unmanage_pre_manage_hook, client_data)

      WidgetList unmanage_children;

      Cardinal num_unmanage_children;

      WidgetList manage_children;

      Cardinal num_manage_children;

      XtCSMProc post_unmanage_pre_manage_hook;

      XtPointer client_data;

Boolean XtIsManaged(widget)

      Widget widget

引き数

child
子ウィジェットを指定する。
children
子ウィジェットのリストを指定する。
num_children
子ウィジェットの数を指定する。
widget
ウィジェットを指定する。
manage_children
マネージセットに追加する子ウィジェットのリストを指定する。
num_manage_children
manage_children リスト内のエントリー数を指定する。
unmanage_children
マネージセットから取り除く子ウィジェットのリストを指定する。
num_unmanage_children
unmanage_children リスト内のエントリー数を指定する。
post_unmanage_pre_manage_hook
マネージ解除後、マネージ前に呼び出すフック手続きを指定する。
client_data
フック手続きに渡すクライアントデータを指定する。

説明

関数 XtManageChildren は以下の処理を行う:
親の異なる子ウィジェットが含まれる場合や親ウィジェットが compositeWidgetClass のサブクラスでない場合に、エラーを出す。
共通の親が破棄されようとしている場合は、即座に戻ってくる。そうでなけれ ば、リスト中のユニークな子ウィジェットのそれぞれに対して、 XtManageChildren は、その子ウィジェットが既にマネージされているか、破棄されようとしてい る場合にはこれをを無視する。また、マークが付いていなければ、これにマー クを付ける。
親ウィジェットがリアライズされていて、かつ全ての子ウィジェットにマーク が付けられている場合、新しくマネージされた子ウィジェットの一部は表示可 能になる。
-
そのウィジェットの親ウィジェットの change_managed 手続きを呼ぶ。
-
前にマネージ解除された子ウィジェットのうち、リアライズ解除されているも のそれぞれについて XtRealizeWidget を呼ぶ。
-
前にマネージ解除された子ウィジェットのうち、map_when_managed が True であるものそれぞれをマップする。

子ウィジェットのマネージは、子ウィジェットの順序とは独立であり、子ウィ ジェットの生成や破棄とも独立である。 親ウィジェットのレイアウトルーチンは, managed フィールドが True である子ウィジェットを考慮に入れ、それ以外の子ウィジェットを全て無視す る。 複合ウィジェットの中には(特に固定されたボックス)、insert_child 手続き の中から XtManageChild を呼ぶものがある点に注意せよ。

親ウィジェットがリアライズされていれば、マネージされている子ウィジェッ トの集合が変化したことを通知するために、親ウィジェットの change_managed 手続きが呼ばれる。 これにより、親ウィジェットは子ウィジェットの再配置やサイズ変更を行うこ とができる。 親ウィジェットは、必要に応じて XtMoveWidget を呼んで、それぞれの子ウィジェットを動かすことができる。 この関数は、まず x, y フィールドを更新し、次に、このウィジェットがリア ライズされていれば XMoveWindow を呼ぶ。

関数 XtManageChild は、長さが1の WidgetList を作り、 XtManageChildren を呼ぶ。

関数 XtUnmanageChildren 以下の動作を行う:

  • 親の異なる子ウィジェットが含まれる場合や親ウィジェットが compositeWidgetClass のサブクラスでない場合に、エラーを出す。
  • 共通の親が破棄されようとしている場合は、即座に戻ってくる。そうでなけれ ば、リスト中のユニークな子ウィジェットのそれぞれに対して、 XtUnmanageChildren が以下の処理を行う:
  • その子ウィジェットが既にマネージ解除されているか、破棄されようとしてい る場合にはこれをを無視する。また、マークが付いていなければ、これにマー クを付ける。
  • 子ウィジェットがリアライズされている場合、これはマップ解除によって不可 視の状態にされる。
  • 親ウィジェットがリアライズされていれば、全ての子ウィジェットにマークを 付け終った後で、親ウィジェットの change_managed 手続きを呼ぶ。

XtUnmanageChildren は、子ウィジェットを破棄することはない。 親ウィジェットのマネージセットからウィジェットを削除することは、一時的 にウィジェットを取り除いているだけのことが多い。この場合には、後で再び 子ウィジェットをマネージすることができる。

関数 XtUnmanageChild は、長さ1のウィジェットリストを作り、 XtUnmanageChildren を呼び出す。

XtChangeManagedSet は、以下の動作を行う:

manage_children リストと unmanage_children リストで指定さ れたウィジェットに親の異なるものが含まれる場合や、親ウィジェットが compositeWidgetClass のサブクラスでない場合に、エラーを出す。
共通の親が破棄されようとしている場合は、即座に戻ってくる。
CompositeClassExtension が定義されていない場合、または CompositeClassExtension は定義されているが allows_change_managed_set フィールドの値が False であり、かつ XtChangeManagedSet が NULL でない post_unmanage_pre_manage_hook 手続きを指定して呼 び出された場合には、 XtChangeManagedSet は以下の動作を行う:
-
XtUnmanageChildren (unmanage_children, num_unmanage_children) を呼び出す。
-
指定された post_unmanage_pre_manage_hook を呼び出す。
-
XtManageChildren (manage_children, num_manage_children) を呼び出し、その後すぐに戻る。
そうでない場合で、allows_change_managed_set の値が True である CompositeClassExtension が定義されている場合、または CompositeClassExtension が定義されておらず、かつ NULL である post_unmanage_pre_manage_hook 手続きを使って XtChangeManagedSet が呼び出された場合には、以下の処理が行われる:
-
unmanage_children リストの子ウィジェットそれぞれについて処理を行 う。この子ウィジェットが既にマネージ解除されているか破棄されようとして いる場合には、これは無視される。そうでない場合には、マネージ解除のマー クが付けられ、さらにリアライズされている場合は、アンマップされて不可視 にされる。
-
post_unmanage_pre_manage_hook 手続きが NULL でない場合、この手続 きが指定されたように呼び出される。
-
manage_children リストの子ウィジェットそれぞれに対して処理を行う。 子ウィジェットが既にマネージされているか、破棄されようとしている場合に は、これは無視される。そうでない場合には、マネージされるものとしてマー クが付けられる。
親ウィジェットがリアライズされており、子ウィジェット全てにマークが付け られた後ならば、まず親ウィジェットの change_managed 手続きが呼ばれ、続 いて以下の処理が行われることで、新しくマネージされた子ウィジェットの一 部が可視状態になる:
-
以前にマネージ解除された子ウィジェットで、リアライズされていないものの それぞれに対して XtRealizeWidget を呼ぶ。
-
以前にマネージ解除された子ウィジェットで、map_when_managedTrue であるものをそれぞれマップする。

関数 XtIsManaged は、 指定されたウィジェットがクラス RectObj かそのサブクラスであり、かつマ ネージされている場合に True を返し、そうでない場合には False を返す。