From 3dbbdbf84149e9d4d4186c4871ca0773d2b3b786 Mon Sep 17 00:00:00 2001 From: "neil%parkwaycc.co.uk" Date: Wed, 2 Nov 2005 23:53:56 +0000 Subject: [PATCH] Get default tooltip text more reliably b=147670 r=timeless sr=jst git-svn-id: svn://10.0.0.236/trunk@184066 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/layout/base/nsCSSFrameConstructor.cpp | 9 +-- mozilla/layout/xul/base/src/nsIRootBox.h | 12 ++-- .../layout/xul/base/src/nsMenuPopupFrame.cpp | 3 +- .../layout/xul/base/src/nsPopupBoxObject.cpp | 6 +- .../layout/xul/base/src/nsRootBoxFrame.cpp | 40 +++++------ .../xul/base/src/nsXULTooltipListener.cpp | 72 +++++++++---------- .../xul/base/src/nsXULTooltipListener.h | 2 - mozilla/toolkit/content/widgets/popup.xml | 23 ------ .../resources/content/bindings/popup.xml | 23 ------ 9 files changed, 62 insertions(+), 128 deletions(-) diff --git a/mozilla/layout/base/nsCSSFrameConstructor.cpp b/mozilla/layout/base/nsCSSFrameConstructor.cpp index 2a9037860de..16c8da64365 100644 --- a/mozilla/layout/base/nsCSSFrameConstructor.cpp +++ b/mozilla/layout/base/nsCSSFrameConstructor.cpp @@ -6439,8 +6439,7 @@ nsCSSFrameConstructor::ConstructXULFrame(nsFrameConstructorState& aState, nsCOMPtr rootBox(do_QueryInterface(rootFrame)); NS_ASSERTION(rootBox, "unexpected null pointer"); if (rootBox) { - nsIFrame* popupSetFrame; - rootBox->GetPopupSetFrame(&popupSetFrame); + nsIFrame* popupSetFrame = rootBox->GetPopupSetFrame(); NS_ASSERTION(popupSetFrame, "unexpected null pointer"); if (popupSetFrame) { nsCOMPtr popupSet(do_QueryInterface(popupSetFrame)); @@ -9807,8 +9806,7 @@ DeletingFrameSubtree(nsPresContext* aPresContext, nsCOMPtr rootBox(do_QueryInterface(rootFrame)); NS_ASSERTION(rootBox, "unexpected null pointer"); if (rootBox) { - nsIFrame* popupSetFrame; - rootBox->GetPopupSetFrame(&popupSetFrame); + nsIFrame* popupSetFrame = rootBox->GetPopupSetFrame(); NS_ASSERTION(popupSetFrame, "unexpected null pointer"); if (popupSetFrame) { nsCOMPtr popupSet(do_QueryInterface(popupSetFrame)); @@ -10022,8 +10020,7 @@ nsCSSFrameConstructor::ContentRemoved(nsIContent* aContainer, #ifdef MOZ_XUL nsCOMPtr rootBox(do_QueryInterface(rootFrame)); if (rootBox) { - nsIFrame* popupSetFrame; - rootBox->GetPopupSetFrame(&popupSetFrame); + nsIFrame* popupSetFrame = rootBox->GetPopupSetFrame(); if (popupSetFrame) { nsCOMPtr popupSet(do_QueryInterface(popupSetFrame)); if (popupSet) diff --git a/mozilla/layout/xul/base/src/nsIRootBox.h b/mozilla/layout/xul/base/src/nsIRootBox.h index 8c679e8ac83..642632a8ecf 100644 --- a/mozilla/layout/xul/base/src/nsIRootBox.h +++ b/mozilla/layout/xul/base/src/nsIRootBox.h @@ -53,14 +53,14 @@ class nsIRootBox : public nsISupports { public: NS_DEFINE_STATIC_IID_ACCESSOR(NS_IROOTBOX_IID) - NS_IMETHOD GetPopupSetFrame(nsIFrame** aResult)=0; - NS_IMETHOD SetPopupSetFrame(nsIFrame* aPopupSet)=0; + virtual nsIFrame* GetPopupSetFrame() = 0; + virtual void SetPopupSetFrame(nsIFrame* aPopupSet)=0; - NS_IMETHOD GetDefaultTooltip(nsIContent** aResult)=0; - NS_IMETHOD SetDefaultTooltip(nsIContent* aTooltip)=0; + virtual nsIContent* GetDefaultTooltip() = 0; + virtual void SetDefaultTooltip(nsIContent* aTooltip) = 0; - NS_IMETHOD AddTooltipSupport(nsIContent* aNode)=0; - NS_IMETHOD RemoveTooltipSupport(nsIContent* aNode)=0; + virtual nsresult AddTooltipSupport(nsIContent* aNode) = 0; + virtual nsresult RemoveTooltipSupport(nsIContent* aNode) = 0; }; #endif diff --git a/mozilla/layout/xul/base/src/nsMenuPopupFrame.cpp b/mozilla/layout/xul/base/src/nsMenuPopupFrame.cpp index eb39c4d60a7..a2a166aa42d 100644 --- a/mozilla/layout/xul/base/src/nsMenuPopupFrame.cpp +++ b/mozilla/layout/xul/base/src/nsMenuPopupFrame.cpp @@ -98,8 +98,7 @@ GetPopupSetFrame(nsPresContext* aPresContext) if (!rootBox) return nsnull; - nsIFrame* popupSetFrame; - rootBox->GetPopupSetFrame(&popupSetFrame); + nsIFrame* popupSetFrame = rootBox->GetPopupSetFrame(); if (!popupSetFrame) return nsnull; diff --git a/mozilla/layout/xul/base/src/nsPopupBoxObject.cpp b/mozilla/layout/xul/base/src/nsPopupBoxObject.cpp index 7ffe51cdbed..72f1ced2661 100644 --- a/mozilla/layout/xul/base/src/nsPopupBoxObject.cpp +++ b/mozilla/layout/xul/base/src/nsPopupBoxObject.cpp @@ -116,8 +116,7 @@ nsPopupBoxObject::HidePopup() if (!rootBox) return NS_OK; - nsIFrame* popupSetFrame; - rootBox->GetPopupSetFrame(&popupSetFrame); + nsIFrame* popupSetFrame = rootBox->GetPopupSetFrame(); if (!popupSetFrame) return NS_OK; @@ -150,8 +149,7 @@ nsPopupBoxObject::ShowPopup(nsIDOMElement* aSrcContent, if (!rootBox) return NS_OK; - nsIFrame* popupSetFrame; - rootBox->GetPopupSetFrame(&popupSetFrame); + nsIFrame* popupSetFrame = rootBox->GetPopupSetFrame(); if (!popupSetFrame) return NS_OK; diff --git a/mozilla/layout/xul/base/src/nsRootBoxFrame.cpp b/mozilla/layout/xul/base/src/nsRootBoxFrame.cpp index 39462773471..157f130cee4 100644 --- a/mozilla/layout/xul/base/src/nsRootBoxFrame.cpp +++ b/mozilla/layout/xul/base/src/nsRootBoxFrame.cpp @@ -74,12 +74,12 @@ public: NS_DECL_ISUPPORTS_INHERITED - NS_IMETHOD GetPopupSetFrame(nsIFrame** aResult); - NS_IMETHOD SetPopupSetFrame(nsIFrame* aPopupSet); - NS_IMETHOD GetDefaultTooltip(nsIContent** aResult); - NS_IMETHOD SetDefaultTooltip(nsIContent* aTooltip); - NS_IMETHOD AddTooltipSupport(nsIContent* aNode); - NS_IMETHOD RemoveTooltipSupport(nsIContent* aNode); + virtual nsIFrame* GetPopupSetFrame(); + virtual void SetPopupSetFrame(nsIFrame* aPopupSet); + virtual nsIContent* GetDefaultTooltip(); + virtual void SetDefaultTooltip(nsIContent* aTooltip); + virtual nsresult AddTooltipSupport(nsIContent* aNode); + virtual nsresult RemoveTooltipSupport(nsIContent* aNode); NS_IMETHOD AppendFrames(nsIAtom* aListName, nsIFrame* aFrameList); @@ -107,7 +107,7 @@ public: virtual nsIAtom* GetType() const; #ifdef DEBUG - NS_IMETHOD GetFrameName(nsString& aResult) const; + NS_IMETHOD GetFrameName(nsAString& aResult) const; #endif nsIFrame* mPopupSetFrame; @@ -258,14 +258,13 @@ nsRootBoxFrame::GetType() const return nsLayoutAtoms::rootFrame; } -NS_IMETHODIMP -nsRootBoxFrame::GetPopupSetFrame(nsIFrame** aResult) +nsIFrame* +nsRootBoxFrame::GetPopupSetFrame() { - *aResult = mPopupSetFrame; - return NS_OK; + return mPopupSetFrame; } -NS_IMETHODIMP +void nsRootBoxFrame::SetPopupSetFrame(nsIFrame* aPopupSet) { // Under normal conditions this should only be called once. However, @@ -281,24 +280,21 @@ nsRootBoxFrame::SetPopupSetFrame(nsIFrame* aPopupSet) } else { NS_NOTREACHED("Popup set is already defined! Only 1 allowed."); } - return NS_OK; } -NS_IMETHODIMP -nsRootBoxFrame::GetDefaultTooltip(nsIContent** aTooltip) +nsIContent* +nsRootBoxFrame::GetDefaultTooltip() { - *aTooltip = mDefaultTooltip; - return NS_OK; + return mDefaultTooltip; } -NS_IMETHODIMP +void nsRootBoxFrame::SetDefaultTooltip(nsIContent* aTooltip) { mDefaultTooltip = aTooltip; - return NS_OK; } -NS_IMETHODIMP +nsresult nsRootBoxFrame::AddTooltipSupport(nsIContent* aNode) { // listener will be refcounted by dom event targets that @@ -312,7 +308,7 @@ nsRootBoxFrame::AddTooltipSupport(nsIContent* aNode) return NS_OK; } -NS_IMETHODIMP +nsresult nsRootBoxFrame::RemoveTooltipSupport(nsIContent* aNode) { // XXjh yuck, I'll have to implement a way to get at @@ -340,7 +336,7 @@ NS_INTERFACE_MAP_END_INHERITING(nsBoxFrame) #ifdef DEBUG NS_IMETHODIMP -nsRootBoxFrame::GetFrameName(nsString& aResult) const +nsRootBoxFrame::GetFrameName(nsAString& aResult) const { return MakeFrameName(NS_LITERAL_STRING("RootBox"), aResult); } diff --git a/mozilla/layout/xul/base/src/nsXULTooltipListener.cpp b/mozilla/layout/xul/base/src/nsXULTooltipListener.cpp index f25e7adb6bb..2c0083acd17 100644 --- a/mozilla/layout/xul/base/src/nsXULTooltipListener.cpp +++ b/mozilla/layout/xul/base/src/nsXULTooltipListener.cpp @@ -563,10 +563,6 @@ nsXULTooltipListener::GetTooltipFor(nsIContent* aTarget, nsIContent** aTooltip) if (!aTarget) return NS_ERROR_NULL_POINTER; - nsCOMPtr targetEl(do_QueryInterface(aTarget)); - if (!targetEl) - return NS_ERROR_FAILURE; // could be a text node or something - // before we go on, make sure that target node still has a window nsCOMPtr document = aTarget->GetDocument(); if (!document) { @@ -582,54 +578,50 @@ nsXULTooltipListener::GetTooltipFor(nsIContent* aTarget, nsIContent** aTooltip) if (!domWindow) return NS_ERROR_FAILURE; else { - PRBool needTooltip; - targetEl->HasAttribute(NS_LITERAL_STRING("tooltiptext"), &needTooltip); - if (needTooltip) { + nsAutoString tooltipText; + aTarget->GetAttr(kNameSpaceID_None, nsXULAtoms::tooltiptext, tooltipText); + if (!tooltipText.IsEmpty()) { // specifying tooltiptext means we will always use the default tooltip - mRootBox->GetDefaultTooltip(aTooltip); - NS_IF_ADDREF(*aTooltip); - return NS_OK; - } else { - nsAutoString tooltipId; - targetEl->GetAttribute(NS_LITERAL_STRING("tooltip"), tooltipId); + *aTooltip = mRootBox->GetDefaultTooltip(); + if (*aTooltip) { + NS_ADDREF(*aTooltip); + (*aTooltip)->SetAttr(kNameSpaceID_None, nsXULAtoms::label, tooltipText, PR_TRUE); + } + return NS_OK; + } + nsAutoString tooltipId; + aTarget->GetAttr(kNameSpaceID_None, nsXULAtoms::tooltip, tooltipId); - // if tooltip == _child, look for first child - if (tooltipId.EqualsLiteral("_child")) { - GetImmediateChild(aTarget, nsXULAtoms::tooltip, aTooltip); - return NS_OK; - } else { - if (!tooltipId.IsEmpty()) { - // tooltip must be an id, use getElementById to find it - nsCOMPtr domDocument = - do_QueryInterface(document); - if (!domDocument) { - return NS_ERROR_FAILURE; - } + // if tooltip == _child, look for first child + if (tooltipId.EqualsLiteral("_child")) { + GetImmediateChild(aTarget, nsXULAtoms::tooltip, aTooltip); + return NS_OK; + } + if (!tooltipId.IsEmpty()) { + // tooltip must be an id, use getElementById to find it + nsCOMPtr domDocument = + do_QueryInterface(document); + if (!domDocument) { + return NS_ERROR_FAILURE; + } - nsCOMPtr tooltipEl; - domDocument->GetElementById(tooltipId, - getter_AddRefs(tooltipEl)); + nsCOMPtr tooltipEl; + domDocument->GetElementById(tooltipId, + getter_AddRefs(tooltipEl)); - if (tooltipEl) { + if (tooltipEl) { #ifdef MOZ_XUL - mNeedTitletip = PR_FALSE; + mNeedTitletip = PR_FALSE; #endif - - nsCOMPtr tooltipContent(do_QueryInterface(tooltipEl)); - *aTooltip = tooltipContent; - NS_IF_ADDREF(*aTooltip); - - return NS_OK; - } - } + CallQueryInterface(tooltipEl, aTooltip); + return NS_OK; } } #ifdef MOZ_XUL // titletips should just use the default tooltip if (mIsSourceTree && mNeedTitletip) { - mRootBox->GetDefaultTooltip(aTooltip); - NS_IF_ADDREF(*aTooltip); + NS_IF_ADDREF(*aTooltip = mRootBox->GetDefaultTooltip()); return NS_OK; } #endif diff --git a/mozilla/layout/xul/base/src/nsXULTooltipListener.h b/mozilla/layout/xul/base/src/nsXULTooltipListener.h index 41af95fbbc5..ec24b5ea2e5 100644 --- a/mozilla/layout/xul/base/src/nsXULTooltipListener.h +++ b/mozilla/layout/xul/base/src/nsXULTooltipListener.h @@ -98,8 +98,6 @@ public: NS_IMETHOD HandleEvent(nsIDOMEvent* aEvent); nsresult Init(nsIContent* aSourceNode, nsIRootBox* aRootBox); - nsresult SetDefaultTooltip(nsIContent* aDefaultTooltip); - nsresult GetDefaultTooltip(nsIContent** aDefaultTooltip); nsresult AddTooltipSupport(nsIContent* aNode); nsresult RemoveTooltipSupport(nsIContent* aNode); diff --git a/mozilla/toolkit/content/widgets/popup.xml b/mozilla/toolkit/content/widgets/popup.xml index f899c5559a0..fad70999e21 100644 --- a/mozilla/toolkit/content/widgets/popup.xml +++ b/mozilla/toolkit/content/widgets/popup.xml @@ -224,29 +224,6 @@ } ]]> - - - - - - - -