diff --git a/mozilla/embedding/browser/webBrowser/nsDocShellTreeOwner.cpp b/mozilla/embedding/browser/webBrowser/nsDocShellTreeOwner.cpp index 4a9fb456ace..17ae8747d7f 100644 --- a/mozilla/embedding/browser/webBrowser/nsDocShellTreeOwner.cpp +++ b/mozilla/embedding/browser/webBrowser/nsDocShellTreeOwner.cpp @@ -1566,19 +1566,19 @@ ChromeContextMenuListener :: ContextMenu ( nsIDOMEvent* aMouseEvent ) } else if (tag.Equals(NS_LITERAL_STRING("html"), nsCaseInsensitiveStringComparator())) { - // first check if this is a background image that the user was trying to click on - // and if the listener is ready for that (only nsIContextMenuListener2 and up) - if (menuInfoImpl && menuInfoImpl->HasBackgroundImage(node)) { - flags2 |= nsIContextMenuListener2::CONTEXT_BACKGROUND_IMAGE; - targetDOMnode = node; - } - if (!flags && !flags2) { // only care about this if no other context was found. flags |= nsIContextMenuListener::CONTEXT_DOCUMENT; flags2 |= nsIContextMenuListener2::CONTEXT_DOCUMENT; targetDOMnode = node; } + if (!(flags & nsIContextMenuListener::CONTEXT_IMAGE)) { + // first check if this is a background image that the user was trying to click on + // and if the listener is ready for that (only nsIContextMenuListener2 and up) + if (menuInfoImpl && menuInfoImpl->HasBackgroundImage(node)) { + flags2 |= nsIContextMenuListener2::CONTEXT_BACKGROUND_IMAGE; + } + } break; // exit do-while } else if ( tag.EqualsWithConversion("object", PR_TRUE) || /* XXX what about images and documents? */ diff --git a/mozilla/embedding/tests/mfcembed/BrowserFrameGlue.cpp b/mozilla/embedding/tests/mfcembed/BrowserFrameGlue.cpp index 5be21f4a306..0a14aebbcb6 100644 --- a/mozilla/embedding/tests/mfcembed/BrowserFrameGlue.cpp +++ b/mozilla/embedding/tests/mfcembed/BrowserFrameGlue.cpp @@ -331,6 +331,13 @@ void CBrowserFrame::BrowserFrameGlueObj::ShowContextMenu(PRUint32 aContextFlags, BOOL bContentHasFrames = FALSE; UINT nIDResource = IDR_CTXMENU_DOCUMENT; + // Reset the values from the last invocation + // Clear image src & link url + nsAutoString empty; + pThis->m_wndBrowserView.SetCtxMenuImageSrc(empty); + pThis->m_wndBrowserView.SetCtxMenuLinkUrl(empty); + pThis->m_wndBrowserView.SetCurrentFrameURL(empty); + // Display the Editor context menu if the we're inside // an EditorFrm which is hosting an editing session // @@ -342,7 +349,23 @@ void CBrowserFrame::BrowserFrameGlueObj::ShowContextMenu(PRUint32 aContextFlags, } if(aContextFlags & nsIContextMenuListener2::CONTEXT_DOCUMENT) + { nIDResource = IDR_CTXMENU_DOCUMENT; + + // Background image? + if (aContextFlags & nsIContextMenuListener2::CONTEXT_BACKGROUND_IMAGE) + { + // Get the IMG SRC + nsCOMPtr imgURI; + aInfo->GetBackgroundImageSrc(getter_AddRefs(imgURI)); + if (!imgURI) + return; + nsCAutoString uri; + imgURI->GetSpec(uri); + + pThis->m_wndBrowserView.SetCtxMenuImageSrc(NS_ConvertUTF8toUCS2(uri)); // Set the new Img Src + } + } else if(aContextFlags & nsIContextMenuListener2::CONTEXT_TEXT) nIDResource = IDR_CTXMENU_TEXT; else if(aContextFlags & nsIContextMenuListener2::CONTEXT_LINK) @@ -356,12 +379,7 @@ void CBrowserFrame::BrowserFrameGlueObj::ShowContextMenu(PRUint32 aContextFlags, // BrowserView will be invoked and the value of the URL // will be accesible in the view - // Reset the value from the last invocation - // (A new value will be set after we determine it below) - // nsAutoString strUrlUcs2; - pThis->m_wndBrowserView.SetCtxMenuLinkUrl(strUrlUcs2); - nsresult rv = aInfo->GetAssociatedLink(strUrlUcs2); if(NS_FAILED(rv)) return; @@ -374,9 +392,6 @@ void CBrowserFrame::BrowserFrameGlueObj::ShowContextMenu(PRUint32 aContextFlags, { nIDResource = IDR_CTXMENU_IMAGE; - nsAutoString strImgSrcUcs2; - pThis->m_wndBrowserView.SetCtxMenuImageSrc(strImgSrcUcs2); // Clear it - // Get the IMG SRC nsCOMPtr imgURI; aInfo->GetImageSrc(getter_AddRefs(imgURI)); @@ -387,25 +402,8 @@ void CBrowserFrame::BrowserFrameGlueObj::ShowContextMenu(PRUint32 aContextFlags, if(strImgSrcUtf8.IsEmpty()) return; - strImgSrcUcs2 = NS_ConvertUTF8toUCS2(strImgSrcUtf8); - pThis->m_wndBrowserView.SetCtxMenuImageSrc(strImgSrcUcs2); // Set the new Img Src - } - else if(aContextFlags & nsIContextMenuListener2::CONTEXT_BACKGROUND_IMAGE) - { - nIDResource = IDR_CTXMENU_IMAGE; - - nsAutoString strImgSrcUcs2; - pThis->m_wndBrowserView.SetCtxMenuImageSrc(strImgSrcUcs2); // Clear it - - // Get the IMG SRC - nsCOMPtr imgURI; - aInfo->GetBackgroundImageSrc(getter_AddRefs(imgURI)); - if (!imgURI) - return; - nsCAutoString uri; - imgURI->GetSpec(uri); - - pThis->m_wndBrowserView.SetCtxMenuImageSrc(NS_ConvertUTF8toUCS2(uri)); // Set the new Img Src + // Set the new Img Src + pThis->m_wndBrowserView.SetCtxMenuImageSrc(NS_ConvertUTF8toUCS2(strImgSrcUtf8)); } // Determine if we need to add the Frame related context menu items @@ -415,9 +413,6 @@ void CBrowserFrame::BrowserFrameGlueObj::ShowContextMenu(PRUint32 aContextFlags, { bContentHasFrames = TRUE; - nsAutoString strFrameURL; - pThis->m_wndBrowserView.SetCurrentFrameURL(strFrameURL); // Clear it - //Determine the current Frame URL // nsresult rv = NS_OK; @@ -435,6 +430,7 @@ void CBrowserFrame::BrowserFrameGlueObj::ShowContextMenu(PRUint32 aContextFlags, if(NS_FAILED(rv)) GOTO_BUILD_CTX_MENU; + nsAutoString strFrameURL; rv = htmlDoc->GetURL(strFrameURL); if(NS_FAILED(rv)) GOTO_BUILD_CTX_MENU; diff --git a/mozilla/embedding/tests/mfcembed/BrowserView.cpp b/mozilla/embedding/tests/mfcembed/BrowserView.cpp index b6ca1ef7f9e..f3fc0c72a44 100644 --- a/mozilla/embedding/tests/mfcembed/BrowserView.cpp +++ b/mozilla/embedding/tests/mfcembed/BrowserView.cpp @@ -122,6 +122,7 @@ BEGIN_MESSAGE_MAP(CBrowserView, CWnd) ON_UPDATE_COMMAND_UI(ID_EDIT_PASTE, OnUpdatePaste) ON_UPDATE_COMMAND_UI(ID_FILE_PRINT, OnUpdateFilePrint) ON_UPDATE_COMMAND_UI(ID_FILE_PRINTSETUP, OnUpdatePrintSetup) + ON_UPDATE_COMMAND_UI(ID_VIEW_IMAGE, OnUpdateViewImage) //}}AFX_MSG_MAP END_MESSAGE_MAP() @@ -782,6 +783,11 @@ void CBrowserView::OnViewImageInNewWindow() OpenURLInNewWindow(mCtxMenuImgSrc.get()); } +void CBrowserView::OnUpdateViewImage(CCmdUI *pCmdUI) +{ + pCmdUI->Enable(mCtxMenuImgSrc.Length() > 0); +} + void CBrowserView::OnSaveLinkAs() { if(! mCtxMenuLinkUrl.Length()) diff --git a/mozilla/embedding/tests/mfcembed/BrowserView.h b/mozilla/embedding/tests/mfcembed/BrowserView.h index 0a8a6749c31..064dbde5596 100644 --- a/mozilla/embedding/tests/mfcembed/BrowserView.h +++ b/mozilla/embedding/tests/mfcembed/BrowserView.h @@ -196,6 +196,7 @@ protected: afx_msg void OnUpdateCut(CCmdUI* pCmdUI); afx_msg void OnUpdateCopy(CCmdUI* pCmdUI); afx_msg void OnUpdatePaste(CCmdUI* pCmdUI); + afx_msg void OnUpdateViewImage(CCmdUI* pCmdUI); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; diff --git a/mozilla/embedding/tests/mfcembed/MfcEmbed.rc b/mozilla/embedding/tests/mfcembed/MfcEmbed.rc index e143f86da51..cbf6f49d734 100644 --- a/mozilla/embedding/tests/mfcembed/MfcEmbed.rc +++ b/mozilla/embedding/tests/mfcembed/MfcEmbed.rc @@ -189,6 +189,7 @@ BEGIN MENUITEM SEPARATOR MENUITEM "&View Page Source", ID_VIEW_SOURCE MENUITEM "View Page &Info", ID_VIEW_INFO + MENUITEM "View Background &Image", ID_VIEW_IMAGE MENUITEM SEPARATOR MENUITEM "Save &Page As...", ID_FILE_SAVE_AS MENUITEM SEPARATOR