Detectar diferentes parar de opções no aplicativo AIR no Mac

votos
2

Tenho uma aplicação AIR rodando em um Mac e eu quero ter o comportamento de ocultar a janela quando alguém fecha o aplicativo (por exemplo, atinge o vermelho x botão ou cmd-w). No entanto, se alguém bate cmd-Q ou escolhe Quit no menu de contexto doca ou menu de nível superior, quero que o aplicativo realmente perto.

Posso preventDefault no evento fechamento enviada pela aplicação, no entanto, isso faz com que todos os próximos métodos apenas para ocultar a janela. A única maneira de alguém para fechar o aplicativo nesse ponto é ForceQuit (ou através de uma interface separada eu fornecer, como uma opção de menu de contexto no ícone de encaixe).

Eu também tentei capturar o evento keyDown cmd-q manualmente, mas não é enviado. Além disso, este não ajudaria para o caso quando as pessoas tentam sair do aplicativo usando as opções do menu.

Além disso, se eu preventDefault no método de fechamento, ele faz com que meu pedido para cancelar um processo de encerrar imediatamente (que é uma experiência de usuário terrível).

Existe uma maneira de detectar diferentes métodos de fechar um aplicativo AIR? Eu quero ser capaz de dizer a diferença entre esses métodos de fechamento e reagir ao apropriadamente.

Publicado 27/08/2009 em 00:40
fonte usuário
Em outras línguas...                            


2 respostas

votos
6

Tente isto para o fechamento, pelo que eu entendo, houve / é um bug no quadro de modo que se você incluir o atualizador AIR quebra apoio cmd-Q, o fio usado para estar aqui: http://www.adobe.com /cfusion/webforums/forum/messageview.cfm?forumid=72&catid=670&threadid=1373568

Isto pode ou não ser aplicáveis ​​à sua situação.

NativeApplication.nativeApplication.addEventListener(Event.EXITING, 
        function(e:Event):void {
            var opened:Array = NativeApplication.nativeApplication.openedWindows;
            for (var i:int = 0; i < opened.length; i ++) {
                opened[i].close();
            }
    });
Respondeu 27/08/2009 em 16:38
fonte usuário

votos
1

Tente isto, estou certo de que deve haver uma maneira melhor de lidar com isso, mas isso tem funcionado para mim.

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="onCreationComplete()">
    <mx:Script>
        <![CDATA[
            import mx.core.Application;
            import mx.events.AIREvent;
            import mx.core.Window;

            private function onCreationComplete():void {
                addMacSupport();
            }

            private var macsupport_allowExit:Boolean = false;

            private function addMacSupport():void {
                if ( Capabilities.os.indexOf("Mac") == 0 ) {
                    //open a hidden window that will prevent the application from
                    //exiting when the user presses Cmd+W
                    var win:Window = new Window();
                    win.visible = false;
                    win.open(false);

                    //add a closing listener on the hidden window, this event will only
                    //be fired when the user pressed Cmd+Q or selects quit from the menu
                    //then set macsupport_allowExit to true
                    win.addEventListener(Event.CLOSING, function(e:Event):void {
                        macsupport_allowExit = true;
                    });

                    //add an event listener to this window on closing
                    addEventListener(Event.CLOSING, function(e:Event):void {
                        //always preventDefault
                        e.preventDefault();

                        //wait one frame, then check the macsupport_allowExit variable
                        //if it is true, we nedd to exit the app, otherwise just hide
                        //the app window
                        callLater(function():void {
                            if ( macsupport_allowExit ) {
                                nativeApplication.exit();
                            }
                            else {
                                nativeWindow.visible = false;
                            }
                        });
                    });

                    //add an event listener for INVOKE to show our main app window
                    //when the dock icon is clicked.
                    addEventListener(InvokeEvent.INVOKE, function(e:InvokeEvent):void {
                        if ( nativeWindow && !nativeWindow.visible ) {
                            nativeWindow.visible = true;
                            nativeWindow.activate();
                        }
                    });
                }
            }
        ]]>
    </mx:Script>
</mx:WindowedApplication>
Respondeu 27/08/2009 em 15:38
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more