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

Reply via email to