有り難うございまっす。
んで、前から要望のあった常駐化対応をやっている最中です。
やりたい動きとしては
- メイン画面を閉じてもアプリは終了せず常駐する
- Windowsの場合はタスクトレイ、Macの場合はDocを表示し、アイコンをクリックしたらメイン画面を復帰
メイン画面を閉じてもアプリは終了せず常駐する
画面の×ボタンを押されたタイミングで画面のvisibleをfalseにすればよさそう。
mx:WindowedApplication の closingのタイミングで以下のコードを書く。
/* WindowをCloseするタイミングでの処理 */
public function onWindowClosing(e:Event):void {
visible = false;
e.preventDefault();
}
closingのタイミングであれば、処理をキャンセルすることができるので、e.preventDefault(); で画面終了処理をキャンセルしてます。
Windowsの場合はタスクトレイ、Macの場合はDocを表示し、アイコンをクリックしたらメイン画面を復帰
if (NativeApplication.supportsMenu) {
// Mac用のDocを作成する処理
} else {
// Windows用のタスクトレイを作成する処理
}
でまずは処理を切替。
/* DocIconの設定 */
private function setDockIcon(menu:NativeMenu):void {
var doc:DockIcon = NativeApplication.nativeApplication.icon as DockIcon;
doc.bitmaps = [new icon128x128()];
doc.menu = menu;
NativeApplication.nativeApplication.addEventListener(InvokeEvent.INVOKE, systemTrayIconClickHandler);
}
/* SystemTrayの設定 */
private function setSystemTrayIcon(menu:NativeMenu):void {
var tray:SystemTrayIcon = NativeApplication.nativeApplication.icon as SystemTrayIcon;
tray.bitmaps = [new icon32x32(), new icon16x16()];
tray.menu = menu;
tray.tooltip = applicationName;
tray.addEventListener(MouseEvent.CLICK, systemTrayIconClickHandler);
}
/* タスクトレイ、Docをクリックした時の処理 */
private function systemTrayIconClickHandler(event:Event) :void {
if (!mainWindow.visible || mainWindow.nativeWindow.displayState == NativeWindowDisplayState.MINIMIZED) {
if (!mainWindow.nativeWindow.visible) {
mainWindow.nativeWindow.visible = true;
}
mainWindow.nativeWindow.restore();
mainWindow.activate();
mainWindow.setFocus();
}
}
で、Docとシステムトレイを作成します。
クリックのタイミングを拾うには、Windowsではタスクトレイに対して addEventListener(MouseEvent.CLICK, handler); をすれば拾えるっぽいのですが、MacのDocは拾えないみたい。
Docの場合は、マウスをクリックすると、NativeApplication.nativeApplication.addEventListener(InvokeEvent.INVOKE, handler); が呼ばれるようなので、これで対応。
これで今の所、動いている感じ。。