Détecter différentes options dans l'application arrêter de fumer AIR sur Mac

voix
2

J'ai une application AIR sur un Mac et je veux avoir le comportement de cacher la fenêtre quand quelqu'un « ferme » l'application (par exemple, frappe le bouton rouge « x » ou cmd-w). Cependant, si quelqu'un touche cmd-q ou choisit « Quitter » dans le menu contextuel de station d'accueil ou le menu de haut niveau, je veux l'application à fait près.

Je preventDefault sur l'événement « de clôture » envoyé par l'application, cependant, ce qui provoque toutes les méthodes « proches » juste cacher la fenêtre. La seule façon pour quelqu'un de fermer l'application à ce moment est ForceQuit (ou par l'intermédiaire d'une interface séparée je fournir, comme une option de menu contextuel sur l'icône du Dock).

J'ai aussi essayé de capturer l'événement keyDown cmd-q manuellement, mais il ne soit pas envoyé. En outre, ce ne serait pas utile dans le cas où les gens essaient de quitter l'application en utilisant les options de menu.

De plus, si je preventDefault sur la méthode de fermeture, il provoque ma demande d'annuler un processus d'arrêt immédiatement (ce qui est une terrible expérience de l'utilisateur).

Y at-il un moyen de détecter les différentes méthodes de fermeture d'une application AIR? Je veux être en mesure de faire la différence entre ces méthodes de fermeture et réagir à la façon appropriée.

Créé 27/08/2009 à 00:40
source utilisateur
Dans d'autres langues...                            


2 réponses

voix
6

Essayez ceci pour la clôture, de ce que je crois comprendre qu'il était / est un bug dans le cadre de sorte que si vous incluez Updater AIR il brise le soutien cmd-q, le fil utilisé pour être ici: http://www.adobe.com /cfusion/webforums/forum/messageview.cfm?forumid=72&catid=670&threadid=1373568

Cela peut ou peut ne pas être applicable à votre situation.

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();
            }
    });
Créé 27/08/2009 à 16:38
source utilisateur

voix
1

Essayez, je suis sûr qu'il doit y avoir une meilleure façon de gérer cela, mais cela a fonctionné pour moi.

<?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>
Créé 27/08/2009 à 15:38
source utilisateur

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