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