《ソースファイル:DoCommand.c》
// File-Quitを選択したとき(レコーディングには非対応) void DoQuitCommand() { WindowPtr targetWindow; Finish = true; //アプリケーション終了を示すフラグを立てます //開いているウインドウを全部閉じます for( targetWindow = FrontWindow(); targetWindow != 0; targetWindow = (WindowPtr)((WindowPeek)targetWindow)->nextWindow) if(DoCloseCommand() == false) { //閉じる時にキャンセルボタンをクリックした Finish = false; //フラグを元に戻しテク return; } if(availTSMInline) //TSMアプリケーションのクローズ CloseTSMAwareApplication(); }
《ソースファイル:WindowSet.c》
extern Boolean Finish;
// ウインドウを閉じる。保存を行ったらtrueを戻す Boolean CloseDocWindow(WindowPtr targetWindow) { DocRecHandle docH; OSErr er; if(targetWindow == 0) return false; //念のためにチェック docH =GetDocHandle(targetWindow); //DocRecordを取得 if(((**docH).isDarty & 1) != 0) { //isDartyの1ビット目を見る。つまり修正された場合 NavAskSaveChangesResult reply; NavAskSaveChangesAction action; NavDialogOptions dialogOptions; //変数を用意する
NavGetDefaultDialogOptions(&dialogOptions); //ダイアログ設定は既定値 CopyString(dialogOptions.savedFileName, (**docH).fileName); if (Finish) //終了プロセス中ならば action = kNavSaveChangesQuittingApplication; //アプリケーション終了のメッセージ else //終了中でないなら、単に1つの文書を閉じるとき action = kNavSaveChangesClosingDocument; //文書を閉じる時のメッセージ er = NavAskSaveChanges(&dialogOptions, action, &reply, NULL, NULL); //保存していいかをたずねるダイアログボックスを表示する
if(reply == kNavAskSaveChangesCancel) return(false); //何もしないなら関数を抜ける if(reply == kNavAskSaveChangesSave) DoSaveCommand(); //するなら保存 } DisposeAllObject(targetWindow); //オブジェクトをすべて削除し DisposeDocWin(targetWindow); //ウインドウを閉じる if(FrontWindow() == 0) //ウインドウが1つもないのなら DisableItem(GetMenuHandle(FileMenuID), CloseItem); //File-Closeをグレーにする return true; }
|