Loading widget/src/cocoa/nsChildView.h +2 −2 Original line number Diff line number Diff line Loading @@ -60,7 +60,7 @@ #include "nsString.h" #include "nsIDragService.h" #include "nsplugindefs.h" #include "npapi.h" #import <Carbon/Carbon.h> #import <Cocoa/Cocoa.h> Loading Loading @@ -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 Loading widget/src/cocoa/nsChildView.mm +138 −88 Original line number Diff line number Diff line Loading @@ -77,8 +77,6 @@ #include "nsMenuUtilsX.h" #include "nsMenuBarX.h" #include "npapi.h" #include "gfxContext.h" #include "gfxQuartzSurface.h" Loading Loading @@ -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; Loading Loading @@ -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 Loading @@ -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); Loading @@ -930,6 +935,7 @@ void nsChildView::UpdatePluginPort() mPluginPort.qdPort.port = NULL; } } #endif } static void HideChildPluginViews(NSView* aView) Loading Loading @@ -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); Loading @@ -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; Loading Loading @@ -1350,6 +1360,7 @@ NS_IMETHODIMP nsChildView::StartDrawPlugin() if (portChanged) ::SetGWorld(oldPort, oldDevice); } #endif mPluginDrawing = PR_TRUE; return NS_OK; Loading @@ -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; } Loading Loading @@ -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; Loading Loading @@ -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; } Loading Loading @@ -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 Loading Loading @@ -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) { Loading Loading @@ -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(); Loading @@ -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; Loading Loading @@ -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(); Loading @@ -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; Loading Loading @@ -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; Loading @@ -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; Loading Loading @@ -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(); Loading @@ -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; Loading Loading @@ -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(); Loading @@ -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; Loading Loading @@ -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(); Loading @@ -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; Loading Loading @@ -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(); Loading @@ -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; Loading Loading @@ -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 { Loading Loading @@ -3791,6 +3823,7 @@ static nsEventStatus SendGeckoMouseEnterOrExitEvent(PRBool isTrusted, NS_OBJC_END_TRY_ABORT_BLOCK; } #endif -(NSMenu*)menuForEvent:(NSEvent*)theEvent { Loading Loading @@ -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; Loading Loading @@ -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"); Loading Loading @@ -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"); Loading Loading @@ -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; } Loading Loading @@ -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; } Loading Loading @@ -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; } Loading Loading @@ -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 Loading @@ -5478,6 +5523,7 @@ static const char* ToEscapedString(NSString* aString, nsCAutoString& aBuf) ::TSMRemoveDocumentProperty(mPluginTSMDoc, kFocusedChildViewTSMDocPropertyTag); return; } #endif [self processKeyDownEvent:theEvent keyEquiv:NO]; Loading Loading @@ -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]); Loading Loading @@ -5545,6 +5591,8 @@ static BOOL keyUpAlreadySentKeyDown = NO; ConvertCocoaKeyEventToCarbonEvent(theEvent, macKeyUpEvent); keyUpEvent.nativeMsg = &macKeyUpEvent; mGeckoChild->DispatchWindowEvent(keyUpEvent); } #endif return; } Loading Loading @@ -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; } Loading Loading @@ -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; } Loading @@ -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; Loading Loading
widget/src/cocoa/nsChildView.h +2 −2 Original line number Diff line number Diff line Loading @@ -60,7 +60,7 @@ #include "nsString.h" #include "nsIDragService.h" #include "nsplugindefs.h" #include "npapi.h" #import <Carbon/Carbon.h> #import <Cocoa/Cocoa.h> Loading Loading @@ -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 Loading
widget/src/cocoa/nsChildView.mm +138 −88 Original line number Diff line number Diff line Loading @@ -77,8 +77,6 @@ #include "nsMenuUtilsX.h" #include "nsMenuBarX.h" #include "npapi.h" #include "gfxContext.h" #include "gfxQuartzSurface.h" Loading Loading @@ -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; Loading Loading @@ -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 Loading @@ -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); Loading @@ -930,6 +935,7 @@ void nsChildView::UpdatePluginPort() mPluginPort.qdPort.port = NULL; } } #endif } static void HideChildPluginViews(NSView* aView) Loading Loading @@ -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); Loading @@ -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; Loading Loading @@ -1350,6 +1360,7 @@ NS_IMETHODIMP nsChildView::StartDrawPlugin() if (portChanged) ::SetGWorld(oldPort, oldDevice); } #endif mPluginDrawing = PR_TRUE; return NS_OK; Loading @@ -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; } Loading Loading @@ -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; Loading Loading @@ -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; } Loading Loading @@ -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 Loading Loading @@ -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) { Loading Loading @@ -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(); Loading @@ -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; Loading Loading @@ -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(); Loading @@ -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; Loading Loading @@ -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; Loading @@ -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; Loading Loading @@ -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(); Loading @@ -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; Loading Loading @@ -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(); Loading @@ -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; Loading Loading @@ -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(); Loading @@ -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; Loading Loading @@ -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(); Loading @@ -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; Loading Loading @@ -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 { Loading Loading @@ -3791,6 +3823,7 @@ static nsEventStatus SendGeckoMouseEnterOrExitEvent(PRBool isTrusted, NS_OBJC_END_TRY_ABORT_BLOCK; } #endif -(NSMenu*)menuForEvent:(NSEvent*)theEvent { Loading Loading @@ -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; Loading Loading @@ -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"); Loading Loading @@ -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"); Loading Loading @@ -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; } Loading Loading @@ -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; } Loading Loading @@ -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; } Loading Loading @@ -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 Loading @@ -5478,6 +5523,7 @@ static const char* ToEscapedString(NSString* aString, nsCAutoString& aBuf) ::TSMRemoveDocumentProperty(mPluginTSMDoc, kFocusedChildViewTSMDocPropertyTag); return; } #endif [self processKeyDownEvent:theEvent keyEquiv:NO]; Loading Loading @@ -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]); Loading Loading @@ -5545,6 +5591,8 @@ static BOOL keyUpAlreadySentKeyDown = NO; ConvertCocoaKeyEventToCarbonEvent(theEvent, macKeyUpEvent); keyUpEvent.nativeMsg = &macKeyUpEvent; mGeckoChild->DispatchWindowEvent(keyUpEvent); } #endif return; } Loading Loading @@ -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; } Loading Loading @@ -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; } Loading @@ -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; Loading