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

第 4 章 セッション・マネージャとの統合

セッション・マネージャは、ユーザが (現在のセッションから) ログアウトするときや、ユーザが (ホーム・セッションとして) 環境を保存するときに、デスクトップ環境と実行中のアプリケーションに関する情報を保存します。アプリケーションが現在のセッションまたはホーム・セッションの一部として保存され、次のセッションの一部として再起動されるためには、X クライアント間通信規約マニュアル (ICCCM) 1.1 のセッション管理プロトコルを理解できる必要があります。この章では、セッション・マネージャがセッションを保存して復元する方法を概説し、アプリケーションがセッション管理に関与するために必要な手順を詳しく述べます。

セッション・マネージャがセッションおよびアプリケーションを保存する方法

セッションを終了するときや、ホーム・セッションを保存するとき、セッション・マネージャは次の作業を実行します。

  1. 選択されたリソース設定と X サーバ設定を保存する。

  2. 各アプリケーションが状態を保存できるようにして、保存の完了を待つ。

  3. アプリケーションの再起動に必要なコマンド行を獲得する。

セッション管理のためのアプリケーションのプログラム方法

プログラム環境の設定

この節では、統合プロセスの一部としてアプリケーションを保存するために必要なプログラミングの手順を説明します。

プログラム環境を設定するには、次の手順に従います。

  1. 次のヘッダ・ファイルを組み込みます。

    • Xm/Xm.h

    • Xm/Protocols.h

    • Dt/Session.h

  2. libXmlibDtSvcをリンクします。

  3. ツールキットを初期化して、トップレベル・ウィジェットを作成します。

WM_SAVE_YOURSELF アトムの設定

次の例に示すように、Motif の XmAddWMProtocol() 関数を使用して、アプリケーションのトップレベル・ウィンドウの WM_PROTOCOLS 属性の WM_SAVE_YOURSELF アトムを設定します。

Atom XaWmSaveYourself; 
Display *dsp;
dsp = XtDisplay(toplevel);
XaWmSaveYourself = XmInternAtom(dsp,
"WM_SAVE_YOURSELF", False); 

XmAddWMProtocols(toplevel, &XaWmSaveYourself, 1);

注 -

複数のウィンドウに対して WM_SAVE_YOURSELF アトムを設定しないでください。


WM_SAVE_YOURSELF メッセージを受け取るための準備

Motif の XmAddWMProtocolCallback() 関数を使用して、アプリケーションが WM_SAVE_YOURSELF クライアント・メッセージを受け取ったときに呼び出されるコールバック・プロシージャを設定します。

XmAddWMProtocolCallback(toplevel,
XaWmSaveYourself, SaveYourselfProc,
toplevel);

WM_SAVE_YOURSELF メッセージの処理

セッション・マネージャがこのアプリケーションのトップレベル・ウィンドウに WM_SAVE_YOURSELF クライアント・メッセージを送ると、SaveYourselfProc() コールバック・プロシージャが呼び出されます。このコールバックを使用して、アプリケーションの状態を保存します。アプリケーションはプログラマが選んだ任意の方法で状態を保存できますが、保存中はユーザと対話できません。

セッション・マネージャは、アプリケーションの状態を保存するための絶対パス名とベース・ファイル名を返す手段として、DtSessionSavePath() 関数を提供します。

WM_COMMAND 属性の設定

アプリケーションが WM_SAVE_YOURSELF メッセージの処理 (状態を保存するか、メッセージを無視する) を終了した後、アプリケーションはトップレベル・ウィンドウの WM_COMMAND 属性を設定して、保存操作が完了したことをセッション・マネージャに知らせなければなりません。

アプリケーションのトップレベル・ウィンドウの WM_COMMAND 属性を設定するには、Xlib の XSetCommand() 関数を使用します。この属性を設定することによって、アプリケーションが WM_SAVE_YOURSELF メッセージの処理を終了したことをセッション・マネージャに知らせ、アプリケーションを再起動するために必要なコマンド行をセッション・マネージャに与えます。

XSetCommand() は、コマンド引き数の配列を受け入れます。アプリケーションが保存プロセスの一部として DtSessionSavePath() 関数を使用する場合には、XSetCommand() には追加のコマンド引き数 -session basename が必要です。basename は、DtSessionSavePath() によって返されるベース・ファイル名です。

セッション・マネージャがセッションを復元する方法

セッション・マネージャは、次のようにしてセッションを復元します。

  1. リソース・データベースとサーバ設定を復元する。

  2. 保存されたコマンドを使用して、アプリケーションを再起動する。

アプリケーションが、保存された状態のパスを見つけるために DtSessionSavePath() を使用した場合には、アプリケーションは、ベース・ファイル名を-session 引き数から DtSessionRestorePath() 関数に渡して、保存状態ファイルの絶対パス名を見つけることができます。