-#include <BrowserView.h>
-#include <UCLocalize.h>
+#include <UICaboodle/BrowserView.h>
+#include <UICaboodle/UCLocalize.h>
#import <QuartzCore/CALayer.h>
// XXX: fix the minimum requirement
extern NSString * const kCAFilterNearest;
#include <WebCore/WebCoreThread.h>
+#include <WebKit/WebPreferences-WebPrivate.h>
#include "substrate.h"
/* }}} */
#endif
+#define ShowInternals 0
+#define LogBrowser 0
+
+#define lprintf(args...) fprintf(stderr, args)
+
@implementation BrowserView
#if ShowInternals
-#include "Internals.h"
+#include "UICaboodle/UCInternal.h"
#endif
++ (void) _initialize {
+ NSLog(@"INITIALIZING");
+ [WebView enableWebThread];
+
+ WebPreferences *preferences([WebPreferences standardPreferences]);
+ [preferences setCacheModel:WebCacheModelDocumentBrowser];
+ [preferences setOfflineWebApplicationCacheEnabled:YES];
+
+ [WebPreferences _setInitialDefaultTextEncodingToSystemEncoding];
+}
+
- (void) dealloc {
#if LogBrowser
NSLog(@"[BrowserView dealloc]");
[webview setScriptDebugDelegate:nil];
[webview setPolicyDelegate:nil];
- [webview setDownloadDelegate:nil];
-
/* XXX: these are set by UIWebDocumentView
+ [webview setDownloadDelegate:nil];
[webview _setFormDelegate:nil];
[webview _setUIKitDelegate:nil];
[webview setEditingDelegate:nil];*/
return false;
}
+- (void) formAssistant:(id)sender didBeginEditingFormNode:(id)node {
+}
+
+- (void) formAssistant:(id)sender didEndEditingFormNode:(id)node {
+ [self fixScroller];
+}
+
- (void) webViewShow:(WebView *)sender {
/* XXX: this is where I cry myself to sleep */
}
[self setBackButtonTitle:title_];
- BrowserView *browser([[[BrowserView alloc] initWithBook:book] autorelease]);
+ BrowserView *browser([[[class_ alloc] initWithBook:book] autorelease]);
[browser loadURL:url];
page = browser;
}
RVBook *book(!popup_ ? book_ : [[[RVPopUpBook alloc] initWithFrame:[delegate_ popUpBounds]] autorelease]);
/* XXX: deal with cydia:// pages */
- BrowserView *browser([[[BrowserView alloc] initWithBook:book forWidth:width] autorelease]);
+ BrowserView *browser([[[class_ alloc] initWithBook:book forWidth:width] autorelease]);
if (features != nil && popup_) {
[book setDelegate:delegate_];
[self _setTileDrawingEnabled:YES];
}
-- (id) initWithBook:(RVBook *)book forWidth:(float)width {
+- (id) initWithBook:(RVBook *)book forWidth:(float)width ofClass:(Class)_class {
if ((self = [super initWithBook:book]) != nil) {
+ class_ = _class;
loading_ = [[NSMutableSet alloc] initWithCapacity:3];
popup_ = false;
[webview_ setTileSize:CGSizeMake(webrect.size.width, 500)];
+ if ([webview_ respondsToSelector:@selector(enableReachability)])
+ [webview_ enableReachability];
+
[webview_ setAllowsMessaging:YES];
+ if ([webview_ respondsToSelector:@selector(useSelectionAssistantWithMode:)])
+ [webview_ useSelectionAssistantWithMode:0];
+
[webview_ setTilingEnabled:YES];
[webview_ setDrawsGrid:NO];
[webview_ setLogsTilingChanges:NO];
[webview_ setTileMinificationFilter:kCAFilterNearest];
+
if ([webview_ respondsToSelector:@selector(setDataDetectorTypes:)])
/* XXX: abstractify */
[webview_ setDataDetectorTypes:0x80000000];
else
[webview_ setDetectsPhoneNumbers:NO];
+
[webview_ setAutoresizes:YES];
[webview_ setMinimumScale:0.25f forDocumentTypes:0x10];
[webview _setUsesLoaderCache:YES];
[webview setGroupName:@"CydiaGroup"];
+
+ WebPreferences *preferences([webview preferences]);
+
if ([webview respondsToSelector:@selector(_setLayoutInterval:)])
[webview _setLayoutInterval:0];
+ else
+ [preferences _setLayoutInterval:0];
}
[self setViewportWidth:width];
indirect_ = [[IndirectDelegate alloc] initWithDelegate:self];
[webview setFrameLoadDelegate:indirect_];
+ [webview setPolicyDelegate:indirect_];
[webview setResourceLoadDelegate:indirect_];
[webview setUIDelegate:indirect_];
- [webview setScriptDebugDelegate:indirect_];
- [webview setPolicyDelegate:indirect_];
+
+ /* XXX: do not turn this on under penalty of extreme pain */
+ [webview setScriptDebugDelegate:nil];
WebThreadUnlock();
} return self;
}
+- (id) initWithBook:(RVBook *)book forWidth:(float)width {
+ return [self initWithBook:book forWidth:width ofClass:[self class]];
+}
+
- (id) initWithBook:(RVBook *)book {
return [self initWithBook:book forWidth:0];
}