/* * Copyright 2011 Sven Weidauer * * This file is part of NetSurf, http://www.netsurf-browser.org/ * * NetSurf is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * NetSurf is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #import "utils/nsoption.h" #import "utils/messages.h" #import "utils/utils.h" #import "utils/nsurl.h" #import "netsurf/browser_window.h" #import "cocoa/gui.h" #import "cocoa/NetSurfAppDelegate.h" #import "cocoa/SearchWindowController.h" #import "cocoa/PreferencesWindowController.h" #import "cocoa/HistoryWindowController.h" @interface NetSurfAppDelegate () - (void)handleGetURLEvent:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent; @end @implementation NetSurfAppDelegate - (void)newDocument:(id)sender { nsurl *url; nserror error; if (nsoption_charp(homepage_url) != NULL) { error = nsurl_create(nsoption_charp(homepage_url), &url); } else { error = nsurl_create(NETSURF_HOMEPAGE, &url); } if (error == NSERROR_OK) { error = browser_window_create(BW_CREATE_HISTORY, url, NULL, NULL, NULL); nsurl_unref(url); } if (error != NSERROR_OK) { cocoa_warning(messages_get_errorcode(error), 0); } } - (void)openDocument:(id)sender { nsurl *u; nserror error; NSOpenPanel *openPanel = [NSOpenPanel openPanel]; [openPanel setAllowsMultipleSelection:YES]; if ([openPanel runModalForTypes:nil] == NSModalResponseOK) { for (NSURL *url in [openPanel URLs]) { error = nsurl_create([[url absoluteString] UTF8String], &u); if (error == NSERROR_OK) { error = browser_window_create(BW_CREATE_HISTORY, u, NULL, NULL, NULL); nsurl_unref(u); } if (error != NSERROR_OK) { cocoa_warning(messages_get_errorcode(error), 0); } } } } - (void)handleGetURLEvent:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent { nsurl *url; nserror error; NSString *urlAsString = [[event paramDescriptorForKeyword:keyDirectObject] stringValue]; error = nsurl_create([urlAsString UTF8String], &url); if (error == NSERROR_OK) { error = browser_window_create(BW_CREATE_HISTORY, url, NULL, NULL, NULL); nsurl_unref(url); } if (error != NSERROR_OK) { cocoa_warning(messages_get_errorcode(error), 0); } } - (IBAction)showSearchWindow:(id)sender { if (self.search == nil) { self.search = [[SearchWindowController alloc] init]; } [self.search.window makeKeyAndOrderFront:self]; } - (IBAction)searchForward:(id)sender { [self.search search:SearchForward]; } - (IBAction)searchBackward:(id)sender { [self.search search:SearchBackward]; } - (BOOL)validateMenuItem:(id)item { SEL action = [item action]; if (action == @selector(searchForward:)) { return [self.search canGoForward]; } else if (action == @selector(searchBackward:)) { return [self.search canGoBack]; } return YES; } - (IBAction)showPreferences:(id)sender { if (self.preferences == nil) { self.preferences = [[PreferencesWindowController alloc] init]; } [self.preferences showWindow:sender]; } - (IBAction)showGlobalHistory:(id)sender { if (self.history == nil) { self.history = [[HistoryWindowController alloc] init]; } [self.history showWindow:sender]; } // Application delegate methods - (BOOL)applicationOpenUntitledFile:(NSApplication *)sender { [self newDocument:self]; return YES; } - (void)applicationWillFinishLaunching:(NSNotification *)aNotification { NSAppleEventManager *appleEventManager = [NSAppleEventManager sharedAppleEventManager]; [appleEventManager setEventHandler:self andSelector:@selector(handleGetURLEvent:withReplyEvent:) forEventClass:kInternetEventClass andEventID:kAEGetURL]; } - (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename { nsurl *url; nserror error; NSURL *urltxt = [NSURL fileURLWithPath:filename]; error = nsurl_create([[urltxt absoluteString] UTF8String], &url); if (error == NSERROR_OK) { error = browser_window_create(BW_CREATE_HISTORY, url, NULL, NULL, NULL); nsurl_unref(url); } if (error != NSERROR_OK) { cocoa_warning(messages_get_errorcode(error), 0); } return YES; } @end