зеркало из https://github.com/mozilla/gecko-dev.git
Part of fix for 42418, patch up event target from PresShell after re-entrant events to avoid null targets. r:nisheeth
This commit is contained in:
Родитель
72cfb82341
Коммит
91a3526183
|
@ -2054,6 +2054,14 @@ nsEventStateManager::GetEventTarget(nsIFrame **aFrame)
|
|||
}
|
||||
}
|
||||
|
||||
if (!mCurrentTarget) {
|
||||
nsCOMPtr<nsIPresShell> presShell;
|
||||
mPresContext->GetShell(getter_AddRefs(presShell));
|
||||
if (presShell) {
|
||||
presShell->GetEventTargetFrame(&mCurrentTarget);
|
||||
}
|
||||
}
|
||||
|
||||
*aFrame = mCurrentTarget;
|
||||
return NS_OK;
|
||||
}
|
||||
|
@ -2074,7 +2082,15 @@ nsEventStateManager::GetEventTargetContent(nsEvent* aEvent, nsIContent** aConten
|
|||
NS_IF_ADDREF(*aContent);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
if (!mCurrentTarget) {
|
||||
nsCOMPtr<nsIPresShell> presShell;
|
||||
mPresContext->GetShell(getter_AddRefs(presShell));
|
||||
if (presShell) {
|
||||
presShell->GetEventTargetFrame(&mCurrentTarget);
|
||||
}
|
||||
}
|
||||
|
||||
if (mCurrentTarget) {
|
||||
mCurrentTarget->GetContentForEvent(mPresContext, aEvent, aContent);
|
||||
return NS_OK;
|
||||
|
|
|
@ -386,6 +386,11 @@ public:
|
|||
nsIContent* aContent,
|
||||
nsEventStatus* aStatus) = 0;
|
||||
|
||||
/**
|
||||
* Gets the current target event frame from the PresShell
|
||||
*/
|
||||
NS_IMETHOD GetEventTargetFrame(nsIFrame** aFrame) = 0;
|
||||
|
||||
/**
|
||||
* Get and set the history state for the current document
|
||||
*/
|
||||
|
|
|
@ -683,6 +683,7 @@ public:
|
|||
nsIContentIterator** aIterator) const;
|
||||
|
||||
NS_IMETHOD HandleEventWithTarget(nsEvent* aEvent, nsIFrame* aFrame, nsIContent* aContent, nsEventStatus* aStatus);
|
||||
NS_IMETHOD GetEventTargetFrame(nsIFrame** aFrame);
|
||||
|
||||
NS_IMETHOD IsReflowLocked(PRBool* aIsLocked);
|
||||
|
||||
|
@ -3697,6 +3698,13 @@ PresShell::GetCurrentEventFrame()
|
|||
return mCurrentEventFrame;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
PresShell::GetEventTargetFrame(nsIFrame** aFrame)
|
||||
{
|
||||
*aFrame = GetCurrentEventFrame();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
void
|
||||
PresShell::PushCurrentEventInfo(nsIFrame* aFrame, nsIContent* aContent)
|
||||
{
|
||||
|
|
|
@ -386,6 +386,11 @@ public:
|
|||
nsIContent* aContent,
|
||||
nsEventStatus* aStatus) = 0;
|
||||
|
||||
/**
|
||||
* Gets the current target event frame from the PresShell
|
||||
*/
|
||||
NS_IMETHOD GetEventTargetFrame(nsIFrame** aFrame) = 0;
|
||||
|
||||
/**
|
||||
* Get and set the history state for the current document
|
||||
*/
|
||||
|
|
|
@ -2054,6 +2054,14 @@ nsEventStateManager::GetEventTarget(nsIFrame **aFrame)
|
|||
}
|
||||
}
|
||||
|
||||
if (!mCurrentTarget) {
|
||||
nsCOMPtr<nsIPresShell> presShell;
|
||||
mPresContext->GetShell(getter_AddRefs(presShell));
|
||||
if (presShell) {
|
||||
presShell->GetEventTargetFrame(&mCurrentTarget);
|
||||
}
|
||||
}
|
||||
|
||||
*aFrame = mCurrentTarget;
|
||||
return NS_OK;
|
||||
}
|
||||
|
@ -2074,7 +2082,15 @@ nsEventStateManager::GetEventTargetContent(nsEvent* aEvent, nsIContent** aConten
|
|||
NS_IF_ADDREF(*aContent);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
if (!mCurrentTarget) {
|
||||
nsCOMPtr<nsIPresShell> presShell;
|
||||
mPresContext->GetShell(getter_AddRefs(presShell));
|
||||
if (presShell) {
|
||||
presShell->GetEventTargetFrame(&mCurrentTarget);
|
||||
}
|
||||
}
|
||||
|
||||
if (mCurrentTarget) {
|
||||
mCurrentTarget->GetContentForEvent(mPresContext, aEvent, aContent);
|
||||
return NS_OK;
|
||||
|
|
|
@ -683,6 +683,7 @@ public:
|
|||
nsIContentIterator** aIterator) const;
|
||||
|
||||
NS_IMETHOD HandleEventWithTarget(nsEvent* aEvent, nsIFrame* aFrame, nsIContent* aContent, nsEventStatus* aStatus);
|
||||
NS_IMETHOD GetEventTargetFrame(nsIFrame** aFrame);
|
||||
|
||||
NS_IMETHOD IsReflowLocked(PRBool* aIsLocked);
|
||||
|
||||
|
@ -3697,6 +3698,13 @@ PresShell::GetCurrentEventFrame()
|
|||
return mCurrentEventFrame;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
PresShell::GetEventTargetFrame(nsIFrame** aFrame)
|
||||
{
|
||||
*aFrame = GetCurrentEventFrame();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
void
|
||||
PresShell::PushCurrentEventInfo(nsIFrame* aFrame, nsIContent* aContent)
|
||||
{
|
||||
|
|
Загрузка…
Ссылка в новой задаче