XtCreateWidget(3Xt)

名前
XtCreateWidget, XtVaCreateWidget, XtCreateManagedWidget, XtVaCreateManagedWidget, XtDestroyWidget - ウィジェットの生成と破棄

書式
Widget XtCreateWidget(name, widget_class, parent, args, num_args)
      String name;
      WidgetClass widget_class;
      Widget parent;
      ArgList args;
      Cardinal num_args;

Widget XtVaCreateWidget(name, widget_class, parent, ...)
      String name;
      WidgetClass widget_class;
      Widget parent;

Widget XtCreateManagedWidget(name, widget_class, parent, args, num_args)
      String name;
      WidgetClass widget_class;
      Widget parent;
      ArgList args;
      Cardinal num_args;

Widget XtVaCreateManagedWidget(name, widget_class, parent, ...)
      String name;
      WidgetClass widget_class;
      Widget parent;

void XtDestroyWidget(w)
      Widget w;

引き数

args
    リソースのデフォルト値を上書きする引き数リストを指定。

name
    生成するウィジェットのリソース名を指定。 これはリソースの取得に使われるので、同じ親を持つ他のどのウィジェットと も同じであってはならない。

num_args
    引き数リスト内の引き数の数を指定。

parent
    親ウィジェットを指定。

w   ウィジェットを指定。

widget_class
    生成されるウィジェットに対するウィジェットクラスへのポインタを指定。

... デフォルトのリソース値を上書きする可変長引き数リストを指定。

説明
関数 は、ウィジェット生成操作の大部分を行う。

•   このクラスとその全てのスーパークラスに対して、class_initialize 手続き が呼ばれたかどうかチェックする。呼ばれていなければ、スーパークラスから サブクラスの順に必要な呼び出しを行う。

•   ウィジェットのインスタンスに対するメモリをアロケートする。

•   親クラスが のサブクラスならば、親ウィジェットの constraint 情報のためのメモリをア ロケートし、この領域のアドレスを constraints フィールドに格納する。

•   コアの非リソースデータのフィールドを初期化する(例えば、parent や visible 等)。

•   このクラスや全てのスーパークラスに対して指定されたリソースのリストを使っ て、リソースのフィールド(例えば、background_piexel 等)を初期化する。

•   親ウィジェットのクラスが のサブクラスならば、constraint 情報のレコード用のリソースのフィールド を初期化する。これには、親のクラスと までの全てのスーパークラスに対して指定された constraint 情報のリソース が用いられる。

•   ウィジェットに対する初期化手続きが、 の初期化手続きから、ウィジェットの初期化手続きへ向かう順で呼ばれる。

•   親ウィジェットのクラスが のサブクラスならば、このウィジェットは親ウィジェット insert_child 手続 きを呼ぶことによって、親ウィジェットの子のリストに加えられる。 詳しくは 3.5 章を参照すること。

•   親ウィジェットのクラスが のサブクラスならば、 から始まって親の constraint 情報の初期化手続きに向かう順で constraint 情報の初期化手続きが呼ばれる。

マクロ を使って、引き数リスト中の引き数の数を求めることができる点に注意すること。 詳しくは、11.1 章を参照すること。

関数 は、 と を呼ぶ簡易関数である。

関数 は、ウィジェットを破棄する唯一の方法を提供する。これには、自分自身を破 棄するウィジェットも含まれる。 この関数は、破棄されるウィジェットのアプリケーションコールバックルーチ ンから呼ぶことも含めて、いつ呼んでもよい。 この関数は、破棄されるウィジェットに対するぶら下がり参照を避けるため、 2つのフェーズで破棄の処理を行なうことが必要である。

フェーズ1では、 が以下の処理を行う。

•   このウィジェットの being_destroyed フィールドが ならば、処理は即座に戻る。

•   ウィジェットツリーを再帰的に下り、このウィジェットと全ての子ウィジェッ トのbeing_destroy フィールドに をセットする。

•   安全に破棄できるようになった時に破棄するウィジェットのリスト(破棄リス ト)に、このウィジェットを加える。

破棄リストのエントリーは、破棄リスト上で w2 が w1 の後にあらわれた場合、 w2 は w1 の下位ウィジェットではないという不変性を満たす。 (下位ウィジェットは、通常とポップアップの子ウィジェットの両方を指す。)

フェーズ2は、現在のイベントの結果として生じる、実行すべき全ての手続き が呼ばれたときに行われる(これは、イベントマネージャとトランスレーショ ンマネージャに登録された全ての手続きを含む)。つまり、これは の現在の呼び出しが戻ってくるときに行われ、 が呼ばれていないときには即座に行われる。

フェーズ2では、 は破棄リストの各エントリーに対して次の処理を行う。

•   ウィジェット(と、その全ての下位ウィジェット)に登録された破棄コールバッ ク手続きを呼ぶ。呼び出しの順序は降順である(親のコールバックの前に、子 のコールバックを呼ぶ)。

•   このウィジェットの親が のサブクラスであり、かつ親が破棄されていない場合は、このウィジェットに 対して が呼ばれ、親の delete_child 手続きが呼ばれる(3.4 章を参照のこと)。

•   このウィジェットの親が の場合、最終的に に対して constraint 情報の破棄手続きが呼ばれるまで、 親、そしてそのスーパークラスに対して constraint の破棄手続きが呼ばれる。

•   ウィジェット(と、その全ての下位ウィジェット)に対して、降順で destroy メソッドが呼ばれる。 このようなウィジェットに対しては、最初はそのウィジェットに宣言された破 棄手続き、次にそのスーパークラスの破棄手続きというように手続きが呼ばれ てゆく。これは、Core クラスのレコードに宣言された破棄手続きが最終的に 呼ばれるまで行われる。 ウィジェットがリアライズされていれば(つまり、X のウィンドウを持ってい れば)、 が呼ばれる。 X サーバは、全ての下位ウィンドウを再帰的に破棄する。

•   再帰的にツリーを降り、全てのポップアップウィジェット、constraint 情報 のレコード、コールバックのリスト、(ウィジェットが のサブクラスならば)子ウィジェットを解放する。

関連項目
XtAppCreateShell(3Xt), XtCreatePopupShell(3Xt)
X Toolkit Intrinsics - C Language Interface
Xlib - C Language X Interface