// // WindowBlurWindowHack.m // WindowBlur // // Created by Joseph Spiros on 5/12/09. // Copyright 2009 __MyCompanyName__. All rights reserved. // #import "WindowBlurSIMBL.h" #import "WindowBlurWindowHack.h" #import "CGSInternal.h" static NSMutableDictionary *instanceIDToIvars = nil; static BOOL needToSwizzleDealloc = YES; @implementation WindowBlurWindowHack - (id)PRE__instanceID { return [NSValue valueWithPointer:self]; } - (NSMutableDictionary *)PRE__ivars { NSMutableDictionary *ivars; if (needToSwizzleDealloc) { MethodSwizzle([NSWindow class], @selector(dealloc), @selector(PRE__deallocSwizzler)); needToSwizzleDealloc = NO; } if (instanceIDToIvars == nil) { instanceIDToIvars = [[NSMutableDictionary alloc] init]; } ivars = [instanceIDToIvars objectForKey:[self PRE__instanceID]]; if (ivars == nil) { ivars = [NSMutableDictionary dictionary]; [instanceIDToIvars setObject:ivars forKey:[self PRE__instanceID]]; } return ivars; } - (void)PRE__deallocSwizzler { [instanceIDToIvars removeObjectForKey:[self PRE__instanceID]]; if ([instanceIDToIvars count] == 0) { [instanceIDToIvars release]; instanceIDToIvars = nil; } [self PRE__deallocSwizzler]; } - (void)update { if ([[[self PRE__ivars] objectForKey:@"blurred"] boolValue] != YES) { #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4 if (floor(NSAppKitVersionNumber) > 824) { NSLog(@"AppKit Check Confirmed"); CGSConnectionID con = CGSMainConnectionID(); if (con) { NSLog(@"CGSConnection Confirmed"); int blurFilter; if (noErr == CGSNewCIFilterByName(con, (CFStringRef)@"CIGaussianBlur", &blurFilter)) { NSLog(@"Should work!"); NSDictionary *optionsDict = [NSDictionary dictionaryWithObject:[NSNumber numberWithFloat:2.0] forKey:@"inputRadius"]; CGSSetCIFilterValuesFromDictionary(con, blurFilter, (CFDictionaryRef)optionsDict); CGSAddWindowFilter(con, [self windowNumber], blurFilter, kCGWindowFilterUnderlay); [[self PRE__ivars] setObject:[NSNumber numberWithBool:YES] forKey:@"blurred"]; } } } #endif } } @end