Solaris 共通デスクトップ環境 プログラマーズ・ガイド

第 6 章 ワークスペース・マネージャとの統合

ワークスペース・マネージャは、デスクトップの複数のワークスペース環境の中でアプリケーションがウィンドウを管理するための手段を提供します。アプリケーションは、ワークスペース・マネージャと通信することによって、主に次の 4 つのタスクを実行できます。

通常、セッション・マネージャはプログラマに干渉されることなく、アプリケーションのメイン・ウィンドウを正しいワークスペースに取り出します。ただし、アプリケーションが複数のトップレベル・ウィンドウを持つ場合には、ワークスペース・マネージャの API を使用してウィンドウの位置を特定し、このデータをセッション状態の一部として保存しなければなりません。

セッション間のアプリケーション関連情報の保存の詳細は、第 4 章「セッション・マネージャとの統合」を参照してください。

ワークスペース・マネージャとの通信

アプリケーションは、デスクトップが提供する関数を使用して、ワークスペース・マネージャと通信します。これらの関数を使用すると、ワークスペースの管理に関連するさまざまなタスクをすばやく簡単に実行できます。次に、これらの関数のリストを示します。

2 つのデモ・プログラム (occupy.cwsinfo.c) の中に、これらの関数の使用方法を示すコードの一部分があります。occupy.cwsinfo.c、およびいくつかのブランドのワークステーションの makefile をリストしたものがディレクトリ /usr/dt/examples/dtwsm にあります。各関数の詳細は、該当するマニュアル・ページを参照してください。

アプリケーション・ウィンドウをワークスペースに置く

アプリケーションは、ウィンドウを任意のまたは全部の既存のワークスペースに置くことができます。DtWsmOccupyAllWorkspaces() は、現在定義されているすべてのワークスペースにウィンドウを置きます。一方、DtWsmSetWorkspacesOccupied() は、この関数に渡されたリストの中で指定されている、すべてのワークスペースにウィンドウを置きます。

アプリケーション・ウィンドウをすべてのワークスペースに置くには

    DtWsmOccupyAllWorkspaces() を使用します。

    occupy.c では、[すべてのワークスペースに配置] プッシュ・ボタンのコールバック allWsCB() がこの関数を呼び出します。

        DtWsmOccupyAllWorkspaces (XtDisplay(toplevel),
                               XtWindow(toplevel));
    • XtDisplay(toplevel) は、X ディスプレイです。

    • XtWindow(toplevel) は、すべてのワークスペースに置かれるウィンドウです。

この関数の詳細は、DtWsmOccupyAllWorkspaces() のマニュアル・ページを参照してください。

アプリケーション・ウィンドウを指定されたワークスペースに置くには

    DtWsmSetWorkspacesOccupied() を使用します。

    occupy.c では、[配置するワークスペース] プッシュ・ボタンのコールバック setCB() がこの関数を呼び出します。

        DtWsmSetWorkSpacesOccupied XtDisplay(toplevel),
                                  XtWindow(toplevel), paWsSet, numSet);
    • XtDisplay(toplevel) は、X ディスプレイです。

    • XtWindow(toplevel) は、ワークスペースに置かれるウィンドウです。

    • paWsSet は、X のアトムに変換されたワークスペース名のリストを指すポインタです。

    • numSet は、リスト内のワークスペースの番号です。

この関数の詳細は、DtWsmSetWorkspacesOccupied() のマニュアル・ページを参照してください。

アプリケーション・ウィンドウがあるワークスペースの識別

関数 DtWsmGetWorkspacesOccupied() は、指定されたアプリケーション・ウィンドウがあるワークスペースのリストを返します。occupy.c では、プロシージャ ShowWorkspaceOccupancy() がこの関数を呼び出します。この呼び出しの結果に基づいて、ShowWorkspaceOccupancy() はワークスペースを表すトグル・ボタンの外観を変更します。アプリケーション・ウィンドウがあるワークスペースの各トグル・ボタンには、チェック・マークが表示されます。

アプリケーション・ウィンドウがあるワークスペースを識別するには

    DtWsmGetWorkspacesOccupied() を使用します。

        rval = DtWsmGetWorkspacesOccupied(XtDisplay(toplevel)
                XtWindow(toplevel), &paWsIn, &numWsIn);
    • XtDisplay(toplevel) は、X ディスプレイです。

    • XtWindow(toplevel) は、ワークスペースで検索されるウィンドウです。

    • paWsIn は、X のアトムに変換されたワークスペース名のリストを指すポインタのアドレスです。

    • numWsIn は、リスト内のワークスペースの番号を表す整数のアドレスです。

この呼び出しの後、ループが設定され、ワークスペースのリスト (DtWsmGetWorkspaceList() によってプロシージャ SetUpWorkspaceButtons() で検索されます) と、アプリケーション・ウィンドウがあることがわかったワークスペースのリストとを比較します。各トグル・ボタンがアプリケーション・ウィンドウがあるワークスペースを表す場合は、トグル・ボタン・リソース XmNset に True が設定されます。

ワークスペース間のアプリケーションの移動防止

関数 DtWsmRemoveWorkspaceFunctions() は、アプリケーションが次の作業を実行しないようにします。

DtWsmRemoveWorkspaceFunctions() が上記の作業を実行する場合は、デスクトップ・ワークスペース・マネージャ (dtwm) のウィンドウ・メニューの一部分をアクティブにしないようにします。dtwm はアプリケーションのトップレベル・ウィンドウを管理するときにワークスペース情報をチェックするだけなので、アプリケーションはトップレベル・ウィンドウがマップされる前に DtWsmRemoveWorkspaceFunctions() を呼び出さなければなりません。アプリケーションのトップレベル・ウィンドウが管理された後で DtWsmRemoveWorkspaceFunctions() を呼び出す必要がある場合には、最初に Xlib 関数 XWithdrawWindow() を呼び出してから DtWsmRemoveWorkspaceFunctions() を呼び出し、次に XMapWindow() を呼び出して、トップレベル・ウィンドウを再マップしなければなりません。

別のワークスペースへの移動を防止するには

    DtWsmRemoveWorkspaceFunctions() を使用します。

        DtWsmRemoveWorkspaceFunctions(XtDisplay(toplevel),
                                   XtWindow(toplevel));
    • XtDisplay(toplevel) は、X ディスプレイです。

    • XtWindow(toplevel) は、ワークスペースの移動を防止するウィンドウです。

ワークスペースの変更の監視

次の関数の 1 つまたは両方を使用して、ワークスペースの変更を監視できます。

DtWsmAddCurrentWorkspaceCallback() は、ワークスペース・マネージャが新しいワークスペースに切り替えられるときに、必ず呼び出されるアプリケーション・コールバックを登録します。詳細は、DtWsmAddCurrentWorkspaceCallback(3) のマニュアル・ページを参照してください。

DtWsmWorkspaceModifiedCallback() は、ワークスペースが追加、削除、または変更されるときに必ず呼び出されるアプリケーション・コールバックを登録します。詳細は、DtWsmWorkspaceModifiedCallback(3) のマニュアル・ページを参照してください。

ワークスペースの切り替えを監視するには

    DtWsmAddCurrentWorkspaceCallback() を使用します。

    デモ・プログラム wsinfo.c では、この関数は、トップレベル・ウィジェットが実体化された後で呼び出されます。

        DtWsmAddCurrentWorkspaceCallback (toplevel, wschangecb, NULL);
    • toplevel は、アプリケーションのトップレベル・ウィジェットです。

    • wschangecb() は、呼び出される関数名です。

    • NULL は、コールバックに渡されるクライアント・データのパラメータです。この場合、データは渡されません。

他のワークスペースの変更を監視するには

    DtWsmWorkspaceModifiedCallback() を使用します。

        DtWsmWorkspaceModifiedCallback toplevel, wschangecb, NULL);
    • toplevel は、アプリケーションのトップレベル・ウィジェットです。

    • wschangecb() は、呼び出される関数名です。

    • NULL は、コールバックに渡されるクライアント・データのパラメータです。この場合、データは渡されません。