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 Skim-app-commit@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/skim-app-commit