Revision: 4261
http://skim-app.svn.sourceforge.net/skim-app/?rev=4261&view=rev
Author: hofman
Date: 2008-07-21 00:16:43 +0000 (Mon, 21 Jul 2008)
Log Message:
-----------
add some static functions to simplify repetitive code
Modified Paths:
--------------
trunk/PDFDisplayView_SKExtensions.m
Modified: trunk/PDFDisplayView_SKExtensions.m
===================================================================
--- trunk/PDFDisplayView_SKExtensions.m 2008-07-20 20:03:24 UTC (rev 4260)
+++ trunk/PDFDisplayView_SKExtensions.m 2008-07-21 00:16:43 UTC (rev 4261)
@@ -60,7 +60,7 @@
#pragma mark -
-id SKGetPDFView(id self) {
+static id SKGetPDFView(id self) {
id pdfView = nil;
@try { pdfView = [self valueForKey:@"pdfView"]; }
@catch (id exception) {}
@@ -78,14 +78,14 @@
#pragma mark Skim support
-void replacementResetCursorRects(id self, SEL _cmd) {
+static void replacementResetCursorRects(id self, SEL _cmd) {
originalResetCursorRects(self, _cmd);
id pdfView = SKGetPDFView(self);
if ([pdfView respondsToSelector:@selector(resetHoverRects)])
[pdfView resetHoverRects];
}
-void replacementPasswordEntered(id self, SEL _cmd, id sender) {
+static void replacementPasswordEntered(id self, SEL _cmd, id sender) {
SKPDFDocument *document = [[[self window] windowController] document];
originalPasswordEntered(self, _cmd, sender);
if ([document respondsToSelector:@selector(savePasswordInKeychain:)])
@@ -94,7 +94,7 @@
#pragma mark Accessibility
-NSArray *replacementAccessibilityAttributeNames(id self, SEL _cmd) {
+static NSArray *replacementAccessibilityAttributeNames(id self, SEL _cmd) {
if ([SKGetPDFView(self)
respondsToSelector:@selector(accessibilityChildren)]) {
static NSArray *attributes = nil;
if (attributes == nil)
@@ -105,14 +105,14 @@
}
}
-NSArray *replacementAccessibilityParameterizedAttributeNames(id self, SEL
_cmd) {
+static 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(id self, SEL _cmd, NSString
*attribute) {
+static id replacementAccessibilityAttributeValue(id self, SEL _cmd, NSString
*attribute) {
if ([attribute isEqualToString:NSAccessibilityRoleAttribute]) {
return NSAccessibilityTextAreaRole;
} else if ([attribute isEqualToString:NSAccessibilityChildrenAttribute]) {
@@ -123,7 +123,7 @@
}
}
-id replacementAccessibilityRangeForPositionAttributeForParameter(id self, SEL
_cmd, id parameter) {
+static 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];
@@ -143,7 +143,7 @@
return nil;
}
-id replacementAccessibilityRTFForRangeAttributeForParameter(id self, SEL _cmd,
id parameter) {
+static id replacementAccessibilityRTFForRangeAttributeForParameter(id self,
SEL _cmd, id parameter) {
id pdfView = SKGetPDFView(self);
if (pdfView && [self
respondsToSelector:@selector(selectionForAccessibilityRange:)]) {
@try {
@@ -157,7 +157,7 @@
return nil;
}
-id replacementAccessibilityAttributedStringForRangeAttributeForParameter(id
self, SEL _cmd, id parameter) {
+static id
replacementAccessibilityAttributedStringForRangeAttributeForParameter(id self,
SEL _cmd, id parameter) {
id pdfView = SKGetPDFView(self);
if (pdfView && [self
respondsToSelector:@selector(selectionForAccessibilityRange:)]) {
@try {
@@ -171,7 +171,7 @@
return nil;
}
-id replacementAccessibilityStyleRangeForIndexAttributeForParameter(id self,
SEL _cmd, id parameter) {
+static id replacementAccessibilityStyleRangeForIndexAttributeForParameter(id
self, SEL _cmd, id parameter) {
id pdfView = SKGetPDFView(self);
if (pdfView && [self
respondsToSelector:@selector(selectionForAccessibilityRange:)]) {
@try {
@@ -203,7 +203,7 @@
return nil;
}
-id replacementAccessibilityHitTest(id self, SEL _cmd, NSPoint point) {
+static id replacementAccessibilityHitTest(id self, SEL _cmd, NSPoint point) {
id pdfView = SKGetPDFView(self);
id element = nil;
if ([pdfView respondsToSelector:@selector(accessibilityChildAtPoint:)])
@@ -211,7 +211,7 @@
return element ? element : originalAccessibilityHitTest(self, _cmd, point);
}
-id replacementAccessibilityFocusedUIElement(id self, SEL _cmd) {
+static id replacementAccessibilityFocusedUIElement(id self, SEL _cmd) {
id pdfView = SKGetPDFView(self);
id element = nil;
if ([pdfView respondsToSelector:@selector(accessibilityFocusedChild)])
@@ -221,34 +221,36 @@
#pragma mark SKSwizzlePDFDisplayViewMethods
+static IMP SKConditionallyReplaceMethodImplementation(Class aClass, SEL
aSelector, IMP anImp) {
+ if ([aClass instancesRespondToSelector:aSelector])
+ return SKReplaceMethodImplementation(aClass, aSelector, anImp, YES);
+ else
+ return NULL;
+}
+
+static void SKConditionallyRegisterMethodImplementation(Class aClass, SEL
aSelector, IMP anImp, const char *types) {
+ if ([aClass instancesRespondToSelector:aSelector] == NO)
+ SKRegisterMethodImplementation(aClass, aSelector, anImp, types, YES);
+}
+
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);
+ originalResetCursorRects =
SKConditionallyReplaceMethodImplementation(PDFDisplayViewClass,
@selector(resetCursorRects), (IMP)replacementResetCursorRects);
+ originalPasswordEntered =
SKConditionallyReplaceMethodImplementation(PDFDisplayViewClass,
@selector(passwordEntered:), (IMP)replacementPasswordEntered);
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);
+ originalAccessibilityAttributeNames =
SKConditionallyReplaceMethodImplementation(PDFDisplayViewClass,
@selector(accessibilityAttributeNames),
(IMP)replacementAccessibilityAttributeNames);
+ originalAccessibilityParameterizedAttributeNames =
SKConditionallyReplaceMethodImplementation(PDFDisplayViewClass,
@selector(accessibilityParameterizedAttributeNames),
(IMP)replacementAccessibilityParameterizedAttributeNames);
+ originalAccessibilityAttributeValue =
SKConditionallyReplaceMethodImplementation(PDFDisplayViewClass,
@selector(accessibilityAttributeValue:),
(IMP)replacementAccessibilityAttributeValue);
+ originalAccessibilityHitTest =
SKConditionallyReplaceMethodImplementation(PDFDisplayViewClass,
@selector(accessibilityHitTest:), (IMP)replacementAccessibilityHitTest);
+ originalAccessibilityFocusedUIElement =
SKConditionallyReplaceMethodImplementation(PDFDisplayViewClass,
@selector(accessibilityFocusedUIElement),
(IMP)replacementAccessibilityFocusedUIElement);
- 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);
+ SKConditionallyRegisterMethodImplementation(PDFDisplayViewClass,
@selector(accessibilityRangeForPositionAttributeForParameter:),
(IMP)replacementAccessibilityRangeForPositionAttributeForParameter, "@@:@");
+ SKConditionallyRegisterMethodImplementation(PDFDisplayViewClass,
@selector(accessibilityRTFForRangeAttributeForParameter:),
(IMP)replacementAccessibilityRTFForRangeAttributeForParameter, "@@:@");
+ SKConditionallyRegisterMethodImplementation(PDFDisplayViewClass,
@selector(accessibilityAttributedStringForRangeAttributeForParameter:),
(IMP)replacementAccessibilityAttributedStringForRangeAttributeForParameter,
"@@:@");
+ SKConditionallyRegisterMethodImplementation(PDFDisplayViewClass,
@selector(accessibilityStyleRangeForIndexAttributeForParameter:),
(IMP)replacementAccessibilityStyleRangeForIndexAttributeForParameter, "@@:@");
}
}
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