2 // WindowBlurWindowHack.m
5 // Created by Joseph Spiros on 5/12/09.
6 // Copyright 2009 __MyCompanyName__. All rights reserved.
9 #import "WindowBlurSIMBL.h"
10 #import "WindowBlurWindowHack.h"
11 #import "CGSInternal.h"
13 static NSMutableDictionary *instanceIDToIvars = nil;
14 static BOOL needToSwizzleDealloc = YES;
16 @implementation WindowBlurWindowHack
20 return [NSValue valueWithPointer:self];
23 - (NSMutableDictionary *)PRE__ivars
25 NSMutableDictionary *ivars;
27 if (needToSwizzleDealloc)
29 MethodSwizzle([NSWindow class],
31 @selector(PRE__deallocSwizzler));
32 needToSwizzleDealloc = NO;
35 if (instanceIDToIvars == nil)
37 instanceIDToIvars = [[NSMutableDictionary alloc] init];
40 ivars = [instanceIDToIvars objectForKey:[self PRE__instanceID]];
43 ivars = [NSMutableDictionary dictionary];
44 [instanceIDToIvars setObject:ivars forKey:[self PRE__instanceID]];
50 - (void)PRE__deallocSwizzler
52 [instanceIDToIvars removeObjectForKey:[self PRE__instanceID]];
53 if ([instanceIDToIvars count] == 0)
55 [instanceIDToIvars release];
56 instanceIDToIvars = nil;
59 [self PRE__deallocSwizzler];
63 if ([[[self PRE__ivars] objectForKey:@"blurred"] boolValue] != YES) {
64 #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4
65 if (floor(NSAppKitVersionNumber) > 824) {
66 NSLog(@"AppKit Check Confirmed");
67 CGSConnectionID con = CGSMainConnectionID();
69 NSLog(@"CGSConnection Confirmed");
71 if (noErr == CGSNewCIFilterByName(con, (CFStringRef)@"CIGaussianBlur", &blurFilter)) {
72 NSLog(@"Should work!");
73 NSDictionary *optionsDict = [NSDictionary dictionaryWithObject:[NSNumber numberWithFloat:2.0] forKey:@"inputRadius"];
74 CGSSetCIFilterValuesFromDictionary(con, blurFilter, (CFDictionaryRef)optionsDict);
75 CGSAddWindowFilter(con, [self windowNumber], blurFilter, kCGWindowFilterUnderlay);
76 [[self PRE__ivars] setObject:[NSNumber numberWithBool:YES] forKey:@"blurred"];