質問: Mac OSX 用の electron アプリを作成しています. closeボタンを押した際にアプリを終了させるのではなく,他のMacアプリと同様,ウィンドウを非表示にしたいのですが方法がわからず困っています. closeボタンを押した場合も,MenuのQuitからアプリを終了させた場合,OSをシャットダウンして強制的にアプリを終了させた場合もすべてbrowser-windowのcloseイベントが呼ばれるため,終了/ウィンドウ非表示の判別ができません. これらをcloseイベントの生起理由を判別する方法はありますか?
回答: デフォルトでは、closeボタンを押した際は、BrowserWindowのquitイベントが呼ばれますが、appのquitイベントは起きません。 Cmd + Qなど、アプリの終了時のイベントの際にはapp側のquitイベントが呼ばれます。 Electronのappに関するイベントは公式にしっかりと書いてあります。 質問者さんがやりたいことを、Windowをすべて閉じてもアプリ自体を終了させたくない、という風に受け取るならば、それはデフォルトで叶っています。そうなっていないのなら自分のコードを見直してください。Windowを閉じた際にアプリを終了させているはずです。 これを例えば他のアプリのように、Dockをクリックした際にwindowをもう一度表示させたい、というのであれば、electronがアクティブになった際のイベントを取得して、その際にもう一度windowを生成すれば良いのではないでしょうか? ``` app.on('activate', function(){ if(mainWindow == null){ mainWindow = new BrowserWindow(); } }); ``` 状態が初期状態に戻ってしまうのが嫌であれば、それは閉じる際にアプリの状態を保存し(閉じる際のイベントは取得できるため出来るはず)、windowを再生成した際に状態を復元するようなコードを書けば良いでしょう。