XtCallbackNonexclusive(3) ポップアップをマップする

Other Alias

XtPopup, XtPopupSpringLoaded, XtCallbackNone, XtCallbackExclusive

書式

void XtPopup(popup_shell, grab_kind)

      Widget popup_shell;

      XtGrabKind grab_kind;

void XtPopupSpringLoaded(popup_shell)

      Widget popup_shell;

void XtCallbackNone(w, client_data, call_data)

      Widget w;

      XtPointer client_data;

      XtPointer call_data;

void XtCallbackNonexclusive(w, client_data, call_data)

      Widget w;

      XtPointer client_data;

      XtPointer call_data;

void XtCallbackExclusive(w, client_data, call_data)

      Widget w;

      XtPointer client_data;

      XtPointer call_data;

void MenuPopup(shell_name)

      String shell_name;

引き数

call_data
コールバックのデータを指定する。 これは、この手続きでは使われない。
client_data
ポップアップシェルを指定する。
grab_kind
ユーザイベントが constraint を受ける方法を指定する。
popup_shell
ウィジェットシェルを指定する。
w
ウィジェットを指定する。

説明

関数 XtPopup は以下の動作を行う:
  • XtCheckSubclass を呼び出し、popup_shell が Shell のサブクラスであることを確認する。
  • このシェルの popped_up フィールドが既に True ならば、エラーを起こす。
  • このシェルの popup_callback リストのコールバック手続きを呼ぶ。
  • このシェルの popped_up フィールドに True をセットし、spring_loaded フィールドに False をセットする。また、このシェルの grab_kind フィールドに grab_kind の値 をセットする。
  • このシェルの create_popup_child 手続きが NULL でなければ、 XtPopup は popup_shell をパラメータとしてこの手続きを呼び出す。
  • grab_kind が XtGrabNonexclusive または XtGrabExclusive ならば、この関数は

XtAddGrab(popup_shell, (grab_kind == XtGrabExclusive), False)

を呼び出す。

  • 指定された popup_shell を使って XtRealizeWidget を呼び出す。
  • 指定された popup_shell を使って XMapWindow を呼び出す。

関数 XtPopupSpringLoaded は、 XtPopup とほとんど同じである。 ただし、シェルの spring_loaded フィールドに True をセットし、常に exclusiveTrue を、 spring_loadedTrue を指定して XtAddGrab を呼び出す点だけが異なる。

関数 XtCallbackNone, XtCallbackNonexclusive, XtCallbackExclusive は、 引き数 client_data で指定されたシェルと、指定された名前をセットした grab_kind を使って XtPopup を呼び出す。 XtCallbackNoneXtGrabNoneを、 XtCallbackNonexclusiveXtGrabNonexclusive を、 XtCallbackExclusiveXtGrabExclusive を指定する。 次に、それぞれの関数は XtSetSensitive を使って、 コールバックリストを実行したウィジェットを反応しない状態にする。 これらの関数をコールバック内で使うことは必要ではない。 特に、ポップアップシェルを動的に生成するコールバックやボタンを反応しな い状態にする以上の処理を行うコールバックに対しては、アプリケーションは 個別に処理を行わなければならない。

MenuPopup はトランスレーションマネージャが管理しており、spring-loaded ポップアッ プに対する特別な処理を実行しなければならない。 トランスレーション指定の中からの MenuPopup の呼び出しは、エクスポートされていないアクション手続きへの呼び出しにマッ プされる。このとき、トランスレーションマネージャは、トランスレーション の左辺で指定されたイベントに基づいてパラメータを決める。

MenuPopupButtonPress イベントに対して呼び出された場合(モディファイアが伴うこともある)、トラ ンスレーションマネージャは grab_kind に XtGrabExclusive を、 spring_loaded に True をセットしてシェルをポップアップさせる。 MenuPopupEnterWindow イベントに対して呼び出された場合(モディファイアを伴うこともある)、トラ ンスレーションマネージャは grab_kind に XtGrabNonexclusive を、spring_loaded に False をセットしてシェルをポップアップさせる。 これ以外の場合、トランスレーションマネージャはエラーを起こす。 ウィジェットがポップアップしたときには以下の動作が行われる:

  • popup_shell が Shell のサブクラスであることを確認するため、 XtCheckSubclass を呼び出す。
  • このシェルの popped_up フィールドが既に True ならば、エラーを起こす。
  • このシェルの popup_callback リストのコールバック手続きを呼ぶ。
  • このシェルの popped_up フィールドに True をセットし、spring_loaded フィールドと grab_kind フィールドに適切な値 をセットする。
  • このシェルの create_popup_child 手続きが NULL でなければ、 この手続きは popup_shell をパラメータとして呼び出される。
  • 次の呼び出しを行う:

XtAddGrab(popup_shell, (grab_kind == XtGrabExclusive), spring_loaded)

  • 指定された popup_shell を使って XtRealizeWidget を呼び出す。
  • 指定された popup_shell を使って XMapWindow を呼び出す。

(これらの動作は XtPopup と同じであることに注意すること。) MenuPopup は、ウィジェットツリーを検索してシェルを見つけようとする。この検索は、 手続きが呼び出されたウィジェットの親ウィジェットから始められる。 指定した名前のシェルが、この親の子でポップアップであるものの中から見つ かった場合、シェルは適切なパラメータを使ってポップアップされる。 見つからなかった場合は、必要に応じて親ウィジェットの関係を上にたどって 検索が行われる。 アプリケーションウィジェットにたどり着いた時点で、マッチするシェルが見 つからなかった場合は、 MenuPopup はエラーを起こす。