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:
joki%netscape.com 2000-06-24 03:58:13 +00:00
Родитель 72cfb82341
Коммит 91a3526183
6 изменённых файлов: 60 добавлений и 2 удалений

Просмотреть файл

@ -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)
{