Revision: 29107
          http://sourceforge.net/p/bibdesk/svn/29107
Author:   hofman
Date:     2025-04-15 16:30:56 +0000 (Tue, 15 Apr 2025)
Log Message:
-----------
Check for urls in drag only in draggingEntered: and cache in ivar

Modified Paths:
--------------
    trunk/bibdesk_vendorsrc/amaxwell/FileView/FVFileView.h
    trunk/bibdesk_vendorsrc/amaxwell/FileView/FVFileView.m

Modified: trunk/bibdesk_vendorsrc/amaxwell/FileView/FVFileView.h
===================================================================
--- trunk/bibdesk_vendorsrc/amaxwell/FileView/FVFileView.h      2025-04-15 
15:55:01 UTC (rev 29106)
+++ trunk/bibdesk_vendorsrc/amaxwell/FileView/FVFileView.h      2025-04-15 
16:30:56 UTC (rev 29107)
@@ -234,6 +234,7 @@
         unsigned int needsReload:1;
         unsigned int controllingSharedPreviewer:1;
         unsigned int controllingQLPreviewPanel:1;
+        unsigned int dragHasURLs:1;
     } _fvFlags;
     NSSize                          _padding;
     NSSize                          _iconSize;

Modified: trunk/bibdesk_vendorsrc/amaxwell/FileView/FVFileView.m
===================================================================
--- trunk/bibdesk_vendorsrc/amaxwell/FileView/FVFileView.m      2025-04-15 
15:55:01 UTC (rev 29106)
+++ trunk/bibdesk_vendorsrc/amaxwell/FileView/FVFileView.m      2025-04-15 
16:30:56 UTC (rev 29107)
@@ -1519,6 +1519,11 @@
         return NSNotFound;
 }
 
+- (NSUInteger)_indexAtPoint:(NSPoint)point
+{
+    return [self _indexAtPoint:point dropOperation:NULL];
+}
+
 #pragma mark Slider
 
 - (void)_sliderAction:(id)sender {
@@ -2800,9 +2805,6 @@
     NSUInteger dropIndex = NSNotFound;
     FVDropOperation dropOp = FVDropBefore;
     
-    // !!! this is quite expensive to call repeatedly in -draggingUpdated
-    BOOL hasURLs = FVPasteboardHasURL([sender draggingPasteboard]);
-    
     // First determine the drop location, drop between rows in column mode, 
and between columns otherwise
     dropIndex = [self _indexAtPoint:p dropOperation:&dropOp];
     // Check whether the index is not NSNotFound, because the grid cell can be 
empty
@@ -2811,7 +2813,7 @@
     
     // We won't reset the drop location info when we propose 
NSDragOperationNone, because the delegate may want to override our decision, we 
will reset it at the end
     
-    if (hasURLs == NO) {
+    if (_fvFlags.dragHasURLs == NO) {
         // We have to make sure the pasteboard really has a URL here, since 
most NSStrings aren't valid URLs, but the delegate may accept other types
         dragOp = NSDragOperationNone;
     }
@@ -2866,6 +2868,8 @@
 // this is called as soon as the mouse is moved to start a drag, or enters the 
window from outside
 - (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender
 {
+    // !!! this is quite expensive to call repeatedly in -draggingUpdated
+    _fvFlags.dragHasURLs = FVPasteboardHasURL([sender draggingPasteboard]);
     return [self draggingUpdated:sender];
 }
 
@@ -2873,6 +2877,7 @@
 {
     [_dropHighlightView removeFromSuperview];
     _dropHighlightView = nil;
+    _fvFlags.dragHasURLs = NO;
     if (_fvFlags.needsReload)
         [self reloadIcons];
 }
@@ -2882,6 +2887,7 @@
 {
     [_dropHighlightView removeFromSuperview];
     _dropHighlightView = nil;
+    _fvFlags.dragHasURLs = NO;
     [self reloadIcons];
 }
 
@@ -3125,7 +3131,7 @@
     
     if ([_trackingAreas containsObject:area]) {
         NSRect rect = [area rect];
-        NSUInteger idx = [self _indexAtPoint:NSMakePoint(NSMidX(rect), 
NSMidY(rect)) dropOperation:NULL];
+        NSUInteger idx = [self _indexAtPoint:NSMakePoint(NSMidX(rect), 
NSMidY(rect))];
         if (idx != NSNotFound)
             [self _showArrowsForIconAtIndex:idx];
     } else if (_fvFlags.displayMode == FVDisplayModeGrid && ([area 
isEqual:_topSliderArea] || [area isEqual:_bottomSliderArea])) {
@@ -3206,12 +3212,12 @@
 // this method and shouldDelayWindowOrderingForEvent: are overriden to allow 
dragging from the view without making our window key
 - (BOOL)acceptsFirstMouse:(NSEvent *)event
 {
-    return ([self _indexAtPoint:[self convertPoint:[event locationInWindow] 
fromView:nil] dropOperation:NULL] != NSNotFound);
+    return ([self _indexAtPoint:[self convertPoint:[event locationInWindow] 
fromView:nil]] != NSNotFound);
 }
 
 - (BOOL)shouldDelayWindowOrderingForEvent:(NSEvent *)event
 {
-    return ([self _indexAtPoint:[self convertPoint:[event locationInWindow] 
fromView:nil] dropOperation:NULL] != NSNotFound);
+    return ([self _indexAtPoint:[self convertPoint:[event locationInWindow] 
fromView:nil]] != NSNotFound);
 }
 
 - (void)keyDown:(NSEvent *)event
@@ -3390,7 +3396,7 @@
     // in mouseDragged:, we're either tracking an arrow button, drawing a 
rubber band selection, or initiating a drag
     
     NSPoint p = [self convertPoint:[event locationInWindow] fromView:nil];
-    NSUInteger i = [self _indexAtPoint:p dropOperation:NULL];
+    NSUInteger i = [self _indexAtPoint:p];
     
     // _fvFlags.isMouseDown tells us if the mouseDown: event originated in 
this view; if not, just ignore it
     
@@ -3971,7 +3977,7 @@
 {
     _lastMouseDownLocInView = [self convertPoint:[event locationInWindow] 
fromView:nil];
     
-    NSUInteger idx = [self _indexAtPoint:_lastMouseDownLocInView 
dropOperation:NULL];
+    NSUInteger idx = [self _indexAtPoint:_lastMouseDownLocInView];
     
     return [self menuForIconAtIndex:idx];
 }
@@ -4553,7 +4559,7 @@
 - (BOOL)accessibilityPerformShowMenu {
     NSRect rect = [self visibleRect];
     NSPoint p = NSMakePoint(NSMidX(rect), NSMinY(rect) + 10.0);
-    NSUInteger i = [self _indexAtPoint:p dropOperation:NULL];
+    NSUInteger i = [self _indexAtPoint:p];
     [[self menuForIconAtIndex:i] popUpMenuPositioningItem:nil atLocation:p 
inView:self];
     return YES;
 }
@@ -4624,7 +4630,7 @@
 #else
     localPoint = [self convertPoint:[[self window] convertScreenToBase:point] 
fromView:nil];
 #endif
-    NSUInteger i = [self _indexAtPoint:localPoint dropOperation:NULL];
+    NSUInteger i = [self _indexAtPoint:localPoint];
     if (i != NSNotFound)
         return [[_accessibilityIcons objectAtIndex:i] 
accessibilityHitTest:point];
     return NSAccessibilityUnignoredAncestor(self);

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.



_______________________________________________
Bibdesk-commit mailing list
Bibdesk-commit@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bibdesk-commit

Reply via email to