fix for 656687, plugins don't scroll. r=bnesse, sr=waterson

This commit is contained in:
saari%netscape.com 2001-01-28 00:37:48 +00:00
parent 39314f48aa
commit bac0fcbdb5
2 changed files with 84 additions and 50 deletions

View File

@ -221,6 +221,7 @@ private:
nsIPluginHost *mPluginHost;
nsresult DispatchKeyToPlugin(nsIDOMEvent* aKeyEvent);
nsresult DispatchMouseToPlugin(nsIDOMEvent* aMouseEvent);
};
// Mac specific code to fix up port position and clip during paint
@ -1333,18 +1334,18 @@ nsObjectFrame::HandleEvent(nsIPresContext* aPresContext,
switch (anEvent->message)
{
//XXX: All of the button down's are handled by the DOM listener
// case NS_MOUSE_LEFT_BUTTON_DOWN:
case NS_MOUSE_LEFT_BUTTON_UP:
case NS_MOUSE_LEFT_DOUBLECLICK:
// case NS_MOUSE_RIGHT_BUTTON_DOWN:
case NS_MOUSE_RIGHT_BUTTON_UP:
case NS_MOUSE_RIGHT_DOUBLECLICK:
// case NS_MOUSE_MIDDLE_BUTTON_DOWN:
case NS_MOUSE_MIDDLE_BUTTON_UP:
case NS_MOUSE_MIDDLE_DOUBLECLICK:
case NS_MOUSE_MOVE:
//case NS_KEY_UP:
//case NS_KEY_DOWN:
// case NS_MOUSE_LEFT_BUTTON_DOWN:
// case NS_MOUSE_LEFT_BUTTON_UP:
// case NS_MOUSE_LEFT_DOUBLECLICK:
// case NS_MOUSE_RIGHT_BUTTON_DOWN:
// case NS_MOUSE_RIGHT_BUTTON_UP:
// case NS_MOUSE_RIGHT_DOUBLECLICK:
// case NS_MOUSE_MIDDLE_BUTTON_DOWN:
// case NS_MOUSE_MIDDLE_BUTTON_UP:
// case NS_MOUSE_MIDDLE_DOUBLECLICK:
// case NS_MOUSE_MOVE:
// case NS_KEY_UP:
// case NS_KEY_DOWN:
case NS_GOTFOCUS:
case NS_LOSTFOCUS:
//case set cursor should be here too:
@ -1366,11 +1367,11 @@ nsObjectFrame::HandleEvent(nsIPresContext* aPresContext,
case NS_LOSTFOCUS:
//case NS_KEY_UP:
//case NS_KEY_DOWN:
case NS_MOUSE_MOVE:
case NS_MOUSE_ENTER:
case NS_MOUSE_LEFT_BUTTON_UP:
//case NS_MOUSE_MOVE:
//case NS_MOUSE_ENTER:
//case NS_MOUSE_LEFT_BUTTON_UP:
#ifndef XP_MAC
case NS_MOUSE_LEFT_BUTTON_DOWN:
//case NS_MOUSE_LEFT_BUTTON_DOWN:
#endif
*anEventStatus = mInstanceOwner->ProcessEvent(*anEvent);
break;
@ -2522,35 +2523,51 @@ nsPluginInstanceOwner::MouseDown(nsIDOMEvent* aMouseEvent)
nsresult
nsPluginInstanceOwner::MouseUp(nsIDOMEvent* aMouseEvent)
{
return NS_OK;
return DispatchMouseToPlugin(aMouseEvent);
}
nsresult
nsPluginInstanceOwner::MouseClick(nsIDOMEvent* aMouseEvent)
{
return NS_OK;
return DispatchMouseToPlugin(aMouseEvent);
}
nsresult
nsPluginInstanceOwner::MouseDblClick(nsIDOMEvent* aMouseEvent)
{
return NS_OK;
return DispatchMouseToPlugin(aMouseEvent);
}
nsresult
nsPluginInstanceOwner::MouseOver(nsIDOMEvent* aMouseEvent)
{
return NS_OK;
return DispatchMouseToPlugin(aMouseEvent);
}
nsresult
nsPluginInstanceOwner::MouseOut(nsIDOMEvent* aMouseEvent)
{
return DispatchMouseToPlugin(aMouseEvent);
}
nsresult nsPluginInstanceOwner::DispatchMouseToPlugin(nsIDOMEvent* aMouseEvent)
{
nsCOMPtr<nsIPrivateDOMEvent> privateEvent(do_QueryInterface(aMouseEvent));
if (privateEvent) {
nsMouseEvent* mouseEvent = nsnull;
privateEvent->GetInternalNSEvent((nsEvent**)&mouseEvent);
if (mouseEvent) {
nsEventStatus rv = ProcessEvent(*mouseEvent);
if (nsEventStatus_eConsumeNoDefault == rv) {
aMouseEvent->PreventDefault();
aMouseEvent->PreventBubble();
return NS_ERROR_FAILURE; // means consume event
}
}
else NS_ASSERTION(PR_FALSE, "nsPluginInstanceOwner::DispatchMouseToPlugin failed, mouseEvent null");
}
else NS_ASSERTION(PR_FALSE, "nsPluginInstanceOwner::DispatchMouseToPlugin failed, privateEvent null");
return NS_OK;
}

View File

@ -221,6 +221,7 @@ private:
nsIPluginHost *mPluginHost;
nsresult DispatchKeyToPlugin(nsIDOMEvent* aKeyEvent);
nsresult DispatchMouseToPlugin(nsIDOMEvent* aMouseEvent);
};
// Mac specific code to fix up port position and clip during paint
@ -1333,18 +1334,18 @@ nsObjectFrame::HandleEvent(nsIPresContext* aPresContext,
switch (anEvent->message)
{
//XXX: All of the button down's are handled by the DOM listener
// case NS_MOUSE_LEFT_BUTTON_DOWN:
case NS_MOUSE_LEFT_BUTTON_UP:
case NS_MOUSE_LEFT_DOUBLECLICK:
// case NS_MOUSE_RIGHT_BUTTON_DOWN:
case NS_MOUSE_RIGHT_BUTTON_UP:
case NS_MOUSE_RIGHT_DOUBLECLICK:
// case NS_MOUSE_MIDDLE_BUTTON_DOWN:
case NS_MOUSE_MIDDLE_BUTTON_UP:
case NS_MOUSE_MIDDLE_DOUBLECLICK:
case NS_MOUSE_MOVE:
//case NS_KEY_UP:
//case NS_KEY_DOWN:
// case NS_MOUSE_LEFT_BUTTON_DOWN:
// case NS_MOUSE_LEFT_BUTTON_UP:
// case NS_MOUSE_LEFT_DOUBLECLICK:
// case NS_MOUSE_RIGHT_BUTTON_DOWN:
// case NS_MOUSE_RIGHT_BUTTON_UP:
// case NS_MOUSE_RIGHT_DOUBLECLICK:
// case NS_MOUSE_MIDDLE_BUTTON_DOWN:
// case NS_MOUSE_MIDDLE_BUTTON_UP:
// case NS_MOUSE_MIDDLE_DOUBLECLICK:
// case NS_MOUSE_MOVE:
// case NS_KEY_UP:
// case NS_KEY_DOWN:
case NS_GOTFOCUS:
case NS_LOSTFOCUS:
//case set cursor should be here too:
@ -1366,11 +1367,11 @@ nsObjectFrame::HandleEvent(nsIPresContext* aPresContext,
case NS_LOSTFOCUS:
//case NS_KEY_UP:
//case NS_KEY_DOWN:
case NS_MOUSE_MOVE:
case NS_MOUSE_ENTER:
case NS_MOUSE_LEFT_BUTTON_UP:
//case NS_MOUSE_MOVE:
//case NS_MOUSE_ENTER:
//case NS_MOUSE_LEFT_BUTTON_UP:
#ifndef XP_MAC
case NS_MOUSE_LEFT_BUTTON_DOWN:
//case NS_MOUSE_LEFT_BUTTON_DOWN:
#endif
*anEventStatus = mInstanceOwner->ProcessEvent(*anEvent);
break;
@ -2522,35 +2523,51 @@ nsPluginInstanceOwner::MouseDown(nsIDOMEvent* aMouseEvent)
nsresult
nsPluginInstanceOwner::MouseUp(nsIDOMEvent* aMouseEvent)
{
return NS_OK;
return DispatchMouseToPlugin(aMouseEvent);
}
nsresult
nsPluginInstanceOwner::MouseClick(nsIDOMEvent* aMouseEvent)
{
return NS_OK;
return DispatchMouseToPlugin(aMouseEvent);
}
nsresult
nsPluginInstanceOwner::MouseDblClick(nsIDOMEvent* aMouseEvent)
{
return NS_OK;
return DispatchMouseToPlugin(aMouseEvent);
}
nsresult
nsPluginInstanceOwner::MouseOver(nsIDOMEvent* aMouseEvent)
{
return NS_OK;
return DispatchMouseToPlugin(aMouseEvent);
}
nsresult
nsPluginInstanceOwner::MouseOut(nsIDOMEvent* aMouseEvent)
{
return DispatchMouseToPlugin(aMouseEvent);
}
nsresult nsPluginInstanceOwner::DispatchMouseToPlugin(nsIDOMEvent* aMouseEvent)
{
nsCOMPtr<nsIPrivateDOMEvent> privateEvent(do_QueryInterface(aMouseEvent));
if (privateEvent) {
nsMouseEvent* mouseEvent = nsnull;
privateEvent->GetInternalNSEvent((nsEvent**)&mouseEvent);
if (mouseEvent) {
nsEventStatus rv = ProcessEvent(*mouseEvent);
if (nsEventStatus_eConsumeNoDefault == rv) {
aMouseEvent->PreventDefault();
aMouseEvent->PreventBubble();
return NS_ERROR_FAILURE; // means consume event
}
}
else NS_ASSERTION(PR_FALSE, "nsPluginInstanceOwner::DispatchMouseToPlugin failed, mouseEvent null");
}
else NS_ASSERTION(PR_FALSE, "nsPluginInstanceOwner::DispatchMouseToPlugin failed, privateEvent null");
return NS_OK;
}