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