Morbus fenestra: Symptome bekämpfen

Note to our english readers: This is how to circumvent Adobe Air’s nasty „blank window“ bug when launching fullscreen apps in mouseless environments. On a Mac. Using Mac OSX 10.7 or above.
Feel free to use any translation service to get some sense out of it. :-)

Vollbild-Programme für die AdobeAir-Runtime leiden – unter Mac OS X > 10.6 ausgeführt – an einer seltenen Krankheit: Morbus fenestra.

Das führt nach dem Start zu einem inhaltsleeren Fenster, das die eigene Vollbildanwendung partiell verdeckt und Input-Fokus hat; für den mauslosen Kiosk-Modus ein echtes K.O.-Kriterium.
Der Bug existiert auch in der aktuellen Version von Mac OS X (10.8.1) und hat sich auch in die letzte Version der Air-Runtime (3.4) herübergerettet und nervt offensichtlich nicht nur uns:

https://bugbase.adobe.com/index.cfm?event=bug&id=3166056

Die Krankheit selbst ist (momentan) unheilbar, ihre Symptome können gelindert werden, so daß dem Patienten ein würdevolles Leben ohne Schmerzen möglich ist.

Therapie 1: Wir simulieren eine Maus, fahren sie (nach dem Start des Programms) über einen sichtbaren Teil des teilweise verdeckten Fesnsters und „klicken“, um dem Fenster Fokus zu geben. Das geht einfach mit den „Quartz Event Services“:


#include "ApplicationServices/ApplicationServices.h"
#include "unistd.h"

int main() {
CGEventRef moveToUpperLeftCorner = CGEventCreateMouseEvent(
NULL, kCGEventMouseMoved,
CGPointMake(50, 50),
kCGMouseButtonLeft
);
CGEventRef mouseDown = CGEventCreateMouseEvent(
NULL, kCGEventLeftMouseDown,
CGPointMake(50, 50),
kCGMouseButtonLeft
);
CGEventRef mouseUp = CGEventCreateMouseEvent(
NULL, kCGEventLeftMouseUp,
CGPointMake(50, 50),
kCGMouseButtonLeft
);
CGEventPost(kCGHIDEventTap, moveToUpperLeftCorner);
CGEventPost(kCGHIDEventTap, mouseDown);
CGEventPost(kCGHIDEventTap, mouseUp);
return 0;
}

Jetzt muss man sich nur noch ein Environment bauen, das nach dem Start der Air-Applikation, die künstliche Maus startet. Hier sind von ‚launchd‘ bis ‚cron‘ oder Aufruf von Systemprozessen aus der Air-Anwendung alle Schweinereien erlaubt.

Therapie 2: Wir starten das Programm nicht aus dem Finder (Doppelklick oder Autostart) sondern „schießen von hinten durch die Brust ins Auge“. Dazu navigieren wir zum ‚executable‘ des Air-Programms, das – wie jedes Programm auf dem Mac – nur ein Verzeichnis (aka Bundle) ist und rufen das Programm via Terminal (Shell) auf:


cd /Applications/Foo.app/Contents/MacOS/
./Foo

Diese Form des Starts führt zu augenblicklichem Verschwinden aller Symptome, muss aber für die Benutzung per Autostart noch ansprechend verpackt werden.
Wie? Automator ist Dein Freund! :-)

Kommentare

  • Lars Krueger 5.9.2012, 22:29

    von hinten quer durchs Auge, Adobe Flash am Mac – eine alte Liebe…

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.