diff --git a/layout/xul/base/src/nsXULPopupManager.cpp b/layout/xul/base/src/nsXULPopupManager.cpp index 925fe866eeaf..a0d62064e82b 100644 --- a/layout/xul/base/src/nsXULPopupManager.cpp +++ b/layout/xul/base/src/nsXULPopupManager.cpp @@ -1270,13 +1270,16 @@ void nsXULPopupManager::UpdateKeyboardListeners() { nsCOMPtr newTarget; + PRBool isForMenu = PR_FALSE; nsMenuChainItem* item = GetTopVisibleMenu(); if (item) { if (!item->IgnoreKeys()) newTarget = do_QueryInterface(item->Content()->GetDocument()); + isForMenu = item->PopupType() == ePopupTypeMenu; } else if (mActiveMenuBar) { newTarget = do_QueryInterface(mActiveMenuBar->GetContent()->GetDocument()); + isForMenu = PR_TRUE; } if (mKeyListener != newTarget) { @@ -1292,7 +1295,7 @@ nsXULPopupManager::UpdateKeyboardListeners() newTarget->AddEventListener(NS_LITERAL_STRING("keypress"), this, PR_TRUE); newTarget->AddEventListener(NS_LITERAL_STRING("keydown"), this, PR_TRUE); newTarget->AddEventListener(NS_LITERAL_STRING("keyup"), this, PR_TRUE); - nsContentUtils::NotifyInstalledMenuKeyboardListener(PR_TRUE); + nsContentUtils::NotifyInstalledMenuKeyboardListener(isForMenu); mKeyListener = newTarget; } }