natives/osx/desktop_launcher/AppDelegate.mm in instiki-0.10.0 vs natives/osx/desktop_launcher/AppDelegate.mm in instiki-0.10.1

- old
+ new

@@ -1,109 +1,109 @@ -#include <unistd.h> -#include <sys/wait.h> -#import "AppDelegate.h" - -int launch_ruby (char const* cmd) -{ - int pId, parentID = getpid(); - if((pId = fork()) == 0) // child - { - NSLog(@"set child (%d) to pgrp %d", getpid(), parentID); - setpgrp(0, parentID); - system(cmd); - return 0; - } - else // parent - { - NSLog(@"started child process: %d", pId); - return pId; - } -} - -@implementation AppDelegate - -- (NSString*)storageDirectory -{ - NSString* dir = [NSHomeDirectory() stringByAppendingPathComponent:@"Library/Application Support/Instiki"]; - [[NSFileManager defaultManager] createDirectoryAtPath:dir attributes:nil]; - return dir; -} - -- (void)awakeFromNib -{ - setpgrp(0, getpid()); - - if([[[[NSBundle mainBundle] infoDictionary] objectForKey:@"LSUIElement"] isEqualToString:@"1"]) - { - NSStatusBar* bar = [NSStatusBar systemStatusBar]; - NSStatusItem* item = [[bar statusItemWithLength:NSVariableStatusItemLength] retain]; - [item setTitle:@"Wiki"]; - [item setHighlightMode:YES]; - [item setMenu:statusMenu]; - } - - NSBundle* bundle = [NSBundle bundleForClass:[self class]]; - NSString* ruby = [bundle pathForResource:@"ruby" ofType:nil]; - NSString* script = [[bundle resourcePath] stringByAppendingPathComponent:@"rb_src/instiki.rb"]; - if(ruby && script) - { - NSString* cmd = [NSString stringWithFormat: - @"%@ -I '%@' -I '%@' '%@' -s --storage='%@'", - ruby, - [[bundle resourcePath] stringByAppendingPathComponent:@"lib/ruby/1.8"], - [[bundle resourcePath] stringByAppendingPathComponent:@"lib/ruby/1.8/powerpc-darwin"], - script, - [self storageDirectory] - ]; - NSLog(@"starting %@", cmd); - processID = launch_ruby([cmd UTF8String]); - } - - /* public the service using rendezvous */ - service = [[NSNetService alloc] - initWithDomain:@"" // default domain - type:@"_http._tcp." - name:[NSString stringWithFormat:@"%@'s Instiki", NSFullUserName()] - port:2500]; - [service publish]; -} - -- (void)applicationWillTerminate:(NSNotification*)aNotification -{ - [service stop]; - [service release]; - - kill(0, SIGTERM); -} - -- (IBAction)about:(id)sender -{ - [NSApp activateIgnoringOtherApps:YES]; - [NSApp orderFrontStandardAboutPanel:self]; -} - -- (IBAction)goToHomepage:(id)sender -{ - [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"http://localhost:2500/"]]; -} - -- (IBAction)goToInstikiOrg:(id)sender -{ - [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"http://www.instiki.org/"]]; -} - -- (BOOL)applicationShouldOpenUntitledFile:(NSApplication*)sender -{ - return shouldOpenUntitled ?: (shouldOpenUntitled = YES, NO); -} - -- (BOOL)applicationOpenUntitledFile:(NSApplication*)theApplication -{ - return [self goToHomepage:self], YES; -} - -- (IBAction)quit:(id)sender -{ - [NSApp terminate:self]; -} - -@end +#include <unistd.h> +#include <sys/wait.h> +#import "AppDelegate.h" + +int launch_ruby (char const* cmd) +{ + int pId, parentID = getpid(); + if((pId = fork()) == 0) // child + { + NSLog(@"set child (%d) to pgrp %d", getpid(), parentID); + setpgrp(0, parentID); + system(cmd); + return 0; + } + else // parent + { + NSLog(@"started child process: %d", pId); + return pId; + } +} + +@implementation AppDelegate + +- (NSString*)storageDirectory +{ + NSString* dir = [NSHomeDirectory() stringByAppendingPathComponent:@"Library/Application Support/Instiki"]; + [[NSFileManager defaultManager] createDirectoryAtPath:dir attributes:nil]; + return dir; +} + +- (void)awakeFromNib +{ + setpgrp(0, getpid()); + + if([[[[NSBundle mainBundle] infoDictionary] objectForKey:@"LSUIElement"] isEqualToString:@"1"]) + { + NSStatusBar* bar = [NSStatusBar systemStatusBar]; + NSStatusItem* item = [[bar statusItemWithLength:NSVariableStatusItemLength] retain]; + [item setTitle:@"Wiki"]; + [item setHighlightMode:YES]; + [item setMenu:statusMenu]; + } + + NSBundle* bundle = [NSBundle bundleForClass:[self class]]; + NSString* ruby = [bundle pathForResource:@"ruby" ofType:nil]; + NSString* script = [[bundle resourcePath] stringByAppendingPathComponent:@"rb_src/instiki.rb"]; + if(ruby && script) + { + NSString* cmd = [NSString stringWithFormat: + @"%@ -I '%@' -I '%@' '%@' -s --storage='%@'", + ruby, + [[bundle resourcePath] stringByAppendingPathComponent:@"lib/ruby/1.8"], + [[bundle resourcePath] stringByAppendingPathComponent:@"lib/ruby/1.8/powerpc-darwin"], + script, + [self storageDirectory] + ]; + NSLog(@"starting %@", cmd); + processID = launch_ruby([cmd UTF8String]); + } + + /* public the service using rendezvous */ + service = [[NSNetService alloc] + initWithDomain:@"" // default domain + type:@"_http._tcp." + name:[NSString stringWithFormat:@"%@'s Instiki", NSFullUserName()] + port:2500]; + [service publish]; +} + +- (void)applicationWillTerminate:(NSNotification*)aNotification +{ + [service stop]; + [service release]; + + kill(0, SIGTERM); +} + +- (IBAction)about:(id)sender +{ + [NSApp activateIgnoringOtherApps:YES]; + [NSApp orderFrontStandardAboutPanel:self]; +} + +- (IBAction)goToHomepage:(id)sender +{ + [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"http://localhost:2500/"]]; +} + +- (IBAction)goToInstikiOrg:(id)sender +{ + [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"http://www.instiki.org/"]]; +} + +- (BOOL)applicationShouldOpenUntitledFile:(NSApplication*)sender +{ + return shouldOpenUntitled ?: (shouldOpenUntitled = YES, NO); +} + +- (BOOL)applicationOpenUntitledFile:(NSApplication*)theApplication +{ + return [self goToHomepage:self], YES; +} + +- (IBAction)quit:(id)sender +{ + [NSApp terminate:self]; +} + +@end