93 lines
2.8 KiB
Objective-C
93 lines
2.8 KiB
Objective-C
//
|
|
// BundleController.m
|
|
// YouView Safari
|
|
//
|
|
// Created by Mr. Gecko on 3/1/09.
|
|
// Copyright 2009 Mr. Gecko's Media. All rights reserved.
|
|
//
|
|
|
|
#import "BundleController.h"
|
|
#import "urlCheck.h"
|
|
#import "Safari.h"
|
|
|
|
@implementation BundleController
|
|
static BundleController *sharedController = nil;
|
|
|
|
+ (BundleController*)sharedController {
|
|
@synchronized(self) {
|
|
if (sharedController == nil) {
|
|
[[self alloc] init];
|
|
}
|
|
}
|
|
return sharedController;
|
|
}
|
|
|
|
+ (id)allocWithZone:(NSZone *)zone {
|
|
@synchronized(self) {
|
|
if (sharedController == nil) {
|
|
sharedController = [super allocWithZone:zone];
|
|
return sharedController;
|
|
}
|
|
}
|
|
return nil;
|
|
}
|
|
|
|
- (id)copyWithZone:(NSZone *)zone {
|
|
return self;
|
|
}
|
|
|
|
- (id)retain {
|
|
return self;
|
|
}
|
|
|
|
- (unsigned)retainCount {
|
|
return UINT_MAX;
|
|
}
|
|
|
|
- (void)release {
|
|
// do nothing
|
|
}
|
|
|
|
- (id)autorelease {
|
|
return self;
|
|
}
|
|
|
|
- (id)init {
|
|
self = [super init];
|
|
if (self != nil) {
|
|
// Safari?
|
|
if (!([[[NSBundle mainBundle] bundleIdentifier] isEqualToString:@"com.apple.Safari"] || [[[NSBundle mainBundle] bundleIdentifier] isEqualToString:@"org.webkit.nightly.WebKit"]))
|
|
return nil;
|
|
|
|
// The magic happens here!
|
|
// poseAsClass is deprecated, so we should use method_setImplementation
|
|
set_webView_resource_willSendRequest_redirectResponse_fromDataSource_dataSource_original(method_setImplementation(class_getInstanceMethod([LoadProgressMonitor class], @selector(webView:resource:willSendRequest:redirectResponse:fromDataSource:)), (IMP)webView_resource_willSendRequest_redirectResponse_fromDataSource_dataSource_override));
|
|
}
|
|
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(finnishedLaunching) name:NSApplicationDidFinishLaunchingNotification object:nil];
|
|
return self;
|
|
}
|
|
- (void)finnishedLaunching {
|
|
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
|
// Find the first separator on the Safari menu…
|
|
NSMenu *applicationSubmenu = [[[NSApp mainMenu] itemAtIndex:0] submenu];
|
|
for (int i=0; i < [applicationSubmenu numberOfItems]; i++) {
|
|
if ([[applicationSubmenu itemAtIndex:i] isSeparatorItem]) {
|
|
YouViewMenu = [[NSMenuItem alloc] initWithTitle:([defaults boolForKey:@"YVDisabled"] ? @"Enable YouView" : @"Disable YouView") action:@selector(able:) keyEquivalent:@""];
|
|
[YouViewMenu setTarget:self];
|
|
[applicationSubmenu insertItem:YouViewMenu atIndex:i];
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
- (IBAction)able:(id)sender {
|
|
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
|
if ([defaults boolForKey:@"YVDisabled"]) {
|
|
[defaults setBool:NO forKey:@"YVDisabled"];
|
|
[YouViewMenu setTitle:@"Disable YouView"];
|
|
} else {
|
|
[defaults setBool:YES forKey:@"YVDisabled"];
|
|
[YouViewMenu setTitle:@"Enable YouView"];
|
|
}
|
|
}
|
|
@end
|