Was passiert eigentlich beim aktivieren eines Programms mit Apfel-Tab?

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Was passiert eigentlich beim aktivieren eines Programms mit Apfel-Tab?

    Ich weiss nicht genau, wo dieses Thema hingehört, aber da ich in Richtung AppleEvents denke, tue ich es mal hier hin. Wie genau kann ich (bzw. mein Programm ;) ) darauf reagieren, wenn jemand per Apfel-Tab wechselt? Gibt's da irgendwo Informationen dazu?
    Mein in Java geschriebenes Programm bekommt zwar beim Klick auf das Dock-Icon einen AppleEvent, aber über den App-Switcher nichts, scheint es völlig zufällig zu sein, was passiert (z.B. ob das offene Fenster aktiviert wird). Verständlicherweise würde ich das gerne ändern ;)

    Irgendwelche Ideen, wie ich das anstelle?

    Grüsse
    daniel
    There will always be skeptics.
    There will always be disbelievers.
    And there will always be Apple to prove them wrong.
  • Original von Objcler
    War auch mein erster Gedanke. Die wird aber nicht gefeuert falls mit Apple+Tab das Programm aufgerufen wird...

    Bei mir kommt sie - NSApplicationWillBecomeActiveNotification und NSApplicationDidBecomeActiveNotification kommen unabhängig davon, ob ich Dock-klicke oder Apfel-tabbe.
    Multigrad - 360°-Produktfotografie für den Mac
  • Hmm, das Problem ist, dass ich in Java kein NSApplication-Objekt habe (oder doch?) und das Event-Handling indirekt über Carbon geht. Das sieht dann bei mir so aus das OS-Objekt stellt die Brücke zwischen SWT und Carbon dar:

    Quellcode

    1. int appleEventProc(int nextHandler, int theEvent, int userData) {
    2. int eventClass = OS.GetEventClass(theEvent);
    3. System.err.println("AppleEventClass"+eventClass);
    4. if (eventClass == OS.kEventClassAppleEvent) {
    5. System.err.println("EventClass is kEventClassAppleEvent");
    6. int[] aeEventID = new int[1];
    7. if (OS.GetEventParameter(theEvent, OS.kEventParamAEEventID,
    8. OS.typeType, null, 4, null, aeEventID) != OS.noErr) {
    9. System.err.println("Event not handled!!");
    10. return OS.eventNotHandledErr;
    11. }
    12. // System.out.println("EventID = " + OSXtoString(aeEventID[0]));
    13. if ((aeEventID[0] != kAEReopenApplication) && (aeEventID[0] != kAEQuitApplication)) {
    14. // System.out.println("AppleEvent ID: "+aeEventID[0]);
    15. System.err.println("Event not handled!!");
    16. return OS.eventNotHandledErr;
    17. }
    18. EventRecord eventRecord = new EventRecord();
    19. OS.ConvertEventRefToEventRecord(theEvent, eventRecord);
    20. OS.AEProcessAppleEvent(eventRecord);
    21. if (true)
    22. return OS.noErr;
    23. }
    24. return OS.eventNotHandledErr;
    25. }
    Alles anzeigen


    Und wie gesagt, über das Dock wird ein kAEReopenApplication-Event verschickt, aber über den App-Switcher nicht, inkonsistenterweise beim beenden des Programms im App-Switcher (also Apfel-Tab auf das Programm-Icon und dann ohne die Apfeltaste loszulassen Q) löst einen k kAEQuitApplication-Event aus.

    Gibt es eine Möglichkeit, auf die Notifications zuzugreifen ausser über NSApplication?

    [EDIT] Hmm, vielleicht sollte ich es mal mit einer anderen Event-Klasse versuchen :/ naja, versuche ich morgen mal...
    There will always be skeptics.
    There will always be disbelievers.
    And there will always be Apple to prove them wrong.