この節では、統合プロセスの一部としてアプリケーションを保存するために必要なプログラミングの手順を説明します。
プログラム環境を設定するには、次の手順に従います。
次のヘッダ・ファイルを組み込みます。
Xm/Xm.h
Xm/Protocols.h
Dt/Session.h
libXmと libDtSvcをリンクします。
ツールキットを初期化して、トップレベル・ウィジェットを作成します。
次の例に示すように、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 アトムを設定しないでください。
Motif の XmAddWMProtocolCallback() 関数を使用して、アプリケーションが WM_SAVE_YOURSELF クライアント・メッセージを受け取ったときに呼び出されるコールバック・プロシージャを設定します。
XmAddWMProtocolCallback(toplevel, XaWmSaveYourself, SaveYourselfProc, toplevel);
セッション・マネージャがこのアプリケーションのトップレベル・ウィンドウに WM_SAVE_YOURSELF クライアント・メッセージを送ると、SaveYourselfProc() コールバック・プロシージャが呼び出されます。このコールバックを使用して、アプリケーションの状態を保存します。アプリケーションはプログラマが選んだ任意の方法で状態を保存できますが、保存中はユーザと対話できません。
セッション・マネージャは、アプリケーションの状態を保存するための絶対パス名とベース・ファイル名を返す手段として、DtSessionSavePath() 関数を提供します。
アプリケーションが WM_SAVE_YOURSELF メッセージの処理 (状態を保存するか、メッセージを無視する) を終了した後、アプリケーションはトップレベル・ウィンドウの WM_COMMAND 属性を設定して、保存操作が完了したことをセッション・マネージャに知らせなければなりません。
アプリケーションのトップレベル・ウィンドウの WM_COMMAND 属性を設定するには、Xlib の XSetCommand() 関数を使用します。この属性を設定することによって、アプリケーションが WM_SAVE_YOURSELF メッセージの処理を終了したことをセッション・マネージャに知らせ、アプリケーションを再起動するために必要なコマンド行をセッション・マネージャに与えます。
XSetCommand() は、コマンド引き数の配列を受け入れます。アプリケーションが保存プロセスの一部として DtSessionSavePath() 関数を使用する場合には、XSetCommand() には追加のコマンド引き数 -session basename が必要です。basename は、DtSessionSavePath() によって返されるベース・ファイル名です。