Detekci různých možností skončil v aplikaci AIR na Mac

hlasů
2

Mám aplikace AIR běžící na počítači Mac a chci mít chování skrývá okno, když někdo „zavírá“ aplikace (např narazí na červenou „x“ tlačítko nebo cmd-w). Nicméně, pokud někdo narazí CMD-Q nebo zvolí „Ukončit“ z dokovací stanice kontextového menu nebo menu nejvyšší úrovně, chci aplikaci skutečně blízko.

Mohu preventDefault na „zavírá“ události zaslané žádosti, nicméně, to způsobí, že všechny „Close“ metody jen skrytí okna. Jediný způsob, jak někoho zavřít aplikaci v tomto bodě je ForceQuit (nebo prostřednictvím samostatného rozhraní I poskytují, jako volba kontextového menu na ikonu doku).

Také jsem se snažil ručně zachytit KeyDown událost cmd-Q, ale to není pošlou. Také by to nepomohlo pro případ, kdy se lidé snaží přestat aplikaci pomocí možnosti nabídky.

Navíc, když jsem preventDefault na způsobu zavírání, způsobuje mé žádosti okamžitě zrušit vypínacího procesu (což je hrozné uživatelské zkušenosti).

Existuje způsob, jak zjistit různé metody zavření aplikace AIR? Chci být schopen rozeznat rozdíl mezi těmito metodami zavírání a reagovat na ně odpovídajícím způsobem.

Položena 27/08/2009 v 00:40
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
6

Zkuste to na závěr z toho, co vím, že byl / je chyba v rámci takže pokud zahrnete updater AIR se zlomí podporu cmd-q, závit býval zde: http://www.adobe.com /cfusion/webforums/forum/messageview.cfm?forumid=72&catid=670&threadid=1373568

To může nebo nemusí být použitelné pro danou situaci.

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();
            }
    });
Odpovězeno 27/08/2009 v 16:38
zdroj uživatelem

hlasů
1

Zkuste to, jsem si jist, že musí existovat lepší způsob, jak zvládnout to, ale to pracuje pro mě.

<?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>
Odpovězeno 27/08/2009 v 15:38
zdroj uživatelem

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