Revision: 4258
          http://skim-app.svn.sourceforge.net/skim-app/?rev=4258&view=rev
Author:   hofman
Date:     2008-07-20 19:34:05 +0000 (Sun, 20 Jul 2008)

Log Message:
-----------
Swizzle PDFDisplayView method implementations without selectors. Avoid the need 
to declare the private class.

Modified Paths:
--------------
    trunk/PDFDisplayView_SKExtensions.h
    trunk/PDFDisplayView_SKExtensions.m
    trunk/SKAccessibilityProxyElement.h
    trunk/SKAccessibilityProxyElement.m
    trunk/SKPDFView.m
    trunk/SKUtilities.h
    trunk/SKUtilities.m

Modified: trunk/PDFDisplayView_SKExtensions.h
===================================================================
--- trunk/PDFDisplayView_SKExtensions.h 2008-07-20 16:39:01 UTC (rev 4257)
+++ trunk/PDFDisplayView_SKExtensions.h 2008-07-20 19:34:05 UTC (rev 4258)
@@ -37,4 +37,5 @@
  */
 
 #import <Cocoa/Cocoa.h>
-#import <Quartz/Quartz.h>
+
+extern void SKSwizzlePDFDisplayViewMethods();
\ No newline at end of file

Modified: trunk/PDFDisplayView_SKExtensions.m
===================================================================
--- trunk/PDFDisplayView_SKExtensions.m 2008-07-20 16:39:01 UTC (rev 4257)
+++ trunk/PDFDisplayView_SKExtensions.m 2008-07-20 19:34:05 UTC (rev 4258)
@@ -37,35 +37,36 @@
  */
 
 #import "PDFDisplayView_SKExtensions.h"
+#import <Quartz/Quartz.h>
 #import "SKPDFView.h"
 #import "PDFAnnotation_SKExtensions.h"
 #import "NSAttributedString_SKExtensions.h"
 #import "SKPDFDocument.h"
 #import "SKUtilities.h"
+#import "SKAccessibilityProxyElement.h"
 
[EMAIL PROTECTED] PDFDisplayView : NSView
[EMAIL PROTECTED] NSView (SKPDFDisplayViewprivateDeclarations)
 - (void)passwordEntered:(id)sender;
 
 - (NSRange)accessibilityRangeForSelection:(id)selection;
 - (id)selectionForAccessibilityRange:(NSRange)range;
 - (void)generateAccessibilityTable;
[EMAIL PROTECTED]
 
-
[EMAIL PROTECTED] PDFDisplayView (SKAccessibilityOptional)
 - (id)accessibilityRangeForPositionAttributeForParameter:(id)parameter;
 - (id)accessibilityRTFForRangeAttributeForParameter:(id)parameter;
 - (id)accessibilityAttributedStringForRangeAttributeForParameter:(id)parameter;
 - (id)accessibilityStyleRangeForIndexAttributeForParameter:(id)parameter;
 @end
 
+#pragma mark -
 
[EMAIL PROTECTED] PDFDisplayView (SKExtensions)
[EMAIL PROTECTED]
+id SKGetPDFView(id self) {
+    id pdfView = nil;
+    @try { pdfView = [self valueForKey:@"pdfView"]; }
+    @catch (id exception) {}
+    return pdfView;
+}
 
-
[EMAIL PROTECTED] PDFDisplayView (SKExtensions)
-
 static IMP originalResetCursorRects = NULL;
 static IMP originalPasswordEntered = NULL;
 
@@ -75,21 +76,16 @@
 static IMP originalAccessibilityHitTest = NULL;
 static IMP originalAccessibilityFocusedUIElement = NULL;
 
-- (id)skPdfView {
-    id pdfView = nil;
-    @try { pdfView = [self valueForKey:@"pdfView"]; }
-    @catch (id exception) {}
-    return pdfView;
-}
+#pragma mark Skim support
 
-- (void)replacementResetCursorRects {
+void replacementResetCursorRects(id self, SEL _cmd) {
        originalResetCursorRects(self, _cmd);
-    id pdfView = [self skPdfView];
+    id pdfView = SKGetPDFView(self);
     if ([pdfView respondsToSelector:@selector(resetHoverRects)])
         [pdfView resetHoverRects];
 }
 
-- (void)replacementPasswordEntered:(id)sender {
+void replacementPasswordEntered(id self, SEL _cmd, id sender) {
     SKPDFDocument *document = [[[self window] windowController] document];
     originalPasswordEntered(self, _cmd, sender);
     if ([document respondsToSelector:@selector(savePasswordInKeychain:)])
@@ -98,8 +94,8 @@
 
 #pragma mark Accessibility
 
-- (NSArray *)replacementAccessibilityAttributeNames {
-    if ([[self skPdfView] 
respondsToSelector:@selector(accessibilityChildren)]) {
+NSArray *replacementAccessibilityAttributeNames(id self, SEL _cmd) {
+    if ([SKGetPDFView(self) 
respondsToSelector:@selector(accessibilityChildren)]) {
         static NSArray *attributes = nil;
         if (attributes == nil)
             attributes = [[originalAccessibilityAttributeNames(self, _cmd) 
arrayByAddingObject:NSAccessibilityChildrenAttribute] retain];
@@ -109,26 +105,26 @@
     }
 }
 
-- (NSArray *)replacementAccessibilityParameterizedAttributeNames {
+NSArray *replacementAccessibilityParameterizedAttributeNames(id self, SEL 
_cmd) {
     static NSArray *attributes = nil;
     if (attributes == nil)
         attributes = [[originalAccessibilityParameterizedAttributeNames(self, 
_cmd) arrayByAddingObjectsFromArray:[NSArray 
arrayWithObjects:NSAccessibilityRangeForPositionParameterizedAttribute, 
NSAccessibilityRTFForRangeParameterizedAttribute, 
NSAccessibilityAttributedStringForRangeParameterizedAttribute, nil]] retain];
     return attributes;
 }
 
-- (id)replacementAccessibilityAttributeValue:(NSString *)attribute {
+id replacementAccessibilityAttributeValue(id self, SEL _cmd, NSString 
*attribute) {
     if ([attribute isEqualToString:NSAccessibilityRoleAttribute]) {
         return NSAccessibilityTextAreaRole;
     } else if ([attribute isEqualToString:NSAccessibilityChildrenAttribute]) {
-        id pdfView = [self skPdfView];
+        id pdfView = SKGetPDFView(self);
         return [pdfView respondsToSelector:@selector(accessibilityChildren)] ? 
NSAccessibilityUnignoredChildren([pdfView accessibilityChildren]) : 
originalAccessibilityAttributeValue(self, _cmd, attribute);
     } else {
         return originalAccessibilityAttributeValue(self, _cmd, attribute);
     }
 }
 
-- 
(id)replacementAccessibilityRangeForPositionAttributeForParameter:(id)parameter 
{
-    id pdfView = [self skPdfView];
+id replacementAccessibilityRangeForPositionAttributeForParameter(id self, SEL 
_cmd, id parameter) {
+    id pdfView = SKGetPDFView(self);
     if (pdfView && [self 
respondsToSelector:@selector(accessibilityRangeForSelection:)]) {
         NSPoint point = [pdfView convertPoint:[[pdfView window] 
convertScreenToBase:[parameter pointValue]] fromView:nil];
         PDFPage *page = [pdfView pageForPoint:point nearest:NO];
@@ -147,8 +143,8 @@
     return nil;
 }
 
-- (id)replacementAccessibilityRTFForRangeAttributeForParameter:(id)parameter {
-    id pdfView = [self skPdfView];
+id replacementAccessibilityRTFForRangeAttributeForParameter(id self, SEL _cmd, 
id parameter) {
+    id pdfView = SKGetPDFView(self);
     if (pdfView && [self 
respondsToSelector:@selector(selectionForAccessibilityRange:)]) {
         @try {
             if ([[self valueForKey:@"numAccessibilityLines"] unsignedIntValue] 
== 0 && [self respondsToSelector:@selector(generateAccessibilityTable)])
@@ -161,8 +157,8 @@
     return nil;
 }
 
-- 
(id)replacementAccessibilityAttributedStringForRangeAttributeForParameter:(id)parameter
 {
-    id pdfView = [self skPdfView];
+id replacementAccessibilityAttributedStringForRangeAttributeForParameter(id 
self, SEL _cmd, id parameter) {
+    id pdfView = SKGetPDFView(self);
     if (pdfView && [self 
respondsToSelector:@selector(selectionForAccessibilityRange:)]) {
         @try {
             if ([[self valueForKey:@"numAccessibilityLines"] unsignedIntValue] 
== 0 && [self respondsToSelector:@selector(generateAccessibilityTable)])
@@ -175,8 +171,8 @@
     return nil;
 }
 
-- 
(id)replacementAccessibilityStyleRangeForIndexAttributeForParameter:(id)parameter
 {
-    id pdfView = [self skPdfView];
+id replacementAccessibilityStyleRangeForIndexAttributeForParameter(id self, 
SEL _cmd, id parameter) {
+    id pdfView = SKGetPDFView(self);
     if (pdfView && [self 
respondsToSelector:@selector(selectionForAccessibilityRange:)]) {
         @try {
             if ([[self valueForKey:@"numAccessibilityLines"] unsignedIntValue] 
== 0 && [self respondsToSelector:@selector(generateAccessibilityTable)])
@@ -207,25 +203,62 @@
     return nil;
 }
 
-- (id)replacementAccessibilityHitTest:(NSPoint)point {
-    id pdfView = [self skPdfView];
+id replacementAccessibilityHitTest(id self, SEL _cmd, NSPoint point) {
+    id pdfView = SKGetPDFView(self);
     id element = nil;
     if ([pdfView respondsToSelector:@selector(accessibilityChildAtPoint:)])
         element = [pdfView accessibilityChildAtPoint:point];
     return element ? element : originalAccessibilityHitTest(self, _cmd, point);
 }
 
-- (id)replacementAccessibilityFocusedUIElement {
-    id pdfView = [self skPdfView];
+id replacementAccessibilityFocusedUIElement(id self, SEL _cmd) {
+    id pdfView = SKGetPDFView(self);
     id element = nil;
     if ([pdfView respondsToSelector:@selector(accessibilityFocusedChild)])
         element = [pdfView accessibilityFocusedChild];
     return element ? element : originalAccessibilityFocusedUIElement(self, 
_cmd);
 }
 
-- (NSRect)screenRectForRepresentedObject:(id)annotation {
+#pragma mark SKSwizzlePDFDisplayViewMethods
+
+void SKSwizzlePDFDisplayViewMethods() {
+    Class PDFDisplayViewClass = NSClassFromString(@"PDFDisplayView");
+    if (PDFDisplayViewClass) {
+        originalResetCursorRects = 
SKReplaceMethodImplementation(PDFDisplayViewClass, @selector(resetCursorRects), 
(IMP)replacementResetCursorRects, YES);
+        if ([PDFDisplayViewClass 
instancesRespondToSelector:@selector(passwordEntered:)])
+            originalPasswordEntered = 
SKReplaceMethodImplementation(PDFDisplayViewClass, @selector(passwordEntered:), 
(IMP)replacementPasswordEntered, YES);
+        
+        if ([[NSUserDefaults standardUserDefaults] 
boolForKey:@"SKDisableExtendedPDFViewAccessibility"]) return;
+        
+        if ([PDFDisplayViewClass 
instancesRespondToSelector:@selector(accessibilityAttributeNames)])
+            originalAccessibilityAttributeNames = 
SKReplaceMethodImplementation(PDFDisplayViewClass, 
@selector(accessibilityAttributeNames), 
(IMP)replacementAccessibilityAttributeNames, YES);
+        if ([PDFDisplayViewClass 
instancesRespondToSelector:@selector(accessibilityParameterizedAttributeNames)])
+            originalAccessibilityParameterizedAttributeNames = 
SKReplaceMethodImplementation(PDFDisplayViewClass, 
@selector(accessibilityParameterizedAttributeNames), 
(IMP)replacementAccessibilityParameterizedAttributeNames, YES);
+        if ([PDFDisplayViewClass 
instancesRespondToSelector:@selector(accessibilityAttributeValue:)])
+            originalAccessibilityAttributeValue = 
SKReplaceMethodImplementation(PDFDisplayViewClass, 
@selector(accessibilityAttributeValue:), 
(IMP)replacementAccessibilityAttributeValue, YES);
+        if ([PDFDisplayViewClass 
instancesRespondToSelector:@selector(accessibilityHitTest:)])
+            originalAccessibilityHitTest = 
SKReplaceMethodImplementation(PDFDisplayViewClass, 
@selector(accessibilityHitTest:), (IMP)replacementAccessibilityHitTest, YES);
+        if ([PDFDisplayViewClass 
instancesRespondToSelector:@selector(accessibilityFocusedUIElement)])
+            originalAccessibilityFocusedUIElement = 
SKReplaceMethodImplementation(PDFDisplayViewClass, 
@selector(accessibilityFocusedUIElement), 
(IMP)replacementAccessibilityFocusedUIElement, YES);
+        
+        if ([PDFDisplayViewClass 
instancesRespondToSelector:@selector(accessibilityRangeForPositionAttributeForParameter:)]
 == NO)
+            SKRegisterMethodImplementation(PDFDisplayViewClass, 
@selector(accessibilityRangeForPositionAttributeForParameter:), 
(IMP)replacementAccessibilityRangeForPositionAttributeForParameter, "@@:@", 
YES);
+        if ([PDFDisplayViewClass 
instancesRespondToSelector:@selector(accessibilityRTFForRangeAttributeForParameter:)]
 == NO)
+            SKRegisterMethodImplementation(PDFDisplayViewClass, 
@selector(accessibilityRTFForRangeAttributeForParameter:), 
(IMP)replacementAccessibilityRTFForRangeAttributeForParameter, "@@:@", YES);
+        if ([PDFDisplayViewClass 
instancesRespondToSelector:@selector(accessibilityAttributedStringForRangeAttributeForParameter:)]
 == NO)
+            SKRegisterMethodImplementation(PDFDisplayViewClass, 
@selector(accessibilityAttributedStringForRangeAttributeForParameter:), 
(IMP)replacementAccessibilityAttributedStringForRangeAttributeForParameter, 
"@@:@", YES);
+        if ([PDFDisplayViewClass 
instancesRespondToSelector:@selector(accessibilityStyleRangeForIndexAttributeForParameter:)]
 == NO)
+            SKRegisterMethodImplementation(PDFDisplayViewClass, 
@selector(accessibilityStyleRangeForIndexAttributeForParameter:), 
(IMP)replacementAccessibilityStyleRangeForIndexAttributeForParameter, "@@:@", 
YES);
+    }
+}
+
+#pragma mark SKAccessibilityProxyElementParent
+
[EMAIL PROTECTED] NSView (SKPDFDisplayViewExtensions)
+
+- (NSRect)element:(SKAccessibilityProxyElement *)element 
screenRectForRepresentedObject:(id)annotation {
     NSRect rect = NSZeroRect;
-    SKPDFView *pdfView = [self skPdfView];
+    SKPDFView *pdfView = SKGetPDFView(self);
     if (pdfView) {
         rect = [pdfView convertRect:[pdfView convertRect:[annotation bounds] 
fromPage:[annotation page]] toView:nil];
         rect.origin = [[pdfView window] convertBaseToScreen:rect.origin];
@@ -233,12 +266,12 @@
     return rect;
 }
 
-- (BOOL)isRepresentedObjectFocused:(id)annotation {
-    return [[self skPdfView] activeAnnotation] == annotation;
+- (BOOL)element:(SKAccessibilityProxyElement *)element 
isRepresentedObjectFocused:(id)annotation {
+    return [SKGetPDFView(self) activeAnnotation] == annotation;
 }
 
-- (void)setFocused:(BOOL)focused forRepresentedObject:(id)annotation {
-    SKPDFView *pdfView = [self skPdfView];
+- (void)element:(SKAccessibilityProxyElement *)element 
setFocused:(BOOL)focused forRepresentedObject:(id)annotation {
+    SKPDFView *pdfView = SKGetPDFView(self);
     if (pdfView) {
         if (focused)
             [pdfView setActiveAnnotation:annotation];
@@ -247,8 +280,8 @@
     }
 }
 
-- (void)pressRepresentedObject:(id)annotation {
-    SKPDFView *pdfView = [self skPdfView];
+- (void)element:(SKAccessibilityProxyElement *)element 
pressRepresentedObject:(id)annotation {
+    SKPDFView *pdfView = SKGetPDFView(self);
     if (pdfView) {
         if ([pdfView activeAnnotation] != annotation)
             [pdfView setActiveAnnotation:annotation];
@@ -256,31 +289,4 @@
     }
 }
 
-+ (void)load {
-    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
-    originalResetCursorRects = SKReplaceMethodImplementationWithSelector(self, 
@selector(resetCursorRects), @selector(replacementResetCursorRects));
-    if ([self instancesRespondToSelector:@selector(passwordEntered:)])
-        originalPasswordEntered = 
SKReplaceMethodImplementationWithSelector(self, @selector(passwordEntered:), 
@selector(replacementPasswordEntered:));
-    if ([[NSUserDefaults standardUserDefaults] 
boolForKey:@"SKDisableExtendedPDFViewAccessibility"]) return;
-    if ([self 
instancesRespondToSelector:@selector(accessibilityAttributeNames)])
-        originalAccessibilityAttributeNames = 
SKReplaceMethodImplementationWithSelector(self, 
@selector(accessibilityAttributeNames), 
@selector(replacementAccessibilityAttributeNames));
-    if ([self 
instancesRespondToSelector:@selector(accessibilityParameterizedAttributeNames)])
-        originalAccessibilityParameterizedAttributeNames = 
SKReplaceMethodImplementationWithSelector(self, 
@selector(accessibilityParameterizedAttributeNames), 
@selector(replacementAccessibilityParameterizedAttributeNames));
-    if ([self 
instancesRespondToSelector:@selector(accessibilityAttributeValue:)])
-        originalAccessibilityAttributeValue = 
SKReplaceMethodImplementationWithSelector(self, 
@selector(accessibilityAttributeValue:), 
@selector(replacementAccessibilityAttributeValue:));
-    if ([self instancesRespondToSelector:@selector(accessibilityHitTest:)])
-        originalAccessibilityHitTest = 
SKReplaceMethodImplementationWithSelector(self, 
@selector(accessibilityHitTest:), @selector(replacementAccessibilityHitTest:));
-    if ([self 
instancesRespondToSelector:@selector(accessibilityFocusedUIElement)])
-        originalAccessibilityFocusedUIElement = 
SKReplaceMethodImplementationWithSelector(self, 
@selector(accessibilityFocusedUIElement), 
@selector(replacementAccessibilityFocusedUIElement));
-    if ([self 
instancesRespondToSelector:@selector(accessibilityRangeForPositionAttributeForParameter:)]
 == NO)
-        SKRegisterMethodImplementationWithSelector(self, 
@selector(accessibilityRangeForPositionAttributeForParameter:), 
@selector(replacementAccessibilityRangeForPositionAttributeForParameter:));
-    if ([self 
instancesRespondToSelector:@selector(accessibilityRTFForRangeAttributeForParameter:)]
 == NO)
-        SKRegisterMethodImplementationWithSelector(self, 
@selector(accessibilityRTFForRangeAttributeForParameter:), 
@selector(replacementAccessibilityRTFForRangeAttributeForParameter:));
-    if ([self 
instancesRespondToSelector:@selector(accessibilityAttributedStringForRangeAttributeForParameter:)]
 == NO)
-        SKRegisterMethodImplementationWithSelector(self, 
@selector(accessibilityAttributedStringForRangeAttributeForParameter:), 
@selector(replacementAccessibilityAttributedStringForRangeAttributeForParameter:));
-    if ([self 
instancesRespondToSelector:@selector(accessibilityStyleRangeForIndexAttributeForParameter:)]
 == NO)
-        SKRegisterMethodImplementationWithSelector(self, 
@selector(accessibilityStyleRangeForIndexAttributeForParameter:), 
@selector(replacementAccessibilityStyleRangeForIndexAttributeForParameter:));
-    [pool release];
-}
-
 @end

Modified: trunk/SKAccessibilityProxyElement.h
===================================================================
--- trunk/SKAccessibilityProxyElement.h 2008-07-20 16:39:01 UTC (rev 4257)
+++ trunk/SKAccessibilityProxyElement.h 2008-07-20 19:34:05 UTC (rev 4258)
@@ -51,8 +51,8 @@
 
 // parent should implement these methods
 @interface NSObject (SKAccessibilityProxyElementParent)
-- (NSRect)screenRectForRepresentedObject:(id)object;
-- (BOOL)isRepresentedObjectFocused:(id)object;
-- (void)setFocused:(BOOL)focused forRepresentedObject:(id)object;
-- (void)pressRepresentedObject:(id)object;
+- (NSRect)element:(SKAccessibilityProxyElement *)element 
screenRectForRepresentedObject:(id)object;
+- (BOOL)element:(SKAccessibilityProxyElement *)element 
isRepresentedObjectFocused:(id)object;
+- (void)element:(SKAccessibilityProxyElement *)element 
setFocused:(BOOL)focused forRepresentedObject:(id)object;
+- (void)element:(SKAccessibilityProxyElement *)element 
pressRepresentedObject:(id)object;
 @end

Modified: trunk/SKAccessibilityProxyElement.m
===================================================================
--- trunk/SKAccessibilityProxyElement.m 2008-07-20 16:39:01 UTC (rev 4257)
+++ trunk/SKAccessibilityProxyElement.m 2008-07-20 19:34:05 UTC (rev 4258)
@@ -92,11 +92,11 @@
         // We're in the same top level element as our parent.
         return [NSAccessibilityUnignoredAncestor(parent) 
accessibilityAttributeValue:NSAccessibilityTopLevelUIElementAttribute];
     } else if ([attribute isEqualToString:NSAccessibilityFocusedAttribute]) {
-        return [NSNumber numberWithBool:[parent 
isRepresentedObjectFocused:object]];
+        return [NSNumber numberWithBool:[parent element:self 
isRepresentedObjectFocused:object]];
     } else if ([attribute isEqualToString:NSAccessibilityPositionAttribute]) {
-        return [NSValue valueWithPoint:[parent 
screenRectForRepresentedObject:object].origin];
+        return [NSValue valueWithPoint:[parent element:self 
screenRectForRepresentedObject:object].origin];
     } else if ([attribute isEqualToString:NSAccessibilitySizeAttribute]) {
-        return [NSValue valueWithSize:[parent 
screenRectForRepresentedObject:object].size];
+        return [NSValue valueWithSize:[parent element:self 
screenRectForRepresentedObject:object].size];
     } else if ([[self accessibilityAttributeNames] containsObject:attribute]) {
                SEL getter = SKAttributeGetter(attribute);
         return [object respondsToSelector:getter] ? [object 
performSelector:getter] : nil;
@@ -111,7 +111,7 @@
 
 - (void)accessibilitySetValue:(id)value forAttribute:(NSString *)attribute {
     if ([attribute isEqualToString:NSAccessibilityFocusedAttribute])
-        [parent setFocused:[value boolValue] forRepresentedObject:object];
+        [parent element:self setFocused:[value boolValue] 
forRepresentedObject:object];
 }
 
 - (BOOL)accessibilityIsIgnored {
@@ -136,7 +136,7 @@
 
 - (void)accessibilityPerformAction:(NSString *)anAction {
     if ([anAction isEqualToString:NSAccessibilityPressAction])
-        [parent pressRepresentedObject:object];
+        [parent element:self pressRepresentedObject:object];
 }
 
 @end

Modified: trunk/SKPDFView.m
===================================================================
--- trunk/SKPDFView.m   2008-07-20 16:39:01 UTC (rev 4257)
+++ trunk/SKPDFView.m   2008-07-20 19:34:05 UTC (rev 4258)
@@ -210,6 +210,8 @@
         resizeReadingBarModifiers = [resizeReadingBarModifiersNumber intValue];
     
     [[NSUserDefaults standardUserDefaults] registerDefaults:[NSDictionary 
dictionaryWithObjectsAndKeys:NSLocalizedString(@"Double-click to edit.", 
@"Default text for new text note"), SKDefaultFreeTextNoteContentsKey, 
NSLocalizedString(@"New note", @"Default text for new anchored note"), 
SKDefaultAnchoredNoteContentsKey, nil]];
+    
+    SKSwizzlePDFDisplayViewMethods();
 }
 
 - (void)commonInitialization {

Modified: trunk/SKUtilities.h
===================================================================
--- trunk/SKUtilities.h 2008-07-20 16:39:01 UTC (rev 4257)
+++ trunk/SKUtilities.h 2008-07-20 19:34:05 UTC (rev 4258)
@@ -20,6 +20,7 @@
 IMP SKReplaceMethodImplementation(Class aClass, SEL aSelector, IMP anImp, BOOL 
isInstance);
 IMP SKReplaceMethodImplementationWithSelector(Class aClass, SEL aSelector, SEL 
impSelector);
 IMP SKReplaceClassMethodImplementationWithSelector(Class aClass, SEL 
aSelector, SEL impSelector);
+void SKRegisterMethodImplementation(Class aClass, SEL aSelector, IMP anImp, 
const char *types, BOOL isInstance);
 IMP SKRegisterMethodImplementationWithSelector(Class aClass, SEL aSelector, 
SEL impSelector);
 IMP SKRegisterClassMethodImplementationWithSelector(Class aClass, SEL 
aSelector, SEL impSelector);
 

Modified: trunk/SKUtilities.m
===================================================================
--- trunk/SKUtilities.m 2008-07-20 16:39:01 UTC (rev 4257)
+++ trunk/SKUtilities.m 2008-07-20 19:34:05 UTC (rev 4258)
@@ -113,6 +113,12 @@
     return SKReplaceMethodImplementation(aClass, aSelector, 
SK_method_getImplementation(class_getClassMethod(aClass, impSelector)), NO);
 }
 
+void SKRegisterMethodImplementation(Class aClass, SEL aSelector, IMP anImp, 
const char *types, BOOL isInstance)
+{
+    Class realClass = isInstance ? aClass : SK_object_getClass(aClass);
+    SK_class_addMethod(realClass, aSelector, anImp, types);
+}
+
 IMP SKRegisterMethodImplementationWithSelector(Class aClass, SEL aSelector, 
SEL impSelector)
 {
     IMP imp = NULL;
@@ -120,7 +126,7 @@
     
     if (method) {
         imp = SK_method_getImplementation(method);
-        SK_class_addMethod(aClass, aSelector, imp, 
SK_method_getTypeEncoding(method));
+        SKRegisterMethodImplementation(aClass, aSelector, imp, 
SK_method_getTypeEncoding(method), YES);
     }
     
     return imp;
@@ -133,7 +139,7 @@
     
     if (method) {
         imp = SK_method_getImplementation(method);
-        SK_class_addMethod(SK_object_getClass(aClass), aSelector, imp, 
SK_method_getTypeEncoding(method));
+        SKRegisterMethodImplementation(aClass, aSelector, imp, 
SK_method_getTypeEncoding(method), NO);
     }
     
     return imp;


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Skim-app-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/skim-app-commit

Reply via email to