in renderer/src/main/java/org/netbeans/html/presenters/render/Cocoa.java [84:131]
public void show(URI page) {
this.page = page.toASCIIString();
ensureHttpAccess(page);
Native.loadLibrary("WebKit", WebKit.class);
appDidStart = new AppDidStart();
contextCreated = new ContextCreated();
ready = new Ready();
ui = new UIDelegate();
dialogs = new DialogHandler[3];
dialogs[0] = new DialogHandler(0);
dialogs[1] = new DialogHandler(1);
dialogs[2] = new DialogHandler(2);
if (appDelPtr == null) {
ObjC objC = ObjC.INSTANCE;
Pointer appDelClass = objC.objc_allocateClassPair(objC.objc_getClass("NSObject"), "AppDelegate", 0);
objC.class_addMethod(appDelClass, objC.sel_getUid("applicationDidFinishLaunching:"), appDidStart, "i@:@");
doMainSelector = objC.sel_getUid("doMain");
Native.setCallbackThreadInitializer(this, new CallbackThreadInitializer(false, false, "Cocoa Dispatch Thread"));
objC.class_addMethod(appDelClass, doMainSelector, this, "i@");
objC.class_addMethod(appDelClass, objC.sel_getUid("webView:didCreateJavaScriptContext:forFrame:"), contextCreated, "v@:@:@");
objC.class_addMethod(appDelClass, objC.sel_getUid("webView:didFinishLoadForFrame:"), ready, "v@:@");
objC.class_addMethod(appDelClass, objC.sel_getUid("webView:createWebViewWithRequest:"), ui, "v@:@");
objC.class_addMethod(appDelClass, objC.sel_getUid("webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:"), dialogs[0], "v@:@:@");
objC.class_addMethod(appDelClass, objC.sel_getUid("webView:runJavaScriptConfirmPanelWithMessage:initiatedByFrame:"), dialogs[1], "v@:@:@");
objC.class_addMethod(appDelClass, objC.sel_getUid("webView:runJavaScriptTextInputPanelWithPrompt:defaultText:initiatedByFrame:"), dialogs[2], "v@:@:@");
objC.objc_registerClassPair(appDelClass);
long appDelObj = send(objC.objc_getClass("AppDelegate"), "alloc");
appDelPtr = new Pointer(appDelObj);
send(appDelPtr, "init");
send(appDelPtr,
"performSelectorOnMainThread:withObject:waitUntilDone:",
doMainSelector, null, 1
);
} else {
execute(new Runnable() {
@Override
public void run() {
appDidStart.callback(appDelPtr);
}
});
}
}