ui/cocoa/toolkit.m

changeset 29
c96169444d88
parent 26
a137277f9173
child 31
34df61c6ec3c
--- a/ui/cocoa/toolkit.m	Sun Apr 06 13:21:37 2014 +0200
+++ b/ui/cocoa/toolkit.m	Thu Apr 10 11:37:41 2014 +0200
@@ -45,14 +45,20 @@
 
 static char *application_name;
 
-static ui_callback appclose_fnc;
-static void *appclose_udata;
+static ui_callback   appclose_fnc;
+static void          *appclose_udata;
+
+static ui_callback   openfile_fnc;
+static void          *openfile_udata;
 
 void ui_init(char *appname, int argc, char **argv) {
     pool = [[NSAutoreleasePool alloc] init];
     [NSApplication sharedApplication];
     [NSBundle loadNibNamed:@"MainMenu" owner:NSApp];
     
+    UiApplicationDelegate *delegate = [[UiApplicationDelegate alloc]init];
+    [NSApp setDelegate: delegate];
+    
     
     uic_docmgr_init();
     ui_menu_init();
@@ -66,6 +72,16 @@
     return application_name;
 }
 
+void ui_exitfunc(ui_callback f, void *userdata) {
+    appclose_fnc = f;
+    appclose_udata = userdata;
+}
+
+void ui_openfilefunc(ui_callback f, void *userdata) {
+    openfile_fnc = f;
+    openfile_udata = userdata;
+}
+
 void ui_show(UiObject *obj) {
     uic_check_group_widgets(obj->ctx);
     if([obj->widget class] == [UiCocoaWindow class]) {
@@ -115,6 +131,37 @@
     }
 }
 
+
+@implementation UiApplicationDelegate
+
+- (void)applicationWillTerminate:(NSNotification*)notification {
+    printf("terminate\n");
+}
+
+- (BOOL)applicationShouldHandleReopen:(NSApplication *)app hasVisibleWindows:(BOOL)visible; {
+    if(!visible) {
+        printf("reopen\n");
+    }
+    return NO;
+}
+
+- (BOOL)application:(NSApplication*)application openFile:(NSString*)filename {
+    if(openfile_fnc) {
+        UiEvent event;
+        event.obj = NULL;
+        event.document = NULL;
+        event.window = NULL;
+        event.eventdata = (void*)[filename UTF8String];
+        event.intval = 0;
+        openfile_fnc(&event, openfile_udata);
+    }
+    
+    return NO;
+}
+
+@end
+
+
 @implementation EventWrapper
 
 - (EventWrapper*) initWithData: (void*)d callback:(ui_callback) f {

mercurial