Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ XtCreateManagedWidget(3Xt) — NEWS-os 4.2.1R

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

XtAppCreateShell(3Xt)

XtCreatePopupShell(3Xt)

XtCreateWidget(3Xt)  —  NEWS-OS Programmer’s Manual

名称

XtCreateWidget, XtCreateManagedWidget, XtDestroyWidget − ウィジェットを作成および破壊する

形式

Widget XtCreateWidget(name, widget_class, parent, args, num_args)
      String name;
      WidgetClass widget_class;
      Widget parent;
      ArgList args;
      Cardinal num_args; Widget XtCreateManagedWidget(name, widget_class, parent, args, num_args)
      String name;
      WidgetClass widget_class;
      Widget parent;
      ArgList args;
      Cardinal num_args; void XtDestroyWidget(w)
      Widget w;

引数

argsリソースのデフォルトをオーバーライドするための 引数リストを指定します。

name作成されたウィジェットのリソース名を指定します。 そのリソース名は、リソースを取り出すときに使用されるので、同じ親をもつ 他のウィジェットと同じであってはなりません。

num_args引数リスト中の引数の数を指定します。

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

wウィジェットを指定します。

widget_class作成されたウィジェットの ウィジェットクラスのポインタを指定します。

解説

XtCreateWidget 関数は、ウィジェット作成のほとんどのボイラープレート的な(共通の) 操作を行います。

•class_initialize プロシージャが、このクラスおよびすべてのスーパークラス についてすでに呼び出されたかどうかをチェックし、もしまだ呼び出されて いない場合は、スーパークラスからサブクラスの順序で、それら必要な プロシージャを呼び出します。

•ウィジェットインスタンス用のメモリを割り当てます。

•親が、 constraintWidgetClass のサブクラスである場合は、 親の constraint 用のメモリを割り当て、このメモリのアドレスを constraint フィールドにセットします。

•core のリソースでないデータフィールド (たとえば、parent や visible)を初期化します。

•このクラスおよびすべてのスーパークラスに指定されているリソースリストを 用いて、リソースフィールド(たとえば、background_pixel)を初期化します。

•親が、 constraintWidgetClass のサブクラスである場合は、 親のクラスおよび constraintWidgetClass までのすべてのスーパークラスに指定されている constraint リソースの リストを用いて、constraint レコードのリソースフィールドを 初期化します。

•ウィジェットの初期化プロシージャ、すなわち、 Core の initialize プロシージャから始まって、このウィジェットの initialize プロシージャまでを順次呼び出します。

•親が、 compositeWidgetClass のサブクラスである場合は、 その親の insert_child プロシージャを呼び出すことにより、このウィジェットを その親の子リストに入れます。 詳細な情報については、3.5 節を参照してください。

•親が、 constraintWidgetClass のサブクラスである場合は、constraint 初期化プロシージャ、 すなわち、 constraintWidgetClass から始まって、親までの constraint initialize プロシージャを順次 呼び出します。 なお、引数リスト中の引数の数は XtNumber マクロによって知ることができます。 詳細な情報については、11.1 節を参照してください。 XtCreateManagedWidget 関数は、 XtCreateWidget および XtManageChild を順次呼び出す便利なルーチンです。 XtDestroyWidget 関数は、ウィジェットを破壊 (デストロイ) するために提供された唯一の 手段です。 これはウィジェットが自分自身をデストロイすることまでサポートして います。 この関数はいつ呼び出されてもかまいません。 たとえ、今まさにデストロイしようとしているウィジェットの アプリケーションコールバックルーチンからでも呼び出すことができます。 これを実現するためには、デストロイするウィジェットへの参照に矛盾を きたさないようにしなければなりません。 そこで、処理を 2 つのフェーズに分けています。 フェーズ 1 では、 XtDestroyWidget は次のことを行います。

•ウィジェットの being_destroyed フィールドが True の場合、すぐにリターンします。

•ウィジェットの木構造を再帰的に下って行き、 そのウィジェットおよび、すべての子ウィジェットの being_destroyed フィールドに True をセットします。

•デストロイしてもよい状態になるのを待っているウィジェットのリスト (デストロイリスト)があります。 このリストにウィジェットを追加します。 ウィジェット w2 が w1 より後にデストロイリスト上に現れる場合、 w2 は w1 の子孫ではないといった一種の方向性がデストロイリストの エントリの間にあります。(子孫というのは、普通の子の場合もあるし、ポップアップチャイルドの 場合もあります。) フェーズ 2 がいつ始められるかについては、次の 2 つのケースがあります。 現在イベントの処理中である場合(すなわち、イベントの処理中にこの関数を コールした場合)は、その処理のためのすべてのプロシージャ (イベントマネージャやトランスレーションマネジャに発信されたすべての プロシージャをを含みます)をコールし終わったとき、すなわち、これは現在 呼び出し中の XtDispatchEvent のまさに出口を意味しますが、この時にフェーズ 2 が始められます。 現在イベントの処理中でない、すなわち、 XtDispatchEvent の中にいるわけでない場合は直ちにフェーズ 2 が始められます。 フェーズ 2 では、 XtDestroyWidget は、デストロイリスト中の各々のエントリについて次のことを行います。

•ウィジェット(およびすべての子孫)に登録されている destroy callback プロシージャを、リストに入れられた順序で呼び出します (したがって親コールバックの前に子コールバックが呼び出されることに なります)。

•ウィジェットの親が compositeWidgetClass のサブクラスで、まだデストロイされていない場合は、このウィジェットに 対して XtUnmanageChild を呼び出し、それからウィジェットの親の delete_child プロシージャを 呼び出します (3.4 節参照)。

•ウィジェットの親が constraintWidgetClass のサブクラスである場合は、 親の constraint destroy プロシージャ、次にその親のスーパークラスの constraint destroy プロシージャと上に向って順に constraint destroy プロシージャをコールし、最後に constraintWidgetClass の constraint destroy プロシージャをコールします。

•リストに入れられた順序で、ウィジェット (およびすべての子孫) の デストロイ用のプロシージャを呼び出します。 ウィジェットのそれぞれについて、 まずこのクラスで宣言された destroy プロシージャ、 次にそのスーパークラスで宣言された destroy プロシージャと上に向って 各スーパークラスの destroy プロシージャをコールし、 最後に Core クラスで宣言されている destroy プロシージャをコールします。

•ウィジェットがリアライズされている場合は (すなわち X のウィンドウをもっている場合)、 XDestroyWindow を呼び出します。 サーバは、再帰的に、すべての子孫のウィンドウをデストロイします。

•ウィジェットの木構造を再帰的に下って行き、 すべてのポップアップウィジェット、constraint レコード、 コールバックリストおよび、ウィジェットが compositeWidgetClass のサブクラスである場合は、子ウィジェットを解放します。

関連事項

XtAppCreateShell(3Xt), XtCreatePopupShell(3Xt)
X Toolkit Intrinsics − C Language Interface
Xlib − C Language X Interface

NEWS-OSRelease 4.2.1R

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026