summaryrefslogtreecommitdiff
path: root/cocoa
diff options
context:
space:
mode:
Diffstat (limited to 'cocoa')
-rw-r--r--cocoa/BrowserView.h47
-rw-r--r--cocoa/BrowserView.m289
-rw-r--r--cocoa/BrowserWindow.h39
-rw-r--r--cocoa/BrowserWindow.m53
-rw-r--r--cocoa/NetSurf.xcodeproj/project.pbxproj1011
-rw-r--r--cocoa/NetsurfApp.h26
-rw-r--r--cocoa/NetsurfApp.m59
-rw-r--r--cocoa/bitmap.h24
-rw-r--r--cocoa/bitmap.m223
-rw-r--r--cocoa/fetch.m57
-rw-r--r--cocoa/font.h24
-rw-r--r--cocoa/font.m177
-rw-r--r--cocoa/gui.m391
-rw-r--r--cocoa/history.m37
-rw-r--r--cocoa/plotter.h24
-rw-r--r--cocoa/plotter.m223
-rw-r--r--cocoa/res/Browser.xib989
-rw-r--r--cocoa/res/MainMenu.xib1578
-rw-r--r--cocoa/res/NetSurf-Info.plist32
l---------cocoa/res/adblock.css1
l---------cocoa/res/de.lproj/Messages1
l---------cocoa/res/default.css1
l---------cocoa/res/en.lproj/Messages1
l---------cocoa/res/fr.lproj/Messages1
l---------cocoa/res/it.lproj/Messages1
l---------cocoa/res/nl.lproj/Messages1
l---------cocoa/res/quirks.css1
-rw-r--r--cocoa/save.m37
-rw-r--r--cocoa/schedule.m91
-rw-r--r--cocoa/thumbnail.m61
-rw-r--r--cocoa/url.m37
-rw-r--r--cocoa/utf8.m36
-rw-r--r--cocoa/utils.m67
33 files changed, 5640 insertions, 0 deletions
diff --git a/cocoa/BrowserView.h b/cocoa/BrowserView.h
new file mode 100644
index 000000000..9598936c1
--- /dev/null
+++ b/cocoa/BrowserView.h
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+#import <Cocoa/Cocoa.h>
+
+
+@interface BrowserView : NSView {
+ struct browser_window *browser;
+ BOOL spinning;
+ NSString *status;
+
+ NSPoint caretPoint;
+ CGFloat caretHeight;
+ BOOL caretVisible;
+ BOOL hasCaret;
+ NSTimer *caretTimer;
+}
+
+@property (readwrite, assign, nonatomic) struct browser_window *browser;
+@property (readwrite, assign, nonatomic) BOOL spinning;
+@property (readwrite, copy, nonatomic) NSString *status;
+@property (readwrite, retain, nonatomic) NSTimer *caretTimer;
+
+- (void) removeCaret;
+- (void) addCaretAt: (NSPoint) point height: (CGFloat) height;
+
+- (IBAction) goBack: (id) sender;
+- (IBAction) goForward: (id) sender;
+- (IBAction) showHistory: (id) sender;
+- (IBAction) reloadPage: (id) sender;
+
+@end
diff --git a/cocoa/BrowserView.m b/cocoa/BrowserView.m
new file mode 100644
index 000000000..96f12699a
--- /dev/null
+++ b/cocoa/BrowserView.m
@@ -0,0 +1,289 @@
+/*
+ * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+#import "BrowserView.h"
+
+#import "desktop/browser.h"
+#import "desktop/history_core.h"
+#import "desktop/plotters.h"
+#import "desktop/textinput.h"
+
+@implementation BrowserView
+
+@synthesize browser;
+@synthesize spinning;
+@synthesize status;
+@synthesize caretTimer;
+
+static const CGFloat CaretWidth = 1.0;
+static const NSTimeInterval CaretBlinkTime = 0.8;
+
+static inline NSRect cocoa_get_caret_rect( BrowserView *view )
+{
+ NSRect caretRect = {
+ .origin = view->caretPoint,
+ .size = NSMakeSize( CaretWidth, view->caretHeight )
+ };
+
+ return caretRect;
+}
+
+- (void) removeCaret;
+{
+ hasCaret = NO;
+ [self setNeedsDisplayInRect: cocoa_get_caret_rect( self )];
+
+ [caretTimer invalidate];
+ [self setCaretTimer: nil];
+}
+
+- (void) addCaretAt: (NSPoint) point height: (CGFloat) height;
+{
+ if (hasCaret) {
+ [self setNeedsDisplayInRect: cocoa_get_caret_rect( self )];
+ }
+
+ caretPoint = point;
+ caretHeight = height;
+ hasCaret = YES;
+ caretVisible = YES;
+
+ if (nil == caretTimer) {
+ [self setCaretTimer: [NSTimer scheduledTimerWithTimeInterval: CaretBlinkTime target: self selector: @selector(caretBlink:) userInfo: nil repeats: YES]];
+ } else {
+ [caretTimer setFireDate: [NSDate dateWithTimeIntervalSinceNow: CaretBlinkTime]];
+ }
+
+ [self setNeedsDisplayInRect: cocoa_get_caret_rect( self )];
+}
+
+
+- (void) caretBlink: (NSTimer *)timer;
+{
+ if (hasCaret) {
+ caretVisible = !caretVisible;
+ [self setNeedsDisplayInRect: cocoa_get_caret_rect( self )];
+ }
+}
+
+- (void)drawRect:(NSRect)dirtyRect;
+{
+
+ if (NULL == browser->current_content) return;
+
+ NSRect frame = [self bounds];
+
+ plot.clip(0, 0, frame.size.width, frame.size.height);
+
+ content_redraw(browser->current_content,
+ 0,
+ 0,
+ NSWidth( frame ),
+ NSHeight( frame ),
+ NSMinX( dirtyRect ),
+ NSMinY( dirtyRect ),
+ NSMaxX( dirtyRect ),
+ NSMaxY( dirtyRect ),
+ browser->scale,
+ 0xFFFFFF);
+
+
+ NSRect caretRect = cocoa_get_caret_rect( self );
+ if (hasCaret && caretVisible && [self needsToDrawRect: caretRect]) {
+ [[NSColor blackColor] set];
+ [NSBezierPath fillRect: caretRect];
+ }
+
+}
+
+- (BOOL) isFlipped;
+{
+ return YES;
+}
+
+- (void) mouseDown: (NSEvent *)theEvent;
+{
+ NSPoint location = [self convertPoint: [theEvent locationInWindow] fromView: nil];
+
+ browser_window_mouse_click( browser, BROWSER_MOUSE_PRESS_1, location.x, location.y );
+}
+
+- (void) mouseUp: (NSEvent *)theEvent;
+{
+ NSPoint location = [self convertPoint: [theEvent locationInWindow] fromView: nil];
+
+ browser_window_mouse_click( browser, BROWSER_MOUSE_CLICK_1, location.x, location.y );
+}
+
+- (void) mouseDragged: (NSEvent *)theEvent;
+{
+}
+
+- (void) mouseMoved: (NSEvent *)theEvent;
+{
+ NSPoint location = [self convertPoint: [theEvent locationInWindow] fromView: nil];
+ browser_window_mouse_click( browser, 0, location.x, location.y );
+}
+
+- (void) keyDown: (NSEvent *)theEvent;
+{
+ [self interpretKeyEvents: [NSArray arrayWithObject: theEvent]];
+}
+
+- (void) insertText: (id)string;
+{
+ for (NSUInteger i = 0, length = [string length]; i < length; i++) {
+ unichar ch = [string characterAtIndex: i];
+ browser_window_key_press( browser, ch );
+ }
+}
+
+- (void) moveLeft: (id)sender;
+{
+ browser_window_key_press( browser, KEY_LEFT );
+}
+
+- (void) moveRight: (id)sender;
+{
+ browser_window_key_press( browser, KEY_RIGHT );
+}
+
+- (void) moveUp: (id)sender;
+{
+ browser_window_key_press( browser, KEY_UP );
+}
+
+- (void) moveDown: (id)sender;
+{
+ browser_window_key_press( browser, KEY_DOWN );
+}
+
+- (void) deleteBackward: (id)sender;
+{
+ browser_window_key_press( browser, KEY_DELETE_LEFT );
+}
+
+- (void) deleteForward: (id)sender;
+{
+ browser_window_key_press( browser, KEY_DELETE_RIGHT );
+}
+
+- (void) cancelOperation: (id)sender;
+{
+ browser_window_key_press( browser, KEY_ESCAPE );
+}
+
+- (void) scrollPageUp: (id)sender;
+{
+ browser_window_key_press( browser, KEY_PAGE_UP );
+}
+
+- (void) scrollPageDown: (id)sender;
+{
+ browser_window_key_press( browser, KEY_PAGE_DOWN );
+}
+
+- (void) insertTab: (id)sender;
+{
+ browser_window_key_press( browser, KEY_TAB );
+}
+
+- (void) insertBacktab: (id)sender;
+{
+ browser_window_key_press( browser, KEY_SHIFT_TAB );
+}
+
+- (void) moveToBeginningOfLine: (id)sender;
+{
+ browser_window_key_press( browser, KEY_LINE_START );
+}
+
+- (void) moveToEndOfLine: (id)sender;
+{
+ browser_window_key_press( browser, KEY_LINE_END );
+}
+
+- (void) moveToBeginningOfDocument: (id)sender;
+{
+ browser_window_key_press( browser, KEY_TEXT_START );
+}
+
+- (void) moveToEndOfDocument: (id)sender;
+{
+ browser_window_key_press( browser, KEY_TEXT_END );
+}
+
+- (void) insertNewline: (id)sender;
+{
+ browser_window_key_press( browser, KEY_NL );
+}
+
+- (void) setFrame: (NSRect)frameRect;
+{
+ [super setFrame: frameRect];
+ browser_window_reformat( browser, [self bounds].size.width, [self bounds].size.height );
+}
+
+
+- (IBAction) goBack: (id) sender;
+{
+ if (browser && history_back_available( browser->history )) {
+ history_back(browser, browser->history);
+ }
+}
+
+- (IBAction) goForward: (id) sender;
+{
+ if (browser && history_forward_available( browser->history )) {
+ history_forward(browser, browser->history);
+ }
+}
+
+- (IBAction) showHistory: (id) sender;
+{
+}
+
+- (IBAction) reloadPage: (id) sender;
+{
+ browser_window_reload( browser, true );
+}
+
+- (BOOL) validateToolbarItem: (NSToolbarItem *)theItem;
+{
+ SEL action = [theItem action];
+
+ if (action == @selector( goBack: )) {
+ return browser != NULL && history_back_available( browser->history );
+ }
+
+ if (action == @selector( goForward: )) {
+ return browser != NULL && history_forward_available( browser->history );
+ }
+
+ if (action == @selector( reloadPage: )) {
+ return browser_window_reload_available( browser );
+ }
+
+ return YES;
+}
+- (BOOL) acceptsFirstResponder;
+{
+ return YES;
+}
+
+@end
diff --git a/cocoa/BrowserWindow.h b/cocoa/BrowserWindow.h
new file mode 100644
index 000000000..02d6c6ca9
--- /dev/null
+++ b/cocoa/BrowserWindow.h
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+#import <Cocoa/Cocoa.h>
+
+struct browser_window;
+
+@class BrowserView;
+
+@interface BrowserWindow : NSWindowController {
+ struct browser_window *browser;
+ NSString *url;
+ BrowserView *view;
+}
+
+@property (readwrite, assign, nonatomic) struct browser_window *browser;
+@property (readwrite, copy, nonatomic) NSString *url;
+@property (readwrite, retain, nonatomic) IBOutlet BrowserView *view;
+
+- initWithBrowser: (struct browser_window *) bw;
+
+- (IBAction) navigate: (id) sender;
+
+@end
diff --git a/cocoa/BrowserWindow.m b/cocoa/BrowserWindow.m
new file mode 100644
index 000000000..727eba765
--- /dev/null
+++ b/cocoa/BrowserWindow.m
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+#import "BrowserWindow.h"
+#import "BrowserView.h"
+
+#import "desktop/browser.h"
+
+@implementation BrowserWindow
+
+@synthesize browser;
+@synthesize url;
+@synthesize view;
+
+- initWithBrowser: (struct browser_window *) bw;
+{
+ if ((self = [super initWithWindowNibName: @"Browser"]) == nil) return nil;
+
+ browser = bw;
+
+ NSWindow *win = [self window];
+ [win setAcceptsMouseMovedEvents: YES];
+ [win makeKeyAndOrderFront: self];
+
+ return self;
+}
+
+- (IBAction) navigate: (id) sender;
+{
+ browser_window_go( browser, [url UTF8String], NULL, true );
+}
+
+- (void) awakeFromNib;
+{
+ [view setBrowser: browser];
+}
+
+@end
diff --git a/cocoa/NetSurf.xcodeproj/project.pbxproj b/cocoa/NetSurf.xcodeproj/project.pbxproj
new file mode 100644
index 000000000..9e85fa744
--- /dev/null
+++ b/cocoa/NetSurf.xcodeproj/project.pbxproj
@@ -0,0 +1,1011 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 44;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 260F200A12D620E800D9B07F /* content.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F6312D620E800D9B07F /* content.c */; };
+ 260F200B12D620E800D9B07F /* dirlist.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F6712D620E800D9B07F /* dirlist.c */; };
+ 260F200C12D620E800D9B07F /* fetch.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F6912D620E800D9B07F /* fetch.c */; };
+ 260F200D12D620E800D9B07F /* fetch_curl.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F6C12D620E800D9B07F /* fetch_curl.c */; };
+ 260F200E12D620E800D9B07F /* fetch_data.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F6E12D620E800D9B07F /* fetch_data.c */; };
+ 260F200F12D620E800D9B07F /* fetch_file.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F7012D620E800D9B07F /* fetch_file.c */; };
+ 260F201012D620E800D9B07F /* hlcache.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F7212D620E800D9B07F /* hlcache.c */; };
+ 260F201112D620E800D9B07F /* llcache.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F7412D620E800D9B07F /* llcache.c */; };
+ 260F201212D620E800D9B07F /* urldb.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F7612D620E800D9B07F /* urldb.c */; };
+ 260F201312D620E800D9B07F /* css.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F7912D620E800D9B07F /* css.c */; };
+ 260F201412D620E800D9B07F /* dump.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F7B12D620E800D9B07F /* dump.c */; };
+ 260F201512D620E800D9B07F /* internal.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F7D12D620E800D9B07F /* internal.c */; };
+ 260F201612D620E800D9B07F /* select.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F7F12D620E800D9B07F /* select.c */; };
+ 260F201712D620E800D9B07F /* utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F8112D620E800D9B07F /* utils.c */; };
+ 260F201812D620E800D9B07F /* browser.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F8512D620E800D9B07F /* browser.c */; };
+ 260F201912D620E800D9B07F /* cookies.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F8712D620E800D9B07F /* cookies.c */; };
+ 260F201A12D620E800D9B07F /* download.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F8912D620E800D9B07F /* download.c */; };
+ 260F201B12D620E800D9B07F /* frames.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F8B12D620E800D9B07F /* frames.c */; };
+ 260F201C12D620E800D9B07F /* history_core.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F8E12D620E800D9B07F /* history_core.c */; };
+ 260F201D12D620E800D9B07F /* history_global_core.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F9012D620E800D9B07F /* history_global_core.c */; };
+ 260F201E12D620E800D9B07F /* hotlist.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F9212D620E800D9B07F /* hotlist.c */; };
+ 260F201F12D620E800D9B07F /* knockout.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F9412D620E800D9B07F /* knockout.c */; };
+ 260F202012D620E800D9B07F /* mouse.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F9612D620E800D9B07F /* mouse.c */; };
+ 260F202112D620E800D9B07F /* netsurf.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F9812D620E800D9B07F /* netsurf.c */; };
+ 260F202212D620E800D9B07F /* options.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F9A12D620E800D9B07F /* options.c */; };
+ 260F202312D620E800D9B07F /* plot_style.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F9C12D620E800D9B07F /* plot_style.c */; };
+ 260F202412D620E800D9B07F /* print.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F9F12D620E800D9B07F /* print.c */; };
+ 260F202512D620E800D9B07F /* save_complete.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FA212D620E800D9B07F /* save_complete.c */; };
+ 260F202612D620E800D9B07F /* font_haru.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FA512D620E800D9B07F /* font_haru.c */; };
+ 260F202712D620E800D9B07F /* pdf_plotters.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FA712D620E800D9B07F /* pdf_plotters.c */; };
+ 260F202912D620E800D9B07F /* save_text.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FAA12D620E800D9B07F /* save_text.c */; };
+ 260F202A12D620E800D9B07F /* scroll.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FAC12D620E800D9B07F /* scroll.c */; };
+ 260F202B12D620E800D9B07F /* search.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FAE12D620E800D9B07F /* search.c */; };
+ 260F202C12D620E800D9B07F /* searchweb.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FB012D620E800D9B07F /* searchweb.c */; };
+ 260F202D12D620E800D9B07F /* selection.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FB212D620E800D9B07F /* selection.c */; };
+ 260F202E12D620E800D9B07F /* sslcert.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FB412D620E800D9B07F /* sslcert.c */; };
+ 260F202F12D620E800D9B07F /* textarea.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FB612D620E800D9B07F /* textarea.c */; };
+ 260F203012D620E800D9B07F /* textinput.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FB812D620E800D9B07F /* textinput.c */; };
+ 260F203112D620E800D9B07F /* tree.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FBA12D620E800D9B07F /* tree.c */; };
+ 260F203212D620E800D9B07F /* tree_url_node.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FBC12D620E800D9B07F /* tree_url_node.c */; };
+ 260F203312D620E800D9B07F /* version.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FBE12D620E800D9B07F /* version.c */; };
+ 260F203A12D620E800D9B07F /* box.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FC712D620E800D9B07F /* box.c */; };
+ 260F203B12D620E800D9B07F /* box_construct.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FC912D620E800D9B07F /* box_construct.c */; };
+ 260F203C12D620E800D9B07F /* box_normalise.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FCA12D620E800D9B07F /* box_normalise.c */; };
+ 260F203D12D620E800D9B07F /* favicon.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FCB12D620E800D9B07F /* favicon.c */; };
+ 260F203E12D620E800D9B07F /* font.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FCD12D620E800D9B07F /* font.c */; };
+ 260F203F12D620E800D9B07F /* form.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FCF12D620E800D9B07F /* form.c */; };
+ 260F204012D620E800D9B07F /* html.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FD112D620E800D9B07F /* html.c */; };
+ 260F204112D620E800D9B07F /* html_interaction.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FD312D620E800D9B07F /* html_interaction.c */; };
+ 260F204212D620E800D9B07F /* html_redraw.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FD412D620E800D9B07F /* html_redraw.c */; };
+ 260F204312D620E800D9B07F /* hubbub_binding.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FD512D620E800D9B07F /* hubbub_binding.c */; };
+ 260F204412D620E800D9B07F /* imagemap.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FD612D620E800D9B07F /* imagemap.c */; };
+ 260F204512D620E800D9B07F /* layout.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FD812D620E800D9B07F /* layout.c */; };
+ 260F204612D620E800D9B07F /* list.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FDA12D620E800D9B07F /* list.c */; };
+ 260F204712D620E800D9B07F /* table.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FDD12D620E800D9B07F /* table.c */; };
+ 260F204812D620E800D9B07F /* textplain.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FE012D620E800D9B07F /* textplain.c */; };
+ 260F204912D620E800D9B07F /* base64.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FE312D620E800D9B07F /* base64.c */; };
+ 260F204A12D620E800D9B07F /* container.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FE612D620E800D9B07F /* container.c */; };
+ 260F204B12D620E800D9B07F /* filename.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FE912D620E800D9B07F /* filename.c */; };
+ 260F204C12D620E800D9B07F /* findresource.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FEB12D620E800D9B07F /* findresource.c */; };
+ 260F204D12D620E800D9B07F /* hashtable.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FED12D620E800D9B07F /* hashtable.c */; };
+ 260F204E12D620E800D9B07F /* http.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FEF12D620E800D9B07F /* http.c */; };
+ 260F204F12D620E800D9B07F /* locale.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FF112D620E800D9B07F /* locale.c */; };
+ 260F205012D620E800D9B07F /* log.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FF312D620E800D9B07F /* log.c */; };
+ 260F205212D620E800D9B07F /* memdebug.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FF612D620E800D9B07F /* memdebug.c */; };
+ 260F205312D620E800D9B07F /* messages.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FF812D620E800D9B07F /* messages.c */; };
+ 260F205412D620E800D9B07F /* talloc.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FFB12D620E800D9B07F /* talloc.c */; };
+ 260F205712D620E800D9B07F /* url.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FFF12D620E800D9B07F /* url.c */; };
+ 260F205812D620E800D9B07F /* useragent.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F200112D620E800D9B07F /* useragent.c */; };
+ 260F205912D620E800D9B07F /* utf8.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F200312D620E800D9B07F /* utf8.c */; };
+ 260F205A12D620E800D9B07F /* utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F200512D620E800D9B07F /* utils.c */; };
+ 260F20AF12D6228C00D9B07F /* libssl.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 260F20AE12D6228C00D9B07F /* libssl.dylib */; };
+ 260F20B112D6229900D9B07F /* libxml2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 260F20B012D6229900D9B07F /* libxml2.dylib */; };
+ 260F20B512D622AA00D9B07F /* libcurl.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 260F20B412D622AA00D9B07F /* libcurl.dylib */; };
+ 260F20B912D622C600D9B07F /* libcrypto.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 260F20B812D622C600D9B07F /* libcrypto.dylib */; };
+ 260F20BD12D622F500D9B07F /* libnsbmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 260F20BC12D622F500D9B07F /* libnsbmp.a */; };
+ 260F20BF12D622F500D9B07F /* libnsgif.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 260F20BE12D622F500D9B07F /* libnsgif.a */; };
+ 260F20C612D6230B00D9B07F /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 260F20C512D6230B00D9B07F /* libz.dylib */; };
+ 260F20CB12D6231E00D9B07F /* libhubbub.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 260F20CA12D6231E00D9B07F /* libhubbub.a */; };
+ 260F20CD12D6232D00D9B07F /* libcss.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 260F20CC12D6232D00D9B07F /* libcss.a */; };
+ 260F20D212D6235200D9B07F /* libparserutils.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 260F20D112D6235200D9B07F /* libparserutils.a */; };
+ 260F20D712D6237E00D9B07F /* libwapcaplet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 260F20D612D6237E00D9B07F /* libwapcaplet.a */; };
+ 260F20DB12D623D000D9B07F /* libiconv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 260F20DA12D623D000D9B07F /* libiconv.dylib */; };
+ 26121DA912D700B800E10F91 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 26121DA812D700B800E10F91 /* MainMenu.xib */; };
+ 26121DD912D703F400E10F91 /* NetSurfApp.m in Sources */ = {isa = PBXBuildFile; fileRef = 26121DD812D703F400E10F91 /* NetSurfApp.m */; };
+ 26121E3F12D70A1A00E10F91 /* BrowserWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 26121E3E12D70A1A00E10F91 /* BrowserWindow.m */; };
+ 26121EAC12D70E0A00E10F91 /* Browser.xib in Resources */ = {isa = PBXBuildFile; fileRef = 26121EAB12D70E0A00E10F91 /* Browser.xib */; };
+ 26121EFD12D7132100E10F91 /* BrowserView.m in Sources */ = {isa = PBXBuildFile; fileRef = 26121EFC12D7132100E10F91 /* BrowserView.m */; };
+ 2612205612D7247900E10F91 /* libjpeg.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2612205512D7247900E10F91 /* libjpeg.dylib */; };
+ 2612265A12D7ACB500E10F91 /* default.css in Resources */ = {isa = PBXBuildFile; fileRef = 2612265712D7ACB500E10F91 /* default.css */; };
+ 2612265C12D7ACB500E10F91 /* quirks.css in Resources */ = {isa = PBXBuildFile; fileRef = 2612265912D7ACB500E10F91 /* quirks.css */; };
+ 2612266D12D7AD6800E10F91 /* adblock.css in Resources */ = {isa = PBXBuildFile; fileRef = 2612265D12D7AD6800E10F91 /* adblock.css */; };
+ 2612269112D7AE4100E10F91 /* Messages in Resources */ = {isa = PBXBuildFile; fileRef = 2612268F12D7AE4100E10F91 /* Messages */; };
+ 265F311A12D663F50048B600 /* gui.m in Sources */ = {isa = PBXBuildFile; fileRef = 265F311912D663F50048B600 /* gui.m */; };
+ 265F314812D666660048B600 /* plotter.m in Sources */ = {isa = PBXBuildFile; fileRef = 265F314712D666660048B600 /* plotter.m */; };
+ 265F315212D667060048B600 /* history.m in Sources */ = {isa = PBXBuildFile; fileRef = 265F315112D667060048B600 /* history.m */; };
+ 265F316212D667E10048B600 /* schedule.m in Sources */ = {isa = PBXBuildFile; fileRef = 265F316112D667E10048B600 /* schedule.m */; };
+ 265F316712D668130048B600 /* thumbnail.m in Sources */ = {isa = PBXBuildFile; fileRef = 265F316612D668130048B600 /* thumbnail.m */; };
+ 265F317012D668790048B600 /* fetch.m in Sources */ = {isa = PBXBuildFile; fileRef = 265F316F12D668790048B600 /* fetch.m */; };
+ 265F319112D668DB0048B600 /* url.m in Sources */ = {isa = PBXBuildFile; fileRef = 265F319012D668DB0048B600 /* url.m */; };
+ 265F31C512D66A0D0048B600 /* save.m in Sources */ = {isa = PBXBuildFile; fileRef = 265F31C412D66A0D0048B600 /* save.m */; };
+ 265F31DF12D66A890048B600 /* bmp.c in Sources */ = {isa = PBXBuildFile; fileRef = 265F31CB12D66A890048B600 /* bmp.c */; };
+ 265F31E012D66A890048B600 /* gif.c in Sources */ = {isa = PBXBuildFile; fileRef = 265F31CD12D66A890048B600 /* gif.c */; };
+ 265F31E112D66A890048B600 /* ico.c in Sources */ = {isa = PBXBuildFile; fileRef = 265F31CF12D66A890048B600 /* ico.c */; };
+ 265F31E212D66A890048B600 /* jpeg.c in Sources */ = {isa = PBXBuildFile; fileRef = 265F31D112D66A890048B600 /* jpeg.c */; };
+ 265F31E312D66A890048B600 /* mng.c in Sources */ = {isa = PBXBuildFile; fileRef = 265F31D312D66A890048B600 /* mng.c */; };
+ 265F31E412D66A890048B600 /* nssprite.c in Sources */ = {isa = PBXBuildFile; fileRef = 265F31D512D66A890048B600 /* nssprite.c */; };
+ 265F31E512D66A890048B600 /* png.c in Sources */ = {isa = PBXBuildFile; fileRef = 265F31D712D66A890048B600 /* png.c */; };
+ 265F31E612D66A890048B600 /* rsvg.c in Sources */ = {isa = PBXBuildFile; fileRef = 265F31D912D66A890048B600 /* rsvg.c */; };
+ 265F31E712D66A890048B600 /* svg.c in Sources */ = {isa = PBXBuildFile; fileRef = 265F31DB12D66A890048B600 /* svg.c */; };
+ 265F31E812D66A890048B600 /* webp.c in Sources */ = {isa = PBXBuildFile; fileRef = 265F31DD12D66A890048B600 /* webp.c */; };
+ 265F31EC12D66B190048B600 /* bitmap.m in Sources */ = {isa = PBXBuildFile; fileRef = 265F31EB12D66B190048B600 /* bitmap.m */; };
+ 265F320612D66C200048B600 /* utf8.m in Sources */ = {isa = PBXBuildFile; fileRef = 265F320512D66C200048B600 /* utf8.m */; };
+ 265F321412D66CD90048B600 /* utils.m in Sources */ = {isa = PBXBuildFile; fileRef = 265F321312D66CD90048B600 /* utils.m */; };
+ 265F321F12D66D510048B600 /* font.m in Sources */ = {isa = PBXBuildFile; fileRef = 265F321E12D66D510048B600 /* font.m */; };
+ 2671AA2112D8D32300B8A46A /* libpng.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2671AA2012D8D32300B8A46A /* libpng.dylib */; };
+ 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+ 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
+ 260F1F6312D620E800D9B07F /* content.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = content.c; sourceTree = "<group>"; };
+ 260F1F6412D620E800D9B07F /* content.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = content.h; sourceTree = "<group>"; };
+ 260F1F6512D620E800D9B07F /* content_protected.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = content_protected.h; sourceTree = "<group>"; };
+ 260F1F6612D620E800D9B07F /* content_type.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = content_type.h; sourceTree = "<group>"; };
+ 260F1F6712D620E800D9B07F /* dirlist.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dirlist.c; sourceTree = "<group>"; };
+ 260F1F6812D620E800D9B07F /* dirlist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dirlist.h; sourceTree = "<group>"; };
+ 260F1F6912D620E800D9B07F /* fetch.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = fetch.c; sourceTree = "<group>"; };
+ 260F1F6A12D620E800D9B07F /* fetch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fetch.h; sourceTree = "<group>"; };
+ 260F1F6C12D620E800D9B07F /* fetch_curl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = fetch_curl.c; sourceTree = "<group>"; };
+ 260F1F6D12D620E800D9B07F /* fetch_curl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fetch_curl.h; sourceTree = "<group>"; };
+ 260F1F6E12D620E800D9B07F /* fetch_data.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = fetch_data.c; sourceTree = "<group>"; };
+ 260F1F6F12D620E800D9B07F /* fetch_data.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fetch_data.h; sourceTree = "<group>"; };
+ 260F1F7012D620E800D9B07F /* fetch_file.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = fetch_file.c; sourceTree = "<group>"; };
+ 260F1F7112D620E800D9B07F /* fetch_file.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fetch_file.h; sourceTree = "<group>"; };
+ 260F1F7212D620E800D9B07F /* hlcache.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hlcache.c; sourceTree = "<group>"; };
+ 260F1F7312D620E800D9B07F /* hlcache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hlcache.h; sourceTree = "<group>"; };
+ 260F1F7412D620E800D9B07F /* llcache.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = llcache.c; sourceTree = "<group>"; };
+ 260F1F7512D620E800D9B07F /* llcache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = llcache.h; sourceTree = "<group>"; };
+ 260F1F7612D620E800D9B07F /* urldb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = urldb.c; sourceTree = "<group>"; };
+ 260F1F7712D620E800D9B07F /* urldb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = urldb.h; sourceTree = "<group>"; };
+ 260F1F7912D620E800D9B07F /* css.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = css.c; sourceTree = "<group>"; };
+ 260F1F7A12D620E800D9B07F /* css.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = css.h; sourceTree = "<group>"; };
+ 260F1F7B12D620E800D9B07F /* dump.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dump.c; sourceTree = "<group>"; };
+ 260F1F7C12D620E800D9B07F /* dump.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dump.h; sourceTree = "<group>"; };
+ 260F1F7D12D620E800D9B07F /* internal.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = internal.c; sourceTree = "<group>"; };
+ 260F1F7E12D620E800D9B07F /* internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = internal.h; sourceTree = "<group>"; };
+ 260F1F7F12D620E800D9B07F /* select.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = select.c; sourceTree = "<group>"; };
+ 260F1F8012D620E800D9B07F /* select.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = select.h; sourceTree = "<group>"; };
+ 260F1F8112D620E800D9B07F /* utils.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = utils.c; sourceTree = "<group>"; };
+ 260F1F8212D620E800D9B07F /* utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = utils.h; sourceTree = "<group>"; };
+ 260F1F8412D620E800D9B07F /* 401login.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = 401login.h; sourceTree = "<group>"; };
+ 260F1F8512D620E800D9B07F /* browser.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = browser.c; sourceTree = "<group>"; };
+ 260F1F8612D620E800D9B07F /* browser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = browser.h; sourceTree = "<group>"; };
+ 260F1F8712D620E800D9B07F /* cookies.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cookies.c; sourceTree = "<group>"; };
+ 260F1F8812D620E800D9B07F /* cookies.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cookies.h; sourceTree = "<group>"; };
+ 260F1F8912D620E800D9B07F /* download.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = download.c; sourceTree = "<group>"; };
+ 260F1F8A12D620E800D9B07F /* download.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = download.h; sourceTree = "<group>"; };
+ 260F1F8B12D620E800D9B07F /* frames.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = frames.c; sourceTree = "<group>"; };
+ 260F1F8C12D620E800D9B07F /* frames.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = frames.h; sourceTree = "<group>"; };
+ 260F1F8D12D620E800D9B07F /* gui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gui.h; sourceTree = "<group>"; };
+ 260F1F8E12D620E800D9B07F /* history_core.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = history_core.c; sourceTree = "<group>"; };
+ 260F1F8F12D620E800D9B07F /* history_core.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = history_core.h; sourceTree = "<group>"; };
+ 260F1F9012D620E800D9B07F /* history_global_core.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = history_global_core.c; sourceTree = "<group>"; };
+ 260F1F9112D620E800D9B07F /* history_global_core.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = history_global_core.h; sourceTree = "<group>"; };
+ 260F1F9212D620E800D9B07F /* hotlist.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hotlist.c; sourceTree = "<group>"; };
+ 260F1F9312D620E800D9B07F /* hotlist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hotlist.h; sourceTree = "<group>"; };
+ 260F1F9412D620E800D9B07F /* knockout.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = knockout.c; sourceTree = "<group>"; };
+ 260F1F9512D620E800D9B07F /* knockout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = knockout.h; sourceTree = "<group>"; };
+ 260F1F9612D620E800D9B07F /* mouse.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = mouse.c; sourceTree = "<group>"; };
+ 260F1F9712D620E800D9B07F /* mouse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mouse.h; sourceTree = "<group>"; };
+ 260F1F9812D620E800D9B07F /* netsurf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = netsurf.c; sourceTree = "<group>"; };
+ 260F1F9912D620E800D9B07F /* netsurf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = netsurf.h; sourceTree = "<group>"; };
+ 260F1F9A12D620E800D9B07F /* options.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = options.c; sourceTree = "<group>"; };
+ 260F1F9B12D620E800D9B07F /* options.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = options.h; sourceTree = "<group>"; };
+ 260F1F9C12D620E800D9B07F /* plot_style.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = plot_style.c; sourceTree = "<group>"; };
+ 260F1F9D12D620E800D9B07F /* plot_style.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = plot_style.h; sourceTree = "<group>"; };
+ 260F1F9E12D620E800D9B07F /* plotters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = plotters.h; sourceTree = "<group>"; };
+ 260F1F9F12D620E800D9B07F /* print.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = print.c; sourceTree = "<group>"; };
+ 260F1FA012D620E800D9B07F /* print.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = print.h; sourceTree = "<group>"; };
+ 260F1FA112D620E800D9B07F /* printer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = printer.h; sourceTree = "<group>"; };
+ 260F1FA212D620E800D9B07F /* save_complete.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = save_complete.c; sourceTree = "<group>"; };
+ 260F1FA312D620E800D9B07F /* save_complete.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = save_complete.h; sourceTree = "<group>"; };
+ 260F1FA512D620E800D9B07F /* font_haru.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = font_haru.c; sourceTree = "<group>"; };
+ 260F1FA612D620E800D9B07F /* font_haru.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = font_haru.h; sourceTree = "<group>"; };
+ 260F1FA712D620E800D9B07F /* pdf_plotters.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pdf_plotters.c; sourceTree = "<group>"; };
+ 260F1FA812D620E800D9B07F /* pdf_plotters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pdf_plotters.h; sourceTree = "<group>"; };
+ 260F1FAA12D620E800D9B07F /* save_text.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = save_text.c; sourceTree = "<group>"; };
+ 260F1FAB12D620E800D9B07F /* save_text.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = save_text.h; sourceTree = "<group>"; };
+ 260F1FAC12D620E800D9B07F /* scroll.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = scroll.c; sourceTree = "<group>"; };
+ 260F1FAD12D620E800D9B07F /* scroll.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scroll.h; sourceTree = "<group>"; };
+ 260F1FAE12D620E800D9B07F /* search.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = search.c; sourceTree = "<group>"; };
+ 260F1FAF12D620E800D9B07F /* search.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = search.h; sourceTree = "<group>"; };
+ 260F1FB012D620E800D9B07F /* searchweb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = searchweb.c; sourceTree = "<group>"; };
+ 260F1FB112D620E800D9B07F /* searchweb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = searchweb.h; sourceTree = "<group>"; };
+ 260F1FB212D620E800D9B07F /* selection.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = selection.c; sourceTree = "<group>"; };
+ 260F1FB312D620E800D9B07F /* selection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = selection.h; sourceTree = "<group>"; };
+ 260F1FB412D620E800D9B07F /* sslcert.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sslcert.c; sourceTree = "<group>"; };
+ 260F1FB512D620E800D9B07F /* sslcert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sslcert.h; sourceTree = "<group>"; };
+ 260F1FB612D620E800D9B07F /* textarea.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = textarea.c; sourceTree = "<group>"; };
+ 260F1FB712D620E800D9B07F /* textarea.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = textarea.h; sourceTree = "<group>"; };
+ 260F1FB812D620E800D9B07F /* textinput.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = textinput.c; sourceTree = "<group>"; };
+ 260F1FB912D620E800D9B07F /* textinput.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = textinput.h; sourceTree = "<group>"; };
+ 260F1FBA12D620E800D9B07F /* tree.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tree.c; sourceTree = "<group>"; };
+ 260F1FBB12D620E800D9B07F /* tree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tree.h; sourceTree = "<group>"; };
+ 260F1FBC12D620E800D9B07F /* tree_url_node.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tree_url_node.c; sourceTree = "<group>"; };
+ 260F1FBD12D620E800D9B07F /* tree_url_node.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tree_url_node.h; sourceTree = "<group>"; };
+ 260F1FBE12D620E800D9B07F /* version.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = version.c; sourceTree = "<group>"; };
+ 260F1FC712D620E800D9B07F /* box.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = box.c; sourceTree = "<group>"; };
+ 260F1FC812D620E800D9B07F /* box.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = box.h; sourceTree = "<group>"; };
+ 260F1FC912D620E800D9B07F /* box_construct.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = box_construct.c; sourceTree = "<group>"; };
+ 260F1FCA12D620E800D9B07F /* box_normalise.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = box_normalise.c; sourceTree = "<group>"; };
+ 260F1FCB12D620E800D9B07F /* favicon.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = favicon.c; sourceTree = "<group>"; };
+ 260F1FCC12D620E800D9B07F /* favicon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = favicon.h; sourceTree = "<group>"; };
+ 260F1FCD12D620E800D9B07F /* font.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = font.c; sourceTree = "<group>"; };
+ 260F1FCE12D620E800D9B07F /* font.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = font.h; sourceTree = "<group>"; };
+ 260F1FCF12D620E800D9B07F /* form.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = form.c; sourceTree = "<group>"; };
+ 260F1FD012D620E800D9B07F /* form.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = form.h; sourceTree = "<group>"; };
+ 260F1FD112D620E800D9B07F /* html.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = html.c; sourceTree = "<group>"; };
+ 260F1FD212D620E800D9B07F /* html.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = html.h; sourceTree = "<group>"; };
+ 260F1FD312D620E800D9B07F /* html_interaction.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = html_interaction.c; sourceTree = "<group>"; };
+ 260F1FD412D620E800D9B07F /* html_redraw.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = html_redraw.c; sourceTree = "<group>"; };
+ 260F1FD512D620E800D9B07F /* hubbub_binding.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hubbub_binding.c; sourceTree = "<group>"; };
+ 260F1FD612D620E800D9B07F /* imagemap.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = imagemap.c; sourceTree = "<group>"; };
+ 260F1FD712D620E800D9B07F /* imagemap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = imagemap.h; sourceTree = "<group>"; };
+ 260F1FD812D620E800D9B07F /* layout.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = layout.c; sourceTree = "<group>"; };
+ 260F1FD912D620E800D9B07F /* layout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = layout.h; sourceTree = "<group>"; };
+ 260F1FDA12D620E800D9B07F /* list.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = list.c; sourceTree = "<group>"; };
+ 260F1FDB12D620E800D9B07F /* list.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = list.h; sourceTree = "<group>"; };
+ 260F1FDC12D620E800D9B07F /* parser_binding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = parser_binding.h; sourceTree = "<group>"; };
+ 260F1FDD12D620E800D9B07F /* table.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = table.c; sourceTree = "<group>"; };
+ 260F1FDE12D620E800D9B07F /* table.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = table.h; sourceTree = "<group>"; };
+ 260F1FE012D620E800D9B07F /* textplain.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = textplain.c; sourceTree = "<group>"; };
+ 260F1FE112D620E800D9B07F /* textplain.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = textplain.h; sourceTree = "<group>"; };
+ 260F1FE312D620E800D9B07F /* base64.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = base64.c; sourceTree = "<group>"; };
+ 260F1FE412D620E800D9B07F /* base64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = base64.h; sourceTree = "<group>"; };
+ 260F1FE512D620E800D9B07F /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = "<group>"; };
+ 260F1FE612D620E800D9B07F /* container.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = container.c; sourceTree = "<group>"; };
+ 260F1FE712D620E800D9B07F /* container.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = container.h; sourceTree = "<group>"; };
+ 260F1FE812D620E800D9B07F /* errors.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = errors.h; sourceTree = "<group>"; };
+ 260F1FE912D620E800D9B07F /* filename.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = filename.c; sourceTree = "<group>"; };
+ 260F1FEA12D620E800D9B07F /* filename.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = filename.h; sourceTree = "<group>"; };
+ 260F1FEB12D620E800D9B07F /* findresource.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = findresource.c; sourceTree = "<group>"; };
+ 260F1FEC12D620E800D9B07F /* findresource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = findresource.h; sourceTree = "<group>"; };
+ 260F1FED12D620E800D9B07F /* hashtable.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hashtable.c; sourceTree = "<group>"; };
+ 260F1FEE12D620E800D9B07F /* hashtable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hashtable.h; sourceTree = "<group>"; };
+ 260F1FEF12D620E800D9B07F /* http.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = http.c; sourceTree = "<group>"; };
+ 260F1FF012D620E800D9B07F /* http.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = http.h; sourceTree = "<group>"; };
+ 260F1FF112D620E800D9B07F /* locale.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = locale.c; sourceTree = "<group>"; };
+ 260F1FF212D620E800D9B07F /* locale.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = locale.h; sourceTree = "<group>"; };
+ 260F1FF312D620E800D9B07F /* log.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = log.c; sourceTree = "<group>"; };
+ 260F1FF412D620E800D9B07F /* log.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = log.h; sourceTree = "<group>"; };
+ 260F1FF612D620E800D9B07F /* memdebug.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = memdebug.c; sourceTree = "<group>"; };
+ 260F1FF712D620E800D9B07F /* memdebug.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = memdebug.h; sourceTree = "<group>"; };
+ 260F1FF812D620E800D9B07F /* messages.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = messages.c; sourceTree = "<group>"; };
+ 260F1FF912D620E800D9B07F /* messages.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = messages.h; sourceTree = "<group>"; };
+ 260F1FFA12D620E800D9B07F /* ring.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ring.h; sourceTree = "<group>"; };
+ 260F1FFB12D620E800D9B07F /* talloc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = talloc.c; sourceTree = "<group>"; };
+ 260F1FFC12D620E800D9B07F /* talloc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = talloc.h; sourceTree = "<group>"; };
+ 260F1FFF12D620E800D9B07F /* url.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = url.c; sourceTree = "<group>"; };
+ 260F200012D620E800D9B07F /* url.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = url.h; sourceTree = "<group>"; };
+ 260F200112D620E800D9B07F /* useragent.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = useragent.c; sourceTree = "<group>"; };
+ 260F200212D620E800D9B07F /* useragent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = useragent.h; sourceTree = "<group>"; };
+ 260F200312D620E800D9B07F /* utf8.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = utf8.c; sourceTree = "<group>"; };
+ 260F200412D620E800D9B07F /* utf8.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = utf8.h; sourceTree = "<group>"; };
+ 260F200512D620E800D9B07F /* utils.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = utils.c; sourceTree = "<group>"; };
+ 260F200612D620E800D9B07F /* utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = utils.h; sourceTree = "<group>"; };
+ 260F200712D620E800D9B07F /* utsname.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = utsname.h; sourceTree = "<group>"; };
+ 260F20AE12D6228C00D9B07F /* libssl.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libssl.dylib; path = usr/lib/libssl.dylib; sourceTree = SDKROOT; };
+ 260F20B012D6229900D9B07F /* libxml2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libxml2.dylib; path = usr/lib/libxml2.dylib; sourceTree = SDKROOT; };
+ 260F20B412D622AA00D9B07F /* libcurl.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libcurl.dylib; path = usr/lib/libcurl.dylib; sourceTree = SDKROOT; };
+ 260F20B812D622C600D9B07F /* libcrypto.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libcrypto.dylib; path = usr/lib/libcrypto.dylib; sourceTree = SDKROOT; };
+ 260F20BC12D622F500D9B07F /* libnsbmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libnsbmp.a; path = /usr/local/lib/libnsbmp.a; sourceTree = "<absolute>"; };
+ 260F20BE12D622F500D9B07F /* libnsgif.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libnsgif.a; path = /usr/local/lib/libnsgif.a; sourceTree = "<absolute>"; };
+ 260F20C512D6230B00D9B07F /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; };
+ 260F20CA12D6231E00D9B07F /* libhubbub.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libhubbub.a; path = /usr/local/lib/libhubbub.a; sourceTree = "<absolute>"; };
+ 260F20CC12D6232D00D9B07F /* libcss.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libcss.a; path = /usr/local/lib/libcss.a; sourceTree = "<absolute>"; };
+ 260F20D112D6235200D9B07F /* libparserutils.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libparserutils.a; path = /usr/local/lib/libparserutils.a; sourceTree = "<absolute>"; };
+ 260F20D612D6237E00D9B07F /* libwapcaplet.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libwapcaplet.a; path = /usr/local/lib/libwapcaplet.a; sourceTree = "<absolute>"; };
+ 260F20DA12D623D000D9B07F /* libiconv.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libiconv.dylib; path = usr/lib/libiconv.dylib; sourceTree = SDKROOT; };
+ 260FC03112D85ACE00079C00 /* bitmap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bitmap.h; sourceTree = "<group>"; };
+ 26121DA812D700B800E10F91 /* MainMenu.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MainMenu.xib; sourceTree = "<group>"; };
+ 26121DD712D703F400E10F91 /* NetSurfApp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetSurfApp.h; sourceTree = "<group>"; };
+ 26121DD812D703F400E10F91 /* NetSurfApp.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NetSurfApp.m; sourceTree = "<group>"; };
+ 26121E3D12D70A1A00E10F91 /* BrowserWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BrowserWindow.h; sourceTree = "<group>"; };
+ 26121E3E12D70A1A00E10F91 /* BrowserWindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BrowserWindow.m; sourceTree = "<group>"; };
+ 26121EAB12D70E0A00E10F91 /* Browser.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = Browser.xib; sourceTree = "<group>"; };
+ 26121EFB12D7132100E10F91 /* BrowserView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BrowserView.h; sourceTree = "<group>"; };
+ 26121EFC12D7132100E10F91 /* BrowserView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BrowserView.m; sourceTree = "<group>"; };
+ 2612205512D7247900E10F91 /* libjpeg.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libjpeg.dylib; path = usr/local/lib/libjpeg.dylib; sourceTree = SDKROOT; };
+ 261223B712D77F9C00E10F91 /* font.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = font.h; sourceTree = "<group>"; };
+ 261223CB12D7805300E10F91 /* plotter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = plotter.h; sourceTree = "<group>"; };
+ 2612265712D7ACB500E10F91 /* default.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = default.css; sourceTree = "<group>"; };
+ 2612265912D7ACB500E10F91 /* quirks.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = quirks.css; sourceTree = "<group>"; };
+ 2612265D12D7AD6800E10F91 /* adblock.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = adblock.css; sourceTree = "<group>"; };
+ 2612269012D7AE4100E10F91 /* de */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = de; path = de.lproj/Messages; sourceTree = "<group>"; };
+ 2612269312D7AE9B00E10F91 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text; name = nl; path = nl.lproj/Messages; sourceTree = "<group>"; };
+ 2612269412D7AEA800E10F91 /* en */ = {isa = PBXFileReference; lastKnownFileType = text; name = en; path = en.lproj/Messages; sourceTree = "<group>"; };
+ 2612269512D7AEB500E10F91 /* it */ = {isa = PBXFileReference; lastKnownFileType = text; name = it; path = it.lproj/Messages; sourceTree = "<group>"; };
+ 2612269612D7AEBE00E10F91 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text; name = fr; path = fr.lproj/Messages; sourceTree = "<group>"; };
+ 265F30A712D6637E0048B600 /* NetSurf-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "NetSurf-Info.plist"; sourceTree = "<group>"; };
+ 265F30AB12D6637E0048B600 /* Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Prefix.pch; sourceTree = "<group>"; };
+ 265F311912D663F50048B600 /* gui.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = gui.m; sourceTree = "<group>"; };
+ 265F314712D666660048B600 /* plotter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = plotter.m; sourceTree = "<group>"; };
+ 265F315112D667060048B600 /* history.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = history.m; sourceTree = "<group>"; };
+ 265F316112D667E10048B600 /* schedule.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = schedule.m; sourceTree = "<group>"; };
+ 265F316612D668130048B600 /* thumbnail.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = thumbnail.m; sourceTree = "<group>"; };
+ 265F316F12D668790048B600 /* fetch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = fetch.m; sourceTree = "<group>"; };
+ 265F319012D668DB0048B600 /* url.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = url.m; sourceTree = "<group>"; };
+ 265F31C412D66A0D0048B600 /* save.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = save.m; sourceTree = "<group>"; };
+ 265F31CA12D66A890048B600 /* bitmap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bitmap.h; sourceTree = "<group>"; };
+ 265F31CB12D66A890048B600 /* bmp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bmp.c; sourceTree = "<group>"; };
+ 265F31CC12D66A890048B600 /* bmp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bmp.h; sourceTree = "<group>"; };
+ 265F31CD12D66A890048B600 /* gif.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = gif.c; sourceTree = "<group>"; };
+ 265F31CE12D66A890048B600 /* gif.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gif.h; sourceTree = "<group>"; };
+ 265F31CF12D66A890048B600 /* ico.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ico.c; sourceTree = "<group>"; };
+ 265F31D012D66A890048B600 /* ico.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ico.h; sourceTree = "<group>"; };
+ 265F31D112D66A890048B600 /* jpeg.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jpeg.c; sourceTree = "<group>"; };
+ 265F31D212D66A890048B600 /* jpeg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jpeg.h; sourceTree = "<group>"; };
+ 265F31D312D66A890048B600 /* mng.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = mng.c; sourceTree = "<group>"; };
+ 265F31D412D66A890048B600 /* mng.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mng.h; sourceTree = "<group>"; };
+ 265F31D512D66A890048B600 /* nssprite.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = nssprite.c; sourceTree = "<group>"; };
+ 265F31D612D66A890048B600 /* nssprite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = nssprite.h; sourceTree = "<group>"; };
+ 265F31D712D66A890048B600 /* png.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = png.c; sourceTree = "<group>"; };
+ 265F31D812D66A890048B600 /* png.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = png.h; sourceTree = "<group>"; };
+ 265F31D912D66A890048B600 /* rsvg.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rsvg.c; sourceTree = "<group>"; };
+ 265F31DA12D66A890048B600 /* rsvg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rsvg.h; sourceTree = "<group>"; };
+ 265F31DB12D66A890048B600 /* svg.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = svg.c; sourceTree = "<group>"; };
+ 265F31DC12D66A890048B600 /* svg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = svg.h; sourceTree = "<group>"; };
+ 265F31DD12D66A890048B600 /* webp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = webp.c; sourceTree = "<group>"; };
+ 265F31DE12D66A890048B600 /* webp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = webp.h; sourceTree = "<group>"; };
+ 265F31EB12D66B190048B600 /* bitmap.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = bitmap.m; sourceTree = "<group>"; };
+ 265F320512D66C200048B600 /* utf8.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = utf8.m; sourceTree = "<group>"; };
+ 265F321312D66CD90048B600 /* utils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = utils.m; sourceTree = "<group>"; };
+ 265F321E12D66D510048B600 /* font.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = font.m; sourceTree = "<group>"; };
+ 2671AA2012D8D32300B8A46A /* libpng.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libpng.dylib; path = usr/X11/lib/libpng.3.dylib; sourceTree = SDKROOT; };
+ 8D1107320486CEB800E47090 /* NetSurf.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = NetSurf.app; sourceTree = BUILT_PRODUCTS_DIR; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 8D11072E0486CEB800E47090 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */,
+ 260F20AF12D6228C00D9B07F /* libssl.dylib in Frameworks */,
+ 260F20B112D6229900D9B07F /* libxml2.dylib in Frameworks */,
+ 260F20B512D622AA00D9B07F /* libcurl.dylib in Frameworks */,
+ 260F20B912D622C600D9B07F /* libcrypto.dylib in Frameworks */,
+ 260F20BD12D622F500D9B07F /* libnsbmp.a in Frameworks */,
+ 260F20BF12D622F500D9B07F /* libnsgif.a in Frameworks */,
+ 260F20C612D6230B00D9B07F /* libz.dylib in Frameworks */,
+ 260F20CB12D6231E00D9B07F /* libhubbub.a in Frameworks */,
+ 260F20CD12D6232D00D9B07F /* libcss.a in Frameworks */,
+ 260F20D212D6235200D9B07F /* libparserutils.a in Frameworks */,
+ 260F20D712D6237E00D9B07F /* libwapcaplet.a in Frameworks */,
+ 260F20DB12D623D000D9B07F /* libiconv.dylib in Frameworks */,
+ 2612205612D7247900E10F91 /* libjpeg.dylib in Frameworks */,
+ 2671AA2112D8D32300B8A46A /* libpng.dylib in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 19C28FACFE9D520D11CA2CBB /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 8D1107320486CEB800E47090 /* NetSurf.app */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ 260F1F6212D620E800D9B07F /* content */ = {
+ isa = PBXGroup;
+ children = (
+ 260F1F6312D620E800D9B07F /* content.c */,
+ 260F1F6412D620E800D9B07F /* content.h */,
+ 260F1F6512D620E800D9B07F /* content_protected.h */,
+ 260F1F6612D620E800D9B07F /* content_type.h */,
+ 260F1F6712D620E800D9B07F /* dirlist.c */,
+ 260F1F6812D620E800D9B07F /* dirlist.h */,
+ 260F1F6912D620E800D9B07F /* fetch.c */,
+ 260F1F6A12D620E800D9B07F /* fetch.h */,
+ 260F1F6B12D620E800D9B07F /* fetchers */,
+ 260F1F7212D620E800D9B07F /* hlcache.c */,
+ 260F1F7312D620E800D9B07F /* hlcache.h */,
+ 260F1F7412D620E800D9B07F /* llcache.c */,
+ 260F1F7512D620E800D9B07F /* llcache.h */,
+ 260F1F7612D620E800D9B07F /* urldb.c */,
+ 260F1F7712D620E800D9B07F /* urldb.h */,
+ );
+ name = content;
+ path = ../content;
+ sourceTree = SOURCE_ROOT;
+ };
+ 260F1F6B12D620E800D9B07F /* fetchers */ = {
+ isa = PBXGroup;
+ children = (
+ 260F1F6C12D620E800D9B07F /* fetch_curl.c */,
+ 260F1F6D12D620E800D9B07F /* fetch_curl.h */,
+ 260F1F6E12D620E800D9B07F /* fetch_data.c */,
+ 260F1F6F12D620E800D9B07F /* fetch_data.h */,
+ 260F1F7012D620E800D9B07F /* fetch_file.c */,
+ 260F1F7112D620E800D9B07F /* fetch_file.h */,
+ );
+ path = fetchers;
+ sourceTree = "<group>";
+ };
+ 260F1F7812D620E800D9B07F /* css */ = {
+ isa = PBXGroup;
+ children = (
+ 260F1F7912D620E800D9B07F /* css.c */,
+ 260F1F7A12D620E800D9B07F /* css.h */,
+ 260F1F7B12D620E800D9B07F /* dump.c */,
+ 260F1F7C12D620E800D9B07F /* dump.h */,
+ 260F1F7D12D620E800D9B07F /* internal.c */,
+ 260F1F7E12D620E800D9B07F /* internal.h */,
+ 260F1F7F12D620E800D9B07F /* select.c */,
+ 260F1F8012D620E800D9B07F /* select.h */,
+ 260F1F8112D620E800D9B07F /* utils.c */,
+ 260F1F8212D620E800D9B07F /* utils.h */,
+ );
+ name = css;
+ path = ../css;
+ sourceTree = SOURCE_ROOT;
+ };
+ 260F1F8312D620E800D9B07F /* desktop */ = {
+ isa = PBXGroup;
+ children = (
+ 260F1F8412D620E800D9B07F /* 401login.h */,
+ 260F1F8512D620E800D9B07F /* browser.c */,
+ 260F1F8612D620E800D9B07F /* browser.h */,
+ 260F1F8712D620E800D9B07F /* cookies.c */,
+ 260F1F8812D620E800D9B07F /* cookies.h */,
+ 260F1F8912D620E800D9B07F /* download.c */,
+ 260F1F8A12D620E800D9B07F /* download.h */,
+ 260F1F8B12D620E800D9B07F /* frames.c */,
+ 260F1F8C12D620E800D9B07F /* frames.h */,
+ 260F1F8D12D620E800D9B07F /* gui.h */,
+ 260F1F8E12D620E800D9B07F /* history_core.c */,
+ 260F1F8F12D620E800D9B07F /* history_core.h */,
+ 260F1F9012D620E800D9B07F /* history_global_core.c */,
+ 260F1F9112D620E800D9B07F /* history_global_core.h */,
+ 260F1F9212D620E800D9B07F /* hotlist.c */,
+ 260F1F9312D620E800D9B07F /* hotlist.h */,
+ 260F1F9412D620E800D9B07F /* knockout.c */,
+ 260F1F9512D620E800D9B07F /* knockout.h */,
+ 260F1F9612D620E800D9B07F /* mouse.c */,
+ 260F1F9712D620E800D9B07F /* mouse.h */,
+ 260F1F9812D620E800D9B07F /* netsurf.c */,
+ 260F1F9912D620E800D9B07F /* netsurf.h */,
+ 260F1F9A12D620E800D9B07F /* options.c */,
+ 260F1F9B12D620E800D9B07F /* options.h */,
+ 260F1F9C12D620E800D9B07F /* plot_style.c */,
+ 260F1F9D12D620E800D9B07F /* plot_style.h */,
+ 260F1F9E12D620E800D9B07F /* plotters.h */,
+ 260F1F9F12D620E800D9B07F /* print.c */,
+ 260F1FA012D620E800D9B07F /* print.h */,
+ 260F1FA112D620E800D9B07F /* printer.h */,
+ 260F1FA212D620E800D9B07F /* save_complete.c */,
+ 260F1FA312D620E800D9B07F /* save_complete.h */,
+ 260F1FA412D620E800D9B07F /* save_pdf */,
+ 260F1FAA12D620E800D9B07F /* save_text.c */,
+ 260F1FAB12D620E800D9B07F /* save_text.h */,
+ 260F1FAC12D620E800D9B07F /* scroll.c */,
+ 260F1FAD12D620E800D9B07F /* scroll.h */,
+ 260F1FAE12D620E800D9B07F /* search.c */,
+ 260F1FAF12D620E800D9B07F /* search.h */,
+ 260F1FB012D620E800D9B07F /* searchweb.c */,
+ 260F1FB112D620E800D9B07F /* searchweb.h */,
+ 260F1FB212D620E800D9B07F /* selection.c */,
+ 260F1FB312D620E800D9B07F /* selection.h */,
+ 260F1FB412D620E800D9B07F /* sslcert.c */,
+ 260F1FB512D620E800D9B07F /* sslcert.h */,
+ 260F1FB612D620E800D9B07F /* textarea.c */,
+ 260F1FB712D620E800D9B07F /* textarea.h */,
+ 260F1FB812D620E800D9B07F /* textinput.c */,
+ 260F1FB912D620E800D9B07F /* textinput.h */,
+ 260F1FBA12D620E800D9B07F /* tree.c */,
+ 260F1FBB12D620E800D9B07F /* tree.h */,
+ 260F1FBC12D620E800D9B07F /* tree_url_node.c */,
+ 260F1FBD12D620E800D9B07F /* tree_url_node.h */,
+ 260F1FBE12D620E800D9B07F /* version.c */,
+ );
+ name = desktop;
+ path = ../desktop;
+ sourceTree = SOURCE_ROOT;
+ };
+ 260F1FA412D620E800D9B07F /* save_pdf */ = {
+ isa = PBXGroup;
+ children = (
+ 260F1FA512D620E800D9B07F /* font_haru.c */,
+ 260F1FA612D620E800D9B07F /* font_haru.h */,
+ 260F1FA712D620E800D9B07F /* pdf_plotters.c */,
+ 260F1FA812D620E800D9B07F /* pdf_plotters.h */,
+ );
+ path = save_pdf;
+ sourceTree = "<group>";
+ };
+ 260F1FC612D620E800D9B07F /* render */ = {
+ isa = PBXGroup;
+ children = (
+ 260F1FC712D620E800D9B07F /* box.c */,
+ 260F1FC812D620E800D9B07F /* box.h */,
+ 260F1FC912D620E800D9B07F /* box_construct.c */,
+ 260F1FCA12D620E800D9B07F /* box_normalise.c */,
+ 260F1FCB12D620E800D9B07F /* favicon.c */,
+ 260F1FCC12D620E800D9B07F /* favicon.h */,
+ 260F1FCD12D620E800D9B07F /* font.c */,
+ 260F1FCE12D620E800D9B07F /* font.h */,
+ 260F1FCF12D620E800D9B07F /* form.c */,
+ 260F1FD012D620E800D9B07F /* form.h */,
+ 260F1FD112D620E800D9B07F /* html.c */,
+ 260F1FD212D620E800D9B07F /* html.h */,
+ 260F1FD312D620E800D9B07F /* html_interaction.c */,
+ 260F1FD412D620E800D9B07F /* html_redraw.c */,
+ 260F1FD512D620E800D9B07F /* hubbub_binding.c */,
+ 260F1FD612D620E800D9B07F /* imagemap.c */,
+ 260F1FD712D620E800D9B07F /* imagemap.h */,
+ 260F1FD812D620E800D9B07F /* layout.c */,
+ 260F1FD912D620E800D9B07F /* layout.h */,
+ 260F1FDA12D620E800D9B07F /* list.c */,
+ 260F1FDB12D620E800D9B07F /* list.h */,
+ 260F1FDC12D620E800D9B07F /* parser_binding.h */,
+ 260F1FDD12D620E800D9B07F /* table.c */,
+ 260F1FDE12D620E800D9B07F /* table.h */,
+ 260F1FDF12D620E800D9B07F /* test */,
+ 260F1FE012D620E800D9B07F /* textplain.c */,
+ 260F1FE112D620E800D9B07F /* textplain.h */,
+ );
+ name = render;
+ path = ../render;
+ sourceTree = SOURCE_ROOT;
+ };
+ 260F1FDF12D620E800D9B07F /* test */ = {
+ isa = PBXGroup;
+ children = (
+ );
+ path = test;
+ sourceTree = "<group>";
+ };
+ 260F1FE212D620E800D9B07F /* utils */ = {
+ isa = PBXGroup;
+ children = (
+ 260F1FE312D620E800D9B07F /* base64.c */,
+ 260F1FE412D620E800D9B07F /* base64.h */,
+ 260F1FE512D620E800D9B07F /* config.h */,
+ 260F1FE612D620E800D9B07F /* container.c */,
+ 260F1FE712D620E800D9B07F /* container.h */,
+ 260F1FE812D620E800D9B07F /* errors.h */,
+ 260F1FE912D620E800D9B07F /* filename.c */,
+ 260F1FEA12D620E800D9B07F /* filename.h */,
+ 260F1FEB12D620E800D9B07F /* findresource.c */,
+ 260F1FEC12D620E800D9B07F /* findresource.h */,
+ 260F1FED12D620E800D9B07F /* hashtable.c */,
+ 260F1FEE12D620E800D9B07F /* hashtable.h */,
+ 260F1FEF12D620E800D9B07F /* http.c */,
+ 260F1FF012D620E800D9B07F /* http.h */,
+ 260F1FF112D620E800D9B07F /* locale.c */,
+ 260F1FF212D620E800D9B07F /* locale.h */,
+ 260F1FF312D620E800D9B07F /* log.c */,
+ 260F1FF412D620E800D9B07F /* log.h */,
+ 260F1FF612D620E800D9B07F /* memdebug.c */,
+ 260F1FF712D620E800D9B07F /* memdebug.h */,
+ 260F1FF812D620E800D9B07F /* messages.c */,
+ 260F1FF912D620E800D9B07F /* messages.h */,
+ 260F1FFA12D620E800D9B07F /* ring.h */,
+ 260F1FFB12D620E800D9B07F /* talloc.c */,
+ 260F1FFC12D620E800D9B07F /* talloc.h */,
+ 260F1FFF12D620E800D9B07F /* url.c */,
+ 260F200012D620E800D9B07F /* url.h */,
+ 260F200112D620E800D9B07F /* useragent.c */,
+ 260F200212D620E800D9B07F /* useragent.h */,
+ 260F200312D620E800D9B07F /* utf8.c */,
+ 260F200412D620E800D9B07F /* utf8.h */,
+ 260F200512D620E800D9B07F /* utils.c */,
+ 260F200612D620E800D9B07F /* utils.h */,
+ 260F200712D620E800D9B07F /* utsname.h */,
+ );
+ name = utils;
+ path = ../utils;
+ sourceTree = SOURCE_ROOT;
+ };
+ 265F303F12D6637E0048B600 /* cocoa */ = {
+ isa = PBXGroup;
+ children = (
+ 265F310F12D663C20048B600 /* res */,
+ 265F30AB12D6637E0048B600 /* Prefix.pch */,
+ 265F311912D663F50048B600 /* gui.m */,
+ 261223CB12D7805300E10F91 /* plotter.h */,
+ 265F314712D666660048B600 /* plotter.m */,
+ 265F315112D667060048B600 /* history.m */,
+ 265F316112D667E10048B600 /* schedule.m */,
+ 265F316612D668130048B600 /* thumbnail.m */,
+ 265F316F12D668790048B600 /* fetch.m */,
+ 265F319012D668DB0048B600 /* url.m */,
+ 265F31C412D66A0D0048B600 /* save.m */,
+ 260FC03112D85ACE00079C00 /* bitmap.h */,
+ 265F31EB12D66B190048B600 /* bitmap.m */,
+ 265F320512D66C200048B600 /* utf8.m */,
+ 265F321312D66CD90048B600 /* utils.m */,
+ 261223B712D77F9C00E10F91 /* font.h */,
+ 265F321E12D66D510048B600 /* font.m */,
+ 26121DD712D703F400E10F91 /* NetSurfApp.h */,
+ 26121DD812D703F400E10F91 /* NetSurfApp.m */,
+ 26121E3D12D70A1A00E10F91 /* BrowserWindow.h */,
+ 26121E3E12D70A1A00E10F91 /* BrowserWindow.m */,
+ 26121EFB12D7132100E10F91 /* BrowserView.h */,
+ 26121EFC12D7132100E10F91 /* BrowserView.m */,
+ );
+ name = cocoa;
+ sourceTree = "<group>";
+ };
+ 265F310F12D663C20048B600 /* res */ = {
+ isa = PBXGroup;
+ children = (
+ 2612268F12D7AE4100E10F91 /* Messages */,
+ 2612265D12D7AD6800E10F91 /* adblock.css */,
+ 2612265712D7ACB500E10F91 /* default.css */,
+ 2612265912D7ACB500E10F91 /* quirks.css */,
+ 265F30A712D6637E0048B600 /* NetSurf-Info.plist */,
+ 26121DA812D700B800E10F91 /* MainMenu.xib */,
+ 26121EAB12D70E0A00E10F91 /* Browser.xib */,
+ );
+ path = res;
+ sourceTree = "<group>";
+ };
+ 265F31C912D66A890048B600 /* image */ = {
+ isa = PBXGroup;
+ children = (
+ 265F31CA12D66A890048B600 /* bitmap.h */,
+ 265F31CB12D66A890048B600 /* bmp.c */,
+ 265F31CC12D66A890048B600 /* bmp.h */,
+ 265F31CD12D66A890048B600 /* gif.c */,
+ 265F31CE12D66A890048B600 /* gif.h */,
+ 265F31CF12D66A890048B600 /* ico.c */,
+ 265F31D012D66A890048B600 /* ico.h */,
+ 265F31D112D66A890048B600 /* jpeg.c */,
+ 265F31D212D66A890048B600 /* jpeg.h */,
+ 265F31D312D66A890048B600 /* mng.c */,
+ 265F31D412D66A890048B600 /* mng.h */,
+ 265F31D512D66A890048B600 /* nssprite.c */,
+ 265F31D612D66A890048B600 /* nssprite.h */,
+ 265F31D712D66A890048B600 /* png.c */,
+ 265F31D812D66A890048B600 /* png.h */,
+ 265F31D912D66A890048B600 /* rsvg.c */,
+ 265F31DA12D66A890048B600 /* rsvg.h */,
+ 265F31DB12D66A890048B600 /* svg.c */,
+ 265F31DC12D66A890048B600 /* svg.h */,
+ 265F31DD12D66A890048B600 /* webp.c */,
+ 265F31DE12D66A890048B600 /* webp.h */,
+ );
+ name = image;
+ path = ../image;
+ sourceTree = SOURCE_ROOT;
+ };
+ 29B97314FDCFA39411CA2CEA /* Untitled */ = {
+ isa = PBXGroup;
+ children = (
+ 265F303F12D6637E0048B600 /* cocoa */,
+ 260F1F6212D620E800D9B07F /* content */,
+ 260F1F7812D620E800D9B07F /* css */,
+ 260F1F8312D620E800D9B07F /* desktop */,
+ 260F1FC612D620E800D9B07F /* render */,
+ 265F31C912D66A890048B600 /* image */,
+ 260F1FE212D620E800D9B07F /* utils */,
+ 29B97323FDCFA39411CA2CEA /* Frameworks */,
+ 19C28FACFE9D520D11CA2CBB /* Products */,
+ );
+ name = Untitled;
+ sourceTree = "<group>";
+ };
+ 29B97323FDCFA39411CA2CEA /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ 2671AA2012D8D32300B8A46A /* libpng.dylib */,
+ 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */,
+ 260F20AE12D6228C00D9B07F /* libssl.dylib */,
+ 260F20B012D6229900D9B07F /* libxml2.dylib */,
+ 260F20B412D622AA00D9B07F /* libcurl.dylib */,
+ 260F20B812D622C600D9B07F /* libcrypto.dylib */,
+ 260F20BC12D622F500D9B07F /* libnsbmp.a */,
+ 260F20BE12D622F500D9B07F /* libnsgif.a */,
+ 260F20C512D6230B00D9B07F /* libz.dylib */,
+ 260F20CA12D6231E00D9B07F /* libhubbub.a */,
+ 260F20CC12D6232D00D9B07F /* libcss.a */,
+ 260F20D112D6235200D9B07F /* libparserutils.a */,
+ 260F20D612D6237E00D9B07F /* libwapcaplet.a */,
+ 260F20DA12D623D000D9B07F /* libiconv.dylib */,
+ 2612205512D7247900E10F91 /* libjpeg.dylib */,
+ );
+ name = Frameworks;
+ sourceTree = "<group>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 8D1107260486CEB800E47090 /* NetSurf */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "NetSurf" */;
+ buildPhases = (
+ 8D1107290486CEB800E47090 /* Resources */,
+ 8D11072C0486CEB800E47090 /* Sources */,
+ 8D11072E0486CEB800E47090 /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = NetSurf;
+ productInstallPath = "$(HOME)/Applications";
+ productName = Untitled;
+ productReference = 8D1107320486CEB800E47090 /* NetSurf.app */;
+ productType = "com.apple.product-type.application";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 29B97313FDCFA39411CA2CEA /* Project object */ = {
+ isa = PBXProject;
+ buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "NetSurf" */;
+ compatibilityVersion = "Xcode 3.0";
+ developmentRegion = English;
+ hasScannedForEncodings = 1;
+ knownRegions = (
+ English,
+ Japanese,
+ French,
+ German,
+ de,
+ en,
+ fr,
+ it,
+ nl,
+ );
+ mainGroup = 29B97314FDCFA39411CA2CEA /* Untitled */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 8D1107260486CEB800E47090 /* NetSurf */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 8D1107290486CEB800E47090 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 26121DA912D700B800E10F91 /* MainMenu.xib in Resources */,
+ 26121EAC12D70E0A00E10F91 /* Browser.xib in Resources */,
+ 2612265A12D7ACB500E10F91 /* default.css in Resources */,
+ 2612265C12D7ACB500E10F91 /* quirks.css in Resources */,
+ 2612266D12D7AD6800E10F91 /* adblock.css in Resources */,
+ 2612269112D7AE4100E10F91 /* Messages in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 8D11072C0486CEB800E47090 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 260F200A12D620E800D9B07F /* content.c in Sources */,
+ 260F200B12D620E800D9B07F /* dirlist.c in Sources */,
+ 260F200C12D620E800D9B07F /* fetch.c in Sources */,
+ 260F200D12D620E800D9B07F /* fetch_curl.c in Sources */,
+ 260F200E12D620E800D9B07F /* fetch_data.c in Sources */,
+ 260F200F12D620E800D9B07F /* fetch_file.c in Sources */,
+ 260F201012D620E800D9B07F /* hlcache.c in Sources */,
+ 260F201112D620E800D9B07F /* llcache.c in Sources */,
+ 260F201212D620E800D9B07F /* urldb.c in Sources */,
+ 260F201312D620E800D9B07F /* css.c in Sources */,
+ 260F201412D620E800D9B07F /* dump.c in Sources */,
+ 260F201512D620E800D9B07F /* internal.c in Sources */,
+ 260F201612D620E800D9B07F /* select.c in Sources */,
+ 260F201712D620E800D9B07F /* utils.c in Sources */,
+ 260F201812D620E800D9B07F /* browser.c in Sources */,
+ 260F201912D620E800D9B07F /* cookies.c in Sources */,
+ 260F201A12D620E800D9B07F /* download.c in Sources */,
+ 260F201B12D620E800D9B07F /* frames.c in Sources */,
+ 260F201C12D620E800D9B07F /* history_core.c in Sources */,
+ 260F201D12D620E800D9B07F /* history_global_core.c in Sources */,
+ 260F201E12D620E800D9B07F /* hotlist.c in Sources */,
+ 260F201F12D620E800D9B07F /* knockout.c in Sources */,
+ 260F202012D620E800D9B07F /* mouse.c in Sources */,
+ 260F202112D620E800D9B07F /* netsurf.c in Sources */,
+ 260F202212D620E800D9B07F /* options.c in Sources */,
+ 260F202312D620E800D9B07F /* plot_style.c in Sources */,
+ 260F202412D620E800D9B07F /* print.c in Sources */,
+ 260F202512D620E800D9B07F /* save_complete.c in Sources */,
+ 260F202612D620E800D9B07F /* font_haru.c in Sources */,
+ 260F202712D620E800D9B07F /* pdf_plotters.c in Sources */,
+ 260F202912D620E800D9B07F /* save_text.c in Sources */,
+ 260F202A12D620E800D9B07F /* scroll.c in Sources */,
+ 260F202B12D620E800D9B07F /* search.c in Sources */,
+ 260F202C12D620E800D9B07F /* searchweb.c in Sources */,
+ 260F202D12D620E800D9B07F /* selection.c in Sources */,
+ 260F202E12D620E800D9B07F /* sslcert.c in Sources */,
+ 260F202F12D620E800D9B07F /* textarea.c in Sources */,
+ 260F203012D620E800D9B07F /* textinput.c in Sources */,
+ 260F203112D620E800D9B07F /* tree.c in Sources */,
+ 260F203212D620E800D9B07F /* tree_url_node.c in Sources */,
+ 260F203312D620E800D9B07F /* version.c in Sources */,
+ 260F203A12D620E800D9B07F /* box.c in Sources */,
+ 260F203B12D620E800D9B07F /* box_construct.c in Sources */,
+ 260F203C12D620E800D9B07F /* box_normalise.c in Sources */,
+ 260F203D12D620E800D9B07F /* favicon.c in Sources */,
+ 260F203E12D620E800D9B07F /* font.c in Sources */,
+ 260F203F12D620E800D9B07F /* form.c in Sources */,
+ 260F204012D620E800D9B07F /* html.c in Sources */,
+ 260F204112D620E800D9B07F /* html_interaction.c in Sources */,
+ 260F204212D620E800D9B07F /* html_redraw.c in Sources */,
+ 260F204312D620E800D9B07F /* hubbub_binding.c in Sources */,
+ 260F204412D620E800D9B07F /* imagemap.c in Sources */,
+ 260F204512D620E800D9B07F /* layout.c in Sources */,
+ 260F204612D620E800D9B07F /* list.c in Sources */,
+ 260F204712D620E800D9B07F /* table.c in Sources */,
+ 260F204812D620E800D9B07F /* textplain.c in Sources */,
+ 260F204912D620E800D9B07F /* base64.c in Sources */,
+ 260F204A12D620E800D9B07F /* container.c in Sources */,
+ 260F204B12D620E800D9B07F /* filename.c in Sources */,
+ 260F204C12D620E800D9B07F /* findresource.c in Sources */,
+ 260F204D12D620E800D9B07F /* hashtable.c in Sources */,
+ 260F204E12D620E800D9B07F /* http.c in Sources */,
+ 260F204F12D620E800D9B07F /* locale.c in Sources */,
+ 260F205012D620E800D9B07F /* log.c in Sources */,
+ 260F205212D620E800D9B07F /* memdebug.c in Sources */,
+ 260F205312D620E800D9B07F /* messages.c in Sources */,
+ 260F205412D620E800D9B07F /* talloc.c in Sources */,
+ 260F205712D620E800D9B07F /* url.c in Sources */,
+ 260F205812D620E800D9B07F /* useragent.c in Sources */,
+ 260F205912D620E800D9B07F /* utf8.c in Sources */,
+ 260F205A12D620E800D9B07F /* utils.c in Sources */,
+ 265F311A12D663F50048B600 /* gui.m in Sources */,
+ 265F314812D666660048B600 /* plotter.m in Sources */,
+ 265F315212D667060048B600 /* history.m in Sources */,
+ 265F316212D667E10048B600 /* schedule.m in Sources */,
+ 265F316712D668130048B600 /* thumbnail.m in Sources */,
+ 265F317012D668790048B600 /* fetch.m in Sources */,
+ 265F319112D668DB0048B600 /* url.m in Sources */,
+ 265F31C512D66A0D0048B600 /* save.m in Sources */,
+ 265F31DF12D66A890048B600 /* bmp.c in Sources */,
+ 265F31E012D66A890048B600 /* gif.c in Sources */,
+ 265F31E112D66A890048B600 /* ico.c in Sources */,
+ 265F31E212D66A890048B600 /* jpeg.c in Sources */,
+ 265F31E312D66A890048B600 /* mng.c in Sources */,
+ 265F31E412D66A890048B600 /* nssprite.c in Sources */,
+ 265F31E512D66A890048B600 /* png.c in Sources */,
+ 265F31E612D66A890048B600 /* rsvg.c in Sources */,
+ 265F31E712D66A890048B600 /* svg.c in Sources */,
+ 265F31E812D66A890048B600 /* webp.c in Sources */,
+ 265F31EC12D66B190048B600 /* bitmap.m in Sources */,
+ 265F320612D66C200048B600 /* utf8.m in Sources */,
+ 265F321412D66CD90048B600 /* utils.m in Sources */,
+ 265F321F12D66D510048B600 /* font.m in Sources */,
+ 26121DD912D703F400E10F91 /* NetSurfApp.m in Sources */,
+ 26121E3F12D70A1A00E10F91 /* BrowserWindow.m in Sources */,
+ 26121EFD12D7132100E10F91 /* BrowserView.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+ 2612268F12D7AE4100E10F91 /* Messages */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 2612269012D7AE4100E10F91 /* de */,
+ 2612269312D7AE9B00E10F91 /* nl */,
+ 2612269412D7AEA800E10F91 /* en */,
+ 2612269512D7AEB500E10F91 /* it */,
+ 2612269612D7AEBE00E10F91 /* fr */,
+ );
+ name = Messages;
+ sourceTree = "<group>";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ C01FCF4B08A954540054247B /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_MODEL_TUNING = G5;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = Prefix.pch;
+ INFOPLIST_FILE = "res/NetSurf-Info.plist";
+ INSTALL_PATH = "$(HOME)/Applications";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "\"$(SDKROOT)/usr/X11/lib\"",
+ );
+ OTHER_CFLAGS = (
+ "-DWITH_GIF",
+ "-DWITH_BMP",
+ "-DWITH_PNG",
+ "-DWITH_JPEG",
+ );
+ PRODUCT_NAME = NetSurf;
+ };
+ name = Debug;
+ };
+ C01FCF4C08A954540054247B /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ GCC_MODEL_TUNING = G5;
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = Prefix.pch;
+ INFOPLIST_FILE = "res/NetSurf-Info.plist";
+ INSTALL_PATH = "$(HOME)/Applications";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "\"$(SDKROOT)/usr/X11/lib\"",
+ );
+ OTHER_CFLAGS = (
+ "-DWITH_GIF",
+ "-DWITH_BMP",
+ "-DWITH_PNG",
+ "-DWITH_JPEG",
+ );
+ PRODUCT_NAME = NetSurf;
+ };
+ name = Release;
+ };
+ C01FCF4F08A954540054247B /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = "$(ONLY_ACTIVE_ARCH_PRE_XCODE_3_1)";
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_VERSION = "";
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ HEADER_SEARCH_PATHS = (
+ /usr/X11/include,
+ /usr/include/libxml2/,
+ /usr/local/include/,
+ "${SRCROOT}/../",
+ );
+ ONLY_ACTIVE_ARCH_PRE_XCODE_3_1 = "$(NATIVE_ARCH_ACTUAL)";
+ OTHER_LDFLAGS = "";
+ PREBINDING = NO;
+ SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.5.sdk";
+ };
+ name = Debug;
+ };
+ C01FCF5008A954540054247B /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = "$(ARCHS_STANDARD_32_64_BIT_PRE_XCODE_3_1)";
+ ARCHS_STANDARD_32_64_BIT_PRE_XCODE_3_1 = "x86_64 i386 ppc";
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_VERSION = "";
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ HEADER_SEARCH_PATHS = (
+ /usr/X11/include,
+ /usr/include/libxml2/,
+ /usr/local/include/,
+ "${SRCROOT}/../",
+ );
+ OTHER_LDFLAGS = "";
+ PREBINDING = NO;
+ SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.5.sdk";
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "NetSurf" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ C01FCF4B08A954540054247B /* Debug */,
+ C01FCF4C08A954540054247B /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ C01FCF4E08A954540054247B /* Build configuration list for PBXProject "NetSurf" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ C01FCF4F08A954540054247B /* Debug */,
+ C01FCF5008A954540054247B /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 29B97313FDCFA39411CA2CEA /* Project object */;
+}
diff --git a/cocoa/NetsurfApp.h b/cocoa/NetsurfApp.h
new file mode 100644
index 000000000..cca9c419b
--- /dev/null
+++ b/cocoa/NetsurfApp.h
@@ -0,0 +1,26 @@
+/*
+ * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+#import <Cocoa/Cocoa.h>
+
+
+@interface NetSurfApp : NSApplication {
+
+}
+
+@end
diff --git a/cocoa/NetsurfApp.m b/cocoa/NetsurfApp.m
new file mode 100644
index 000000000..3ca150e14
--- /dev/null
+++ b/cocoa/NetsurfApp.m
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+#import "NetSurfApp.h"
+
+#import "desktop/gui.h"
+#include "content/urldb.h"
+#include "content/fetch.h"
+#include "css/utils.h"
+#include "desktop/gui.h"
+#include "desktop/history_core.h"
+#include "desktop/mouse.h"
+#include "desktop/netsurf.h"
+#include "desktop/options.h"
+#include "desktop/plotters.h"
+#include "desktop/save_complete.h"
+#include "desktop/selection.h"
+#include "desktop/textinput.h"
+#include "render/html.h"
+#include "utils/url.h"
+#include "utils/log.h"
+#include "utils/messages.h"
+#include "utils/utils.h"
+
+
+@implementation NetSurfApp
+
+- (void) run;
+{
+ [self finishLaunching];
+ browser_window_create( "http://netsurf-browser.org/", NULL, NULL, true, false );
+ netsurf_main_loop();
+}
+
+-(void) terminate: (id)sender;
+{
+ netsurf_quit = true;
+ [self postEvent: [NSEvent otherEventWithType: NSApplicationDefined location: NSZeroPoint
+ modifierFlags: 0 timestamp: 0 windowNumber: 0 context: NULL
+ subtype: 0 data1: 0 data2: 0]
+ atStart: YES];
+}
+
+@end
diff --git a/cocoa/bitmap.h b/cocoa/bitmap.h
new file mode 100644
index 000000000..78526e425
--- /dev/null
+++ b/cocoa/bitmap.h
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef COCOA_BITMAP_H
+#define COCOA_BITMAP_H
+
+CGImageRef cocoa_get_cgimage( void *bitmap );
+
+#endif \ No newline at end of file
diff --git a/cocoa/bitmap.m b/cocoa/bitmap.m
new file mode 100644
index 000000000..eb791c46e
--- /dev/null
+++ b/cocoa/bitmap.m
@@ -0,0 +1,223 @@
+/*
+ * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+#import <Cocoa/Cocoa.h>
+
+#import "image/bitmap.h"
+#import "cocoa/bitmap.h"
+
+#define BITS_PER_SAMPLE (8)
+#define SAMPLES_PER_PIXEL (4)
+#define BITS_PER_PIXEL (BITS_PER_SAMPLE * SAMPLES_PER_PIXEL)
+#define BYTES_PER_PIXEL (BITS_PER_PIXEL / 8)
+#define RED_OFFSET (0)
+#define GREEN_OFFSET (1)
+#define BLUE_OFFSET (2)
+#define ALPHA_OFFSET (3)
+
+static CGImageRef cocoa_prepare_bitmap( void *bitmap );
+static NSMapTable *cocoa_get_bitmap_cache();
+
+int bitmap_get_width(void *bitmap)
+{
+ NSCParameterAssert( NULL != bitmap );
+ NSBitmapImageRep *bmp = (NSBitmapImageRep *)bitmap;
+ return [bmp pixelsWide];
+}
+
+int bitmap_get_height(void *bitmap)
+{
+ NSCParameterAssert( NULL != bitmap );
+ NSBitmapImageRep *bmp = (NSBitmapImageRep *)bitmap;
+ return [bmp pixelsHigh];
+}
+
+bool bitmap_get_opaque(void *bitmap)
+{
+ NSCParameterAssert( NULL != bitmap );
+ NSBitmapImageRep *bmp = (NSBitmapImageRep *)bitmap;
+ return [bmp isOpaque];
+}
+
+void bitmap_destroy(void *bitmap)
+{
+ NSCParameterAssert( NULL != bitmap );
+
+ NSMapTable *cache = cocoa_get_bitmap_cache();
+ CGImageRef image = NSMapGet( cache, bitmap );
+ if (NULL != image) {
+ CGImageRelease( image );
+ NSMapRemove( cache, bitmap );
+ }
+
+ NSBitmapImageRep *bmp = (NSBitmapImageRep *)bitmap;
+ [bmp release];
+}
+
+void *bitmap_create(int width, int height, unsigned int state)
+{
+ NSBitmapImageRep *bmp = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes: NULL
+ pixelsWide: width
+ pixelsHigh: height
+ bitsPerSample: BITS_PER_SAMPLE
+ samplesPerPixel: SAMPLES_PER_PIXEL
+ hasAlpha: YES
+ isPlanar: NO
+ colorSpaceName: NSDeviceRGBColorSpace
+ bitmapFormat: NSAlphaNonpremultipliedBitmapFormat
+ bytesPerRow: BYTES_PER_PIXEL * width
+ bitsPerPixel: BITS_PER_PIXEL];
+
+ return bmp;
+}
+
+void bitmap_set_opaque(void *bitmap, bool opaque)
+{
+ NSCParameterAssert( NULL != bitmap );
+ NSBitmapImageRep *bmp = (NSBitmapImageRep *)bitmap;
+ [bmp setOpaque: opaque ? YES : NO];
+}
+
+bool bitmap_test_opaque(void *bitmap)
+{
+ NSCParameterAssert( bitmap_get_bpp( bitmap ) == BITS_PER_PIXEL );
+
+ unsigned char *buf = bitmap_get_buffer( bitmap );
+
+ const size_t height = bitmap_get_height( bitmap );
+ const size_t width = bitmap_get_width( bitmap );
+
+ const size_t line_step = bitmap_get_rowstride( bitmap ) - BYTES_PER_PIXEL * width;
+
+ for (size_t y = 0; y < height; y++) {
+ for (size_t x = 0; x < height; x++) {
+ if (buf[ALPHA_OFFSET] != 0xFF) return false;
+ buf += BYTES_PER_PIXEL;
+ }
+ buf += line_step;
+ }
+
+ return true;
+}
+
+unsigned char *bitmap_get_buffer(void *bitmap)
+{
+ NSCParameterAssert( NULL != bitmap );
+ NSBitmapImageRep *bmp = (NSBitmapImageRep *)bitmap;
+ return [bmp bitmapData];
+}
+
+size_t bitmap_get_rowstride(void *bitmap)
+{
+ NSCParameterAssert( NULL != bitmap );
+ NSBitmapImageRep *bmp = (NSBitmapImageRep *)bitmap;
+ return [bmp bytesPerRow];
+}
+
+size_t bitmap_get_bpp(void *bitmap)
+{
+ NSCParameterAssert( NULL != bitmap );
+ NSBitmapImageRep *bmp = (NSBitmapImageRep *)bitmap;
+ return [bmp bitsPerPixel];
+}
+
+bool bitmap_save(void *bitmap, const char *path, unsigned flags)
+{
+ NSCParameterAssert( NULL != bitmap );
+ NSBitmapImageRep *bmp = (NSBitmapImageRep *)bitmap;
+
+ NSData *tiff = [bmp TIFFRepresentation];
+ return [tiff writeToFile: [NSString stringWithUTF8String: path] atomically: YES];
+}
+
+void bitmap_modified(void *bitmap)
+{
+ NSMapTable *cache = cocoa_get_bitmap_cache();
+ CGImageRef image = NSMapGet( cache, bitmap );
+ if (NULL != image) {
+ CGImageRelease( image );
+ NSMapRemove( cache, bitmap );
+ }
+}
+
+void bitmap_set_suspendable(void *bitmap, void *private_word,
+ void (*invalidate)(void *bitmap, void *private_word))
+
+{
+ // nothing to do
+}
+
+CGImageRef cocoa_get_cgimage( void *bitmap )
+{
+ NSMapTable *cache = cocoa_get_bitmap_cache();
+
+ CGImageRef result = NSMapGet( cache, bitmap );
+ if (NULL == result) {
+ result = cocoa_prepare_bitmap( bitmap );
+ NSMapInsertKnownAbsent( cache, bitmap, result );
+ }
+
+ return result;
+}
+
+static inline NSMapTable *cocoa_get_bitmap_cache()
+{
+ static NSMapTable *cache = nil;
+ if (cache == nil) {
+ cache = NSCreateMapTable( NSNonOwnedPointerMapKeyCallBacks, NSNonOwnedPointerMapValueCallBacks, 0 );
+ }
+ return cache;
+}
+
+static CGImageRef cocoa_prepare_bitmap( void *bitmap )
+{
+ NSCParameterAssert( NULL != bitmap );
+
+ NSBitmapImageRep *bmp = (NSBitmapImageRep *)bitmap;
+
+ size_t w = [bmp pixelsWide];
+ size_t h = [bmp pixelsHigh];
+
+ CGImageRef original = [bmp CGImage];
+
+ if (h <= 1) return CGImageRetain( original );
+
+ void *data = malloc( 4 * w * h );
+
+ CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
+ CGContextRef context = CGBitmapContextCreate( data, w, h, BITS_PER_SAMPLE,
+ BYTES_PER_PIXEL * w, colorSpace,
+ [bmp isOpaque] ? kCGImageAlphaNoneSkipLast
+ : kCGImageAlphaPremultipliedLast );
+ CGColorSpaceRelease( colorSpace );
+
+ CGContextTranslateCTM( context, 0.0, h );
+ CGContextScaleCTM( context, 1.0, -1.0 );
+
+ CGRect rect = CGRectMake( 0, 0, w, h );
+ CGContextClearRect( context, rect );
+ CGContextDrawImage( context, rect, original );
+
+ CGImageRef result = CGBitmapContextCreateImage( context );
+
+ CGContextRelease( context );
+ free( data );
+
+ return result;
+}
+
diff --git a/cocoa/fetch.m b/cocoa/fetch.m
new file mode 100644
index 000000000..7ad862b8b
--- /dev/null
+++ b/cocoa/fetch.m
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2003 James Bursa <bursa@users.sourceforge.net>
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include "content/fetch.h"
+#include "utils/log.h"
+#include "utils/utils.h"
+
+/**
+ * filetype -- determine the MIME type of a local file
+ */
+
+const char *fetch_filetype(const char *unix_path)
+{
+ int l;
+ LOG(("unix path %s", unix_path));
+ l = strlen(unix_path);
+ if (2 < l && strcasecmp(unix_path + l - 3, "css") == 0)
+ return "text/css";
+ if (2 < l && strcasecmp(unix_path + l - 3, "jpg") == 0)
+ return "image/jpeg";
+ if (3 < l && strcasecmp(unix_path + l - 4, "jpeg") == 0)
+ return "image/jpeg";
+ if (2 < l && strcasecmp(unix_path + l - 3, "gif") == 0)
+ return "image/gif";
+ if (2 < l && strcasecmp(unix_path + l - 3, "png") == 0)
+ return "image/png";
+ if (2 < l && strcasecmp(unix_path + l - 3, "jng") == 0)
+ return "image/jng";
+ if (2 < l && strcasecmp(unix_path + l - 3, "svg") == 0)
+ return "image/svg";
+ if (2 < l && strcasecmp(unix_path + l - 3, "bmp") == 0)
+ return "image/x-ms-bmp";
+ return "text/html";
+}
+
+
+char *fetch_mimetype(const char *ro_path)
+{
+ return strdup("text/plain");
+}
diff --git a/cocoa/font.h b/cocoa/font.h
new file mode 100644
index 000000000..b65d62844
--- /dev/null
+++ b/cocoa/font.h
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef COCOA_FONT_H
+#define COCOA_FONT_H
+
+void cocoa_draw_string( int x, int y, const char *bytes, size_t length, const plot_font_style_t *style );
+
+#endif
diff --git a/cocoa/font.m b/cocoa/font.m
new file mode 100644
index 000000000..634bbb7c5
--- /dev/null
+++ b/cocoa/font.m
@@ -0,0 +1,177 @@
+/*
+ * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+#import <Cocoa/Cocoa.h>
+
+#include <inttypes.h>
+
+#include <assert.h>
+
+#include "css/css.h"
+#include "render/font.h"
+#include "desktop/options.h"
+
+#import "font.h"
+#import "plotter.h"
+
+static NSLayoutManager *cocoa_prepare_layout_manager( const char *string, size_t length,
+ const plot_font_style_t *style );
+static NSTextStorage *cocoa_text_storage = nil;
+static NSTextContainer *cocoa_text_container = nil;
+
+static bool nsfont_width(const plot_font_style_t *style,
+ const char *string, size_t length,
+ int *width)
+{
+ NSCParameterAssert( NULL != width );
+
+ NSLayoutManager *layout = cocoa_prepare_layout_manager( string, length, style );
+ *width = NULL != layout ? NSWidth( [layout usedRectForTextContainer: cocoa_text_container] ) : 0;
+ return true;
+}
+
+static bool nsfont_position_in_string(const plot_font_style_t *style,
+ const char *string, size_t length,
+ int x, size_t *char_offset, int *actual_x)
+{
+ NSLayoutManager *layout = cocoa_prepare_layout_manager( string, length, style );
+ NSUInteger glyphIndex = [layout glyphIndexForPoint: NSMakePoint( x, 0 )
+ inTextContainer: cocoa_text_container
+ fractionOfDistanceThroughGlyph: NULL];
+ NSUInteger chars = [layout characterIndexForGlyphAtIndex: glyphIndex];
+
+ size_t offset = 0;
+ while (chars > 0) {
+ uint8_t ch = ((uint8_t *)string)[offset];
+
+ if (0xC2 <= ch && ch <= 0xDF) offset += 2;
+ else if (0xE0 <= ch && ch <= 0xEF) offset += 3;
+ else if (0xF0 <= ch && ch <= 0xF4) offset += 4;
+ else offset++;
+
+ --chars;
+ }
+
+ *char_offset = offset;
+ *actual_x = [layout locationForGlyphAtIndex: glyphIndex].x;
+
+ return true;
+}
+
+static bool nsfont_split(const plot_font_style_t *style,
+ const char *string, size_t length,
+ int x, size_t *char_offset, int *actual_x)
+{
+ nsfont_position_in_string(style, string, length, x, char_offset,
+ actual_x);
+ if (*char_offset == length) return true;
+
+ while ((string[*char_offset] != ' ') && (*char_offset > 0))
+ (*char_offset)--;
+
+ return true;
+}
+
+
+static NSString *cocoa_font_family_name( plot_font_generic_family_t family )
+{
+ switch (family) {
+ case PLOT_FONT_FAMILY_SERIF: return @"Times";
+ case PLOT_FONT_FAMILY_SANS_SERIF: return @"Helvetica";
+ case PLOT_FONT_FAMILY_MONOSPACE: return @"Courier";
+ case PLOT_FONT_FAMILY_CURSIVE: return @"Apple Chancery";
+ case PLOT_FONT_FAMILY_FANTASY: return @"Marker Felt";
+ default: return nil;
+ }
+}
+
+static NSFont *cocoa_font_get_nsfont( const plot_font_style_t *style )
+{
+ return [NSFont fontWithName: cocoa_font_family_name( style->family )
+ size: (CGFloat)style->size / FONT_SIZE_SCALE];
+}
+
+NSDictionary *cocoa_font_attributes( const plot_font_style_t *style )
+{
+ return [NSDictionary dictionaryWithObjectsAndKeys:
+ cocoa_font_get_nsfont( style ), NSFontAttributeName,
+ cocoa_convert_colour( style->foreground ), NSForegroundColorAttributeName,
+ nil];
+}
+
+static NSString *cocoa_string_from_utf8_characters( const char *string, size_t characters )
+{
+ if (NULL == string || 0 == characters) return nil;
+
+ return [[[NSString alloc] initWithBytes: string length:characters encoding:NSUTF8StringEncoding] autorelease];
+}
+
+
+static NSLayoutManager *cocoa_prepare_layout_manager( const char *bytes, size_t length,
+ const plot_font_style_t *style )
+{
+ if (NULL == bytes || 0 == length) return nil;
+
+ static NSLayoutManager *layout = nil;
+
+ if (nil == layout) {
+ cocoa_text_container = [[NSTextContainer alloc] initWithContainerSize: NSMakeSize( CGFLOAT_MAX, CGFLOAT_MAX )];
+ [cocoa_text_container setLineFragmentPadding: 0];
+
+ layout = [[NSLayoutManager alloc] init];
+ [layout addTextContainer: cocoa_text_container];
+
+ cocoa_text_storage = [[NSTextStorage alloc] init];
+ [cocoa_text_storage addLayoutManager: layout];
+ }
+
+
+ NSString *string = cocoa_string_from_utf8_characters( bytes, length );
+ if (nil == string) return nil;
+
+ NSDictionary *attributes = cocoa_font_attributes( style );
+ NSAttributedString *attributedString = [[NSAttributedString alloc] initWithString: string attributes: attributes];
+ if (![attributedString isEqualToAttributedString: cocoa_text_storage]) {
+ [cocoa_text_storage setAttributedString: attributedString];
+ [layout ensureLayoutForTextContainer: cocoa_text_container];
+ }
+ [attributedString release];
+
+
+ return layout;
+}
+
+void cocoa_draw_string( int x, int y, const char *bytes, size_t length, const plot_font_style_t *style )
+{
+ NSLayoutManager *layout = cocoa_prepare_layout_manager( bytes, length, style );
+
+ if ([cocoa_text_storage length] > 0) {
+ NSFont *font = [cocoa_text_storage attribute: NSFontAttributeName atIndex: 0 effectiveRange: NULL];
+ CGFloat baseline = [layout defaultBaselineOffsetForFont: font];
+
+ NSRange glyphRange = [layout glyphRangeForTextContainer: cocoa_text_container];
+ [layout drawGlyphsForGlyphRange: glyphRange atPoint: NSMakePoint( x, y - baseline )];
+ }
+}
+
+const struct font_functions nsfont = {
+ nsfont_width,
+ nsfont_position_in_string,
+ nsfont_split
+};
+
diff --git a/cocoa/gui.m b/cocoa/gui.m
new file mode 100644
index 000000000..d7e5b8f79
--- /dev/null
+++ b/cocoa/gui.m
@@ -0,0 +1,391 @@
+/*
+ * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+#import <Cocoa/Cocoa.h>
+
+#import "BrowserWindow.h"
+#import "BrowserView.h"
+
+#import "desktop/gui.h"
+#import "desktop/netsurf.h"
+#import "desktop/browser.h"
+
+char *default_stylesheet_url;
+char *adblock_stylesheet_url;
+char *quirks_stylesheet_url;
+
+#define UNIMPL() NSLog( @"Function '%s' unimplemented", __func__ )
+
+void gui_multitask(void)
+{
+ // nothing to do
+}
+
+static NSAutoreleasePool *gui_pool = nil;
+void gui_poll(bool active)
+{
+ [gui_pool release];
+ gui_pool = [[NSAutoreleasePool alloc] init];
+
+ NSEvent *event = [NSApp nextEventMatchingMask: NSAnyEventMask untilDate: active ? nil : [NSDate distantFuture]
+ inMode: NSDefaultRunLoopMode dequeue: YES];
+
+ if (nil != event) [NSApp sendEvent: event];
+
+ [NSApp updateWindows];
+}
+
+void gui_quit(void)
+{
+ // nothing to do
+}
+
+struct browser_window;
+
+struct gui_window *gui_create_browser_window(struct browser_window *bw,
+ struct browser_window *clone, bool new_tab)
+{
+ return (struct gui_window *)[[BrowserWindow alloc] initWithBrowser: bw];
+}
+
+struct browser_window *gui_window_get_browser_window(struct gui_window *g)
+{
+ return [(BrowserWindow *)g browser];
+}
+
+void gui_window_destroy(struct gui_window *g)
+{
+ [(BrowserWindow *)g release];
+}
+
+void gui_window_set_title(struct gui_window *g, const char *title)
+{
+ [[(BrowserWindow *)g window] setTitle: [NSString stringWithUTF8String: title]];
+}
+
+void gui_window_redraw(struct gui_window *g, int x0, int y0, int x1, int y1)
+{
+ NSRect rect = NSMakeRect( x0, y0, x1 - x0, y1 - y0 );
+ [[(BrowserWindow *)g view] setNeedsDisplayInRect: rect];
+}
+
+void gui_window_redraw_window(struct gui_window *g)
+{
+ [[(BrowserWindow *)g view] setNeedsDisplay: YES];
+}
+
+void gui_window_update_box(struct gui_window *g,
+ const union content_msg_data *data)
+{
+ gui_window_redraw( g, data->redraw.x, data->redraw.y,
+ data->redraw.x + data->redraw.width,
+ data->redraw.y + data->redraw.height );
+}
+
+bool gui_window_get_scroll(struct gui_window *g, int *sx, int *sy)
+{
+ NSCParameterAssert( g != NULL && sx != NULL && sy != NULL );
+
+ NSRect visible = [[(BrowserWindow *)g view] visibleRect];
+ *sx = NSMinX( visible );
+ *sy = NSMinY( visible );
+ return true;
+}
+
+void gui_window_set_scroll(struct gui_window *g, int sx, int sy)
+{
+ [[(BrowserWindow *)g view] scrollPoint: NSMakePoint( sx, sy )];
+}
+
+void gui_window_scroll_visible(struct gui_window *g, int x0, int y0,
+ int x1, int y1)
+{
+ gui_window_set_scroll( g, x0, y0 );
+}
+
+void gui_window_position_frame(struct gui_window *g, int x0, int y0,
+ int x1, int y1)
+{
+ UNIMPL();
+}
+
+void gui_window_get_dimensions(struct gui_window *g, int *width, int *height,
+ bool scaled)
+{
+ NSCParameterAssert( width != NULL && height != NULL );
+
+ NSRect frame = [[(BrowserWindow *)g view] frame];
+ *width = NSWidth( frame );
+ *height = NSHeight( frame );
+}
+
+void gui_window_update_extent(struct gui_window *g)
+{
+ BrowserWindow * const window = (BrowserWindow *)g;
+ struct browser_window *browser = [window browser];
+ int width = content_get_width( browser->current_content ) * browser->scale;
+ int height = content_get_height( browser->current_content ) * browser->scale;
+
+ [[window view] setFrameSize: NSMakeSize( width, height )];
+}
+
+void gui_window_set_status(struct gui_window *g, const char *text)
+{
+ [[(BrowserWindow *)g view] setStatus: [NSString stringWithUTF8String: text]];
+}
+
+void gui_window_set_pointer(struct gui_window *g, gui_pointer_shape shape)
+{
+ switch (shape) {
+ case GUI_POINTER_DEFAULT:
+ case GUI_POINTER_WAIT:
+ case GUI_POINTER_PROGRESS:
+ [[NSCursor arrowCursor] set];
+ break;
+
+ case GUI_POINTER_CROSS:
+ [[NSCursor crosshairCursor] set];
+ break;
+
+ case GUI_POINTER_POINT:
+ [[NSCursor pointingHandCursor] set];
+ break;
+
+ case GUI_POINTER_CARET:
+ [[NSCursor IBeamCursor] set];
+ break;
+
+ default:
+ NSLog( @"Other cursor %d requested", shape );
+ [[NSCursor arrowCursor] set];
+ break;
+ }
+}
+
+void gui_window_hide_pointer(struct gui_window *g)
+{
+}
+
+void gui_window_set_url(struct gui_window *g, const char *url)
+{
+ [(BrowserWindow *)g setUrl: [NSString stringWithUTF8String: url]];
+}
+
+void gui_window_start_throbber(struct gui_window *g)
+{
+ [[(BrowserWindow *)g view] setSpinning: YES];
+}
+
+void gui_window_stop_throbber(struct gui_window *g)
+{
+ [[(BrowserWindow *)g view] setSpinning: NO];
+}
+
+void gui_window_set_icon(struct gui_window *g, hlcache_handle *icon)
+{
+ // ignore
+}
+
+void gui_window_set_search_ico(hlcache_handle *ico)
+{
+ UNIMPL();
+}
+
+void gui_window_place_caret(struct gui_window *g, int x, int y, int height)
+{
+ [[(BrowserWindow *)g view] addCaretAt: NSMakePoint( x, y ) height: height];
+}
+
+void gui_window_remove_caret(struct gui_window *g)
+{
+ [[(BrowserWindow *)g view] removeCaret];
+}
+
+void gui_window_new_content(struct gui_window *g)
+{
+}
+
+bool gui_window_scroll_start(struct gui_window *g)
+{
+ return true;
+}
+
+bool gui_window_box_scroll_start(struct gui_window *g,
+ int x0, int y0, int x1, int y1)
+{
+ return true;
+}
+
+bool gui_window_frame_resize_start(struct gui_window *g)
+{
+ UNIMPL();
+ return false;
+}
+
+void gui_window_save_link(struct gui_window *g, const char *url,
+ const char *title)
+{
+ UNIMPL();
+}
+
+void gui_window_set_scale(struct gui_window *g, float scale)
+{
+ UNIMPL();
+}
+
+
+struct gui_download_window *gui_download_window_create(download_context *ctx,
+ struct gui_window *parent)
+{
+ UNIMPL();
+ return NULL;
+}
+
+nserror gui_download_window_data(struct gui_download_window *dw,
+ const char *data, unsigned int size)
+{
+ UNIMPL();
+ return 0;
+}
+
+void gui_download_window_error(struct gui_download_window *dw,
+ const char *error_msg)
+{
+ UNIMPL();
+}
+
+void gui_download_window_done(struct gui_download_window *dw)
+{
+ UNIMPL();
+}
+
+
+void gui_drag_save_object(gui_save_type type, hlcache_handle *c,
+ struct gui_window *g)
+{
+}
+
+void gui_drag_save_selection(struct selection *s, struct gui_window *g)
+{
+}
+
+void gui_start_selection(struct gui_window *g)
+{
+}
+
+void gui_clear_selection(struct gui_window *g)
+{
+}
+
+
+void gui_paste_from_clipboard(struct gui_window *g, int x, int y)
+{
+ UNIMPL();
+}
+
+bool gui_empty_clipboard(void)
+{
+ return false;
+}
+
+bool gui_add_to_clipboard(const char *text, size_t length, bool space)
+{
+ UNIMPL();
+ return false;
+}
+
+bool gui_commit_clipboard(void)
+{
+ UNIMPL();
+ return false;
+}
+
+bool gui_copy_to_clipboard(struct selection *s)
+{
+ UNIMPL();
+ return false;
+}
+
+
+void gui_create_form_select_menu(struct browser_window *bw,
+ struct form_control *control)
+{
+ UNIMPL();
+}
+
+
+void gui_launch_url(const char *url)
+{
+ UNIMPL();
+}
+
+
+
+struct ssl_cert_info;
+
+void gui_cert_verify(const char *url, const struct ssl_cert_info *certs,
+ unsigned long num, nserror (*cb)(bool proceed, void *pw),
+ void *cbpw)
+{
+ cb( false, cbpw );
+}
+
+
+void gui_401login_open(const char *url, const char *realm,
+ nserror (*cb)(bool proceed, void *pw), void *cbpw)
+{
+ cb( false, cbpw );
+}
+
+static char *gui_get_resource_url( NSString *name, NSString *type )
+{
+ NSString *path = [[NSBundle mainBundle] pathForResource: name ofType: type];
+ return strdup( [[[NSURL fileURLWithPath: path] absoluteString] UTF8String] );
+}
+
+int main( int argc, char **argv )
+{
+ char options[PATH_MAX];
+
+ gui_pool = [[NSAutoreleasePool alloc] init];
+
+ const char * const messages = [[[NSBundle mainBundle] pathForResource: @"messages" ofType: nil] UTF8String];
+ default_stylesheet_url = gui_get_resource_url( @"default", @"css" );
+ quirks_stylesheet_url = gui_get_resource_url( @"quirks", @"css" );
+ adblock_stylesheet_url = gui_get_resource_url( @"adblock", @"css" );
+
+ /* initialise netsurf */
+ netsurf_init(&argc, &argv, options, messages);
+
+ NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];
+ Class principalClass = NSClassFromString([infoDictionary objectForKey:@"NSPrincipalClass"]);
+ NSCAssert([principalClass respondsToSelector:@selector(sharedApplication)], @"Principal class must implement sharedApplication.");
+ [principalClass sharedApplication];
+
+ NSString *mainNibName = [infoDictionary objectForKey:@"NSMainNibFile"];
+ NSNib *mainNib = [[NSNib alloc] initWithNibNamed:mainNibName bundle:[NSBundle mainBundle]];
+ [mainNib instantiateNibWithOwner:NSApp topLevelObjects:nil];
+ [mainNib release];
+
+ [NSApp performSelectorOnMainThread:@selector(run) withObject:nil waitUntilDone:YES];
+
+ netsurf_exit();
+
+ return 0;
+}
+
diff --git a/cocoa/history.m b/cocoa/history.m
new file mode 100644
index 000000000..63b53a13c
--- /dev/null
+++ b/cocoa/history.m
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+#import "desktop/browser.h"
+
+#import <Cocoa/Cocoa.h>
+
+#define UNIMPL() NSLog( @"Function '%s' unimplemented", __func__ )
+
+
+void global_history_add_recent(const char *url)
+{
+ UNIMPL();
+}
+
+char **global_history_get_recent(int *count)
+{
+ UNIMPL();
+ return NULL;
+}
+
+
diff --git a/cocoa/plotter.h b/cocoa/plotter.h
new file mode 100644
index 000000000..1b3f1e1be
--- /dev/null
+++ b/cocoa/plotter.h
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef COCOA_PLOTTER_H
+#define COCOA_PLOTTER_H
+
+NSColor *cocoa_convert_colour( colour clr );
+
+#endif
diff --git a/cocoa/plotter.m b/cocoa/plotter.m
new file mode 100644
index 000000000..a7652e9ed
--- /dev/null
+++ b/cocoa/plotter.m
@@ -0,0 +1,223 @@
+/*
+ * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+#include <Cocoa/Cocoa.h>
+
+#include "desktop/plotters.h"
+#import "desktop/plot_style.h"
+
+#import "cocoa/font.h"
+#import "cocoa/plotter.h"
+#import "cocoa/bitmap.h"
+
+#define UNIMPL() NSLog( @"Function '%s' unimplemented", __func__ )
+
+static void cocoa_plot_render_path(NSBezierPath *path,const plot_style_t *pstyle);
+static void cocoa_plot_path_set_stroke_pattern(NSBezierPath *path,const plot_style_t *pstyle);
+static NSRect cocoa_plot_clip_rect;
+
+#define colour_red_component( c ) (((c) >> 0) & 0xFF)
+#define colour_green_component( c ) (((c) >> 8) & 0xFF)
+#define colour_blue_component( c ) (((c) >> 16) & 0xFF)
+#define colour_alpha_component( c ) (((c) >> 24) & 0xFF)
+#define colour_from_rgba( r, g, b, a) ((((colour)(r)) << 0) | \
+ (((colour)(g)) << 8) | \
+ (((colour)(b)) << 16) | \
+ (((colour)(a)) << 24))
+#define colour_from_rgb( r, g, b ) colour_from_rgba( (r), (g), (b), 0xFF )
+
+NSColor *cocoa_convert_colour( colour clr )
+{
+ return [NSColor colorWithDeviceRed: (float)colour_red_component( clr ) / 0xFF
+ green: (float)colour_green_component( clr ) / 0xFF
+ blue: (float)colour_blue_component( clr ) / 0xFF
+ alpha: 1.0];
+}
+
+static void cocoa_plot_path_set_stroke_pattern(NSBezierPath *path,const plot_style_t *pstyle)
+{
+ static const CGFloat dashed_pattern[2] = { 5.0, 2.0 };
+ static const CGFloat dotted_pattern[2] = { 2.0, 2.0 };
+
+ switch (pstyle->stroke_type) {
+ case PLOT_OP_TYPE_DASH:
+ [path setLineDash: dashed_pattern count: 2 phase: 0];
+ break;
+
+ case PLOT_OP_TYPE_DOT:
+ [path setLineDash: dotted_pattern count: 2 phase: 0];
+ break;
+
+ default:
+ // ignore
+ break;
+ }
+
+ [path setLineWidth: pstyle->stroke_width];
+}
+
+static bool plot_line(int x0, int y0, int x1, int y1, const plot_style_t *pstyle)
+{
+ NSBezierPath *path = [NSBezierPath bezierPath];
+ [path moveToPoint: NSMakePoint( x0, y0 )];
+ [path lineToPoint: NSMakePoint( x1, y1 )];
+
+ cocoa_plot_render_path( path, pstyle );
+
+ return true;
+}
+
+static bool plot_rectangle(int x0, int y0, int x1, int y1, const plot_style_t *pstyle)
+{
+ NSBezierPath *path = [NSBezierPath bezierPathWithRect: NSMakeRect( x0, y0, x1-x0, y1-y0 )];
+
+ cocoa_plot_render_path( path, pstyle );
+
+ return true;
+}
+
+static bool plot_text(int x, int y, const char *text, size_t length,
+ const plot_font_style_t *fstyle)
+{
+ [NSGraphicsContext saveGraphicsState];
+ [NSBezierPath clipRect: cocoa_plot_clip_rect];
+
+ cocoa_draw_string( x, y, text, length, fstyle );
+
+ [NSGraphicsContext restoreGraphicsState];
+
+ return true;
+}
+
+
+static bool plot_clip(int x0, int y0, int x1, int y1)
+{
+ cocoa_plot_clip_rect = NSMakeRect( x0, y0, abs(x1-x0), abs(y1-y0) );
+ return true;
+}
+
+void cocoa_plot_render_path(NSBezierPath *path,const plot_style_t *pstyle)
+{
+ [NSGraphicsContext saveGraphicsState];
+ [NSBezierPath clipRect: cocoa_plot_clip_rect];
+
+ if (pstyle->fill_type != PLOT_OP_TYPE_NONE) {
+ [cocoa_convert_colour( pstyle->fill_colour ) setFill];
+ [path fill];
+ }
+
+ if (pstyle->stroke_type != PLOT_OP_TYPE_NONE) {
+ cocoa_plot_path_set_stroke_pattern(path,pstyle);
+
+ [cocoa_convert_colour( pstyle->stroke_colour ) set];
+
+ [path stroke];
+ }
+
+ [NSGraphicsContext restoreGraphicsState];
+}
+
+static bool plot_arc(int x, int y, int radius, int angle1, int angle2, const plot_style_t *pstyle)
+{
+ NSBezierPath *path = [NSBezierPath bezierPath];
+ [path appendBezierPathWithArcWithCenter: NSMakePoint( x, y ) radius: radius
+ startAngle: angle1 endAngle: angle2
+ clockwise: NO];
+
+ cocoa_plot_render_path( path, pstyle);
+
+ return true;
+}
+
+static bool plot_disc(int x, int y, int radius, const plot_style_t *pstyle)
+{
+ NSBezierPath *path = [NSBezierPath bezierPathWithOvalInRect:
+ NSMakeRect( x - radius, y-radius, 2*radius, 2*radius )];
+
+ cocoa_plot_render_path( path, pstyle );
+
+ return true;
+}
+
+static bool plot_polygon(const int *p, unsigned int n, const plot_style_t *pstyle)
+{
+ if (n <= 1) return true;
+
+ NSBezierPath *path = [NSBezierPath bezierPath];
+ [path moveToPoint: NSMakePoint( p[0], p[1] )];
+ for (int i = 1; i < n; i++) {
+ [path lineToPoint: NSMakePoint( p[2*i], p[2*i+1] )];
+ }
+ [path closePath];
+
+ cocoa_plot_render_path( path, pstyle );
+
+ return true;
+}
+
+/* complex path (for SVG) */
+static bool plot_path(const float *p, unsigned int n, colour fill, float width,
+ colour c, const float transform[6])
+{
+ UNIMPL();
+ return true;
+}
+
+/* Image */
+static bool plot_bitmap(int x, int y, int width, int height,
+ struct bitmap *bitmap, colour bg,
+ bitmap_flags_t flags)
+{
+ CGContextRef context = [[NSGraphicsContext currentContext] graphicsPort];
+ CGContextSaveGState( context );
+
+ CGContextClipToRect( context, NSRectToCGRect( cocoa_plot_clip_rect ) );
+
+ const bool tileX = flags & BITMAPF_REPEAT_X;
+ const bool tileY = flags & BITMAPF_REPEAT_Y;
+
+ CGImageRef img = cocoa_get_cgimage( bitmap );
+
+ CGRect rect = CGRectMake( x, y, width, height );
+ if (tileX || tileY) {
+ CGContextDrawTiledImage( context, rect, img );
+ } else {
+ CGContextDrawImage( context, rect, img );
+ }
+
+ CGContextRestoreGState( context );
+
+ return true;
+}
+
+struct plotter_table plot = {
+ .clip = plot_clip,
+ .arc = plot_arc,
+ .disc = plot_disc,
+ .rectangle = plot_rectangle,
+ .line = plot_line,
+ .polygon = plot_polygon,
+
+ .path = plot_path,
+
+ .bitmap = plot_bitmap,
+
+ .text = plot_text,
+
+ .option_knockout = true
+}; \ No newline at end of file
diff --git a/cocoa/res/Browser.xib b/cocoa/res/Browser.xib
new file mode 100644
index 000000000..a0cc1a78d
--- /dev/null
+++ b/cocoa/res/Browser.xib
@@ -0,0 +1,989 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
+ <data>
+ <int key="IBDocument.SystemTarget">1050</int>
+ <string key="IBDocument.SystemVersion">10J567</string>
+ <string key="IBDocument.InterfaceBuilderVersion">804</string>
+ <string key="IBDocument.AppKitVersion">1038.35</string>
+ <string key="IBDocument.HIToolboxVersion">462.00</string>
+ <object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+ <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string key="NS.object.0">804</string>
+ </object>
+ <object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <integer value="38"/>
+ </object>
+ <object class="NSArray" key="IBDocument.PluginDependencies">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ </object>
+ <object class="NSMutableDictionary" key="IBDocument.Metadata">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys" id="0">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ </object>
+ <object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSCustomObject" id="1001">
+ <string key="NSClassName">BrowserWindow</string>
+ </object>
+ <object class="NSCustomObject" id="1003">
+ <string key="NSClassName">FirstResponder</string>
+ </object>
+ <object class="NSCustomObject" id="1004">
+ <string key="NSClassName">NSApplication</string>
+ </object>
+ <object class="NSWindowTemplate" id="1005">
+ <int key="NSWindowStyleMask">15</int>
+ <int key="NSWindowBacking">2</int>
+ <string key="NSWindowRect">{{135, 249}, {691, 632}}</string>
+ <int key="NSWTFlags">544735232</int>
+ <string key="NSWindowTitle">NetSurf</string>
+ <string key="NSWindowClass">NSWindow</string>
+ <object class="NSToolbar" key="NSViewClass" id="392415761">
+ <object class="NSMutableString" key="NSToolbarIdentifier">
+ <characters key="NS.bytes">10771526-5048-4EBE-984D-B6BEEB6455E1</characters>
+ </object>
+ <nil key="NSToolbarDelegate"/>
+ <bool key="NSToolbarPrefersToBeShown">YES</bool>
+ <bool key="NSToolbarShowsBaselineSeparator">YES</bool>
+ <bool key="NSToolbarAllowsUserCustomization">YES</bool>
+ <bool key="NSToolbarAutosavesConfiguration">NO</bool>
+ <int key="NSToolbarDisplayMode">2</int>
+ <int key="NSToolbarSizeMode">1</int>
+ <object class="NSMutableDictionary" key="NSToolbarIBIdentifiedItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>316FFEF7-FE4B-4054-A233-B48593490A7F</string>
+ <string>484FB8D5-6AD6-4E75-B60E-CA03FC98EFCD</string>
+ <string>7EEF129A-ED23-47F1-88E8-B60EAF53C80C</string>
+ <string>E2E89C48-DD3F-47A5-9E6C-25985A970F69</string>
+ <string>FA0D0D22-FE0D-4337-A543-E5BB13E4E088</string>
+ <string>NSToolbarCustomizeToolbarItem</string>
+ <string>NSToolbarFlexibleSpaceItem</string>
+ <string>NSToolbarSeparatorItem</string>
+ <string>NSToolbarSpaceItem</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSToolbarItem" id="702346074">
+ <object class="NSMutableString" key="NSToolbarItemIdentifier">
+ <characters key="NS.bytes">316FFEF7-FE4B-4054-A233-B48593490A7F</characters>
+ </object>
+ <string key="NSToolbarItemLabel">Go back</string>
+ <string key="NSToolbarItemPaletteLabel">Go back</string>
+ <string key="NSToolbarItemToolTip"/>
+ <nil key="NSToolbarItemView"/>
+ <object class="NSCustomResource" key="NSToolbarItemImage">
+ <string key="NSClassName">NSImage</string>
+ <string key="NSResourceName">NSGoLeftTemplate</string>
+ </object>
+ <nil key="NSToolbarItemTarget"/>
+ <nil key="NSToolbarItemAction"/>
+ <string key="NSToolbarItemMinSize">{0, 0}</string>
+ <string key="NSToolbarItemMaxSize">{0, 0}</string>
+ <bool key="NSToolbarItemEnabled">YES</bool>
+ <bool key="NSToolbarItemAutovalidates">YES</bool>
+ <int key="NSToolbarItemTag">-1</int>
+ <bool key="NSToolbarIsUserRemovable">YES</bool>
+ <int key="NSToolbarItemVisibilityPriority">0</int>
+ </object>
+ <object class="NSToolbarItem" id="525444158">
+ <object class="NSMutableString" key="NSToolbarItemIdentifier">
+ <characters key="NS.bytes">484FB8D5-6AD6-4E75-B60E-CA03FC98EFCD</characters>
+ </object>
+ <string key="NSToolbarItemLabel">Go forward</string>
+ <string key="NSToolbarItemPaletteLabel">Go forward</string>
+ <string key="NSToolbarItemToolTip"/>
+ <nil key="NSToolbarItemView"/>
+ <object class="NSCustomResource" key="NSToolbarItemImage">
+ <string key="NSClassName">NSImage</string>
+ <string key="NSResourceName">NSGoRightTemplate</string>
+ </object>
+ <nil key="NSToolbarItemTarget"/>
+ <nil key="NSToolbarItemAction"/>
+ <string key="NSToolbarItemMinSize">{0, 0}</string>
+ <string key="NSToolbarItemMaxSize">{0, 0}</string>
+ <bool key="NSToolbarItemEnabled">YES</bool>
+ <bool key="NSToolbarItemAutovalidates">YES</bool>
+ <int key="NSToolbarItemTag">-1</int>
+ <bool key="NSToolbarIsUserRemovable">YES</bool>
+ <int key="NSToolbarItemVisibilityPriority">0</int>
+ </object>
+ <object class="NSToolbarItem" id="734074974">
+ <object class="NSMutableString" key="NSToolbarItemIdentifier">
+ <characters key="NS.bytes">7EEF129A-ED23-47F1-88E8-B60EAF53C80C</characters>
+ </object>
+ <string key="NSToolbarItemLabel">Reload</string>
+ <string key="NSToolbarItemPaletteLabel">Reload</string>
+ <string key="NSToolbarItemToolTip"/>
+ <nil key="NSToolbarItemView"/>
+ <object class="NSCustomResource" key="NSToolbarItemImage">
+ <string key="NSClassName">NSImage</string>
+ <string key="NSResourceName">NSRefreshTemplate</string>
+ </object>
+ <nil key="NSToolbarItemTarget"/>
+ <nil key="NSToolbarItemAction"/>
+ <string key="NSToolbarItemMinSize">{0, 0}</string>
+ <string key="NSToolbarItemMaxSize">{0, 0}</string>
+ <bool key="NSToolbarItemEnabled">YES</bool>
+ <bool key="NSToolbarItemAutovalidates">YES</bool>
+ <int key="NSToolbarItemTag">-1</int>
+ <bool key="NSToolbarIsUserRemovable">YES</bool>
+ <int key="NSToolbarItemVisibilityPriority">0</int>
+ </object>
+ <object class="NSToolbarItem" id="784507185">
+ <object class="NSMutableString" key="NSToolbarItemIdentifier">
+ <characters key="NS.bytes">E2E89C48-DD3F-47A5-9E6C-25985A970F69</characters>
+ </object>
+ <string key="NSToolbarItemLabel"/>
+ <string key="NSToolbarItemPaletteLabel">URL</string>
+ <nil key="NSToolbarItemToolTip"/>
+ <object class="NSTextField" key="NSToolbarItemView" id="570769942">
+ <reference key="NSNextResponder"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{0, 14}, {96, 22}}</string>
+ <reference key="NSSuperview"/>
+ <reference key="NSWindow"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="465639940">
+ <int key="NSCellFlags">-1804468671</int>
+ <int key="NSCellFlags2">272630784</int>
+ <string key="NSContents"/>
+ <object class="NSFont" key="NSSupport">
+ <string key="NSName">LucidaGrande</string>
+ <double key="NSSize">13</double>
+ <int key="NSfFlags">1044</int>
+ </object>
+ <reference key="NSControlView" ref="570769942"/>
+ <bool key="NSDrawsBackground">YES</bool>
+ <object class="NSColor" key="NSBackgroundColor">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">textBackgroundColor</string>
+ <object class="NSColor" key="NSColor">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MQA</bytes>
+ </object>
+ </object>
+ <object class="NSColor" key="NSTextColor">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">textColor</string>
+ <object class="NSColor" key="NSColor" id="791352603">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MAA</bytes>
+ </object>
+ </object>
+ </object>
+ </object>
+ <nil key="NSToolbarItemImage"/>
+ <nil key="NSToolbarItemTarget"/>
+ <nil key="NSToolbarItemAction"/>
+ <string key="NSToolbarItemMinSize">{96, 22}</string>
+ <string key="NSToolbarItemMaxSize">{10000, 22}</string>
+ <bool key="NSToolbarItemEnabled">YES</bool>
+ <bool key="NSToolbarItemAutovalidates">YES</bool>
+ <int key="NSToolbarItemTag">0</int>
+ <bool key="NSToolbarIsUserRemovable">YES</bool>
+ <int key="NSToolbarItemVisibilityPriority">0</int>
+ </object>
+ <object class="NSToolbarItem" id="955202223">
+ <object class="NSMutableString" key="NSToolbarItemIdentifier">
+ <characters key="NS.bytes">FA0D0D22-FE0D-4337-A543-E5BB13E4E088</characters>
+ </object>
+ <string key="NSToolbarItemLabel">History</string>
+ <string key="NSToolbarItemPaletteLabel">History</string>
+ <string key="NSToolbarItemToolTip"/>
+ <nil key="NSToolbarItemView"/>
+ <object class="NSCustomResource" key="NSToolbarItemImage">
+ <string key="NSClassName">NSImage</string>
+ <string key="NSResourceName">NSMultipleDocuments</string>
+ </object>
+ <nil key="NSToolbarItemTarget"/>
+ <nil key="NSToolbarItemAction"/>
+ <string key="NSToolbarItemMinSize">{0, 0}</string>
+ <string key="NSToolbarItemMaxSize">{0, 0}</string>
+ <bool key="NSToolbarItemEnabled">YES</bool>
+ <bool key="NSToolbarItemAutovalidates">YES</bool>
+ <int key="NSToolbarItemTag">-1</int>
+ <bool key="NSToolbarIsUserRemovable">YES</bool>
+ <int key="NSToolbarItemVisibilityPriority">0</int>
+ </object>
+ <object class="NSToolbarItem" id="554531361">
+ <string key="NSToolbarItemIdentifier">NSToolbarCustomizeToolbarItem</string>
+ <string key="NSToolbarItemLabel">Customize</string>
+ <string key="NSToolbarItemPaletteLabel">Customize</string>
+ <string key="NSToolbarItemToolTip">Customize Toolbar</string>
+ <nil key="NSToolbarItemView"/>
+ <object class="NSCustomResource" key="NSToolbarItemImage">
+ <string key="NSClassName">NSImage</string>
+ <string key="NSResourceName">NSToolbarCustomizeToolbarItemImage</string>
+ </object>
+ <nil key="NSToolbarItemTarget"/>
+ <string key="NSToolbarItemAction">runToolbarCustomizationPalette:</string>
+ <string key="NSToolbarItemMinSize">{0, 0}</string>
+ <string key="NSToolbarItemMaxSize">{0, 0}</string>
+ <bool key="NSToolbarItemEnabled">YES</bool>
+ <bool key="NSToolbarItemAutovalidates">YES</bool>
+ <int key="NSToolbarItemTag">-1</int>
+ <bool key="NSToolbarIsUserRemovable">YES</bool>
+ <int key="NSToolbarItemVisibilityPriority">0</int>
+ </object>
+ <object class="NSToolbarFlexibleSpaceItem" id="481399099">
+ <string key="NSToolbarItemIdentifier">NSToolbarFlexibleSpaceItem</string>
+ <string key="NSToolbarItemLabel"/>
+ <string key="NSToolbarItemPaletteLabel">Flexible Space</string>
+ <nil key="NSToolbarItemToolTip"/>
+ <nil key="NSToolbarItemView"/>
+ <nil key="NSToolbarItemImage"/>
+ <nil key="NSToolbarItemTarget"/>
+ <nil key="NSToolbarItemAction"/>
+ <string key="NSToolbarItemMinSize">{1, 5}</string>
+ <string key="NSToolbarItemMaxSize">{20000, 32}</string>
+ <bool key="NSToolbarItemEnabled">YES</bool>
+ <bool key="NSToolbarItemAutovalidates">YES</bool>
+ <int key="NSToolbarItemTag">-1</int>
+ <bool key="NSToolbarIsUserRemovable">YES</bool>
+ <int key="NSToolbarItemVisibilityPriority">0</int>
+ <object class="NSMenuItem" key="NSToolbarItemMenuFormRepresentation">
+ <bool key="NSIsDisabled">YES</bool>
+ <bool key="NSIsSeparator">YES</bool>
+ <string key="NSTitle"/>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <object class="NSCustomResource" key="NSOnImage" id="437280079">
+ <string key="NSClassName">NSImage</string>
+ <string key="NSResourceName">NSMenuCheckmark</string>
+ </object>
+ <object class="NSCustomResource" key="NSMixedImage" id="563857027">
+ <string key="NSClassName">NSImage</string>
+ <string key="NSResourceName">NSMenuMixedState</string>
+ </object>
+ </object>
+ </object>
+ <object class="NSToolbarSeparatorItem" id="1049725992">
+ <string key="NSToolbarItemIdentifier">NSToolbarSeparatorItem</string>
+ <string key="NSToolbarItemLabel"/>
+ <string key="NSToolbarItemPaletteLabel">Separator</string>
+ <nil key="NSToolbarItemToolTip"/>
+ <nil key="NSToolbarItemView"/>
+ <nil key="NSToolbarItemImage"/>
+ <nil key="NSToolbarItemTarget"/>
+ <nil key="NSToolbarItemAction"/>
+ <string key="NSToolbarItemMinSize">{12, 5}</string>
+ <string key="NSToolbarItemMaxSize">{12, 1000}</string>
+ <bool key="NSToolbarItemEnabled">YES</bool>
+ <bool key="NSToolbarItemAutovalidates">YES</bool>
+ <int key="NSToolbarItemTag">-1</int>
+ <bool key="NSToolbarIsUserRemovable">YES</bool>
+ <int key="NSToolbarItemVisibilityPriority">0</int>
+ <object class="NSMenuItem" key="NSToolbarItemMenuFormRepresentation">
+ <bool key="NSIsDisabled">YES</bool>
+ <bool key="NSIsSeparator">YES</bool>
+ <string key="NSTitle"/>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="437280079"/>
+ <reference key="NSMixedImage" ref="563857027"/>
+ </object>
+ </object>
+ <object class="NSToolbarSpaceItem" id="191318475">
+ <string key="NSToolbarItemIdentifier">NSToolbarSpaceItem</string>
+ <string key="NSToolbarItemLabel"/>
+ <string key="NSToolbarItemPaletteLabel">Space</string>
+ <nil key="NSToolbarItemToolTip"/>
+ <nil key="NSToolbarItemView"/>
+ <nil key="NSToolbarItemImage"/>
+ <nil key="NSToolbarItemTarget"/>
+ <nil key="NSToolbarItemAction"/>
+ <string key="NSToolbarItemMinSize">{32, 5}</string>
+ <string key="NSToolbarItemMaxSize">{32, 32}</string>
+ <bool key="NSToolbarItemEnabled">YES</bool>
+ <bool key="NSToolbarItemAutovalidates">YES</bool>
+ <int key="NSToolbarItemTag">-1</int>
+ <bool key="NSToolbarIsUserRemovable">YES</bool>
+ <int key="NSToolbarItemVisibilityPriority">0</int>
+ <object class="NSMenuItem" key="NSToolbarItemMenuFormRepresentation">
+ <bool key="NSIsDisabled">YES</bool>
+ <bool key="NSIsSeparator">YES</bool>
+ <string key="NSTitle"/>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="437280079"/>
+ <reference key="NSMixedImage" ref="563857027"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="NSArray" key="NSToolbarIBAllowedItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="702346074"/>
+ <reference ref="525444158"/>
+ <reference ref="784507185"/>
+ <reference ref="1049725992"/>
+ <reference ref="191318475"/>
+ <reference ref="481399099"/>
+ <reference ref="554531361"/>
+ <reference ref="955202223"/>
+ <reference ref="734074974"/>
+ </object>
+ <object class="NSMutableArray" key="NSToolbarIBDefaultItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="702346074"/>
+ <reference ref="734074974"/>
+ <reference ref="525444158"/>
+ <reference ref="1049725992"/>
+ <reference ref="784507185"/>
+ </object>
+ <object class="NSMutableArray" key="NSToolbarIBSelectableItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ </object>
+ <string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
+ <object class="NSView" key="NSWindowView" id="1006">
+ <reference key="NSNextResponder"/>
+ <int key="NSvFlags">256</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSScrollView" id="299449310">
+ <reference key="NSNextResponder" ref="1006"/>
+ <int key="NSvFlags">274</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSClipView" id="230262136">
+ <reference key="NSNextResponder" ref="299449310"/>
+ <int key="NSvFlags">2304</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSCustomView" id="947292612">
+ <reference key="NSNextResponder" ref="230262136"/>
+ <int key="NSvFlags">274</int>
+ <string key="NSFrameSize">{676, 597}</string>
+ <reference key="NSSuperview" ref="230262136"/>
+ <string key="NSClassName">BrowserView</string>
+ </object>
+ </object>
+ <string key="NSFrame">{{1, 1}, {676, 597}}</string>
+ <reference key="NSSuperview" ref="299449310"/>
+ <reference key="NSNextKeyView" ref="947292612"/>
+ <reference key="NSDocView" ref="947292612"/>
+ <object class="NSColor" key="NSBGColor" id="994333793">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">controlColor</string>
+ <object class="NSColor" key="NSColor">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
+ </object>
+ </object>
+ <int key="NScvFlags">4</int>
+ </object>
+ <object class="NSScroller" id="217278618">
+ <reference key="NSNextResponder" ref="299449310"/>
+ <int key="NSvFlags">256</int>
+ <string key="NSFrame">{{677, 1}, {15, 597}}</string>
+ <reference key="NSSuperview" ref="299449310"/>
+ <reference key="NSTarget" ref="299449310"/>
+ <string key="NSAction">_doScroller:</string>
+ <double key="NSCurValue">1</double>
+ <double key="NSPercent">0.96363627910614014</double>
+ </object>
+ <object class="NSScroller" id="837576252">
+ <reference key="NSNextResponder" ref="299449310"/>
+ <int key="NSvFlags">256</int>
+ <string key="NSFrame">{{1, 598}, {676, 15}}</string>
+ <reference key="NSSuperview" ref="299449310"/>
+ <int key="NSsFlags">1</int>
+ <reference key="NSTarget" ref="299449310"/>
+ <string key="NSAction">_doScroller:</string>
+ <double key="NSPercent">0.50602412223815918</double>
+ </object>
+ </object>
+ <string key="NSFrame">{{-1, 19}, {693, 614}}</string>
+ <reference key="NSSuperview" ref="1006"/>
+ <reference key="NSNextKeyView" ref="230262136"/>
+ <int key="NSsFlags">50</int>
+ <reference key="NSVScroller" ref="217278618"/>
+ <reference key="NSHScroller" ref="837576252"/>
+ <reference key="NSContentView" ref="230262136"/>
+ </object>
+ <object class="NSTextField" id="1055532139">
+ <reference key="NSNextResponder" ref="1006"/>
+ <int key="NSvFlags">290</int>
+ <string key="NSFrame">{{27, 3}, {647, 14}}</string>
+ <reference key="NSSuperview" ref="1006"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="559666362">
+ <int key="NSCellFlags">68288064</int>
+ <int key="NSCellFlags2">272761856</int>
+ <string key="NSContents">NetSurf</string>
+ <object class="NSFont" key="NSSupport">
+ <string key="NSName">LucidaGrande</string>
+ <double key="NSSize">11</double>
+ <int key="NSfFlags">3100</int>
+ </object>
+ <reference key="NSControlView" ref="1055532139"/>
+ <reference key="NSBackgroundColor" ref="994333793"/>
+ <object class="NSColor" key="NSTextColor">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">controlTextColor</string>
+ <reference key="NSColor" ref="791352603"/>
+ </object>
+ </object>
+ </object>
+ <object class="NSProgressIndicator" id="727691575">
+ <reference key="NSNextResponder" ref="1006"/>
+ <int key="NSvFlags">1316</int>
+ <object class="NSPSMatrix" key="NSDrawMatrix"/>
+ <string key="NSFrame">{{6, 2}, {16, 16}}</string>
+ <reference key="NSSuperview" ref="1006"/>
+ <int key="NSpiFlags">28938</int>
+ <double key="NSMaxValue">100</double>
+ </object>
+ </object>
+ <string key="NSFrameSize">{691, 632}</string>
+ <reference key="NSSuperview"/>
+ </object>
+ <string key="NSScreenRect">{{0, 0}, {1680, 1028}}</string>
+ <string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
+ <bool key="NSAutorecalculatesContentBorderThicknessMinY">NO</bool>
+ <double key="NSContentBorderThicknessMinY">20</double>
+ </object>
+ <object class="NSObjectController" id="374263046">
+ <object class="NSMutableArray" key="NSDeclaredKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>spinning</string>
+ <string>status</string>
+ </object>
+ <bool key="NSEditable">YES</bool>
+ <object class="_NSManagedProxy" key="_NSManagedProxy"/>
+ </object>
+ </object>
+ <object class="IBObjectContainer" key="IBDocument.Objects">
+ <object class="NSMutableArray" key="connectionRecords">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">window</string>
+ <reference key="source" ref="1001"/>
+ <reference key="destination" ref="1005"/>
+ </object>
+ <int key="connectionID">3</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBBindingConnection" key="connection">
+ <string key="label">value: url</string>
+ <reference key="source" ref="570769942"/>
+ <reference key="destination" ref="1001"/>
+ <object class="NSNibBindingConnector" key="connector">
+ <reference key="NSSource" ref="570769942"/>
+ <reference key="NSDestination" ref="1001"/>
+ <string key="NSLabel">value: url</string>
+ <string key="NSBinding">value</string>
+ <string key="NSKeyPath">url</string>
+ <int key="NSNibBindingConnectorVersion">2</int>
+ </object>
+ </object>
+ <int key="connectionID">19</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">navigate:</string>
+ <reference key="source" ref="1001"/>
+ <reference key="destination" ref="570769942"/>
+ </object>
+ <int key="connectionID">20</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">view</string>
+ <reference key="source" ref="1001"/>
+ <reference key="destination" ref="947292612"/>
+ </object>
+ <int key="connectionID">21</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">reloadPage:</string>
+ <reference key="source" ref="947292612"/>
+ <reference key="destination" ref="734074974"/>
+ </object>
+ <int key="connectionID">28</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">goBack:</string>
+ <reference key="source" ref="947292612"/>
+ <reference key="destination" ref="702346074"/>
+ </object>
+ <int key="connectionID">29</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">goForward:</string>
+ <reference key="source" ref="947292612"/>
+ <reference key="destination" ref="525444158"/>
+ </object>
+ <int key="connectionID">30</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">showHistory:</string>
+ <reference key="source" ref="947292612"/>
+ <reference key="destination" ref="955202223"/>
+ </object>
+ <int key="connectionID">31</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">content</string>
+ <reference key="source" ref="374263046"/>
+ <reference key="destination" ref="947292612"/>
+ </object>
+ <int key="connectionID">33</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBBindingConnection" key="connection">
+ <string key="label">value: selection.status</string>
+ <reference key="source" ref="1055532139"/>
+ <reference key="destination" ref="374263046"/>
+ <object class="NSNibBindingConnector" key="connector">
+ <reference key="NSSource" ref="1055532139"/>
+ <reference key="NSDestination" ref="374263046"/>
+ <string key="NSLabel">value: selection.status</string>
+ <string key="NSBinding">value</string>
+ <string key="NSKeyPath">selection.status</string>
+ <int key="NSNibBindingConnectorVersion">2</int>
+ </object>
+ </object>
+ <int key="connectionID">37</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBBindingConnection" key="connection">
+ <string key="label">animate: selection.spinning</string>
+ <reference key="source" ref="727691575"/>
+ <reference key="destination" ref="374263046"/>
+ <object class="NSNibBindingConnector" key="connector">
+ <reference key="NSSource" ref="727691575"/>
+ <reference key="NSDestination" ref="374263046"/>
+ <string key="NSLabel">animate: selection.spinning</string>
+ <string key="NSBinding">animate</string>
+ <string key="NSKeyPath">selection.spinning</string>
+ <int key="NSNibBindingConnectorVersion">2</int>
+ </object>
+ </object>
+ <int key="connectionID">39</int>
+ </object>
+ </object>
+ <object class="IBMutableOrderedSet" key="objectRecords">
+ <object class="NSArray" key="orderedObjects">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBObjectRecord">
+ <int key="objectID">0</int>
+ <reference key="object" ref="0"/>
+ <reference key="children" ref="1000"/>
+ <nil key="parent"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">-2</int>
+ <reference key="object" ref="1001"/>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">File's Owner</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">-1</int>
+ <reference key="object" ref="1003"/>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">First Responder</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">-3</int>
+ <reference key="object" ref="1004"/>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">Application</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1</int>
+ <reference key="object" ref="1005"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="1006"/>
+ <reference ref="392415761"/>
+ </object>
+ <reference key="parent" ref="0"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">2</int>
+ <reference key="object" ref="1006"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="299449310"/>
+ <reference ref="1055532139"/>
+ <reference ref="727691575"/>
+ </object>
+ <reference key="parent" ref="1005"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">4</int>
+ <reference key="object" ref="299449310"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="217278618"/>
+ <reference ref="837576252"/>
+ <reference ref="947292612"/>
+ </object>
+ <reference key="parent" ref="1006"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">5</int>
+ <reference key="object" ref="217278618"/>
+ <reference key="parent" ref="299449310"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">6</int>
+ <reference key="object" ref="837576252"/>
+ <reference key="parent" ref="299449310"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">7</int>
+ <reference key="object" ref="947292612"/>
+ <reference key="parent" ref="299449310"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">8</int>
+ <reference key="object" ref="392415761"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="191318475"/>
+ <reference ref="481399099"/>
+ <reference ref="554531361"/>
+ <reference ref="1049725992"/>
+ <reference ref="784507185"/>
+ <reference ref="702346074"/>
+ <reference ref="525444158"/>
+ <reference ref="955202223"/>
+ <reference ref="734074974"/>
+ </object>
+ <reference key="parent" ref="1005"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">13</int>
+ <reference key="object" ref="191318475"/>
+ <reference key="parent" ref="392415761"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">14</int>
+ <reference key="object" ref="481399099"/>
+ <reference key="parent" ref="392415761"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">15</int>
+ <reference key="object" ref="554531361"/>
+ <reference key="parent" ref="392415761"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">11</int>
+ <reference key="object" ref="1049725992"/>
+ <reference key="parent" ref="392415761"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">18</int>
+ <reference key="object" ref="784507185"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="570769942"/>
+ </object>
+ <reference key="parent" ref="392415761"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">16</int>
+ <reference key="object" ref="570769942"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="465639940"/>
+ </object>
+ <reference key="parent" ref="784507185"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">17</int>
+ <reference key="object" ref="465639940"/>
+ <reference key="parent" ref="570769942"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">22</int>
+ <reference key="object" ref="702346074"/>
+ <reference key="parent" ref="392415761"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">23</int>
+ <reference key="object" ref="525444158"/>
+ <reference key="parent" ref="392415761"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">24</int>
+ <reference key="object" ref="955202223"/>
+ <reference key="parent" ref="392415761"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">25</int>
+ <reference key="object" ref="734074974"/>
+ <reference key="parent" ref="392415761"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">32</int>
+ <reference key="object" ref="374263046"/>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">Browser View</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">35</int>
+ <reference key="object" ref="1055532139"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="559666362"/>
+ </object>
+ <reference key="parent" ref="1006"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">36</int>
+ <reference key="object" ref="559666362"/>
+ <reference key="parent" ref="1055532139"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">38</int>
+ <reference key="object" ref="727691575"/>
+ <reference key="parent" ref="1006"/>
+ </object>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="flattenedProperties">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>1.IBEditorWindowLastContentRect</string>
+ <string>1.IBPluginDependency</string>
+ <string>1.IBWindowTemplateEditedContentRect</string>
+ <string>1.NSWindowTemplate.visibleAtLaunch</string>
+ <string>1.WindowOrigin</string>
+ <string>1.editorWindowContentRectSynchronizationRect</string>
+ <string>11.IBPluginDependency</string>
+ <string>13.IBPluginDependency</string>
+ <string>14.IBPluginDependency</string>
+ <string>15.IBPluginDependency</string>
+ <string>16.IBPluginDependency</string>
+ <string>17.IBPluginDependency</string>
+ <string>2.IBPluginDependency</string>
+ <string>22.IBPluginDependency</string>
+ <string>23.IBPluginDependency</string>
+ <string>24.IBPluginDependency</string>
+ <string>25.IBPluginDependency</string>
+ <string>32.IBPluginDependency</string>
+ <string>35.IBPluginDependency</string>
+ <string>35.IBViewBoundsToFrameTransform</string>
+ <string>36.IBPluginDependency</string>
+ <string>38.IBPluginDependency</string>
+ <string>38.IBViewBoundsToFrameTransform</string>
+ <string>4.IBPluginDependency</string>
+ <string>4.IBViewBoundsToFrameTransform</string>
+ <string>5.IBPluginDependency</string>
+ <string>6.IBPluginDependency</string>
+ <string>7.IBPluginDependency</string>
+ <string>8.IBEditorWindowLastContentRect</string>
+ <string>8.IBPluginDependency</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>{{135, 249}, {691, 632}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>{{135, 249}, {691, 632}}</string>
+ <integer value="1"/>
+ <string>{196, 240}</string>
+ <string>{{202, 428}, {480, 270}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <object class="NSAffineTransform">
+ <bytes key="NSTransformStruct">P4AAAL+AAABAoAAAwXAAAA</bytes>
+ </object>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <object class="NSAffineTransform">
+ <bytes key="NSTransformStruct">P4AAAL+AAABDQwAAwYgAAA</bytes>
+ </object>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <object class="NSAffineTransform">
+ <bytes key="NSTransformStruct">P4AAAL+AAAC/gAAAw5EAAA</bytes>
+ </object>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>{{172, 881}, {617, 0}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="unlocalizedProperties">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference key="dict.sortedKeys" ref="0"/>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ </object>
+ <nil key="activeLocalization"/>
+ <object class="NSMutableDictionary" key="localizations">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference key="dict.sortedKeys" ref="0"/>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ </object>
+ <nil key="sourceID"/>
+ <int key="maxID">39</int>
+ </object>
+ <object class="IBClassDescriber" key="IBDocument.Classes">
+ <object class="NSMutableArray" key="referencedPartialClassDescriptions">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBPartialClassDescription">
+ <string key="className">BrowserView</string>
+ <string key="superclassName">NSView</string>
+ <object class="NSMutableDictionary" key="actions">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>goBack:</string>
+ <string>goForward:</string>
+ <string>reloadPage:</string>
+ <string>showHistory:</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="actionInfosByName">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>goBack:</string>
+ <string>goForward:</string>
+ <string>reloadPage:</string>
+ <string>showHistory:</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBActionInfo">
+ <string key="name">goBack:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ <object class="IBActionInfo">
+ <string key="name">goForward:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ <object class="IBActionInfo">
+ <string key="name">reloadPage:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ <object class="IBActionInfo">
+ <string key="name">showHistory:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ </object>
+ </object>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">BrowserView.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">BrowserWindow</string>
+ <string key="superclassName">NSWindowController</string>
+ <object class="NSMutableDictionary" key="actions">
+ <string key="NS.key.0">navigate:</string>
+ <string key="NS.object.0">id</string>
+ </object>
+ <object class="NSMutableDictionary" key="actionInfosByName">
+ <string key="NS.key.0">navigate:</string>
+ <object class="IBActionInfo" key="NS.object.0">
+ <string key="name">navigate:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="outlets">
+ <string key="NS.key.0">view</string>
+ <string key="NS.object.0">BrowserView</string>
+ </object>
+ <object class="NSMutableDictionary" key="toOneOutletInfosByName">
+ <string key="NS.key.0">view</string>
+ <object class="IBToOneOutletInfo" key="NS.object.0">
+ <string key="name">view</string>
+ <string key="candidateClassName">BrowserView</string>
+ </object>
+ </object>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">BrowserWindow.h</string>
+ </object>
+ </object>
+ </object>
+ </object>
+ <int key="IBDocument.localizationMode">0</int>
+ <string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
+ <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
+ <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
+ <integer value="1050" key="NS.object.0"/>
+ </object>
+ <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
+ <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
+ <integer value="3000" key="NS.object.0"/>
+ </object>
+ <bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
+ <string key="IBDocument.LastKnownRelativeProjectPath">../NetSurf.xcodeproj</string>
+ <int key="IBDocument.defaultPropertyAccessControl">3</int>
+ <object class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>NSGoLeftTemplate</string>
+ <string>NSGoRightTemplate</string>
+ <string>NSMenuCheckmark</string>
+ <string>NSMenuMixedState</string>
+ <string>NSMultipleDocuments</string>
+ <string>NSRefreshTemplate</string>
+ <string>NSToolbarCustomizeToolbarItemImage</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>{9, 9}</string>
+ <string>{9, 9}</string>
+ <string>{9, 8}</string>
+ <string>{7, 2}</string>
+ <string>{32, 32}</string>
+ <string>{10, 12}</string>
+ <string>{32, 32}</string>
+ </object>
+ </object>
+ </data>
+</archive>
diff --git a/cocoa/res/MainMenu.xib b/cocoa/res/MainMenu.xib
new file mode 100644
index 000000000..01b7d134b
--- /dev/null
+++ b/cocoa/res/MainMenu.xib
@@ -0,0 +1,1578 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
+ <data>
+ <int key="IBDocument.SystemTarget">1050</int>
+ <string key="IBDocument.SystemVersion">10J567</string>
+ <string key="IBDocument.InterfaceBuilderVersion">804</string>
+ <string key="IBDocument.AppKitVersion">1038.35</string>
+ <string key="IBDocument.HIToolboxVersion">462.00</string>
+ <object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+ <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string key="NS.object.0">804</string>
+ </object>
+ <object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <integer value="106"/>
+ </object>
+ <object class="NSArray" key="IBDocument.PluginDependencies">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ </object>
+ <object class="NSMutableDictionary" key="IBDocument.Metadata">
+ <string key="NS.key.0">PluginDependencyRecalculationVersion</string>
+ <integer value="1" key="NS.object.0"/>
+ </object>
+ <object class="NSMutableArray" key="IBDocument.RootObjects" id="1048">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSCustomObject" id="1021">
+ <string key="NSClassName">NSApplication</string>
+ </object>
+ <object class="NSCustomObject" id="1014">
+ <string key="NSClassName">FirstResponder</string>
+ </object>
+ <object class="NSCustomObject" id="1050">
+ <string key="NSClassName">NSApplication</string>
+ </object>
+ <object class="NSMenu" id="649796088">
+ <string key="NSTitle">Main Menu</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="694149608">
+ <reference key="NSMenu" ref="649796088"/>
+ <string key="NSTitle">NetSurf</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <object class="NSCustomResource" key="NSOnImage" id="756751024">
+ <string key="NSClassName">NSImage</string>
+ <string key="NSResourceName">NSMenuCheckmark</string>
+ </object>
+ <object class="NSCustomResource" key="NSMixedImage" id="908425081">
+ <string key="NSClassName">NSImage</string>
+ <string key="NSResourceName">NSMenuMixedState</string>
+ </object>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="110575045">
+ <string key="NSTitle">NetSurf</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="238522557">
+ <reference key="NSMenu" ref="110575045"/>
+ <string key="NSTitle">About NetSurf</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="756751024"/>
+ <reference key="NSMixedImage" ref="908425081"/>
+ </object>
+ <object class="NSMenuItem" id="304266470">
+ <reference key="NSMenu" ref="110575045"/>
+ <bool key="NSIsDisabled">YES</bool>
+ <bool key="NSIsSeparator">YES</bool>
+ <string key="NSTitle"/>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="756751024"/>
+ <reference key="NSMixedImage" ref="908425081"/>
+ </object>
+ <object class="NSMenuItem" id="609285721">
+ <reference key="NSMenu" ref="110575045"/>
+ <string key="NSTitle">Preferences…</string>
+ <string key="NSKeyEquiv">,</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="756751024"/>
+ <reference key="NSMixedImage" ref="908425081"/>
+ </object>
+ <object class="NSMenuItem" id="481834944">
+ <reference key="NSMenu" ref="110575045"/>
+ <bool key="NSIsDisabled">YES</bool>
+ <bool key="NSIsSeparator">YES</bool>
+ <string key="NSTitle"/>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="756751024"/>
+ <reference key="NSMixedImage" ref="908425081"/>
+ </object>
+ <object class="NSMenuItem" id="1046388886">
+ <reference key="NSMenu" ref="110575045"/>
+ <string key="NSTitle">Services</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="756751024"/>
+ <reference key="NSMixedImage" ref="908425081"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="752062318">
+ <string key="NSTitle">Services</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ <string key="NSName">_NSServicesMenu</string>
+ </object>
+ </object>
+ <object class="NSMenuItem" id="646227648">
+ <reference key="NSMenu" ref="110575045"/>
+ <bool key="NSIsDisabled">YES</bool>
+ <bool key="NSIsSeparator">YES</bool>
+ <string key="NSTitle"/>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="756751024"/>
+ <reference key="NSMixedImage" ref="908425081"/>
+ </object>
+ <object class="NSMenuItem" id="755159360">
+ <reference key="NSMenu" ref="110575045"/>
+ <string key="NSTitle">Hide NetSurf</string>
+ <string key="NSKeyEquiv">h</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="756751024"/>
+ <reference key="NSMixedImage" ref="908425081"/>
+ </object>
+ <object class="NSMenuItem" id="342932134">
+ <reference key="NSMenu" ref="110575045"/>
+ <string key="NSTitle">Hide Others</string>
+ <string key="NSKeyEquiv">h</string>
+ <int key="NSKeyEquivModMask">1572864</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="756751024"/>
+ <reference key="NSMixedImage" ref="908425081"/>
+ </object>
+ <object class="NSMenuItem" id="908899353">
+ <reference key="NSMenu" ref="110575045"/>
+ <string key="NSTitle">Show All</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="756751024"/>
+ <reference key="NSMixedImage" ref="908425081"/>
+ </object>
+ <object class="NSMenuItem" id="1056857174">
+ <reference key="NSMenu" ref="110575045"/>
+ <bool key="NSIsDisabled">YES</bool>
+ <bool key="NSIsSeparator">YES</bool>
+ <string key="NSTitle"/>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="756751024"/>
+ <reference key="NSMixedImage" ref="908425081"/>
+ </object>
+ <object class="NSMenuItem" id="632727374">
+ <reference key="NSMenu" ref="110575045"/>
+ <string key="NSTitle">Quit NetSurf</string>
+ <string key="NSKeyEquiv">q</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="756751024"/>
+ <reference key="NSMixedImage" ref="908425081"/>
+ </object>
+ </object>
+ <string key="NSName">_NSAppleMenu</string>
+ </object>
+ </object>
+ <object class="NSMenuItem" id="379814623">
+ <reference key="NSMenu" ref="649796088"/>
+ <string key="NSTitle">File</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="756751024"/>
+ <reference key="NSMixedImage" ref="908425081"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="720053764">
+ <string key="NSTitle">File</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="705341025">
+ <reference key="NSMenu" ref="720053764"/>
+ <string key="NSTitle">New</string>
+ <string key="NSKeyEquiv">n</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="756751024"/>
+ <reference key="NSMixedImage" ref="908425081"/>
+ </object>
+ <object class="NSMenuItem" id="722745758">
+ <reference key="NSMenu" ref="720053764"/>
+ <string key="NSTitle">Open…</string>
+ <string key="NSKeyEquiv">o</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="756751024"/>
+ <reference key="NSMixedImage" ref="908425081"/>
+ </object>
+ <object class="NSMenuItem" id="425164168">
+ <reference key="NSMenu" ref="720053764"/>
+ <bool key="NSIsDisabled">YES</bool>
+ <bool key="NSIsSeparator">YES</bool>
+ <string key="NSTitle"/>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="756751024"/>
+ <reference key="NSMixedImage" ref="908425081"/>
+ </object>
+ <object class="NSMenuItem" id="776162233">
+ <reference key="NSMenu" ref="720053764"/>
+ <string key="NSTitle">Close</string>
+ <string key="NSKeyEquiv">w</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="756751024"/>
+ <reference key="NSMixedImage" ref="908425081"/>
+ </object>
+ <object class="NSMenuItem" id="1023925487">
+ <reference key="NSMenu" ref="720053764"/>
+ <string key="NSTitle">Save</string>
+ <string key="NSKeyEquiv">s</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="756751024"/>
+ <reference key="NSMixedImage" ref="908425081"/>
+ </object>
+ <object class="NSMenuItem" id="117038363">
+ <reference key="NSMenu" ref="720053764"/>
+ <string key="NSTitle">Save As…</string>
+ <string key="NSKeyEquiv">S</string>
+ <int key="NSKeyEquivModMask">1179648</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="756751024"/>
+ <reference key="NSMixedImage" ref="908425081"/>
+ </object>
+ <object class="NSMenuItem" id="579971712">
+ <reference key="NSMenu" ref="720053764"/>
+ <string key="NSTitle">Revert to Saved</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="756751024"/>
+ <reference key="NSMixedImage" ref="908425081"/>
+ </object>
+ <object class="NSMenuItem" id="1010469920">
+ <reference key="NSMenu" ref="720053764"/>
+ <bool key="NSIsDisabled">YES</bool>
+ <bool key="NSIsSeparator">YES</bool>
+ <string key="NSTitle"/>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="756751024"/>
+ <reference key="NSMixedImage" ref="908425081"/>
+ </object>
+ <object class="NSMenuItem" id="294629803">
+ <reference key="NSMenu" ref="720053764"/>
+ <string key="NSTitle">Page Setup...</string>
+ <string key="NSKeyEquiv">P</string>
+ <int key="NSKeyEquivModMask">1179648</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="756751024"/>
+ <reference key="NSMixedImage" ref="908425081"/>
+ <string key="NSToolTip"/>
+ </object>
+ <object class="NSMenuItem" id="49223823">
+ <reference key="NSMenu" ref="720053764"/>
+ <string key="NSTitle">Print…</string>
+ <string key="NSKeyEquiv">p</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="756751024"/>
+ <reference key="NSMixedImage" ref="908425081"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="NSMenuItem" id="584895621">
+ <reference key="NSMenu" ref="649796088"/>
+ <string key="NSTitle">Edit</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="756751024"/>
+ <reference key="NSMixedImage" ref="908425081"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="141080932">
+ <string key="NSTitle">Edit</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="80034836">
+ <reference key="NSMenu" ref="141080932"/>
+ <string key="NSTitle">Undo</string>
+ <string key="NSKeyEquiv">z</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="756751024"/>
+ <reference key="NSMixedImage" ref="908425081"/>
+ </object>
+ <object class="NSMenuItem" id="128588396">
+ <reference key="NSMenu" ref="141080932"/>
+ <string key="NSTitle">Redo</string>
+ <string key="NSKeyEquiv">Z</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="756751024"/>
+ <reference key="NSMixedImage" ref="908425081"/>
+ </object>
+ <object class="NSMenuItem" id="165057028">
+ <reference key="NSMenu" ref="141080932"/>
+ <bool key="NSIsDisabled">YES</bool>
+ <bool key="NSIsSeparator">YES</bool>
+ <string key="NSTitle"/>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="756751024"/>
+ <reference key="NSMixedImage" ref="908425081"/>
+ </object>
+ <object class="NSMenuItem" id="5858980">
+ <reference key="NSMenu" ref="141080932"/>
+ <string key="NSTitle">Cut</string>
+ <string key="NSKeyEquiv">x</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="756751024"/>
+ <reference key="NSMixedImage" ref="908425081"/>
+ </object>
+ <object class="NSMenuItem" id="704355768">
+ <reference key="NSMenu" ref="141080932"/>
+ <string key="NSTitle">Copy</string>
+ <string key="NSKeyEquiv">c</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="756751024"/>
+ <reference key="NSMixedImage" ref="908425081"/>
+ </object>
+ <object class="NSMenuItem" id="275307167">
+ <reference key="NSMenu" ref="141080932"/>
+ <string key="NSTitle">Paste</string>
+ <string key="NSKeyEquiv">v</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="756751024"/>
+ <reference key="NSMixedImage" ref="908425081"/>
+ </object>
+ <object class="NSMenuItem" id="714155551">
+ <reference key="NSMenu" ref="141080932"/>
+ <string key="NSTitle">Delete</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="756751024"/>
+ <reference key="NSMixedImage" ref="908425081"/>
+ </object>
+ <object class="NSMenuItem" id="197377228">
+ <reference key="NSMenu" ref="141080932"/>
+ <string key="NSTitle">Select All</string>
+ <string key="NSKeyEquiv">a</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="756751024"/>
+ <reference key="NSMixedImage" ref="908425081"/>
+ </object>
+ <object class="NSMenuItem" id="246962120">
+ <reference key="NSMenu" ref="141080932"/>
+ <bool key="NSIsDisabled">YES</bool>
+ <bool key="NSIsSeparator">YES</bool>
+ <string key="NSTitle"/>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="756751024"/>
+ <reference key="NSMixedImage" ref="908425081"/>
+ </object>
+ <object class="NSMenuItem" id="602982148">
+ <reference key="NSMenu" ref="141080932"/>
+ <string key="NSTitle">Find</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="756751024"/>
+ <reference key="NSMixedImage" ref="908425081"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="930654435">
+ <string key="NSTitle">Find</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="671868626">
+ <reference key="NSMenu" ref="930654435"/>
+ <string key="NSTitle">Find…</string>
+ <string key="NSKeyEquiv">f</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="756751024"/>
+ <reference key="NSMixedImage" ref="908425081"/>
+ <int key="NSTag">1</int>
+ </object>
+ <object class="NSMenuItem" id="497741775">
+ <reference key="NSMenu" ref="930654435"/>
+ <string key="NSTitle">Find Next</string>
+ <string key="NSKeyEquiv">g</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="756751024"/>
+ <reference key="NSMixedImage" ref="908425081"/>
+ <int key="NSTag">2</int>
+ </object>
+ <object class="NSMenuItem" id="285322108">
+ <reference key="NSMenu" ref="930654435"/>
+ <string key="NSTitle">Find Previous</string>
+ <string key="NSKeyEquiv">G</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="756751024"/>
+ <reference key="NSMixedImage" ref="908425081"/>
+ <int key="NSTag">3</int>
+ </object>
+ <object class="NSMenuItem" id="456308224">
+ <reference key="NSMenu" ref="930654435"/>
+ <string key="NSTitle">Use Selection for Find</string>
+ <string key="NSKeyEquiv">e</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="756751024"/>
+ <reference key="NSMixedImage" ref="908425081"/>
+ <int key="NSTag">7</int>
+ </object>
+ <object class="NSMenuItem" id="548069040">
+ <reference key="NSMenu" ref="930654435"/>
+ <string key="NSTitle">Jump to Selection</string>
+ <string key="NSKeyEquiv">j</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="756751024"/>
+ <reference key="NSMixedImage" ref="908425081"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="NSMenuItem" id="1046338161">
+ <reference key="NSMenu" ref="141080932"/>
+ <string key="NSTitle">Speech</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="756751024"/>
+ <reference key="NSMixedImage" ref="908425081"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="390929284">
+ <string key="NSTitle">Speech</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="787796378">
+ <reference key="NSMenu" ref="390929284"/>
+ <string key="NSTitle">Start Speaking</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="756751024"/>
+ <reference key="NSMixedImage" ref="908425081"/>
+ </object>
+ <object class="NSMenuItem" id="831785675">
+ <reference key="NSMenu" ref="390929284"/>
+ <string key="NSTitle">Stop Speaking</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="756751024"/>
+ <reference key="NSMixedImage" ref="908425081"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="NSMenuItem" id="586577488">
+ <reference key="NSMenu" ref="649796088"/>
+ <string key="NSTitle">View</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="756751024"/>
+ <reference key="NSMixedImage" ref="908425081"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="466310130">
+ <string key="NSTitle">View</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="102151532">
+ <reference key="NSMenu" ref="466310130"/>
+ <string key="NSTitle">Show Toolbar</string>
+ <string key="NSKeyEquiv">t</string>
+ <int key="NSKeyEquivModMask">1572864</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="756751024"/>
+ <reference key="NSMixedImage" ref="908425081"/>
+ </object>
+ <object class="NSMenuItem" id="237841660">
+ <reference key="NSMenu" ref="466310130"/>
+ <string key="NSTitle">Customize Toolbar…</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="756751024"/>
+ <reference key="NSMixedImage" ref="908425081"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="NSMenuItem" id="713487014">
+ <reference key="NSMenu" ref="649796088"/>
+ <string key="NSTitle">Window</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="756751024"/>
+ <reference key="NSMixedImage" ref="908425081"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="835318025">
+ <string key="NSTitle">Window</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="1011231497">
+ <reference key="NSMenu" ref="835318025"/>
+ <string key="NSTitle">Minimize</string>
+ <string key="NSKeyEquiv">m</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="756751024"/>
+ <reference key="NSMixedImage" ref="908425081"/>
+ </object>
+ <object class="NSMenuItem" id="575023229">
+ <reference key="NSMenu" ref="835318025"/>
+ <string key="NSTitle">Zoom</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="756751024"/>
+ <reference key="NSMixedImage" ref="908425081"/>
+ </object>
+ <object class="NSMenuItem" id="299356726">
+ <reference key="NSMenu" ref="835318025"/>
+ <bool key="NSIsDisabled">YES</bool>
+ <bool key="NSIsSeparator">YES</bool>
+ <string key="NSTitle"/>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="756751024"/>
+ <reference key="NSMixedImage" ref="908425081"/>
+ </object>
+ <object class="NSMenuItem" id="625202149">
+ <reference key="NSMenu" ref="835318025"/>
+ <string key="NSTitle">Bring All to Front</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="756751024"/>
+ <reference key="NSMixedImage" ref="908425081"/>
+ </object>
+ </object>
+ <string key="NSName">_NSWindowsMenu</string>
+ </object>
+ </object>
+ <object class="NSMenuItem" id="391199113">
+ <reference key="NSMenu" ref="649796088"/>
+ <string key="NSTitle">Help</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="756751024"/>
+ <reference key="NSMixedImage" ref="908425081"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="374024848">
+ <string key="NSTitle">Help</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="238773614">
+ <reference key="NSMenu" ref="374024848"/>
+ <string key="NSTitle">NetSurf Help</string>
+ <string key="NSKeyEquiv">?</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="756751024"/>
+ <reference key="NSMixedImage" ref="908425081"/>
+ </object>
+ </object>
+ <string key="NSName">_NSHelpMenu</string>
+ </object>
+ </object>
+ </object>
+ <string key="NSName">_NSMainMenu</string>
+ </object>
+ </object>
+ <object class="IBObjectContainer" key="IBDocument.Objects">
+ <object class="NSMutableArray" key="connectionRecords">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">performMiniaturize:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="1011231497"/>
+ </object>
+ <int key="connectionID">37</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">arrangeInFront:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="625202149"/>
+ </object>
+ <int key="connectionID">39</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">print:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="49223823"/>
+ </object>
+ <int key="connectionID">86</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">runPageLayout:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="294629803"/>
+ </object>
+ <int key="connectionID">87</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">orderFrontStandardAboutPanel:</string>
+ <reference key="source" ref="1021"/>
+ <reference key="destination" ref="238522557"/>
+ </object>
+ <int key="connectionID">142</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">performClose:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="776162233"/>
+ </object>
+ <int key="connectionID">193</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">performZoom:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="575023229"/>
+ </object>
+ <int key="connectionID">240</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">showHelp:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="238773614"/>
+ </object>
+ <int key="connectionID">360</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">saveDocument:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="1023925487"/>
+ </object>
+ <int key="connectionID">362</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">saveDocumentAs:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="117038363"/>
+ </object>
+ <int key="connectionID">363</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">revertDocumentToSaved:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="579971712"/>
+ </object>
+ <int key="connectionID">364</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">runToolbarCustomizationPalette:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="237841660"/>
+ </object>
+ <int key="connectionID">365</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">toggleToolbarShown:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="102151532"/>
+ </object>
+ <int key="connectionID">366</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">hide:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="755159360"/>
+ </object>
+ <int key="connectionID">369</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">hideOtherApplications:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="342932134"/>
+ </object>
+ <int key="connectionID">370</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">unhideAllApplications:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="908899353"/>
+ </object>
+ <int key="connectionID">372</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">terminate:</string>
+ <reference key="source" ref="1021"/>
+ <reference key="destination" ref="632727374"/>
+ </object>
+ <int key="connectionID">448</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">cut:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="5858980"/>
+ </object>
+ <int key="connectionID">741</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">paste:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="275307167"/>
+ </object>
+ <int key="connectionID">742</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">redo:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="128588396"/>
+ </object>
+ <int key="connectionID">745</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">undo:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="80034836"/>
+ </object>
+ <int key="connectionID">749</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">startSpeaking:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="787796378"/>
+ </object>
+ <int key="connectionID">751</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">copy:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="704355768"/>
+ </object>
+ <int key="connectionID">755</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">delete:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="714155551"/>
+ </object>
+ <int key="connectionID">756</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">selectAll:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="197377228"/>
+ </object>
+ <int key="connectionID">758</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">stopSpeaking:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="831785675"/>
+ </object>
+ <int key="connectionID">759</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">performFindPanelAction:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="285322108"/>
+ </object>
+ <int key="connectionID">771</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">performFindPanelAction:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="671868626"/>
+ </object>
+ <int key="connectionID">772</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">performFindPanelAction:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="456308224"/>
+ </object>
+ <int key="connectionID">773</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">centerSelectionInVisibleArea:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="548069040"/>
+ </object>
+ <int key="connectionID">774</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">performFindPanelAction:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="497741775"/>
+ </object>
+ <int key="connectionID">775</int>
+ </object>
+ </object>
+ <object class="IBMutableOrderedSet" key="objectRecords">
+ <object class="NSArray" key="orderedObjects">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBObjectRecord">
+ <int key="objectID">0</int>
+ <object class="NSArray" key="object" id="0">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ <reference key="children" ref="1048"/>
+ <nil key="parent"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">-2</int>
+ <reference key="object" ref="1021"/>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">File's Owner</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">-1</int>
+ <reference key="object" ref="1014"/>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">First Responder</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">-3</int>
+ <reference key="object" ref="1050"/>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">Application</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">29</int>
+ <reference key="object" ref="649796088"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="713487014"/>
+ <reference ref="694149608"/>
+ <reference ref="391199113"/>
+ <reference ref="379814623"/>
+ <reference ref="586577488"/>
+ <reference ref="584895621"/>
+ </object>
+ <reference key="parent" ref="0"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">19</int>
+ <reference key="object" ref="713487014"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="835318025"/>
+ </object>
+ <reference key="parent" ref="649796088"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">56</int>
+ <reference key="object" ref="694149608"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="110575045"/>
+ </object>
+ <reference key="parent" ref="649796088"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">103</int>
+ <reference key="object" ref="391199113"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="374024848"/>
+ </object>
+ <reference key="parent" ref="649796088"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">83</int>
+ <reference key="object" ref="379814623"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="720053764"/>
+ </object>
+ <reference key="parent" ref="649796088"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">81</int>
+ <reference key="object" ref="720053764"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="1023925487"/>
+ <reference ref="117038363"/>
+ <reference ref="49223823"/>
+ <reference ref="722745758"/>
+ <reference ref="705341025"/>
+ <reference ref="294629803"/>
+ <reference ref="776162233"/>
+ <reference ref="579971712"/>
+ <reference ref="1010469920"/>
+ <reference ref="425164168"/>
+ </object>
+ <reference key="parent" ref="379814623"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">75</int>
+ <reference key="object" ref="1023925487"/>
+ <reference key="parent" ref="720053764"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">80</int>
+ <reference key="object" ref="117038363"/>
+ <reference key="parent" ref="720053764"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">78</int>
+ <reference key="object" ref="49223823"/>
+ <reference key="parent" ref="720053764"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">72</int>
+ <reference key="object" ref="722745758"/>
+ <reference key="parent" ref="720053764"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">82</int>
+ <reference key="object" ref="705341025"/>
+ <reference key="parent" ref="720053764"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">77</int>
+ <reference key="object" ref="294629803"/>
+ <reference key="parent" ref="720053764"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">73</int>
+ <reference key="object" ref="776162233"/>
+ <reference key="parent" ref="720053764"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">112</int>
+ <reference key="object" ref="579971712"/>
+ <reference key="parent" ref="720053764"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">74</int>
+ <reference key="object" ref="1010469920"/>
+ <reference key="parent" ref="720053764"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">106</int>
+ <reference key="object" ref="374024848"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="238773614"/>
+ </object>
+ <reference key="parent" ref="391199113"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">111</int>
+ <reference key="object" ref="238773614"/>
+ <reference key="parent" ref="374024848"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">57</int>
+ <reference key="object" ref="110575045"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="238522557"/>
+ <reference ref="755159360"/>
+ <reference ref="908899353"/>
+ <reference ref="632727374"/>
+ <reference ref="646227648"/>
+ <reference ref="609285721"/>
+ <reference ref="481834944"/>
+ <reference ref="304266470"/>
+ <reference ref="1046388886"/>
+ <reference ref="1056857174"/>
+ <reference ref="342932134"/>
+ </object>
+ <reference key="parent" ref="694149608"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">58</int>
+ <reference key="object" ref="238522557"/>
+ <reference key="parent" ref="110575045"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">134</int>
+ <reference key="object" ref="755159360"/>
+ <reference key="parent" ref="110575045"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">150</int>
+ <reference key="object" ref="908899353"/>
+ <reference key="parent" ref="110575045"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">136</int>
+ <reference key="object" ref="632727374"/>
+ <reference key="parent" ref="110575045"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">144</int>
+ <reference key="object" ref="646227648"/>
+ <reference key="parent" ref="110575045"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">129</int>
+ <reference key="object" ref="609285721"/>
+ <reference key="parent" ref="110575045"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">143</int>
+ <reference key="object" ref="481834944"/>
+ <reference key="parent" ref="110575045"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">236</int>
+ <reference key="object" ref="304266470"/>
+ <reference key="parent" ref="110575045"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">131</int>
+ <reference key="object" ref="1046388886"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="752062318"/>
+ </object>
+ <reference key="parent" ref="110575045"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">149</int>
+ <reference key="object" ref="1056857174"/>
+ <reference key="parent" ref="110575045"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">145</int>
+ <reference key="object" ref="342932134"/>
+ <reference key="parent" ref="110575045"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">130</int>
+ <reference key="object" ref="752062318"/>
+ <reference key="parent" ref="1046388886"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">24</int>
+ <reference key="object" ref="835318025"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="299356726"/>
+ <reference ref="625202149"/>
+ <reference ref="575023229"/>
+ <reference ref="1011231497"/>
+ </object>
+ <reference key="parent" ref="713487014"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">92</int>
+ <reference key="object" ref="299356726"/>
+ <reference key="parent" ref="835318025"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">5</int>
+ <reference key="object" ref="625202149"/>
+ <reference key="parent" ref="835318025"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">239</int>
+ <reference key="object" ref="575023229"/>
+ <reference key="parent" ref="835318025"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">23</int>
+ <reference key="object" ref="1011231497"/>
+ <reference key="parent" ref="835318025"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">295</int>
+ <reference key="object" ref="586577488"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="466310130"/>
+ </object>
+ <reference key="parent" ref="649796088"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">296</int>
+ <reference key="object" ref="466310130"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="102151532"/>
+ <reference ref="237841660"/>
+ </object>
+ <reference key="parent" ref="586577488"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">297</int>
+ <reference key="object" ref="102151532"/>
+ <reference key="parent" ref="466310130"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">298</int>
+ <reference key="object" ref="237841660"/>
+ <reference key="parent" ref="466310130"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">79</int>
+ <reference key="object" ref="425164168"/>
+ <reference key="parent" ref="720053764"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">684</int>
+ <reference key="object" ref="584895621"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="141080932"/>
+ </object>
+ <reference key="parent" ref="649796088"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">685</int>
+ <reference key="object" ref="141080932"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="80034836"/>
+ <reference ref="128588396"/>
+ <reference ref="165057028"/>
+ <reference ref="5858980"/>
+ <reference ref="704355768"/>
+ <reference ref="275307167"/>
+ <reference ref="714155551"/>
+ <reference ref="197377228"/>
+ <reference ref="246962120"/>
+ <reference ref="602982148"/>
+ <reference ref="1046338161"/>
+ </object>
+ <reference key="parent" ref="584895621"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">686</int>
+ <reference key="object" ref="80034836"/>
+ <reference key="parent" ref="141080932"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">687</int>
+ <reference key="object" ref="128588396"/>
+ <reference key="parent" ref="141080932"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">688</int>
+ <reference key="object" ref="165057028"/>
+ <reference key="parent" ref="141080932"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">689</int>
+ <reference key="object" ref="5858980"/>
+ <reference key="parent" ref="141080932"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">690</int>
+ <reference key="object" ref="704355768"/>
+ <reference key="parent" ref="141080932"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">691</int>
+ <reference key="object" ref="275307167"/>
+ <reference key="parent" ref="141080932"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">693</int>
+ <reference key="object" ref="714155551"/>
+ <reference key="parent" ref="141080932"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">694</int>
+ <reference key="object" ref="197377228"/>
+ <reference key="parent" ref="141080932"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">695</int>
+ <reference key="object" ref="246962120"/>
+ <reference key="parent" ref="141080932"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">696</int>
+ <reference key="object" ref="602982148"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="930654435"/>
+ </object>
+ <reference key="parent" ref="141080932"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">700</int>
+ <reference key="object" ref="1046338161"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="390929284"/>
+ </object>
+ <reference key="parent" ref="141080932"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">711</int>
+ <reference key="object" ref="390929284"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="787796378"/>
+ <reference ref="831785675"/>
+ </object>
+ <reference key="parent" ref="1046338161"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">712</int>
+ <reference key="object" ref="787796378"/>
+ <reference key="parent" ref="390929284"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">713</int>
+ <reference key="object" ref="831785675"/>
+ <reference key="parent" ref="390929284"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">734</int>
+ <reference key="object" ref="930654435"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="671868626"/>
+ <reference ref="497741775"/>
+ <reference ref="285322108"/>
+ <reference ref="456308224"/>
+ <reference ref="548069040"/>
+ </object>
+ <reference key="parent" ref="602982148"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">735</int>
+ <reference key="object" ref="671868626"/>
+ <reference key="parent" ref="930654435"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">736</int>
+ <reference key="object" ref="497741775"/>
+ <reference key="parent" ref="930654435"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">737</int>
+ <reference key="object" ref="285322108"/>
+ <reference key="parent" ref="930654435"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">738</int>
+ <reference key="object" ref="456308224"/>
+ <reference key="parent" ref="930654435"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">739</int>
+ <reference key="object" ref="548069040"/>
+ <reference key="parent" ref="930654435"/>
+ </object>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="flattenedProperties">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>-3.IBPluginDependency</string>
+ <string>103.IBPluginDependency</string>
+ <string>103.ImportedFromIB2</string>
+ <string>106.IBEditorWindowLastContentRect</string>
+ <string>106.IBPluginDependency</string>
+ <string>106.ImportedFromIB2</string>
+ <string>106.editorWindowContentRectSynchronizationRect</string>
+ <string>111.IBPluginDependency</string>
+ <string>111.ImportedFromIB2</string>
+ <string>112.IBPluginDependency</string>
+ <string>112.ImportedFromIB2</string>
+ <string>129.IBPluginDependency</string>
+ <string>129.ImportedFromIB2</string>
+ <string>130.IBEditorWindowLastContentRect</string>
+ <string>130.IBPluginDependency</string>
+ <string>130.ImportedFromIB2</string>
+ <string>130.editorWindowContentRectSynchronizationRect</string>
+ <string>131.IBPluginDependency</string>
+ <string>131.ImportedFromIB2</string>
+ <string>134.IBPluginDependency</string>
+ <string>134.ImportedFromIB2</string>
+ <string>136.IBPluginDependency</string>
+ <string>136.ImportedFromIB2</string>
+ <string>143.IBPluginDependency</string>
+ <string>143.ImportedFromIB2</string>
+ <string>144.IBPluginDependency</string>
+ <string>144.ImportedFromIB2</string>
+ <string>145.IBPluginDependency</string>
+ <string>145.ImportedFromIB2</string>
+ <string>149.IBPluginDependency</string>
+ <string>149.ImportedFromIB2</string>
+ <string>150.IBPluginDependency</string>
+ <string>150.ImportedFromIB2</string>
+ <string>19.IBPluginDependency</string>
+ <string>19.ImportedFromIB2</string>
+ <string>23.IBPluginDependency</string>
+ <string>23.ImportedFromIB2</string>
+ <string>236.IBPluginDependency</string>
+ <string>236.ImportedFromIB2</string>
+ <string>239.IBPluginDependency</string>
+ <string>239.ImportedFromIB2</string>
+ <string>24.IBEditorWindowLastContentRect</string>
+ <string>24.IBPluginDependency</string>
+ <string>24.ImportedFromIB2</string>
+ <string>24.editorWindowContentRectSynchronizationRect</string>
+ <string>29.IBEditorWindowLastContentRect</string>
+ <string>29.IBPluginDependency</string>
+ <string>29.ImportedFromIB2</string>
+ <string>29.WindowOrigin</string>
+ <string>29.editorWindowContentRectSynchronizationRect</string>
+ <string>295.IBPluginDependency</string>
+ <string>296.IBEditorWindowLastContentRect</string>
+ <string>296.IBPluginDependency</string>
+ <string>296.editorWindowContentRectSynchronizationRect</string>
+ <string>297.IBPluginDependency</string>
+ <string>298.IBPluginDependency</string>
+ <string>5.IBPluginDependency</string>
+ <string>5.ImportedFromIB2</string>
+ <string>56.IBPluginDependency</string>
+ <string>56.ImportedFromIB2</string>
+ <string>57.IBEditorWindowLastContentRect</string>
+ <string>57.IBPluginDependency</string>
+ <string>57.ImportedFromIB2</string>
+ <string>57.editorWindowContentRectSynchronizationRect</string>
+ <string>58.IBPluginDependency</string>
+ <string>58.ImportedFromIB2</string>
+ <string>684.IBPluginDependency</string>
+ <string>685.IBEditorWindowLastContentRect</string>
+ <string>685.IBPluginDependency</string>
+ <string>686.IBPluginDependency</string>
+ <string>687.IBPluginDependency</string>
+ <string>688.IBPluginDependency</string>
+ <string>689.IBPluginDependency</string>
+ <string>690.IBPluginDependency</string>
+ <string>691.IBPluginDependency</string>
+ <string>693.IBPluginDependency</string>
+ <string>694.IBPluginDependency</string>
+ <string>695.IBPluginDependency</string>
+ <string>696.IBPluginDependency</string>
+ <string>700.IBPluginDependency</string>
+ <string>711.IBEditorWindowLastContentRect</string>
+ <string>711.IBPluginDependency</string>
+ <string>712.IBPluginDependency</string>
+ <string>713.IBPluginDependency</string>
+ <string>72.IBPluginDependency</string>
+ <string>72.ImportedFromIB2</string>
+ <string>73.IBPluginDependency</string>
+ <string>73.ImportedFromIB2</string>
+ <string>734.IBEditorWindowLastContentRect</string>
+ <string>734.IBPluginDependency</string>
+ <string>735.IBPluginDependency</string>
+ <string>736.IBPluginDependency</string>
+ <string>737.IBPluginDependency</string>
+ <string>738.IBPluginDependency</string>
+ <string>739.IBPluginDependency</string>
+ <string>74.IBPluginDependency</string>
+ <string>74.ImportedFromIB2</string>
+ <string>75.IBPluginDependency</string>
+ <string>75.ImportedFromIB2</string>
+ <string>77.IBPluginDependency</string>
+ <string>77.ImportedFromIB2</string>
+ <string>78.IBPluginDependency</string>
+ <string>78.ImportedFromIB2</string>
+ <string>79.IBPluginDependency</string>
+ <string>79.ImportedFromIB2</string>
+ <string>80.IBPluginDependency</string>
+ <string>80.ImportedFromIB2</string>
+ <string>81.IBEditorWindowLastContentRect</string>
+ <string>81.IBPluginDependency</string>
+ <string>81.ImportedFromIB2</string>
+ <string>81.editorWindowContentRectSynchronizationRect</string>
+ <string>82.IBPluginDependency</string>
+ <string>82.ImportedFromIB2</string>
+ <string>83.IBPluginDependency</string>
+ <string>83.ImportedFromIB2</string>
+ <string>92.IBPluginDependency</string>
+ <string>92.ImportedFromIB2</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>{{533, 633}, {157, 23}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>{{596, 852}, {216, 23}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>{{509, 573}, {64, 6}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>{{436, 809}, {64, 6}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>{{462, 583}, {194, 73}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>{{525, 802}, {197, 73}}</string>
+ <string>{{242, 656}, {352, 20}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>{74, 862}</string>
+ <string>{{11, 977}, {478, 20}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>{{412, 613}, {231, 43}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>{{475, 832}, {234, 43}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>{{254, 473}, {186, 183}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>{{23, 794}, {245, 183}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>{{368, 453}, {151, 203}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>{{519, 433}, {150, 43}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>{{608, 393}, {238, 103}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>{{326, 473}, {196, 183}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>{{323, 672}, {199, 203}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="unlocalizedProperties">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference key="dict.sortedKeys" ref="0"/>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ </object>
+ <nil key="activeLocalization"/>
+ <object class="NSMutableDictionary" key="localizations">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference key="dict.sortedKeys" ref="0"/>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ </object>
+ <nil key="sourceID"/>
+ <int key="maxID">810</int>
+ </object>
+ <object class="IBClassDescriber" key="IBDocument.Classes"/>
+ <int key="IBDocument.localizationMode">0</int>
+ <string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
+ <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
+ <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
+ <integer value="1050" key="NS.object.0"/>
+ </object>
+ <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
+ <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
+ <integer value="3000" key="NS.object.0"/>
+ </object>
+ <bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
+ <string key="IBDocument.LastKnownRelativeProjectPath">../NetSurf.xcodeproj</string>
+ <int key="IBDocument.defaultPropertyAccessControl">3</int>
+ <object class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>NSMenuCheckmark</string>
+ <string>NSMenuMixedState</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>{9, 8}</string>
+ <string>{7, 2}</string>
+ </object>
+ </object>
+ </data>
+</archive>
diff --git a/cocoa/res/NetSurf-Info.plist b/cocoa/res/NetSurf-Info.plist
new file mode 100644
index 000000000..ce1f1a274
--- /dev/null
+++ b/cocoa/res/NetSurf-Info.plist
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>English</string>
+ <key>CFBundleExecutable</key>
+ <string>${EXECUTABLE_NAME}</string>
+ <key>CFBundleIconFile</key>
+ <string></string>
+ <key>CFBundleIdentifier</key>
+ <string>com.yourcompany.${PRODUCT_NAME:rfc1034identifier}</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string>${PRODUCT_NAME}</string>
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+ <key>CFBundleShortVersionString</key>
+ <string>1.0</string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>CFBundleVersion</key>
+ <string>1</string>
+ <key>LSMinimumSystemVersion</key>
+ <string>${MACOSX_DEPLOYMENT_TARGET}</string>
+ <key>NSMainNibFile</key>
+ <string>MainMenu</string>
+ <key>NSPrincipalClass</key>
+ <string>NetSurfApp</string>
+</dict>
+</plist>
diff --git a/cocoa/res/adblock.css b/cocoa/res/adblock.css
new file mode 120000
index 000000000..e3811f62b
--- /dev/null
+++ b/cocoa/res/adblock.css
@@ -0,0 +1 @@
+../../!NetSurf/Resources/AdBlock,f79 \ No newline at end of file
diff --git a/cocoa/res/de.lproj/Messages b/cocoa/res/de.lproj/Messages
new file mode 120000
index 000000000..2f1fc39c3
--- /dev/null
+++ b/cocoa/res/de.lproj/Messages
@@ -0,0 +1 @@
+../../../!NetSurf/Resources/de/Messages \ No newline at end of file
diff --git a/cocoa/res/default.css b/cocoa/res/default.css
new file mode 120000
index 000000000..6d2d4da5b
--- /dev/null
+++ b/cocoa/res/default.css
@@ -0,0 +1 @@
+../../!NetSurf/Resources/CSS,f79 \ No newline at end of file
diff --git a/cocoa/res/en.lproj/Messages b/cocoa/res/en.lproj/Messages
new file mode 120000
index 000000000..72c9eff90
--- /dev/null
+++ b/cocoa/res/en.lproj/Messages
@@ -0,0 +1 @@
+../../../!NetSurf/Resources/en/Messages \ No newline at end of file
diff --git a/cocoa/res/fr.lproj/Messages b/cocoa/res/fr.lproj/Messages
new file mode 120000
index 000000000..a42cf08f4
--- /dev/null
+++ b/cocoa/res/fr.lproj/Messages
@@ -0,0 +1 @@
+../../../!NetSurf/Resources/fr/Messages \ No newline at end of file
diff --git a/cocoa/res/it.lproj/Messages b/cocoa/res/it.lproj/Messages
new file mode 120000
index 000000000..d4c5c2956
--- /dev/null
+++ b/cocoa/res/it.lproj/Messages
@@ -0,0 +1 @@
+../../../!NetSurf/Resources/it/Messages \ No newline at end of file
diff --git a/cocoa/res/nl.lproj/Messages b/cocoa/res/nl.lproj/Messages
new file mode 120000
index 000000000..d484ebd29
--- /dev/null
+++ b/cocoa/res/nl.lproj/Messages
@@ -0,0 +1 @@
+../../../!NetSurf/Resources/nl/Messages \ No newline at end of file
diff --git a/cocoa/res/quirks.css b/cocoa/res/quirks.css
new file mode 120000
index 000000000..d9fb80334
--- /dev/null
+++ b/cocoa/res/quirks.css
@@ -0,0 +1 @@
+../../!NetSurf/Resources/Quirks,f79 \ No newline at end of file
diff --git a/cocoa/save.m b/cocoa/save.m
new file mode 100644
index 000000000..a91a29810
--- /dev/null
+++ b/cocoa/save.m
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+#import <Cocoa/Cocoa.h>
+
+#import "desktop/save_complete.h"
+
+#define UNIMPL() NSLog( @"Function '%s' unimplemented", __func__ )
+
+bool save_complete_gui_save(const char *path, const char *filename,
+ size_t len, const char *sourcedata, content_type type)
+{
+ UNIMPL();
+ return false;
+}
+
+int save_complete_htmlSaveFileFormat(const char *path, const char *filename,
+ xmlDocPtr cur, const char *encoding, int format)
+{
+ UNIMPL();
+ return 0;
+}
diff --git a/cocoa/schedule.m b/cocoa/schedule.m
new file mode 100644
index 000000000..b5d5626af
--- /dev/null
+++ b/cocoa/schedule.m
@@ -0,0 +1,91 @@
+/*
+ * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+#import "desktop/browser.h"
+
+#import <Cocoa/Cocoa.h>
+
+@interface ScheduledCallback : NSObject {
+ void (*callback)( void *userData );
+ void *userData;
+}
+
+- initWithCallback: (void (*)(void *))cb userData: (void *)ud;
+- (void) schedule: (NSTimeInterval) ti;
+
+@end
+
+@implementation ScheduledCallback
+
+- initWithCallback: (void (*)(void *))cb userData: (void *)ud;
+{
+ callback = cb;
+ userData = ud;
+
+ return self;
+}
+
+static NSMutableSet *timerSet = nil;
+
+- (void) schedule: (NSTimeInterval) ti;
+{
+ if (nil == timerSet) {
+ timerSet = [[NSMutableSet alloc] init];
+ }
+
+ [self performSelector: @selector(timerFired) withObject: nil afterDelay: ti];
+ [timerSet addObject: self];
+}
+
+- (void) timerFired;
+{
+ if ([timerSet containsObject: self]) {
+ [timerSet removeObject: self];
+ callback( userData );
+ }
+}
+
+- (BOOL) isEqual: (id)object
+{
+ if (object == self) return YES;
+ if ([object class] != [self class]) return NO;
+ return ((ScheduledCallback *)object)->callback == callback && ((ScheduledCallback *)object)->userData == userData;
+}
+
+- (NSUInteger) hash;
+{
+ return (NSUInteger)callback + (NSUInteger)userData;
+}
+
+@end
+
+/* In platform specific schedule.c. */
+void schedule(int t, void (*callback)(void *p), void *p)
+{
+ ScheduledCallback *cb = [[ScheduledCallback alloc] initWithCallback: callback userData: p];
+ [cb schedule: (NSTimeInterval)t / 100];
+ [cb release];
+}
+
+void schedule_remove(void (*callback)(void *p), void *p)
+{
+ ScheduledCallback *cb = [[ScheduledCallback alloc] initWithCallback: callback userData: p];
+ [timerSet removeObject: cb];
+ [cb release];
+}
+
diff --git a/cocoa/thumbnail.m b/cocoa/thumbnail.m
new file mode 100644
index 000000000..b6df608eb
--- /dev/null
+++ b/cocoa/thumbnail.m
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+#import "desktop/browser.h"
+#import "desktop/plotters.h"
+#import "content/urldb.h"
+#import "image/bitmap.h"
+
+#import <Cocoa/Cocoa.h>
+
+/* In platform specific thumbnail.c. */
+bool thumbnail_create(struct hlcache_handle *content, struct bitmap *bitmap,
+ const char *url)
+{
+ CGColorSpaceRef cspace = CGColorSpaceCreateWithName( kCGColorSpaceGenericRGB );
+ CGContextRef bitmapContext = CGBitmapContextCreate( bitmap_get_buffer( bitmap ),
+ bitmap_get_width( bitmap ), bitmap_get_height( bitmap ),
+ bitmap_get_bpp( bitmap ) / 4,
+ bitmap_get_rowstride( bitmap ),
+ cspace, kCGImageAlphaNoneSkipLast );
+ CGColorSpaceRelease( cspace );
+
+
+ size_t width = MIN( content_get_width( content ), 1024 );
+ size_t height = MIN( content_get_height( content ), 768 );
+
+ CGContextTranslateCTM( bitmapContext, 0, bitmap_get_height( bitmap ) );
+ CGContextScaleCTM( bitmapContext, (CGFloat)bitmap_get_width( bitmap ) / width, -(CGFloat)bitmap_get_height( bitmap ) / height );
+
+ [NSGraphicsContext setCurrentContext: [NSGraphicsContext graphicsContextWithGraphicsPort: bitmapContext flipped: YES]];
+
+ content_redraw( content, 0, 0, content_get_width( content ), content_get_height( content ),
+ 0, 0, content_get_width( content ), content_get_height( content ),
+ 1.0, 0xFFFFFFFF );
+
+ [NSGraphicsContext setCurrentContext: nil];
+ CGContextRelease( bitmapContext );
+
+ bitmap_modified( bitmap );
+
+ if (NULL != url) urldb_set_thumbnail( url, bitmap );
+
+ return true;
+
+}
+
diff --git a/cocoa/url.m b/cocoa/url.m
new file mode 100644
index 000000000..38d637e6e
--- /dev/null
+++ b/cocoa/url.m
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+#import <stdbool.h>
+#import <stdlib.h>
+#import "utils/url.h"
+
+#import <Cocoa/Cocoa.h>
+
+#define UNIMPL() NSLog( @"Function '%s' unimplemented", __func__ )
+
+char *url_to_path(const char *url)
+{
+ NSURL *nsurl = [NSURL URLWithString: [NSString stringWithUTF8String: url]];
+ return strdup([[nsurl path] UTF8String]);
+}
+
+char *path_to_url(const char *path)
+{
+ UNIMPL();
+ return NULL;
+}
diff --git a/cocoa/utf8.m b/cocoa/utf8.m
new file mode 100644
index 000000000..ec75dfc91
--- /dev/null
+++ b/cocoa/utf8.m
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+#import <Cocoa/Cocoa.h>
+
+#import "utils/utf8.h"
+#define UNIMPL() NSLog( @"Function '%s' unimplemented", __func__ )
+
+utf8_convert_ret utf8_to_local_encoding(const char *string, size_t len,
+ char **result)
+{
+ UNIMPL();
+ return -1;
+}
+
+utf8_convert_ret utf8_from_local_encoding(const char *string, size_t len,
+ char **result)
+{
+ UNIMPL();
+ return -1;
+}
diff --git a/cocoa/utils.m b/cocoa/utils.m
new file mode 100644
index 000000000..0b06b1d9a
--- /dev/null
+++ b/cocoa/utils.m
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+#import <Cocoa/Cocoa.h>
+#import "utils/utils.h"
+#import "desktop/tree_url_node.h"
+
+#define UNIMPL() NSLog( @"Function '%s' unimplemented", __func__ )
+
+void die(const char * const error)
+{
+ [NSException raise: @"NetsurfDie" format: @"Error: %s", error];
+}
+
+void warn_user(const char *warning, const char *detail)
+{
+ NSRunAlertPanel( @"Warning", @"Warning %s: %s", @"OK", nil, nil, warning, detail );
+}
+
+query_id query_user(const char *query, const char *detail,
+ const query_callback *cb, void *pw, const char *yes, const char *no)
+{
+ UNIMPL();
+ return 0;
+}
+
+void query_close(query_id qid)
+{
+ UNIMPL();
+}
+
+void PDF_Password(char **owner_pass, char **user_pass, char *path)
+{
+ UNIMPL();
+}
+
+char *filename_from_path(char *path)
+{
+ UNIMPL();
+ return NULL;
+}
+
+bool path_add_part(char *path, int length, const char *newpart)
+{
+ UNIMPL();
+ return false;
+}
+
+void tree_icon_name_from_content_type(char *buffer, content_type type)
+{
+ UNIMPL();
+} \ No newline at end of file