Commit ea03ce7a authored by Josh Aas's avatar Josh Aas
Browse files

64-bit fixes for Mac OS X nsChildView, part 1. b=513777 r=mstange

parent 29ff0375
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -60,7 +60,7 @@
#include "nsString.h"
#include "nsIDragService.h"

#include "nsplugindefs.h"
#include "npapi.h"

#import <Carbon/Carbon.h>
#import <Cocoa/Cocoa.h>
@@ -130,7 +130,7 @@ enum {
  nsChildView* mGeckoChild;

  BOOL mIsPluginView;
  BOOL mSendCarbonPluginEvents; // true if we should send carbon events to plugins
  NPEventModel mPluginEventModel;

  // The following variables are only valid during key down event processing.
  // Their current usage needs to be fixed to avoid problems with nested event
+138 −88
Original line number Diff line number Diff line
@@ -77,8 +77,6 @@
#include "nsMenuUtilsX.h"
#include "nsMenuBarX.h"

#include "npapi.h"

#include "gfxContext.h"
#include "gfxQuartzSurface.h"

@@ -179,8 +177,8 @@ PRUint32 nsChildView::sLastInputEventCount = 0;

- (void)setIsPluginView:(BOOL)aIsPlugin;
- (BOOL)isPluginView;
- (void)setSendCarbonPluginEvents:(BOOL)sendCarbonEvents;
- (BOOL)shouldSendCarbonPluginEvents;
- (void)setPluginEventModel:(NPEventModel)eventModel;
- (NPEventModel)pluginEventModel;

- (BOOL)childViewHasPlugin;

@@ -891,7 +889,9 @@ void nsChildView::UpdatePluginPort()
  NS_ASSERTION(mIsPluginView, "UpdatePluginPort called on non-plugin view");

  NSWindow* cocoaWindow = [mView nativeWindow];
#if !defined(NP_NO_CARBON) || !defined(NP_NO_QUICKDRAW)
  WindowRef carbonWindow = cocoaWindow ? (WindowRef)[cocoaWindow windowRef] : NULL;
#endif

  if (mPluginIsCG) {
    // [NSGraphicsContext currentContext] is supposed to "return the
@@ -903,18 +903,23 @@ void nsChildView::UpdatePluginPort()
    // graphics context.  See bug 500130.
    mPluginPort.cgPort.context = NULL;
    mPluginPort.cgPort.window = NULL;
    if ([(ChildView*)mView shouldSendCarbonPluginEvents]) {
#ifndef NP_NO_CARBON
    if ([(ChildView*)mView pluginEventModel] == NPEventModelCarbon) {
      if (carbonWindow) {
        mPluginPort.cgPort.context = (CGContextRef)[[cocoaWindow graphicsContext] graphicsPort];
        mPluginPort.cgPort.window = carbonWindow;
      }
    } else {
    }
#endif
    if ([(ChildView*)mView pluginEventModel] == NPEventModelCocoa) {
      if (cocoaWindow) {
        mPluginPort.cgPort.context = (CGContextRef)[[cocoaWindow graphicsContext] graphicsPort];
        mPluginPort.cgPort.window = cocoaWindow;
      }
    }
  } else {
  }
#ifndef NP_NO_QUICKDRAW
  else {
    if (carbonWindow) {
      mPluginPort.qdPort.port = ::GetWindowPort(carbonWindow);

@@ -930,6 +935,7 @@ void nsChildView::UpdatePluginPort()
      mPluginPort.qdPort.port = NULL;
    }
  }
#endif
}

static void HideChildPluginViews(NSView* aView)
@@ -1259,7 +1265,7 @@ NS_IMETHODIMP nsChildView::GetPluginClipRect(nsIntRect& outClipRect, nsIntPoint&

    if (mClipRects) {
      nsIntRect clipBounds;
      for (PRUint32 i = 0; i < mClipRectCount; ++i) {
      for (PRInt32 i = 0; i < mClipRectCount; ++i) {
        clipBounds.UnionRect(clipBounds, mClipRects[i]);
      }
      outClipRect.IntersectRect(outClipRect, clipBounds - outOrigin);
@@ -1286,6 +1292,10 @@ NS_IMETHODIMP nsChildView::StartDrawPlugin()
  NS_ASSERTION(mIsPluginView, "StartDrawPlugin must only be called on a plugin widget");
  if (!mIsPluginView) return NS_ERROR_FAILURE;

  // This code is necessary for both Quickdraw and CoreGraphics in 32-bit builds.
  // See comments below about why. In 64-bit CoreGraphics mode we will not keep
  // this region up to date, plugins should not depend on it.
#ifndef __LP64__
  NSWindow* window = [mView nativeWindow];
  if (!window)
    return NS_ERROR_FAILURE;
@@ -1350,6 +1360,7 @@ NS_IMETHODIMP nsChildView::StartDrawPlugin()
    if (portChanged)
      ::SetGWorld(oldPort, oldDevice);
  }
#endif

  mPluginDrawing = PR_TRUE;
  return NS_OK;
@@ -1375,13 +1386,13 @@ NS_IMETHODIMP nsChildView::SetPluginInstanceOwner(nsIPluginInstanceOwner* aInsta

NS_IMETHODIMP nsChildView::SetPluginEventModel(int inEventModel)
{
  [(ChildView*)mView setSendCarbonPluginEvents:(inEventModel != NPEventModelCocoa)];
  [(ChildView*)mView setPluginEventModel:(NPEventModel)inEventModel];
  return NS_OK;
}

NS_IMETHODIMP nsChildView::GetPluginEventModel(int* outEventModel)
{
  *outEventModel = ([(ChildView*)mView shouldSendCarbonPluginEvents] ? NPEventModelCarbon : NPEventModelCocoa);
  *outEventModel = [(ChildView*)mView pluginEventModel];
  return NS_OK;
}

@@ -2171,8 +2182,11 @@ NSEvent* gLastDragEvent = nil;
    mWindow = nil;
    mGeckoChild = inChild;
    mIsPluginView = NO;
    mSendCarbonPluginEvents = YES;

#ifndef NP_NO_CARBON
    mPluginEventModel = NPEventModelCarbon;
#else
    mPluginEventModel = NPEventModelCocoa;
#endif
    mCurKeyEvent = nil;
    mKeyDownHandled = PR_FALSE;
    mKeyPressHandled = NO;
@@ -2240,9 +2254,11 @@ NSEvent* gLastDragEvent = nil;

  [super dealloc];    

#ifndef NP_NO_QUICKDRAW
  // This sets the current port to _savePort.
  // todo: Only do if a Quickdraw plugin is present in the hierarchy!
  ::SetPort(NULL);
#endif

  NS_OBJC_END_TRY_ABORT_BLOCK;
}
@@ -2377,14 +2393,14 @@ NSEvent* gLastDragEvent = nil;
  return mIsPluginView;
}

- (void)setSendCarbonPluginEvents:(BOOL)sendCarbonEvents
- (void)setPluginEventModel:(NPEventModel)eventModel
{
  mSendCarbonPluginEvents = sendCarbonEvents;
  mPluginEventModel = eventModel;
}

- (BOOL)shouldSendCarbonPluginEvents
- (NPEventModel)pluginEventModel;
{
  return mSendCarbonPluginEvents;
  return mPluginEventModel;
}

- (BOOL)childViewHasPlugin
@@ -2586,7 +2602,7 @@ static const PRInt32 sShadowInvalidationInterval = 100;
  NSRectToGeckoRect(aRect, fullRect);

  const NSRect *rects;
  int count, i;
  NSInteger count, i;
  [self getRectsBeingDrawn:&rects count:&count];
  if (count < MAX_RECTS_IN_REGION) {
    for (i = 0; i < count; ++i) {
@@ -3123,9 +3139,9 @@ static const PRInt32 sShadowInvalidationInterval = 100;
  // Create event for use by plugins.
  // This is going to our child view so we don't need to look up the destination
  // event type.
#ifndef NP_NO_CARBON
  EventRecord carbonEvent;
  NPCocoaEvent cocoaEvent;
  if (mSendCarbonPluginEvents) {
  if (mPluginEventModel == NPEventModelCarbon) {
    carbonEvent.what = mouseDown;
    carbonEvent.message = 0;
    carbonEvent.when = ::TickCount();
@@ -3133,7 +3149,9 @@ static const PRInt32 sShadowInvalidationInterval = 100;
    carbonEvent.modifiers = ::GetCurrentEventKeyModifiers();
    geckoEvent.nativeMsg = &carbonEvent;
  }
  else {
#endif
  NPCocoaEvent cocoaEvent;
  if (mPluginEventModel == NPEventModelCocoa) {
    InitNPCocoaEvent(&cocoaEvent);
    NSPoint point = [self convertPoint:[theEvent locationInWindow] fromView:nil];
    cocoaEvent.type = NPCocoaEventMouseDown;
@@ -3175,9 +3193,9 @@ static const PRInt32 sShadowInvalidationInterval = 100;
  // Create event for use by plugins.
  // This is going to our child view so we don't need to look up the destination
  // event type.
#ifndef NP_NO_CARBON
  EventRecord carbonEvent;
  NPCocoaEvent cocoaEvent;
  if (mSendCarbonPluginEvents) {
  if (mPluginEventModel == NPEventModelCarbon) {
    carbonEvent.what = mouseUp;
    carbonEvent.message = 0;
    carbonEvent.when = ::TickCount();
@@ -3185,7 +3203,9 @@ static const PRInt32 sShadowInvalidationInterval = 100;
    carbonEvent.modifiers = ::GetCurrentEventKeyModifiers();
    geckoEvent.nativeMsg = &carbonEvent;
  }
  else {
#endif
  NPCocoaEvent cocoaEvent;
  if (mPluginEventModel == NPEventModelCocoa) {
    InitNPCocoaEvent(&cocoaEvent);
    NSPoint point = [self convertPoint:[theEvent locationInWindow] fromView:nil];
    cocoaEvent.type = NPCocoaEventMouseUp;
@@ -3235,8 +3255,8 @@ static nsEventStatus SendGeckoMouseEnterOrExitEvent(PRBool isTrusted,
  int eventModel;
  pluginWidget->GetPluginEventModel(&eventModel);

#ifndef NP_NO_CARBON
  EventRecord carbonEvent;
  NPCocoaEvent cocoaEvent;
  if (static_cast<NPEventModel>(eventModel) == NPEventModelCarbon) {
    carbonEvent.what = NPEventType_AdjustCursorEvent;
    carbonEvent.message = 0;
@@ -3245,7 +3265,9 @@ static nsEventStatus SendGeckoMouseEnterOrExitEvent(PRBool isTrusted,
    carbonEvent.modifiers = ::GetCurrentEventKeyModifiers();
    event.nativeMsg = &carbonEvent;
  }
  else {
#endif
  NPCocoaEvent cocoaEvent;
  if (static_cast<NPEventModel>(eventModel) == NPEventModelCocoa) {
    InitNPCocoaEvent(&cocoaEvent);
    cocoaEvent.type = ((msg == NS_MOUSE_ENTER) ? NPCocoaEventMouseEntered : NPCocoaEventMouseExited);
    cocoaEvent.data.mouse.modifierFlags = modifierFlags;
@@ -3388,9 +3410,9 @@ static nsEventStatus SendGeckoMouseEnterOrExitEvent(PRBool isTrusted,
  // Create event for use by plugins.
  // This is going to our child view so we don't need to look up the destination
  // event type.
#ifndef NP_NO_CARBON
  EventRecord carbonEvent;
  NPCocoaEvent cocoaEvent;
  if (mSendCarbonPluginEvents) {
  if (mPluginEventModel == NPEventModelCarbon) {
    carbonEvent.what = NPEventType_AdjustCursorEvent;
    carbonEvent.message = 0;
    carbonEvent.when = ::TickCount();
@@ -3398,7 +3420,9 @@ static nsEventStatus SendGeckoMouseEnterOrExitEvent(PRBool isTrusted,
    carbonEvent.modifiers = ::GetCurrentEventKeyModifiers();
    geckoEvent.nativeMsg = &carbonEvent;
  }
  else {
#endif
  NPCocoaEvent cocoaEvent;
  if (mPluginEventModel == NPEventModelCocoa) {
    InitNPCocoaEvent(&cocoaEvent);
    NSPoint point = [self convertPoint:[theEvent locationInWindow] fromView:nil];
    cocoaEvent.type = NPCocoaEventMouseMoved;
@@ -3435,9 +3459,9 @@ static nsEventStatus SendGeckoMouseEnterOrExitEvent(PRBool isTrusted,
  [self convertCocoaMouseEvent:theEvent toGeckoEvent:&geckoEvent];

  // create event for use by plugins
#ifndef NP_NO_CARBON
  EventRecord carbonEvent;
  NPCocoaEvent cocoaEvent;
  if (mSendCarbonPluginEvents) {
  if (mPluginEventModel == NPEventModelCarbon) {
    carbonEvent.what = nullEvent;
    carbonEvent.message = 0;
    carbonEvent.when = ::TickCount();
@@ -3445,7 +3469,9 @@ static nsEventStatus SendGeckoMouseEnterOrExitEvent(PRBool isTrusted,
    carbonEvent.modifiers = btnState | ::GetCurrentEventKeyModifiers();
    geckoEvent.nativeMsg = &carbonEvent;
  }
  else {
#endif
  NPCocoaEvent cocoaEvent;
  if (mPluginEventModel == NPEventModelCocoa) {
    InitNPCocoaEvent(&cocoaEvent);
    NSPoint point = [self convertPoint:[theEvent locationInWindow] fromView:nil];
    cocoaEvent.type = NPCocoaEventMouseDragged;
@@ -3492,9 +3518,9 @@ static nsEventStatus SendGeckoMouseEnterOrExitEvent(PRBool isTrusted,
  geckoEvent.clickCount = [theEvent clickCount];

  // create event for use by plugins
#ifndef NP_NO_CARBON
  EventRecord carbonEvent;
  NPCocoaEvent cocoaEvent;
  if (mSendCarbonPluginEvents) {
  if (mPluginEventModel == NPEventModelCarbon) {
    carbonEvent.what = mouseDown;
    carbonEvent.message = 0;
    carbonEvent.when = ::TickCount();
@@ -3502,7 +3528,9 @@ static nsEventStatus SendGeckoMouseEnterOrExitEvent(PRBool isTrusted,
    carbonEvent.modifiers = controlKey;  // fake a context menu click
    geckoEvent.nativeMsg = &carbonEvent;    
  }
  else {
#endif
  NPCocoaEvent cocoaEvent;
  if (mPluginEventModel == NPEventModelCocoa) {
    InitNPCocoaEvent(&cocoaEvent);
    NSPoint point = [self convertPoint:[theEvent locationInWindow] fromView:nil];
    cocoaEvent.type = NPCocoaEventMouseDown;
@@ -3543,9 +3571,9 @@ static nsEventStatus SendGeckoMouseEnterOrExitEvent(PRBool isTrusted,
  geckoEvent.clickCount = [theEvent clickCount];

  // create event for use by plugins
#ifndef NP_NO_CARBON
  EventRecord carbonEvent;
  NPCocoaEvent cocoaEvent;
  if (mSendCarbonPluginEvents) {
  if (mPluginEventModel == NPEventModelCarbon) {
    carbonEvent.what = mouseUp;
    carbonEvent.message = 0;
    carbonEvent.when = ::TickCount();
@@ -3553,7 +3581,9 @@ static nsEventStatus SendGeckoMouseEnterOrExitEvent(PRBool isTrusted,
    carbonEvent.modifiers = controlKey;  // fake a context menu click
    geckoEvent.nativeMsg = &carbonEvent;
  }
  else {
#endif
  NPCocoaEvent cocoaEvent;
  if (mPluginEventModel == NPEventModelCocoa) {
    InitNPCocoaEvent(&cocoaEvent);
    NSPoint point = [self convertPoint:[theEvent locationInWindow] fromView:nil];
    cocoaEvent.type = NPCocoaEventMouseUp;
@@ -3642,6 +3672,8 @@ static nsEventStatus SendGeckoMouseEnterOrExitEvent(PRBool isTrusted,
  mGeckoChild->DispatchWindowEvent(geckoEvent);
}

//XXXTODO handle scroll wheel events in 64-bit builds
#ifndef __LP64__
// Handle an NSScrollWheel event for a single axis only.
-(void)scrollWheel:(NSEvent*)theEvent forAxis:(enum nsMouseScrollEvent::nsMouseScrollFlags)inAxis
{
@@ -3791,6 +3823,7 @@ static nsEventStatus SendGeckoMouseEnterOrExitEvent(PRBool isTrusted,

  NS_OBJC_END_TRY_ABORT_BLOCK;
}
#endif

-(NSMenu*)menuForEvent:(NSEvent*)theEvent
{
@@ -4867,17 +4900,21 @@ GetUSLayoutCharFromKeyTranslate(UInt32 aKeyCode, UInt32 aModifiers)
    // the input string.
        
    // create event for use by plugins
#ifndef NP_NO_CARBON
    EventRecord carbonEvent;
#endif
    if (mCurKeyEvent) {
      // XXX The ASCII characters inputting mode of egbridge (Japanese IME)
      // might send the keyDown event with wrong keyboard layout if other
      // keyboard layouts are already loaded. In that case, the native event
      // doesn't match to this gecko event...
      if (mSendCarbonPluginEvents) {
#ifndef NP_NO_CARBON
      if (mPluginEventModel == NPEventModelCarbon) {
        ConvertCocoaKeyEventToCarbonEvent(mCurKeyEvent, carbonEvent);
        geckoEvent.nativeMsg = &carbonEvent;
      }
      else {
      } else
#endif
      {
        geckoEvent.nativeMsg = NULL;
      }
      geckoEvent.isShift   = (nsCocoaUtils::GetCocoaEventModifierFlags(mCurKeyEvent) & NSShiftKeyMask) != 0;
@@ -5039,7 +5076,7 @@ GetUSLayoutCharFromKeyTranslate(UInt32 aKeyCode, UInt32 aModifiers)
  return (mMarkedRange.location != NSNotFound) && (mMarkedRange.length != 0);
}

- (long) conversationIdentifier
- (NSInteger) conversationIdentifier
{
#if DEBUG_IME
  NSLog(@"****in conversationIdentifier");
@@ -5187,7 +5224,7 @@ GetUSLayoutCharFromKeyTranslate(UInt32 aKeyCode, UInt32 aModifiers)
  NS_OBJC_END_TRY_ABORT_BLOCK_RETURN(NSMakeRect(0.0, 0.0, 0.0, 0.0));
}

- (unsigned int)characterIndexForPoint:(NSPoint)thePoint
- (NSUInteger)characterIndexForPoint:(NSPoint)thePoint
{
#if DEBUG_IME
  NSLog(@"****in characterIndexForPoint");
@@ -5280,13 +5317,15 @@ static const char* ToEscapedString(NSString* aString, nsCAutoString& aBuf)
      [self convertCocoaKeyEvent:theEvent toGeckoEvent:&geckoEvent];

      // create event for use by plugins
#ifndef NP_NO_CARBON
      EventRecord carbonEvent;
      NPCocoaEvent cocoaEvent;
      if (mSendCarbonPluginEvents) {
      if (mPluginEventModel == NPEventModelCarbon) {
        ConvertCocoaKeyEventToCarbonEvent(theEvent, carbonEvent);
        geckoEvent.nativeMsg = &carbonEvent;
      }
      else {
#endif
      NPCocoaEvent cocoaEvent;
      if (mPluginEventModel == NPEventModelCocoa) {
        ConvertCocoaKeyEventToNPCocoaEvent(theEvent, cocoaEvent);
        geckoEvent.nativeMsg = &cocoaEvent;
      }
@@ -5333,12 +5372,14 @@ static const char* ToEscapedString(NSString* aString, nsCAutoString& aBuf)
        geckoEvent.flags |= NS_EVENT_FLAG_NO_DEFAULT;

      // create event for use by plugins
#ifndef NP_NO_CARBON
      EventRecord carbonEvent;
      if (mSendCarbonPluginEvents) {
      if (mPluginEventModel == NPEventModelCarbon) {
        ConvertCocoaKeyEventToCarbonEvent(theEvent, carbonEvent);
        geckoEvent.nativeMsg = &carbonEvent;
      }
      else {
      } else
#endif
      {
        geckoEvent.nativeMsg = NULL;
      }

@@ -5375,12 +5416,14 @@ static const char* ToEscapedString(NSString* aString, nsCAutoString& aBuf)
        geckoEvent.flags |= NS_EVENT_FLAG_NO_DEFAULT;

      // create event for use by plugins
#ifndef NP_NO_CARBON
      EventRecord carbonEvent;
      if (mSendCarbonPluginEvents) {
      if (mPluginEventModel == NPEventModelCarbon) {
        ConvertCocoaKeyEventToCarbonEvent(theEvent, carbonEvent);
        geckoEvent.nativeMsg = &carbonEvent;
      }
      else {
      } else
#endif
      {
        geckoEvent.nativeMsg = NULL;
      }

@@ -5460,12 +5503,14 @@ static const char* ToEscapedString(NSString* aString, nsCAutoString& aBuf)
{
  NS_OBJC_BEGIN_TRY_ABORT_BLOCK;

#ifndef NP_NO_CARBON
  // If a plugin has the focus, we need to use an alternate method for
  // handling NSKeyDown and NSKeyUp events (otherwise Carbon-based IME won't
  // work in plugins like the Flash plugin).  The same strategy is used by the
  // WebKit.  See PluginKeyEventsHandler() and [ChildView processPluginKeyEvent:]
  // for more info.
  if (mGeckoChild && mIsPluginView && mSendCarbonPluginEvents) {
  if (mGeckoChild && mIsPluginView &&
      (mPluginEventModel == NPEventModelCarbon)) {
    [self activatePluginTSMDoc];
    // We use the active TSM document to pass a pointer to ourselves (the
    // currently focused ChildView) to PluginKeyEventsHandler().  Because this
@@ -5478,6 +5523,7 @@ static const char* ToEscapedString(NSString* aString, nsCAutoString& aBuf)
    ::TSMRemoveDocumentProperty(mPluginTSMDoc, kFocusedChildViewTSMDocPropertyTag);
    return;
  }
#endif

  [self processKeyDownEvent:theEvent keyEquiv:NO];

@@ -5507,16 +5553,16 @@ static BOOL keyUpAlreadySentKeyDown = NO;
  nsAutoRetainCocoaObject kungFuDeathGrip(self);

  if (mIsPluginView) {
    if (!mSendCarbonPluginEvents) {
    if (mPluginEventModel == NPEventModelCocoa) {
      nsKeyEvent keyUpEvent(PR_TRUE, NS_KEY_UP, nsnull);
      [self convertCocoaKeyEvent:theEvent toGeckoEvent:&keyUpEvent];
      NPCocoaEvent pluginEvent;
      ConvertCocoaKeyEventToNPCocoaEvent(theEvent, pluginEvent);
      keyUpEvent.nativeMsg = &pluginEvent;
      mGeckoChild->DispatchWindowEvent(keyUpEvent);
      return;
    }

#ifndef NP_NO_CARBON
    if (mPluginEventModel == NPEventModelCarbon) {
      // I'm not sure the call to TSMProcessRawKeyEvent() is needed here (though
      // WebKit makes one).
      ::TSMProcessRawKeyEvent([theEvent _eventRef]);
@@ -5545,6 +5591,8 @@ static BOOL keyUpAlreadySentKeyDown = NO;
      ConvertCocoaKeyEventToCarbonEvent(theEvent, macKeyUpEvent);
      keyUpEvent.nativeMsg = &macKeyUpEvent;
      mGeckoChild->DispatchWindowEvent(keyUpEvent);      
    }
#endif
    return;
  }

@@ -5781,13 +5829,15 @@ static BOOL keyUpAlreadySentKeyDown = NO;
  [self convertCocoaKeyEvent:theEvent toGeckoEvent:&geckoEvent];

  // create event for use by plugins
#ifndef NP_NO_CARBON
  EventRecord carbonEvent;
  NPCocoaEvent cocoaEvent;
  if (mSendCarbonPluginEvents) {
  if (mPluginEventModel == NPEventModelCarbon) {
    ConvertCocoaKeyEventToCarbonEvent(theEvent, carbonEvent, message);
    geckoEvent.nativeMsg = &carbonEvent;
  }
  else {
#endif
  NPCocoaEvent cocoaEvent;
  if (mPluginEventModel == NPEventModelCocoa) {
    ConvertCocoaKeyEventToNPCocoaEvent(theEvent, cocoaEvent, message);
    geckoEvent.nativeMsg = &cocoaEvent;
  }
@@ -6060,7 +6110,7 @@ static BOOL keyUpAlreadySentKeyDown = NO;

// NSDraggingSource
// this is just implemented so we comply with the NSDraggingSource informal protocol
- (unsigned int)draggingSourceOperationMaskForLocal:(BOOL)isLocal
- (NSDragOperation)draggingSourceOperationMaskForLocal:(BOOL)isLocal
{
  return UINT_MAX;
}
@@ -6069,7 +6119,7 @@ static BOOL keyUpAlreadySentKeyDown = NO;
// or a Findow folder window; the argument passed is a path to the drop location, to be used
// in constructing a complete pathname for the file(s) we want to create as a result of
// the drag.
- (NSArray *)namesOfPromisedFilesDroppedAtDestination:(id <NSDraggingInfo>)dropDestination
- (NSArray *)namesOfPromisedFilesDroppedAtDestination:(NSURL*)dropDestination
{
  NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NIL;