Revision: 12647
          http://sourceforge.net/p/skim-app/code/12647
Author:   hofman
Date:     2021-12-27 17:21:23 +0000 (Mon, 27 Dec 2021)
Log Message:
-----------
Add a temporary toolmode for pdfview, to allow setting a selection after 
choosing an action that requires aselection. Activated for zoom to selection 
and adding markup notes.

Modified Paths:
--------------
    trunk/SKMainToolbarController.m
    trunk/SKMainTouchBarController.m
    trunk/SKMainWindow.h
    trunk/SKMainWindow.m
    trunk/SKMainWindowController_Actions.m
    trunk/SKMainWindowController_UI.h
    trunk/SKMainWindowController_UI.m
    trunk/SKPDFView.h
    trunk/SKPDFView.m

Modified: trunk/SKMainToolbarController.m
===================================================================
--- trunk/SKMainToolbarController.m     2021-12-27 10:27:04 UTC (rev 12646)
+++ trunk/SKMainToolbarController.m     2021-12-27 17:21:23 UTC (rev 12647)
@@ -1019,7 +1019,7 @@
     } else if ([identifier 
isEqualToString:SKDocumentToolbarZoomToFitItemIdentifier]) {
         return [mainController.pdfView.document isLocked] == NO && 
[mainController hasOverview] == NO && [mainController.pdfView autoScales] == NO;
     } else if ([identifier 
isEqualToString:SKDocumentToolbarZoomToSelectionItemIdentifier]) {
-        return [mainController.pdfView.document isLocked] == NO && 
[mainController hasOverview] == NO && NSIsEmptyRect([mainController.pdfView 
currentSelectionRect]) == NO;
+        return [mainController.pdfView.document isLocked] == NO && 
[mainController hasOverview] == NO && (NSIsEmptyRect([mainController.pdfView 
currentSelectionRect]) == NO || [mainController.pdfView toolMode] != 
SKSelectToolMode);
     } else if ([identifier 
isEqualToString:SKDocumentToolbarZoomInOutItemIdentifier] ||
                [identifier 
isEqualToString:SKDocumentToolbarZoomInActualOutItemIdentifier] ||
                [identifier 
isEqualToString:SKDocumentToolbarAutoScalesItemIdentifier] ||
@@ -1040,14 +1040,10 @@
     } else if ([identifier 
isEqualToString:SKDocumentToolbarNewTextNoteItemIdentifier] || [identifier 
isEqualToString:SKDocumentToolbarNewCircleNoteItemIdentifier] || [identifier 
isEqualToString:SKDocumentToolbarNewLineItemIdentifier]) {
         return ([mainController.pdfView toolMode] == SKTextToolMode || 
[mainController.pdfView toolMode] == SKNoteToolMode) && [mainController 
hasOverview] == NO && [mainController.pdfView hideNotes] == NO && 
[mainController.pdfView.document allowsNotes];
     } else if ([identifier 
isEqualToString:SKDocumentToolbarNewMarkupItemIdentifier]) {
-        return ([mainController.pdfView toolMode] == SKTextToolMode || 
[mainController.pdfView toolMode] == SKNoteToolMode) && [mainController 
hasOverview] == NO && [mainController.pdfView hideNotes] == NO && 
[mainController.pdfView.document allowsNotes] && [[mainController.pdfView 
currentSelection] hasCharacters];
+        return ([mainController.pdfView toolMode] == SKTextToolMode || 
[mainController.pdfView toolMode] == SKNoteToolMode) && [mainController 
hasOverview] == NO && [mainController.pdfView hideNotes] == NO && 
[mainController.pdfView.document allowsNotes];
     } else if ([identifier 
isEqualToString:SKDocumentToolbarNewLineItemIdentifier]) {
         return ([mainController.pdfView toolMode] == SKTextToolMode || 
[mainController.pdfView toolMode] == SKNoteToolMode) && [mainController 
hasOverview] == NO && [mainController.pdfView hideNotes] == NO && 
[mainController.pdfView.document allowsNotes] && [[mainController.pdfView 
currentSelection] hasCharacters];
     } else if ([identifier 
isEqualToString:SKDocumentToolbarNewNoteItemIdentifier]) {
-        BOOL enabled = ([mainController.pdfView toolMode] == SKTextToolMode || 
[mainController.pdfView toolMode] == SKNoteToolMode) && [mainController 
hasOverview] == NO && [mainController.pdfView hideNotes] == NO && 
[[mainController.pdfView currentSelection] hasCharacters];
-        [noteButton setEnabled:enabled forSegment:SKHighlightNote];
-        [noteButton setEnabled:enabled forSegment:SKUnderlineNote];
-        [noteButton setEnabled:enabled forSegment:SKStrikeOutNote];
         return ([mainController.pdfView toolMode] == SKTextToolMode || 
[mainController.pdfView toolMode] == SKNoteToolMode) && [mainController 
hasOverview] == NO && [mainController.pdfView hideNotes] == NO && 
[mainController.pdfView.document allowsNotes];
     } else if ([identifier 
isEqualToString:SKDocumentToolbarFullScreenItemIdentifier]) {
         return [mainController canEnterFullscreen] || [mainController 
canExitFullscreen];
@@ -1075,7 +1071,7 @@
         return [mainController interactionMode] != SKPresentationMode && 
[mainController hasOverview] == NO && [mainController.pdfView.document 
allowsNotes] && ([mainController.pdfView toolMode] == SKTextToolMode || 
[mainController.pdfView toolMode] == SKNoteToolMode) && [mainController.pdfView 
hideNotes] == NO;
     } else if (action == @selector(createNewMarkupNote:)) {
         [menuItem setState:[[markupNoteButton cell] tagForSegment:0] == 
[menuItem tag] ? NSOnState : NSOffState];
-        return [mainController interactionMode] != SKPresentationMode && 
[mainController hasOverview] == NO && [mainController.pdfView.document 
allowsNotes] && ([mainController.pdfView toolMode] == SKTextToolMode || 
[mainController.pdfView toolMode] == SKNoteToolMode) && [mainController.pdfView 
hideNotes] == NO && [[mainController.pdfView currentSelection] hasCharacters];
+        return [mainController interactionMode] != SKPresentationMode && 
[mainController hasOverview] == NO && [mainController.pdfView.document 
allowsNotes] && ([mainController.pdfView toolMode] == SKTextToolMode || 
[mainController.pdfView toolMode] == SKNoteToolMode) && [mainController.pdfView 
hideNotes] == NO;
     } else if (action == @selector(toggleFullScreen:)) {
         return [mainController canEnterFullscreen] || [mainController 
canExitFullscreen];
     } else if (action == @selector(togglePresentation:)) {
@@ -1351,6 +1347,26 @@
     [toolModeButton selectSegmentWithTag:[mainController.pdfView toolMode]];
 }
 
+- (void)handleTemporaryToolModeChangedNotification:(NSNotification 
*)notification {
+    SKTemporaryToolMode mode = [mainController.pdfView temporaryToolMode];
+    SKToolMode toolMode = [mainController.pdfView toolMode];
+    NSString *name = nil;
+    if (mode == SKNoToolMode) {
+        switch (toolMode) {
+            case SKTextToolMode : name = SKImageNameToolbarTextTool; break;
+            case SKMoveToolMode : name = SKImageNameToolbarMoveTool; break;
+            case SKMagnifyToolMode : name = SKImageNameToolbarMagnifyTool; 
break;
+            case SKSelectToolMode : name = SKImageNameToolbarSelectTool; break;
+            case SKNoteToolMode : name = 
noteToolImageNames[mainController.pdfView.annotationMode]; break;
+        }
+    } else if (mode == SKZoomToolMode) {
+        name = SKImageNameToolbarZoomIn;
+    } else {
+        name = noteToolImageNames[mode];
+    }
+    [toolModeButton setImage:[NSImage imageNamed:name] forSegment:toolMode];
+}
+
 - (void)handleDisplayBoxChangedNotification:(NSNotification *)notification {
     [displayBoxButton selectSegmentWithTag:[mainController.pdfView 
displayBox]];
 }
@@ -1414,6 +1430,8 @@
                              name:SKPDFViewToolModeChangedNotification 
object:mainController.pdfView];
     [nc addObserver:self 
selector:@selector(handleAnnotationModeChangedNotification:) 
                              name:SKPDFViewAnnotationModeChangedNotification 
object:mainController.pdfView];
+    [nc addObserver:self 
selector:@selector(handleTemporaryToolModeChangedNotification:)
+                             
name:SKPDFViewTemporaryToolModeChangedNotification 
object:mainController.pdfView];
     [nc addObserver:self 
selector:@selector(handlePacerStartedOrStoppedNotification:)
                              name:SKPDFViewPacerStartedOrStoppedNotification 
object:mainController.pdfView];
     [nc addObserver:self 
selector:@selector(handleDisplayModeChangedNotification:)

Modified: trunk/SKMainTouchBarController.m
===================================================================
--- trunk/SKMainTouchBarController.m    2021-12-27 10:27:04 UTC (rev 12646)
+++ trunk/SKMainTouchBarController.m    2021-12-27 17:21:23 UTC (rev 12647)
@@ -82,7 +82,6 @@
 - (void)handlePageChangedNotification:(NSNotification *)notification;
 - (void)handleToolModeChangedNotification:(NSNotification *)notification;
 - (void)handleAnnotationModeChangedNotification:(NSNotification *)notification;
-- (void)handleSelectionChangedNotification:(NSNotification *)notification;
 
 @end
 
@@ -248,7 +247,6 @@
                 noteButton = [[NSSegmentedControl 
segmentedControlWithImages:images trackingMode:NSSegmentSwitchTrackingMomentary 
target:self action:@selector(createNewNote:)] retain];
 #pragma clang diagnostic pop
                 [self handleToolModeChangedNotification:nil];
-                [self handleSelectionChangedNotification:nil];
                 [self interactionModeChanged];
             }
             item = [[[NSClassFromString(@"NSCustomTouchBarItem") alloc] 
initWithIdentifier:identifier] autorelease];
@@ -431,13 +429,6 @@
         [annotationModeButton selectSegmentWithTag:[mainController.pdfView 
annotationMode]];
 }
 
-- (void)handleSelectionChangedNotification:(NSNotification *)notification {
-    BOOL enabled = ([mainController.pdfView toolMode] == SKTextToolMode || 
[mainController.pdfView toolMode] == SKNoteToolMode) && [mainController.pdfView 
hideNotes] == NO && [[mainController.pdfView currentSelection] hasCharacters];
-    [noteButton setEnabled:enabled forSegment:SKHighlightNote];
-    [noteButton setEnabled:enabled forSegment:SKUnderlineNote];
-    [noteButton setEnabled:enabled forSegment:SKStrikeOutNote];
-}
-
 - (void)interactionModeChanged {
     SKInteractionMode mode = [mainController interactionMode];
     
@@ -472,8 +463,6 @@
                name:SKPDFViewToolModeChangedNotification 
object:mainController.pdfView];
     [nc addObserver:self 
selector:@selector(handleAnnotationModeChangedNotification:)
                name:SKPDFViewAnnotationModeChangedNotification 
object:mainController.pdfView];
-    [nc addObserver:self 
selector:@selector(handleSelectionChangedNotification:)
-               name:SKPDFViewCurrentSelectionChangedNotification 
object:mainController.pdfView];
 }
 
 @end

Modified: trunk/SKMainWindow.h
===================================================================
--- trunk/SKMainWindow.h        2021-12-27 10:27:04 UTC (rev 12646)
+++ trunk/SKMainWindow.h        2021-12-27 17:21:23 UTC (rev 12647)
@@ -39,8 +39,18 @@
 #import <Cocoa/Cocoa.h>
 
 
+@protocol SKMainWindowDelegate <NSWindowDelegate>
+@optional
+- (void)windowWillSendEvent:(NSEvent *)event;
+@end
+
 @interface SKMainWindow : NSWindow {
     BOOL disableConstrainedFrame;
 }
+
 @property (nonatomic) BOOL disableConstrainedFrame;
+
+- (id<SKMainWindowDelegate>)delegate;
+- (void)setDelegate:(id<SKMainWindowDelegate>)newDelegate;
+
 @end

Modified: trunk/SKMainWindow.m
===================================================================
--- trunk/SKMainWindow.m        2021-12-27 10:27:04 UTC (rev 12646)
+++ trunk/SKMainWindow.m        2021-12-27 17:21:23 UTC (rev 12647)
@@ -47,7 +47,8 @@
 
 - (void)sendEvent:(NSEvent *)theEvent {
     if ([theEvent type] == NSLeftMouseDown || [theEvent type] == 
NSRightMouseDown || [theEvent type] == NSKeyDown) {
-        [[SKImageToolTipWindow sharedToolTipWindow] orderOut:nil];
+        if ([[self delegate] 
respondsToSelector:@selector(windowWillSendEvent:)])
+            [[self delegate] windowWillSendEvent:theEvent];
     } else if ([theEvent type] == NSScrollWheel && ([theEvent modifierFlags] & 
NSAlternateKeyMask)) {
         NSResponder *target = (NSResponder *)[[self contentView] 
hitTest:[theEvent locationInWindow]] ?: (NSResponder *)self;
         while (target && [target respondsToSelector:@selector(magnifyWheel:)] 
== NO)
@@ -79,4 +80,12 @@
     return [self disableConstrainedFrame] ? frameRect : [super 
constrainFrameRect:frameRect toScreen:screen];
 }
 
+- (id<SKMainWindowDelegate>)delegate {
+    return (id<SKMainWindowDelegate>)[super delegate];
+}
+
+- (void)setDelegate:(id<SKMainWindowDelegate>)newDelegate {
+    [super setDelegate:newDelegate];
+}
+
 @end

Modified: trunk/SKMainWindowController_Actions.m
===================================================================
--- trunk/SKMainWindowController_Actions.m      2021-12-27 10:27:04 UTC (rev 
12646)
+++ trunk/SKMainWindowController_Actions.m      2021-12-27 17:21:23 UTC (rev 
12647)
@@ -420,11 +420,15 @@
 }
 
 - (IBAction)doZoomToSelection:(id)sender {
-    NSRect selRect = [pdfView currentSelectionRect];
-    PDFPage *page = [pdfView currentPage];
-    if (NSIsEmptyRect(selRect) == NO && page)
-        [pdfView zoomToRect:selRect onPage:page];
-    else NSBeep();
+    if ([pdfView toolMode] == SKSelectToolMode) {
+        NSRect selRect = [pdfView currentSelectionRect];
+        PDFPage *page = [pdfView currentPage];
+        if (NSIsEmptyRect(selRect) == NO && page)
+            [pdfView zoomToRect:selRect onPage:page];
+        else NSBeep();
+    } else {
+        [pdfView setTemporaryToolMode:SKZoomToolMode];
+    }
 }
 
 - (IBAction)doZoomToFit:(id)sender {

Modified: trunk/SKMainWindowController_UI.h
===================================================================
--- trunk/SKMainWindowController_UI.h   2021-12-27 10:27:04 UTC (rev 12646)
+++ trunk/SKMainWindowController_UI.h   2021-12-27 17:21:23 UTC (rev 12647)
@@ -42,9 +42,10 @@
 #import "SKOutlineView.h"
 #import "SKNoteOutlineView.h"
 #import "SKNoteTypeSheetController.h"
+#import "SKMainWindow.h"
 
 
-@interface SKMainWindowController (UI) <NSWindowDelegate, SKTableViewDelegate, 
NSTableViewDataSource, SKOutlineViewDelegate, SKNoteOutlineViewDelegate, 
NSOutlineViewDataSource, NSTextFieldDelegate, 
SKNoteTypeSheetControllerDelegate, NSMenuDelegate>
+@interface SKMainWindowController (UI) <SKMainWindowDelegate, 
SKTableViewDelegate, NSTableViewDataSource, SKOutlineViewDelegate, 
SKNoteOutlineViewDelegate, NSOutlineViewDataSource, NSTextFieldDelegate, 
SKNoteTypeSheetControllerDelegate, NSMenuDelegate>
 
 - (void)registerForNotifications;
 

Modified: trunk/SKMainWindowController_UI.m
===================================================================
--- trunk/SKMainWindowController_UI.m   2021-12-27 10:27:04 UTC (rev 12646)
+++ trunk/SKMainWindowController_UI.m   2021-12-27 17:21:23 UTC (rev 12647)
@@ -314,6 +314,13 @@
     return nil;
 }
 
+- (void)windowWillSendEvent:(NSEvent *)event {
+    [[SKImageToolTipWindow sharedToolTipWindow] orderOut:nil];
+    
+    if ([pdfView temporaryToolMode] != SKNoToolMode && [pdfView window] && 
([event type] != NSLeftMouseDown || NO == NSPointInRect([event 
locationInView:pdfView], [pdfView bounds])))
+        [pdfView setTemporaryToolMode:SKNoToolMode];
+}
+
 #pragma mark Page history highlights
 
 #define MAX_HIGHLIGHTS 5
@@ -1598,8 +1605,7 @@
 - (BOOL)validateMenuItem:(NSMenuItem *)menuItem {
     SEL action = [menuItem action];
     if (action == @selector(createNewNote:)) {
-        BOOL isMarkup = [menuItem tag] == SKHighlightNote || [menuItem tag] == 
SKUnderlineNote || [menuItem tag] == SKStrikeOutNote;
-        return [self interactionMode] != SKPresentationMode && [self 
hasOverview] == NO && [[self pdfDocument] allowsNotes] && ([pdfView toolMode] 
== SKTextToolMode || [pdfView toolMode] == SKNoteToolMode) && [pdfView 
hideNotes] == NO && (isMarkup == NO || [[pdfView currentSelection] 
hasCharacters]);
+        return [self interactionMode] != SKPresentationMode && [self 
hasOverview] == NO && [[self pdfDocument] allowsNotes] && ([pdfView toolMode] 
== SKTextToolMode || [pdfView toolMode] == SKNoteToolMode) && [pdfView 
hideNotes] == NO;
     } else if (action == @selector(editNote:)) {
         PDFAnnotation *annotation = [pdfView activeAnnotation];
         return [self interactionMode] != SKPresentationMode && [self 
hasOverview] == NO && [annotation isSkimNote] && ([annotation isEditable]);
@@ -1679,7 +1685,7 @@
     } else if (action == @selector(doZoomToPhysicalSize:)) {
         return [self interactionMode] != SKPresentationMode && [self 
hasOverview] == NO && [[self pdfDocument] isLocked] == NO && ([pdfView 
autoScales] || fabs([pdfView physicalScaleFactor] - 1.0 ) > 0.01);
     } else if (action == @selector(doZoomToSelection:)) {
-        return [self interactionMode] != SKPresentationMode && [self 
hasOverview] == NO && [[self pdfDocument] isLocked] == NO && 
NSIsEmptyRect([pdfView currentSelectionRect]) == NO;
+        return [self interactionMode] != SKPresentationMode && [self 
hasOverview] == NO && [[self pdfDocument] isLocked] == NO && 
(NSIsEmptyRect([pdfView currentSelectionRect]) == NO || [pdfView toolMode] != 
SKSelectToolMode);
     } else if (action == @selector(doZoomToFit:)) {
         return [self interactionMode] != SKPresentationMode && [self 
hasOverview] == NO && [[self pdfDocument] isLocked] == NO && [pdfView 
autoScales] == NO;
     } else if (action == @selector(alternateZoomToFit:)) {

Modified: trunk/SKPDFView.h
===================================================================
--- trunk/SKPDFView.h   2021-12-27 10:27:04 UTC (rev 12646)
+++ trunk/SKPDFView.h   2021-12-27 17:21:23 UTC (rev 12647)
@@ -49,6 +49,7 @@
 extern NSString *SKPDFViewToolModeChangedNotification;
 extern NSString *SKPDFViewToolModeChangedNotification;
 extern NSString *SKPDFViewAnnotationModeChangedNotification;
+extern NSString *SKPDFViewTemporaryToolModeChangedNotification;
 extern NSString *SKPDFViewActiveAnnotationDidChangeNotification;
 extern NSString *SKPDFViewDidAddAnnotationNotification;
 extern NSString *SKPDFViewDidRemoveAnnotationNotification;
@@ -84,6 +85,14 @@
     SKInkNote
 };
 
+typedef NS_ENUM(NSInteger, SKTemporaryToolMode) {
+    SKNoToolMode,
+    SKZoomToolMode,
+    SKHighlightToolMode = SKHighlightNote,
+    SKUnderlineToolMode = SKUnderlineNote,
+    SKStrikeOutToolMode = SKStrikeOutNote
+};
+
 enum {
     SKDragArea = 1 << 16,
     SKResizeUpDownArea = 1 << 17,
@@ -104,6 +113,7 @@
 
 @interface SKPDFView : SKBasePDFView {
     SKToolMode toolMode;
+    SKTemporaryToolMode temporaryToolMode;
     SKNoteType annotationMode;
     SKInteractionMode interactionMode;
     
@@ -161,6 +171,7 @@
 @property (nonatomic) BOOL displaysRightToLeft;
 @property (nonatomic) SKToolMode toolMode;
 @property (nonatomic) SKNoteType annotationMode;
+@property (nonatomic) SKTemporaryToolMode temporaryToolMode;
 @property (nonatomic) SKInteractionMode interactionMode;
 @property (nonatomic, retain) PDFAnnotation *activeAnnotation;
 @property (nonatomic, readonly, getter=isEditing) BOOL editing;

Modified: trunk/SKPDFView.m
===================================================================
--- trunk/SKPDFView.m   2021-12-27 10:27:04 UTC (rev 12646)
+++ trunk/SKPDFView.m   2021-12-27 17:21:23 UTC (rev 12647)
@@ -119,6 +119,7 @@
 NSString *SKPDFViewDisplaysRTLChangedNotification = 
@"SKPDFViewDisplaysRTLChangedNotification";
 NSString *SKPDFViewAutoScalesChangedNotification = 
@"SKPDFViewAutoScalesChangedNotification";
 NSString *SKPDFViewToolModeChangedNotification = 
@"SKPDFViewToolModeChangedNotification";
+NSString *SKPDFViewTemporaryToolModeChangedNotification = 
@"SKPDFViewTemporaryToolModeChangedNotification";
 NSString *SKPDFViewAnnotationModeChangedNotification = 
@"SKPDFViewAnnotationModeChangedNotification";
 NSString *SKPDFViewActiveAnnotationDidChangeNotification = 
@"SKPDFViewActiveAnnotationDidChangeNotification";
 NSString *SKPDFViewDidAddAnnotationNotification = 
@"SKPDFViewDidAddAnnotationNotification";
@@ -254,7 +255,7 @@
 
 @implementation SKPDFView
 
-@synthesize toolMode, annotationMode, interactionMode, activeAnnotation, 
readingBar, pacerSpeed, transitionController, typeSelectHelper, syncDot, 
highlightAnnotation;
+@synthesize toolMode, annotationMode, temporaryToolMode, interactionMode, 
activeAnnotation, readingBar, pacerSpeed, transitionController, 
typeSelectHelper, syncDot, highlightAnnotation;
 @synthesize currentMagnification=magnification, zooming;
 @dynamic extendedDisplayMode, displaysHorizontally, displaysRightToLeft, 
hideNotes, hasReadingBar, hasPacer, currentSelectionPage, currentSelectionRect, 
needsRewind, editing;
 
@@ -601,6 +602,7 @@
 
 - (void)setToolMode:(SKToolMode)newToolMode {
     if (toolMode != newToolMode) {
+        [self setTemporaryToolMode:SKNoToolMode];
         if (toolMode == SKTextToolMode || toolMode == SKNoteToolMode) {
             if (newToolMode != SKTextToolMode) {
                 if (newToolMode != SKNoteToolMode && activeAnnotation)
@@ -639,8 +641,16 @@
     }
 }
 
+- (void)setTemporaryToolMode:(SKTemporaryToolMode)newTemporaryToolMode {
+    if (temporaryToolMode != newTemporaryToolMode) {
+        temporaryToolMode = newTemporaryToolMode;
+        [[NSNotificationCenter defaultCenter] 
postNotificationName:SKPDFViewTemporaryToolModeChangedNotification object:self];
+    }
+}
+
 - (void)setInteractionMode:(SKInteractionMode)newInteractionMode {
     if (interactionMode != newInteractionMode) {
+        [self setTemporaryToolMode:SKNoToolMode];
         if (interactionMode == SKPresentationMode) {
             pdfvFlags.cursorHidden = NO;
             [NSCursor setHiddenUntilMouseMoves:NO];
@@ -1697,7 +1707,10 @@
        NSUInteger modifiers = [theEvent standardModifierFlags];
     PDFAreaOfInterest area = [self areaOfInterestForMouse:theEvent];
     PDFAnnotation *wasActiveAnnotation = activeAnnotation;
+    SKTemporaryToolMode tempToolMode = temporaryToolMode;
     
+    [self setTemporaryToolMode:SKNoToolMode];
+    
     if ([[self document] isLocked]) {
         [super mouseDown:theEvent];
     } else if (interactionMode == SKPresentationMode) {
@@ -1747,8 +1760,20 @@
             [self updateMagnifyWithEvent:nil];
     } else if ((area & kPDFPageArea) == 0) {
         [self doDragWithEvent:theEvent];
+    } else if (tempToolMode == SKZoomToolMode && modifiers == 0) {
+        BOOL wantsLoupe = [self hideLoupeWindow];
+        [self doMarqueeZoomWithEvent:theEvent];
+        if (wantsLoupe)
+            [self updateMagnifyWithEvent:nil];
+    } else if (tempToolMode != SKNoToolMode && (modifiers & NSCommandKeyMask) 
== 0) {
+        [self setActiveAnnotation:nil];
+        [super mouseDown:theEvent];
+        if ([[self currentSelection] hasCharacters]) {
+            [self addAnnotationWithType:(SKNoteType)tempToolMode];
+            [self setCurrentSelection:nil];
+        }
     } else if (toolMode == SKMoveToolMode) {
-        [self setCurrentSelection:nil];                
+        [self setCurrentSelection:nil];
         if ((area & kPDFLinkArea))
             [super mouseDown:theEvent];
         else
@@ -2580,7 +2605,11 @@
 }
 
 - (void)addAnnotationWithType:(SKNoteType)annotationType {
-    [self addAnnotationWithType:annotationType context:nil];
+    if ((toolMode == SKTextToolMode || toolMode == SKNoteToolMode) && 
annotationType >= SKHighlightNote && annotationType <= SKStrikeOutNote && 
[[self currentSelection] hasCharacters] == NO) {
+        [self setTemporaryToolMode:(SKTemporaryToolMode)annotationType];
+    } else {
+        [self addAnnotationWithType:annotationType context:nil];
+    }
 }
 
 - (void)addAnnotationForContext:(id)sender {
@@ -3036,6 +3065,7 @@
     }
     if (activeAnnotation)
         [self setNeedsDisplayForAnnotation:activeAnnotation];
+    [self setTemporaryToolMode:SKNoToolMode];
 }
 
 #pragma mark Key and window changes
@@ -3054,6 +3084,8 @@
         [[self class] cancelPreviousPerformRequestsWithTarget:self 
selector:@selector(doAutoHide) object:nil];
     }
     
+    [self setTemporaryToolMode:SKNoToolMode];
+    
     if (RUNNING_BEFORE(10_12) || RUNNING_AFTER(10_14)) {
         NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
         NSWindow *oldWindow = [self window];
@@ -5214,8 +5246,10 @@
         area &= (kPDFPageArea | kPDFLinkArea);
     } else if ((modifiers == NSCommandKeyMask || modifiers == 
(NSCommandKeyMask | NSShiftKeyMask) || modifiers == (NSCommandKeyMask | 
NSAlternateKeyMask))) {
         area = (area & kPDFPageArea) | SKSpecialToolArea;
+    } else if ((modifiers & NSCommandKeyMask) == 0 && temporaryToolMode != 
SKNoToolMode) {
+        area = (area & kPDFPageArea) | SKSpecialToolArea;
     } else {
-        
+
         SKRectEdges resizeHandle = SKNoEdgeMask;
         PDFPage *page = [self pageAndPoint:&p forEvent:theEvent nearest:YES];
         

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