Revision: 14897
http://sourceforge.net/p/skim-app/code/14897
Author: hofman
Date: 2025-01-28 17:21:15 +0000 (Tue, 28 Jan 2025)
Log Message:
-----------
Observe notification to know about updateTrackingAreas instead of swizzling
method
Modified Paths:
--------------
trunk/PDFDocumentView_SKExtensions.h
trunk/PDFDocumentView_SKExtensions.m
trunk/SKPDFView.m
Modified: trunk/PDFDocumentView_SKExtensions.h
===================================================================
--- trunk/PDFDocumentView_SKExtensions.h 2025-01-28 15:31:31 UTC (rev
14896)
+++ trunk/PDFDocumentView_SKExtensions.h 2025-01-28 17:21:15 UTC (rev
14897)
@@ -42,6 +42,7 @@
NS_ASSUME_NONNULL_BEGIN
extern void SKSwizzlePDFDocumentViewMethods();
+extern void SKSwizzlePDFPageViewMethods();
extern void SKSwizzlePDFAccessibilityNodeAnnotationMethods();
NS_ASSUME_NONNULL_END
Modified: trunk/PDFDocumentView_SKExtensions.m
===================================================================
--- trunk/PDFDocumentView_SKExtensions.m 2025-01-28 15:31:31 UTC (rev
14896)
+++ trunk/PDFDocumentView_SKExtensions.m 2025-01-28 17:21:15 UTC (rev
14897)
@@ -38,10 +38,7 @@
#import "PDFDocumentView_SKExtensions.h"
#import <Quartz/Quartz.h>
-#import "SKPDFView.h"
-#import "NSAttributedString_SKExtensions.h"
#import "SKRuntime.h"
-#import "NSView_SKExtensions.h"
#import <objc/objc-runtime.h>
#import <SkimNotes/SkimNotes.h>
@@ -73,8 +70,6 @@
static id (*original_menuForEvent)(id, SEL, id) = NULL;
-static void (*original_updateTrackingAreas)(id, SEL) = NULL;
-
static BOOL (*original_isAccessibilityAlternateUIVisible)(id, SEL) = NULL;
static BOOL (*original_accessibilityPerformShowAlternateUI)(id, SEL) = NULL;
static BOOL (*original_accessibilityPerformShowDefaultUI)(id, SEL) = NULL;
@@ -96,13 +91,6 @@
#pragma mark Skim support
-static void replacement_updateTrackingAreas(id self, SEL _cmd) {
- original_updateTrackingAreas(self, _cmd);
- id pdfView = [self pdfView];
- if ([pdfView respondsToSelector:@selector(resetPDFToolTipRects)])
- [pdfView resetPDFToolTipRects];
-}
-
static BOOL replacement_isAccessibilityAlternateUIVisible(id self, SEL _cmd) {
id pdfView = [self pdfView];
return [pdfView isAccessibilityAlternateUIVisible];
@@ -147,10 +135,6 @@
#pragma mark SKSwizzlePDFDocumentViewMethods
void SKSwizzlePDFDocumentViewMethods() {
- Class PDFPageViewClass = NSClassFromString(@"PDFPageView");
- if (PDFPageViewClass)
- original_menuForEvent = (id (*)(id, SEL,
id))SKReplaceInstanceMethodImplementation(PDFPageViewClass,
@selector(menuForEvent:), (IMP)replacement_menuForEvent);
-
Class PDFDocumentViewClass = NSClassFromString(@"PDFDocumentView");
if (PDFDocumentViewClass == Nil)
return;
@@ -162,8 +146,6 @@
class_addMethod(PDFDocumentViewClass, @selector(pdfView),
(IMP)fallback_pdfView, "@@:");
}
- original_updateTrackingAreas = (void (*)(id,
SEL))SKReplaceInstanceMethodImplementation(PDFDocumentViewClass,
@selector(updateTrackingAreas), (IMP)replacement_updateTrackingAreas);
-
original_isAccessibilityAlternateUIVisible = (BOOL (*)(id,
SEL))SKReplaceInstanceMethodImplementation(PDFDocumentViewClass,
@selector(isAccessibilityAlternateUIVisible),
(IMP)replacement_isAccessibilityAlternateUIVisible);
original_accessibilityPerformShowAlternateUI = (BOOL (*)(id,
SEL))SKReplaceInstanceMethodImplementation(PDFDocumentViewClass,
@selector(accessibilityPerformShowAlternateUI),
(IMP)replacement_accessibilityPerformShowAlternateUI);
original_accessibilityPerformShowDefaultUI = (BOOL (*)(id,
SEL))SKReplaceInstanceMethodImplementation(PDFDocumentViewClass,
@selector(accessibilityPerformShowDefaultUI),
(IMP)replacement_accessibilityPerformShowDefaultUI);
@@ -170,6 +152,13 @@
original_accessibilityPerformShowMenu = (BOOL (*)(id,
SEL))SKReplaceInstanceMethodImplementation(PDFDocumentViewClass,
@selector(accessibilityPerformShowMenu),
(IMP)replacement_accessibilityPerformShowMenu);
}
+void SKSwizzlePDFPageViewMethods() {
+ Class PDFPageViewClass = NSClassFromString(@"PDFPageView");
+ if (PDFPageViewClass)
+ original_menuForEvent = (id (*)(id, SEL,
id))SKReplaceInstanceMethodImplementation(PDFPageViewClass,
@selector(menuForEvent:), (IMP)replacement_menuForEvent);
+
+}
+
void SKSwizzlePDFAccessibilityNodeAnnotationMethods() {
Class PDFAccessibilityNodeAnnotationClass =
NSClassFromString(@"PDFAccessibilityNodeAnnotation");
Modified: trunk/SKPDFView.m
===================================================================
--- trunk/SKPDFView.m 2025-01-28 15:31:31 UTC (rev 14896)
+++ trunk/SKPDFView.m 2025-01-28 17:21:15 UTC (rev 14897)
@@ -229,6 +229,7 @@
- (void)handlePageChangedNotification:(NSNotification *)notification;
- (void)handleScaleChangedNotification:(NSNotification *)notification;
+- (void)handleUpdateTrackingAreasNotification:(NSNotification *)notification;
- (void)registerForDocumentNotifications;
- (void)unregisterForDocumentNotifications;
@@ -257,6 +258,7 @@
useToolModeCursors = [[NSUserDefaults standardUserDefaults]
boolForKey:SKUseToolModeCursorsKey];
SKSwizzlePDFDocumentViewMethods();
+ SKSwizzlePDFPageViewMethods();
SKSwizzlePDFAccessibilityNodeAnnotationMethods();
}
@@ -312,9 +314,13 @@
name:PDFViewPageChangedNotification object:self];
[nc addObserver:self selector:@selector(handleScaleChangedNotification:)
name:PDFViewScaleChangedNotification object:self];
+ NSView *view = [[self scrollView] contentView];
+ if (view)
+ [nc addObserver:self
selector:@selector(handleUpdateTrackingAreasNotification:)
name:NSViewDidUpdateTrackingAreasNotification object:view];
NSUserDefaults *sud = [NSUserDefaults standardUserDefaults];
for (NSString *key in [[self class] defaultKeysToObserve])
[sud addObserver:self forKeyPath:key options:0
context:&SKPDFViewDefaultsObservationContext];
+
}
- (instancetype)initWithFrame:(NSRect)frameRect {
@@ -3110,6 +3116,10 @@
[self updatePacer];
}
+- (void)handleUpdateTrackingAreasNotification:(NSNotification *)notification {
+ [self resetPDFToolTipRects];
+}
+
- (void)handleKeyStateChangedNotification:(NSNotification *)notification {
atomic_store(&inKeyWindow, [[self window] isKeyWindow]);
if (@available(macOS 10.15, *)) {
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
_______________________________________________
Skim-app-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/skim-app-commit