This commit is contained in:
mozilla.mano%sent.com 2008-02-07 02:19:13 +00:00
Родитель 74aa32e1ed
Коммит 7b3ef4bf7f
7 изменённых файлов: 15 добавлений и 68 удалений

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

@ -1152,12 +1152,6 @@ public:
nsNativeKeyEvent* aNativeEvent, nsNativeKeyEvent* aNativeEvent,
PRBool aGetCharCode); PRBool aGetCharCode);
/**
* Hide any XUL popups associated with aDocument, including any documents
* displayed in child frames.
*/
static void HidePopupsInDocument(nsIDocument* aDocument);
/** /**
* Get the application manifest URI for this context. The manifest URI * Get the application manifest URI for this context. The manifest URI
* is specified in the manifest= attribute of the root element of the * is specified in the manifest= attribute of the root element of the

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

@ -145,7 +145,6 @@ static NS_DEFINE_CID(kXTFServiceCID, NS_XTFSERVICE_CID);
#include "nsIDOMNSUIEvent.h" #include "nsIDOMNSUIEvent.h"
#include "nsIDOMNSEvent.h" #include "nsIDOMNSEvent.h"
#include "nsIPrivateDOMEvent.h" #include "nsIPrivateDOMEvent.h"
#include "nsXULPopupManager.h"
#include "nsIPermissionManager.h" #include "nsIPermissionManager.h"
#ifdef IBMBIDI #ifdef IBMBIDI
@ -3925,21 +3924,6 @@ nsContentUtils::DOMEventToNativeKeyEvent(nsIDOMEvent* aDOMEvent,
return PR_TRUE; return PR_TRUE;
} }
/* static */
void
nsContentUtils::HidePopupsInDocument(nsIDocument* aDocument)
{
NS_PRECONDITION(aDocument, "Null document");
nsXULPopupManager* pm = nsXULPopupManager::GetInstance();
if (pm) {
nsCOMPtr<nsISupports> container = aDocument->GetContainer();
nsCOMPtr<nsIDocShellTreeItem> docShellToHide = do_QueryInterface(container);
if (docShellToHide)
pm->HidePopupsInDocShell(docShellToHide);
}
}
/* static */ /* static */
void void
nsAutoGCRoot::Shutdown() nsAutoGCRoot::Shutdown()

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

@ -3297,8 +3297,10 @@ nsGlobalWindow::CheckSecurityWidthAndHeight(PRInt32* aWidth, PRInt32* aHeight)
#ifdef MOZ_XUL #ifdef MOZ_XUL
if (!nsContentUtils::IsCallerTrustedForWrite()) { if (!nsContentUtils::IsCallerTrustedForWrite()) {
// if attempting to resize the window, hide any open popups // if attempting to resize the window, hide any open popups
nsXULPopupManager* pm = nsXULPopupManager::GetInstance();
nsCOMPtr<nsIDocument> doc(do_QueryInterface(mDocument)); nsCOMPtr<nsIDocument> doc(do_QueryInterface(mDocument));
nsContentUtils::HidePopupsInDocument(doc); if (pm && doc)
pm->HidePopupsInDocument(doc);
} }
#endif #endif
@ -3330,8 +3332,10 @@ nsGlobalWindow::CheckSecurityLeftAndTop(PRInt32* aLeft, PRInt32* aTop)
if (!nsContentUtils::IsCallerTrustedForWrite()) { if (!nsContentUtils::IsCallerTrustedForWrite()) {
#ifdef MOZ_XUL #ifdef MOZ_XUL
// if attempting to move the window, hide any open popups // if attempting to move the window, hide any open popups
nsXULPopupManager* pm = nsXULPopupManager::GetInstance();
nsCOMPtr<nsIDocument> doc(do_QueryInterface(mDocument)); nsCOMPtr<nsIDocument> doc(do_QueryInterface(mDocument));
nsContentUtils::HidePopupsInDocument(doc); if (pm && doc)
pm->HidePopupsInDocument(doc);
#endif #endif
PRInt32 screenLeft, screenTop, screenWidth, screenHeight; PRInt32 screenLeft, screenTop, screenWidth, screenHeight;

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

@ -1179,7 +1179,9 @@ DocumentViewerImpl::PageHide(PRBool aIsUnload)
#ifdef MOZ_XUL #ifdef MOZ_XUL
// look for open menupopups and close them after the unload event, in case // look for open menupopups and close them after the unload event, in case
// the unload event listeners open any new popups // the unload event listeners open any new popups
nsContentUtils::HidePopupsInDocument(mDocument); nsXULPopupManager* pm = nsXULPopupManager::GetInstance();
if (pm && mDocument)
pm->HidePopupsInDocument(mDocument);
#endif #endif
return NS_OK; return NS_OK;

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

@ -21,7 +21,7 @@
* *
* Contributor(s): * Contributor(s):
* Travis Bogard <travis@netscape.com> * Travis Bogard <travis@netscape.com>
* HÂkan Waara <hwaara@chello.se> * Håkan Waara <hwaara@chello.se>
* *
* Alternatively, the contents of this file may be used under the terms of * Alternatively, the contents of this file may be used under the terms of
* either of the GNU General Public License Version 2 or later (the "GPL"), * either of the GNU General Public License Version 2 or later (the "GPL"),
@ -94,10 +94,6 @@
#include "nsIObjectLoadingContent.h" #include "nsIObjectLoadingContent.h"
#include "nsLayoutUtils.h" #include "nsLayoutUtils.h"
#ifdef MOZ_XUL
#include "nsXULPopupManager.h"
#endif
// For Accessibility // For Accessibility
#ifdef ACCESSIBILITY #ifdef ACCESSIBILITY
#include "nsIAccessibilityService.h" #include "nsIAccessibilityService.h"
@ -677,15 +673,6 @@ nsSubDocumentFrame::AttributeChanged(PRInt32 aNameSpaceID,
PRBool is_primary = value.LowerCaseEqualsLiteral("content-primary"); PRBool is_primary = value.LowerCaseEqualsLiteral("content-primary");
#ifdef MOZ_XUL
// when a content panel is no longer primary, hide any open popups it may have
if (!is_primary) {
nsXULPopupManager* pm = nsXULPopupManager::GetInstance();
if (pm)
pm->HidePopupsInDocShell(docShellAsItem);
}
#endif
parentTreeOwner->ContentShellRemoved(docShellAsItem); parentTreeOwner->ContentShellRemoved(docShellAsItem);
if (value.LowerCaseEqualsLiteral("content") || if (value.LowerCaseEqualsLiteral("content") ||

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

@ -75,7 +75,6 @@ class nsMenuPopupFrame;
class nsMenuBarFrame; class nsMenuBarFrame;
class nsIMenuParent; class nsIMenuParent;
class nsIDOMKeyEvent; class nsIDOMKeyEvent;
class nsIDocShellTreeItem;
enum nsPopupType { enum nsPopupType {
ePopupTypePanel, ePopupTypePanel,
@ -474,10 +473,10 @@ public:
void HidePopupAfterDelay(nsMenuPopupFrame* aPopup); void HidePopupAfterDelay(nsMenuPopupFrame* aPopup);
/** /**
* Hide all of the popups from a given docshell. This should be called when the * Hide all of the popups from a given document. This should be called when the
* document is hidden. * document is hidden.
*/ */
void HidePopupsInDocShell(nsIDocShellTreeItem* aDocShellToHide); void HidePopupsInDocument(nsIDocument* aDocument);
/** /**
* Execute a menu command from the triggering event aEvent. * Execute a menu command from the triggering event aEvent.
@ -713,11 +712,6 @@ protected:
*/ */
void UpdateKeyboardListeners(); void UpdateKeyboardListeners();
/*
* Returns true if the docshell for aDoc is aExpected or a child of aExpected.
*/
PRBool IsChildOfDocShell(nsIDocument* aDoc, nsIDocShellTreeItem* aExpected);
// the document the key event listener is attached to // the document the key event listener is attached to
nsCOMPtr<nsIDOMEventTarget> mKeyListener; nsCOMPtr<nsIDOMEventTarget> mKeyListener;

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

@ -60,7 +60,6 @@
#include "nsPIDOMWindow.h" #include "nsPIDOMWindow.h"
#include "nsIInterfaceRequestorUtils.h" #include "nsIInterfaceRequestorUtils.h"
#include "nsIBaseWindow.h" #include "nsIBaseWindow.h"
#include "nsIDocShellTreeItem.h"
// See matching definitions in nsXULPopupManager.h // See matching definitions in nsXULPopupManager.h
nsNavigationDirection DirectionFromKeyCode_lr_tb [6] = { nsNavigationDirection DirectionFromKeyCode_lr_tb [6] = {
@ -766,25 +765,8 @@ nsXULPopupManager::HidePopupsInList(const nsTArray<nsMenuPopupFrame *> &aFrames,
SetCaptureState(nsnull); SetCaptureState(nsnull);
} }
PRBool
nsXULPopupManager::IsChildOfDocShell(nsIDocument* aDoc, nsIDocShellTreeItem* aExpected)
{
nsCOMPtr<nsISupports> doc = aDoc->GetContainer();
nsCOMPtr<nsIDocShellTreeItem> docShellItem(do_QueryInterface(doc));
while(docShellItem) {
if (docShellItem == aExpected)
return PR_TRUE;
nsCOMPtr<nsIDocShellTreeItem> parent;
docShellItem->GetParent(getter_AddRefs(parent));
docShellItem = parent;
}
return PR_FALSE;
}
void void
nsXULPopupManager::HidePopupsInDocShell(nsIDocShellTreeItem* aDocShellToHide) nsXULPopupManager::HidePopupsInDocument(nsIDocument* aDocument)
{ {
nsTArray<nsMenuPopupFrame *> popupsToHide; nsTArray<nsMenuPopupFrame *> popupsToHide;
@ -793,7 +775,7 @@ nsXULPopupManager::HidePopupsInDocShell(nsIDocShellTreeItem* aDocShellToHide)
while (item) { while (item) {
nsMenuChainItem* parent = item->GetParent(); nsMenuChainItem* parent = item->GetParent();
if (item->Frame()->PopupState() != ePopupInvisible && if (item->Frame()->PopupState() != ePopupInvisible &&
IsChildOfDocShell(item->Content()->GetOwnerDoc(), aDocShellToHide)) { aDocument && item->Content()->GetOwnerDoc() == aDocument) {
nsMenuPopupFrame* frame = item->Frame(); nsMenuPopupFrame* frame = item->Frame();
item->Detach(&mCurrentMenu); item->Detach(&mCurrentMenu);
delete item; delete item;
@ -807,7 +789,7 @@ nsXULPopupManager::HidePopupsInDocShell(nsIDocShellTreeItem* aDocShellToHide)
while (item) { while (item) {
nsMenuChainItem* parent = item->GetParent(); nsMenuChainItem* parent = item->GetParent();
if (item->Frame()->PopupState() != ePopupInvisible && if (item->Frame()->PopupState() != ePopupInvisible &&
IsChildOfDocShell(item->Content()->GetOwnerDoc(), aDocShellToHide)) { aDocument && item->Content()->GetOwnerDoc() == aDocument) {
nsMenuPopupFrame* frame = item->Frame(); nsMenuPopupFrame* frame = item->Frame();
item->Detach(&mPanels); item->Detach(&mPanels);
delete item; delete item;