Revision: 15582
          http://sourceforge.net/p/skim-app/code/15582
Author:   hofman
Date:     2025-07-02 09:35:17 +0000 (Wed, 02 Jul 2025)
Log Message:
-----------
Handle undo gouping and undo action name for adding multiple notes by itself. 
Make current annotation after adding in convenience method.

Modified Paths:
--------------
    trunk/SKPDFView.m

Modified: trunk/SKPDFView.m
===================================================================
--- trunk/SKPDFView.m   2025-07-02 08:49:06 UTC (rev 15581)
+++ trunk/SKPDFView.m   2025-07-02 09:35:17 UTC (rev 15582)
@@ -207,7 +207,7 @@
 
 - (void)beginNewUndoGroupIfNeeded;
 
-- (void)addAnnotation:(PDFAnnotation *)annotation toPage:(PDFPage *)page;
+- (void)addAnnotation:(PDFAnnotation *)annotation toPage:(PDFPage *)page 
select:(BOOL)shouldSelect;
 - (void)removeAnnotation:(PDFAnnotation *)annotation;
 
 - (void)stopPacer;
@@ -1238,15 +1238,20 @@
         
         page = [self currentPage];
         
+        [self commitEditing];
+        [self beginNewUndoGroupIfNeeded];
+        
         for (PDFAnnotation *newAnnotation in newAnnotations) {
             
             [newAnnotation setBounds:SKConstrainRect([newAnnotation bounds], 
[page boundsForBox:[self displayBox]])];
             
             [newAnnotation registerUserName];
-            [self addAnnotation:newAnnotation toPage:page];
+            [[self document] addAnnotation:newAnnotation toPage:page];
             
         }
         
+        [[self undoManager] setActionName:NSLocalizedString(@"Add Note", 
@"Undo action name")];
+        
         if (toolMode == SKToolModeText || toolMode == SKToolModeNote)
             [self setCurrentAnnotation:[newAnnotations lastObject]];
         
@@ -1314,10 +1319,7 @@
             }
             
             [newAnnotation registerUserName];
-            [self addAnnotation:newAnnotation toPage:page];
-
-            if (toolMode == SKToolModeText || toolMode == SKToolModeNote)
-                [self setCurrentAnnotation:newAnnotation];
+            [self addAnnotation:newAnnotation toPage:page select:YES];
             
         } else if (isPlainText == NO) {
             
@@ -1356,10 +1358,7 @@
                     [newAnnotation setString:text];
                 
                 [newAnnotation registerUserName];
-                [self addAnnotation:newAnnotation toPage:page];
-
-                if (toolMode == SKToolModeText || toolMode == SKToolModeNote)
-                    [self setCurrentAnnotation:newAnnotation];
+                [self addAnnotation:newAnnotation toPage:page select:YES];
                 
             } else {
                 
@@ -2301,10 +2300,7 @@
                 [(SKNPDFAnnotationNote *)newAnnotation 
setExtendedIconType:kSKNPDFTextAnnotationIconImage];
                 
                 [newAnnotation registerUserName];
-                [self addAnnotation:newAnnotation toPage:page];
-
-                if (toolMode == SKToolModeText || toolMode == SKToolModeNote)
-                    [self setCurrentAnnotation:newAnnotation];
+                [self addAnnotation:newAnnotation toPage:page select:YES];
                 
                 performedDrag = YES;
             }
@@ -2379,11 +2375,13 @@
 
 #pragma mark Annotation management
 
-- (void)addAnnotation:(PDFAnnotation *)annotation toPage:(PDFPage *)page {
+- (void)addAnnotation:(PDFAnnotation *)annotation toPage:(PDFPage *)page 
select:(BOOL)shouldSelect {
     [self commitEditing];
     [self beginNewUndoGroupIfNeeded];
     [[self document] addAnnotation:annotation toPage:page];
     [[self undoManager] setActionName:NSLocalizedString(@"Add Note", @"Undo 
action name")];
+    if (shouldSelect && (toolMode == SKToolModeText || toolMode == 
SKToolModeNote))
+        [self setCurrentAnnotation:annotation];
 }
 
 - (void)removeAnnotation:(PDFAnnotation *)annotation {
@@ -2451,6 +2449,9 @@
     
     if ([newAnnotations count] > 0) {
         
+        [self commitEditing];
+        [self beginNewUndoGroupIfNeeded];
+        
         for (NSArray *annotationAndPage in newAnnotations) {
             newAnnotation = [annotationAndPage firstObject];
             page = [annotationAndPage lastObject];
@@ -2457,9 +2458,11 @@
             if ([text length] > 0 || [newAnnotation string] == nil)
                 [newAnnotation setString:text ?: @""];
             [newAnnotation registerUserName];
-            [self addAnnotation:newAnnotation toPage:page];
+            [[self document] addAnnotation:newAnnotation toPage:page];
         }
 
+        [[self undoManager] setActionName:NSLocalizedString(@"Add Note", 
@"Undo action name")];
+        
         if (toolMode == SKToolModeText || toolMode == SKToolModeNote)
             [self setCurrentAnnotation:newAnnotation];
         
@@ -2475,10 +2478,7 @@
         if ([newAnnotation string] == nil)
             [newAnnotation setString:@""];
         [newAnnotation registerUserName];
-        [self addAnnotation:newAnnotation toPage:page];
-
-        if (toolMode == SKToolModeText || toolMode == SKToolModeNote)
-            [self setCurrentAnnotation:newAnnotation];
+        [self addAnnotation:newAnnotation toPage:page select:YES];
         
         return YES;
     } else {
@@ -4171,7 +4171,7 @@
             // select a new copy of the annotation
             PDFAnnotation *newAnnotation = [PDFAnnotation 
newSkimNoteWithProperties:[newCurrentAnnotation SkimNoteProperties]];
             [newAnnotation registerUserName];
-            [self addAnnotation:newAnnotation toPage:page];
+            [self addAnnotation:newAnnotation toPage:page select:NO];
             newCurrentAnnotation = newAnnotation;
         } else if (([newCurrentAnnotation isMarkup] ||
                     (isInk && (newCurrentAnnotation != currentAnnotation || 
(modifiers & (NSEventModifierFlagShift | NSEventModifierFlagCapsLock))))) &&
@@ -4368,7 +4368,7 @@
             [annotation setString:[currentAnnotation string]];
         }
         [annotation registerUserName];
-        [self addAnnotation:annotation toPage:page];
+        [self addAnnotation:annotation toPage:page select:NO];
 
         if (currentAnnotation) {
             [self removeCurrentAnnotation:nil];

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