Revision: 15473
          http://sourceforge.net/p/skim-app/code/15473
Author:   hofman
Date:     2025-06-16 16:56:44 +0000 (Mon, 16 Jun 2025)
Log Message:
-----------
Keep some auxiliary objects for presentation notes in a temporary object

Modified Paths:
--------------
    trunk/SKMainWindowController.h
    trunk/SKMainWindowController.m
    trunk/SKMainWindowController_FullScreen.m
    trunk/Skim.xcodeproj/project.pbxproj

Added Paths:
-----------
    trunk/SKPresentationNotesAuxiliary.h
    trunk/SKPresentationNotesAuxiliary.m

Modified: trunk/SKMainWindowController.h
===================================================================
--- trunk/SKMainWindowController.h      2025-06-16 15:28:02 UTC (rev 15472)
+++ trunk/SKMainWindowController.h      2025-06-16 16:56:44 UTC (rev 15473)
@@ -71,6 +71,7 @@
 @class PDFAnnotation, PDFSelection, SKGroupedSearchResult;
 @class SKPDFView, SKSecondaryPDFView, SKPresentationView, SKStatusBar, 
SKFindController, SKSplitView, SKFieldEditor, SKOverviewView, SKSideWindow;
 @class SKLeftSideViewController, SKRightSideViewController, 
SKMainToolbarController, SKMainTouchBarController, SKNoteToolbarController, 
SKProgressController, SKNoteTypeSheetController, SKSnapshotWindowController, 
SKTransitionController;
+@class SKPresentationNotesAuxiliary;
 
 @interface SKMainWindowController : NSWindowController 
<SKSnapshotWindowControllerDelegate, SKThumbnailDelegate, 
SKFindControllerDelegate, SKPDFViewDelegate, SKPDFDocumentDelegate, 
NSTouchBarDelegate> {
     SKSplitView                         *splitView;
@@ -136,12 +137,8 @@
     
     __weak NSDocument                   *presentationNotesDocument;
     NSInteger                           presentationNotesOffset;
-    SKSnapshotWindowController          *presentationPreview;
-    NSButton                            *presentationNotesButton;
-    NSTrackingArea                      *presentationNotesTrackingArea;
     
-    NSMutableArray<PDFAnnotation *>     *presentationNotes;
-    NSUndoManager                       *presentationUndoManager;
+    SKPresentationNotesAuxiliary        *presentationNotesAuxiliary;
     
     NSButton                            *colorAccessoryView;
     NSButton                            *textColorAccessoryView;

Modified: trunk/SKMainWindowController.m
===================================================================
--- trunk/SKMainWindowController.m      2025-06-16 15:28:02 UTC (rev 15472)
+++ trunk/SKMainWindowController.m      2025-06-16 16:56:44 UTC (rev 15473)
@@ -107,6 +107,7 @@
 #import "SKThumbnailStamp.h"
 #import "SKPresentationView.h"
 #import "SKNoteToolbarController.h"
+#import "SKPresentationNotesAuxiliary.h"
 
 #define MULTIPLICATION_SIGN_CHARACTER (unichar)0x00d7
 
@@ -1509,9 +1510,14 @@
 }
 
 - (NSUndoManager *)presentationUndoManager {
-    if (presentationUndoManager == nil)
-        presentationUndoManager = [[SKChainedUndoManager alloc] 
initWithNextUndoManager:[[self document] undoManager]];
-    return presentationUndoManager;
+    NSUndoManager *undoManager = [presentationNotesAuxiliary undoManager];
+    if (undoManager == nil) {
+        if (presentationNotesAuxiliary == nil)
+            presentationNotesAuxiliary = [[SKPresentationNotesAuxiliary alloc] 
init];
+        undoManager = [[SKChainedUndoManager alloc] 
initWithNextUndoManager:[[self document] undoManager]];
+        [presentationNotesAuxiliary setUndoManager:undoManager];
+    }
+    return undoManager;
 }
 
 - (NSMenu *)notesMenu {
@@ -2232,9 +2238,7 @@
         
         [annotation setShouldDisplay:YES];
         [annotation setShouldPrint:NO];
-        if (presentationNotes == nil)
-            presentationNotes = [[NSMutableArray alloc] init];
-        [presentationNotes addObject:annotation];
+        [presentationNotesAuxiliary addNote:annotation];
         [self updateThumbnailAtPageIndex:[page pageIndex]];
         [presentationView setNeedsDisplayForPage:page];
     } else {
@@ -2273,7 +2277,7 @@
         if (mwcFlags.isSwitchingFullScreen == 0) {
             [[[self presentationUndoManager] 
prepareWithInvocationTarget:[notification object]] addAnnotation:annotation 
toPage:page];
             
-            [presentationNotes removeObject:annotation];
+            [presentationNotesAuxiliary removeNote:annotation];
             [self updateThumbnailAtPageIndex:[page pageIndex]];
             [presentationView setNeedsDisplayForPage:page];
         } else {
@@ -2424,8 +2428,8 @@
 }
 
 - (void)snapshotControllerWillClose:(SKSnapshotWindowController *)controller {
-    if (controller == presentationPreview) {
-        presentationPreview = nil;
+    if (controller == [presentationNotesAuxiliary previewController]) {
+        [presentationNotesAuxiliary setPreviewController:nil];
     } else {
         [rightSideController.snapshotTableView beginUpdates];
         NSUInteger row = [[rightSideController.snapshotArrayController 
arrangedObjects] indexOfObject:controller];
@@ -2444,7 +2448,7 @@
 }
 
 - (void)snapshotControllerDidChange:(SKSnapshotWindowController *)controller {
-    if (controller != presentationPreview) {
+    if (controller != [presentationNotesAuxiliary previewController]) {
         [self snapshotNeedsUpdate:controller];
         [rightSideController.snapshotArrayController rearrangeObjects];
         [rightSideController.snapshotTableView reloadData];
@@ -2453,13 +2457,13 @@
 }
 
 - (void)snapshotControllerDidMove:(SKSnapshotWindowController *)controller {
-    if (controller != presentationPreview) {
+    if (controller != [presentationNotesAuxiliary previewController]) {
         [[self document] setRecentInfoNeedsUpdate:YES];
     }
 }
 
 - (NSRect)snapshotController:(SKSnapshotWindowController *)controller 
miniaturizedRect:(BOOL)isMiniaturize {
-    if (controller == presentationPreview)
+    if (controller == [presentationNotesAuxiliary previewController])
         return NSZeroRect;
     NSRect rect = NSZeroRect;
     if ([self hasOverview]) {

Modified: trunk/SKMainWindowController_FullScreen.m
===================================================================
--- trunk/SKMainWindowController_FullScreen.m   2025-06-16 15:28:02 UTC (rev 
15472)
+++ trunk/SKMainWindowController_FullScreen.m   2025-06-16 16:56:44 UTC (rev 
15473)
@@ -69,6 +69,7 @@
 #import "NSWindow_SKExtensions.h"
 #import "SKImageToolTipWindow.h"
 #import "SKNoteToolbarController.h"
+#import "SKPresentationNotesAuxiliary.h"
 
 #define MAINWINDOWFRAME_KEY         @"windowFrame"
 #define TABGROUP_KEY                @"tabGroup"
@@ -145,19 +146,23 @@
     PDFDocument *pdfDoc = [[self presentationNotesDocument] pdfDocument];
     NSInteger offset = [self presentationNotesOffset];
     NSUInteger pageIndex = MAX(0, MIN((NSInteger)[pdfDoc pageCount], 
(NSInteger)[[pdfView currentPage] pageIndex] + offset));
+    
+    if (presentationNotesAuxiliary == nil)
+        presentationNotesAuxiliary = [[SKPresentationNotesAuxiliary alloc] 
init];
+    
     if ([self presentationNotesDocument] == [self document]) {
-        presentationPreview = [[SKSnapshotWindowController alloc] init];
+        SKSnapshotWindowController *preview = [[SKSnapshotWindowController 
alloc] init];
         
-        [presentationPreview setDelegate:self];
+        [presentationNotesAuxiliary setPreviewController:preview];
         
+        [preview setDelegate:self];
+        
         NSScreen *screen = [window screen];
         screen = [[screen alternateScreens] firstObject] ?: screen;
         
-        [presentationPreview setPdfDocument:[pdfView document]
-                          previewPageNumber:pageIndex
-                            displayOnScreen:screen];
-        
-        [[self document] addWindowController:presentationPreview];
+        [preview setPdfDocument:[pdfView document] previewPageNumber:pageIndex 
displayOnScreen:screen];
+    
+        [[self document] addWindowController:preview];
     } else {
         [[self presentationNotesDocument] setCurrentPage:[pdfDoc 
pageAtIndex:pageIndex]];
     }
@@ -178,7 +183,7 @@
             NSInteger offset = [self presentationNotesOffset];
             NSUInteger pageIndex = (NSUInteger)MAX(0, MIN((NSInteger)[pdfDoc 
pageCount], (NSInteger)[[pdfView currentPage] pageIndex] + offset));
             if ([self presentationNotesDocument] == [self document])
-                [[presentationPreview pdfView] goToCurrentPage:[pdfDoc 
pageAtIndex:pageIndex]];
+                [[[presentationNotesAuxiliary previewController] pdfView] 
goToCurrentPage:[pdfDoc pageAtIndex:pageIndex]];
             else
                 [[self presentationNotesDocument] setCurrentPage:[pdfDoc 
pageAtIndex:pageIndex]];
         }
@@ -284,7 +289,7 @@
             [[presentationWindow animator] setAlphaValue:1.0];
             if (shouldFadeOut)
                 [[normalWindow animator] setAlphaValue:0.0];
-            [[[presentationPreview window] animator] setAlphaValue:1.0];
+            [[[[presentationNotesAuxiliary previewController] window] 
animator] setAlphaValue:1.0];
         }
         completionHandler:^{
             // only hide the dock and menubar when the presentation window is 
on the primary screen, otherwise no need to block main menu and dock
@@ -321,13 +326,11 @@
     if ([self leftSidePaneIsOpen])
         [self hideSideWindow];
     
-    if ([presentationNotes count]) {
+    if ([[presentationNotesAuxiliary notes] count]) {
         PDFDocument *pdfDoc = [self pdfDocument];
-        for (PDFAnnotation *annotation in [presentationNotes copy])
+        for (PDFAnnotation *annotation in [[presentationNotesAuxiliary notes] 
copy])
             [pdfDoc removeAnnotation:annotation];
     }
-    presentationNotes = nil;
-    presentationUndoManager = nil;
     
     [presentationView willClose];
     [[NSNotificationCenter defaultCenter] removeObserver:self 
name:SKPresentationViewPageChangedNotification object:presentationView];
@@ -414,7 +417,7 @@
             if ([normalWindow alphaValue] < 1.0)
                 [[normalWindow animator] setAlphaValue:1.0];
             [[presentationWindow animator] setAlphaValue:0.0];
-            [[[presentationPreview window] animator] setAlphaValue:0.0];
+            [[[[presentationNotesAuxiliary previewController] window] 
animator] setAlphaValue:0.0];
         }
         completionHandler:^{
             if ([overviewContentView window] == presentationWindow)
@@ -423,11 +426,13 @@
             [presentationView setPage:nil];
             [presentationView setAutoScales:NO];
             
-            if (presentationPreview) {
-                [[presentationPreview window] 
setAnimationBehavior:NSWindowAnimationBehaviorNone];
-                [presentationPreview close];
+            if ([presentationNotesAuxiliary previewController]) {
+                [[[presentationNotesAuxiliary previewController] window] 
setAnimationBehavior:NSWindowAnimationBehaviorNone];
+                [[presentationNotesAuxiliary previewController] close];
             }
             
+            presentationNotesAuxiliary = nil;
+            
             mwcFlags.isSwitchingFullScreen = 0;
             
             if (mwcFlags.wantsPresentationOrFullScreen) {
@@ -457,7 +462,7 @@
 
 - (void)forceSubwindowsOnTop:(BOOL)flag {
     for (NSWindowController *wc in [[self document] windowControllers]) {
-        if ([wc respondsToSelector:@selector(setForceOnTop:)] && wc != 
presentationPreview)
+        if ([wc respondsToSelector:@selector(setForceOnTop:)] && wc != 
[presentationNotesAuxiliary previewController])
             [(id)wc setForceOnTop:flag];
     }
 }
@@ -714,7 +719,7 @@
 
 - (NSView *)presentationNotesView {
     if ([[self presentationNotesDocument] isEqual:[self document]])
-        return [presentationPreview pdfView];
+        return [[presentationNotesAuxiliary previewController] pdfView];
     else
         return [(SKMainDocument *)[self presentationNotesDocument] pdfView];
 }
@@ -723,30 +728,28 @@
     [self removePresentationNotesNavigation];
     NSView *notesView = [self presentationNotesView];
     if (notesView) {
-        presentationNotesTrackingArea = [[NSTrackingArea alloc] 
initWithRect:NSZeroRect options:NSTrackingMouseEnteredAndExited | 
NSTrackingActiveInActiveApp | NSTrackingInVisibleRect owner:self userInfo:nil];
-        [notesView addTrackingArea:presentationNotesTrackingArea];
+        NSTrackingArea *trackingArea = [[NSTrackingArea alloc] 
initWithRect:NSZeroRect options:NSTrackingMouseEnteredAndExited | 
NSTrackingActiveInActiveApp | NSTrackingInVisibleRect owner:self userInfo:nil];
+        [notesView addTrackingArea:trackingArea];
+        [presentationNotesAuxiliary setTrackingArea:trackingArea];
     }
 }
 
 - (void)removePresentationNotesNavigation {
-    if (presentationNotesTrackingArea) {
-        [[self presentationNotesView] 
removeTrackingArea:presentationNotesTrackingArea];
-        presentationNotesTrackingArea = nil;
-    }
-    if (presentationNotesButton) {
-        [presentationNotesButton removeFromSuperview];
-        presentationNotesButton = nil;
-    }
+    if ([presentationNotesAuxiliary trackingArea])
+        [[self presentationNotesView] 
removeTrackingArea:[presentationNotesAuxiliary trackingArea]];
+    if ([presentationNotesAuxiliary button])
+        [[presentationNotesAuxiliary button] removeFromSuperview];
 }
 
 - (void)mouseEntered:(NSEvent *)event {
-    if ([event trackingArea] == presentationNotesTrackingArea) {
+    if ([event trackingArea] == [presentationNotesAuxiliary trackingArea]) {
         NSView *notesView = [self presentationNotesView];
-        if (presentationNotesButton == nil) {
-            presentationNotesButton = [[NSButton alloc] 
initWithFrame:NSMakeRect(0.0, 0.0, 30.0, 50.0)];
-            [presentationNotesButton setButtonType:NSMomentaryChangeButton];
-            [presentationNotesButton setBordered:NO];
-            [presentationNotesButton setImage:[NSImage 
imageWithSize:NSMakeSize(30.0, 50.0) flipped:NO drawingHandler:^(NSRect rect){
+        NSButton *button = [presentationNotesAuxiliary button];
+        if ([presentationNotesAuxiliary button] == nil) {
+            button = [[NSButton alloc] initWithFrame:NSMakeRect(0.0, 0.0, 
30.0, 50.0)];
+            [button setButtonType:NSMomentaryChangeButton];
+            [button setBordered:NO];
+            [button setImage:[NSImage imageWithSize:NSMakeSize(30.0, 50.0) 
flipped:NO drawingHandler:^(NSRect rect){
                 NSBezierPath *path = [NSBezierPath bezierPath];
                 [path moveToPoint:NSMakePoint(5.0, 45.0)];
                 [path lineToPoint:NSMakePoint(25.0, 25.0)];
@@ -760,18 +763,19 @@
                 [path stroke];
                 return YES;
             }]];
-            [presentationNotesButton setTarget:self];
-            [presentationNotesButton setAction:@selector(doGoToNextPage:)];
-            [presentationNotesButton setAutoresizingMask:NSViewMinXMargin | 
NSViewMaxXMargin | NSViewMinYMargin | NSViewMaxYMargin];
-            [[presentationNotesButton cell] 
setAccessibilityLabel:NSLocalizedString(@"Next", @"")];
+            [button setTarget:self];
+            [button setAction:@selector(doGoToNextPage:)];
+            [button setAutoresizingMask:NSViewMinXMargin | NSViewMaxXMargin | 
NSViewMinYMargin | NSViewMaxYMargin];
+            [[button cell] setAccessibilityLabel:NSLocalizedString(@"Next", 
@"")];
+            [presentationNotesAuxiliary setButton:button];
         }
-        [presentationNotesButton setAlphaValue:0.0];
-        [presentationNotesButton 
setFrame:SKRectFromCenterAndSize(SKCenterPoint([notesView frame]), 
[presentationNotesButton frame].size)];
-        [notesView addSubview:presentationNotesButton positioned:NSWindowAbove 
relativeTo:nil];
+        [button setAlphaValue:0.0];
+        [button setFrame:SKRectFromCenterAndSize(SKCenterPoint([notesView 
frame]), [button frame].size)];
+        [notesView addSubview:button positioned:NSWindowAbove relativeTo:nil];
         [NSAnimationContext runAnimationGroup:^(NSAnimationContext *context){
-            [[presentationNotesButton animator] setAlphaValue:1.0];
+            [[button animator] setAlphaValue:1.0];
         } completionHandler:^{}];
-        
NSAccessibilityPostNotificationWithUserInfo(NSAccessibilityUnignoredAncestor(notesView),
 NSAccessibilityLayoutChangedNotification, [NSDictionary 
dictionaryWithObjectsAndKeys:NSAccessibilityUnignoredChildrenForOnlyChild(presentationNotesButton),
 NSAccessibilityUIElementsKey, nil]);
+        
NSAccessibilityPostNotificationWithUserInfo(NSAccessibilityUnignoredAncestor(notesView),
 NSAccessibilityLayoutChangedNotification, [NSDictionary 
dictionaryWithObjectsAndKeys:NSAccessibilityUnignoredChildrenForOnlyChild(button),
 NSAccessibilityUIElementsKey, nil]);
     } else if ([[SKMainWindowController superclass] 
instancesRespondToSelector:_cmd]) {
         [super mouseEntered:event];
     }
@@ -778,11 +782,11 @@
 }
 
 - (void)mouseExited:(NSEvent *)event {
-    if ([event trackingArea] == presentationNotesTrackingArea && 
presentationNotesButton) {
+    if ([event trackingArea] == [presentationNotesAuxiliary trackingArea] && 
[presentationNotesAuxiliary button]) {
         [NSAnimationContext runAnimationGroup:^(NSAnimationContext *context){
-            [[presentationNotesButton animator] setAlphaValue:0.0];
+            [[[presentationNotesAuxiliary button] animator] setAlphaValue:0.0];
         } completionHandler:^{
-            [presentationNotesButton removeFromSuperview];
+            [[presentationNotesAuxiliary button] removeFromSuperview];
         }];
         
NSAccessibilityPostNotificationWithUserInfo(NSAccessibilityUnignoredAncestor([self
 presentationNotesView]), NSAccessibilityLayoutChangedNotification, nil);
     } else if ([[SKMainWindowController superclass] 
instancesRespondToSelector:_cmd]) {

Added: trunk/SKPresentationNotesAuxiliary.h
===================================================================
--- trunk/SKPresentationNotesAuxiliary.h                                (rev 0)
+++ trunk/SKPresentationNotesAuxiliary.h        2025-06-16 16:56:44 UTC (rev 
15473)
@@ -0,0 +1,68 @@
+//
+//  SKPresentationNotesAuxiliary.h
+//  Skim
+//
+//  Created by Christiaan Hofman on 16/06/2025.
+/*
+ This software is Copyright (c) 2025
+ Christiaan Hofman. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ - Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+
+ - Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in
+    the documentation and/or other materials provided with the
+    distribution.
+
+ - Neither the name of Christiaan Hofman nor the names of any
+    contributors may be used to endorse or promote products derived
+    from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import <Cocoa/Cocoa.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class SKSnapshotWindowController, PDFAnnotation;
+
+@interface SKPresentationNotesAuxiliary : NSObject {
+    SKSnapshotWindowController *previewController;
+    
+    NSButton *button;
+    NSTrackingArea *trackingArea;
+    
+    NSUndoManager *undoManager;
+    NSMutableArray<PDFAnnotation *> *notes;
+}
+
+@property (nonatomic, nullable, strong) SKSnapshotWindowController 
*previewController;
+
+@property (nonatomic, nullable, strong) NSButton *button;
+@property (nonatomic, nullable, strong) NSTrackingArea *trackingArea;
+
+@property (nonatomic, nullable, strong) NSUndoManager *undoManager;
+@property (nonatomic, nullable, readonly) NSArray<PDFAnnotation *> *notes;
+
+- (void)addNote:(PDFAnnotation *)note;
+- (void)removeNote:(PDFAnnotation *)note;
+
+@end
+
+NS_ASSUME_NONNULL_END

Added: trunk/SKPresentationNotesAuxiliary.m
===================================================================
--- trunk/SKPresentationNotesAuxiliary.m                                (rev 0)
+++ trunk/SKPresentationNotesAuxiliary.m        2025-06-16 16:56:44 UTC (rev 
15473)
@@ -0,0 +1,55 @@
+//
+//  SKPresentationNotesAuxiliary.m
+//  Skim
+//
+//  Created by Christiaan Hofman on 16/06/2025.
+/*
+ This software is Copyright (c) 2025
+ Christiaan Hofman. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ - Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+
+ - Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in
+    the documentation and/or other materials provided with the
+    distribution.
+
+ - Neither the name of Christiaan Hofman nor the names of any
+    contributors may be used to endorse or promote products derived
+    from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "SKPresentationNotesAuxiliary.h"
+
+@implementation SKPresentationNotesAuxiliary
+
+@synthesize previewController, button, trackingArea, undoManager, notes;
+
+- (void)addNote:(PDFAnnotation *)note {
+    if (notes == nil)
+        notes = [[NSMutableArray alloc] init];
+    [notes addObject:note];
+}
+
+- (void)removeNote:(PDFAnnotation *)note {
+    [notes removeObject:note];
+}
+
+@end

Modified: trunk/Skim.xcodeproj/project.pbxproj
===================================================================
--- trunk/Skim.xcodeproj/project.pbxproj        2025-06-16 15:28:02 UTC (rev 
15472)
+++ trunk/Skim.xcodeproj/project.pbxproj        2025-06-16 16:56:44 UTC (rev 
15473)
@@ -101,6 +101,7 @@
                CE2DEB1C0B8618DE00D0DA12 /* SKFindController.m in Sources */ = 
{isa = PBXBuildFile; fileRef = CE2DEB1B0B8618DE00D0DA12 /* SKFindController.m 
*/; };
                CE2DED6C0B86334900D0DA12 /* SKFieldEditor.m in Sources */ = 
{isa = PBXBuildFile; fileRef = CE2DED6B0B86334900D0DA12 /* SKFieldEditor.m */; 
};
                CE2E9A592C14D2F300044B01 /* SKSnapshotConfiguration.m in 
Sources */ = {isa = PBXBuildFile; fileRef = CE2E9A582C14D2F300044B01 /* 
SKSnapshotConfiguration.m */; };
+               CE31960F2E00779000996E40 /* SKPresentationNotesAuxiliary.m in 
Sources */ = {isa = PBXBuildFile; fileRef = CE31960E2E00779000996E40 /* 
SKPresentationNotesAuxiliary.m */; };
                CE31A6180C01FC45003612A9 /* SKDocumentController.m in Sources 
*/ = {isa = PBXBuildFile; fileRef = CE31A6160C01FC45003612A9 /* 
SKDocumentController.m */; };
                CE32531F0F4723EA0021BADD /* SKMainWindowController_Actions.m in 
Sources */ = {isa = PBXBuildFile; fileRef = CE32531E0F4723EA0021BADD /* 
SKMainWindowController_Actions.m */; };
                CE325592226F73810032390F /* SKAnnotationTypeImageView.m in 
Sources */ = {isa = PBXBuildFile; fileRef = CE325591226F73810032390F /* 
SKAnnotationTypeImageView.m */; };
@@ -891,6 +892,8 @@
                CE2E9A582C14D2F300044B01 /* SKSnapshotConfiguration.m */ = {isa 
= PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = 
SKSnapshotConfiguration.m; sourceTree = "<group>"; };
                CE2EF6852022753D004A73D8 /* synctex_parser_advanced.h */ = {isa 
= PBXFileReference; lastKnownFileType = sourcecode.c.h; path = 
synctex_parser_advanced.h; sourceTree = "<group>"; };
                CE2EF68D2022753D004A73D8 /* synctex_version.h */ = {isa = 
PBXFileReference; lastKnownFileType = sourcecode.c.h; path = synctex_version.h; 
sourceTree = "<group>"; };
+               CE31960D2E00779000996E40 /* SKPresentationNotesAuxiliary.h */ = 
{isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = 
SKPresentationNotesAuxiliary.h; sourceTree = "<group>"; };
+               CE31960E2E00779000996E40 /* SKPresentationNotesAuxiliary.m */ = 
{isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = 
SKPresentationNotesAuxiliary.m; sourceTree = "<group>"; };
                CE31A6150C01FC45003612A9 /* SKDocumentController.h */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = 
SKDocumentController.h; sourceTree = "<group>"; };
                CE31A6160C01FC45003612A9 /* SKDocumentController.m */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path 
= SKDocumentController.m; sourceTree = "<group>"; };
                CE32531D0F4723EA0021BADD /* SKMainWindowController_Actions.h */ 
= {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = 
sourcecode.c.h; path = SKMainWindowController_Actions.h; sourceTree = 
"<group>"; };
@@ -2282,6 +2285,8 @@
                                CE2DEB1B0B8618DE00D0DA12 /* SKFindController.m 
*/,
                                CE1E2B260BDAB6180011D9DD /* SKPDFSynchronizer.h 
*/,
                                CE1E2B270BDAB6180011D9DD /* SKPDFSynchronizer.m 
*/,
+                               CE31960D2E00779000996E40 /* 
SKPresentationNotesAuxiliary.h */,
+                               CE31960E2E00779000996E40 /* 
SKPresentationNotesAuxiliary.m */,
                        );
                        name = "Main Controllers";
                        sourceTree = "<group>";
@@ -2854,6 +2859,7 @@
                                CE1E30290BDB9D8E0011D9DD /* 
NSCharacterSet_SKExtensions.m in Sources */,
                                CE4972510BDE898F00D7F1D2 /* SKMainWindow.m in 
Sources */,
                                CE49726D0BDE8A7400D7F1D2 /* 
PDFSelection_SKExtensions.m in Sources */,
+                               CE31960F2E00779000996E40 /* 
SKPresentationNotesAuxiliary.m in Sources */,
                                CE1DFA3D244CF04700D64C83 /* 
SKShareMenuController.m in Sources */,
                                CED4DA252707B330001E09A8 /* 
SKThumbnailImageView.m in Sources */,
                                CE49728B0BDE8B2900D7F1D2 /* SKToolbarItem.m in 
Sources */,

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