aboutsummaryrefslogtreecommitdiff
path: root/www/firefox36/files/patch-ff-437142
diff options
context:
space:
mode:
Diffstat (limited to 'www/firefox36/files/patch-ff-437142')
-rw-r--r--www/firefox36/files/patch-ff-437142116
1 files changed, 116 insertions, 0 deletions
diff --git a/www/firefox36/files/patch-ff-437142 b/www/firefox36/files/patch-ff-437142
new file mode 100644
index 000000000000..52cf69679265
--- /dev/null
+++ b/www/firefox36/files/patch-ff-437142
@@ -0,0 +1,116 @@
+--- .pc/437142_backport_att350047.patch/layout/base/nsCSSFrameConstructor.cpp 2009-01-26 12:09:32.000000000 +0100
++++ layout/base/nsCSSFrameConstructor.cpp 2009-01-26 12:10:17.000000000 +0100
+@@ -9902,17 +9902,19 @@ nsCSSFrameConstructor::ContentRemoved(ns
+ nsFrameManager *frameManager = mPresShell->FrameManager();
+ nsPresContext *presContext = mPresShell->GetPresContext();
+ nsresult rv = NS_OK;
+
+ // Find the child frame that maps the content
+ nsIFrame* childFrame;
+ mPresShell->GetPrimaryFrameFor(aChild, &childFrame);
+
+- if (! childFrame) {
++ if (!childFrame || childFrame->GetContent() != aChild) {
++ // XXXbz the GetContent() != aChild check is needed due to bug 135040.
++ // Remove it once that's fixed.
+ frameManager->ClearUndisplayedContentIn(aChild, aContainer);
+ }
+
+ // When the last item is removed from a select,
+ // we need to add a pseudo frame so select gets sized as the best it can
+ // so here we see if it is a select and then we get the number of options
+ if (aContainer && childFrame) {
+ nsCOMPtr<nsIDOMHTMLSelectElement> selectElement = do_QueryInterface(aContainer);
+@@ -9991,17 +9993,19 @@ nsCSSFrameConstructor::ContentRemoved(ns
+ // First update the containing blocks structure by removing the
+ // existing letter frames. This makes the subsequent logic
+ // simpler.
+ RemoveLetterFrames(presContext, mPresShell, frameManager,
+ containingBlock);
+
+ // Recover childFrame and parentFrame
+ mPresShell->GetPrimaryFrameFor(aChild, &childFrame);
+- if (!childFrame) {
++ if (!childFrame || childFrame->GetContent() != aChild) {
++ // XXXbz the GetContent() != aChild check is needed due to bug 135040.
++ // Remove it once that's fixed.
+ frameManager->ClearUndisplayedContentIn(aChild, aContainer);
+ return NS_OK;
+ }
+ parentFrame = childFrame->GetParent();
+
+ #ifdef NOISY_FIRST_LETTER
+ printf(" ==> revised parentFrame=");
+ nsFrame::ListTag(stdout, parentFrame);
+@@ -10502,16 +10506,24 @@ nsCSSFrameConstructor::ProcessRestyledFr
+ }
+
+ index = count;
+ while (0 <= --index) {
+ nsIFrame* frame;
+ nsIContent* content;
+ nsChangeHint hint;
+ aChangeList.ChangeAt(index, frame, content, hint);
++ if (frame && frame->GetContent() != content) {
++ // XXXbz this is due to image maps messing with the primary frame map.
++ // See bug 135040. Remove this block once that's fixed.
++ frame = nsnull;
++ if (!(hint & nsChangeHint_ReconstructFrame)) {
++ continue;
++ }
++ }
+
+ // skip any frame that has been destroyed due to a ripple effect
+ if (frame) {
+ nsresult res;
+
+ propTable->GetProperty(frame, nsLayoutAtoms::changeListProperty, &res);
+
+ if (NS_PROPTABLE_PROP_NOT_THERE == res)
+@@ -10567,16 +10579,21 @@ nsCSSFrameConstructor::ProcessRestyledFr
+ return NS_OK;
+ }
+
+ void
+ nsCSSFrameConstructor::RestyleElement(nsIContent *aContent,
+ nsIFrame *aPrimaryFrame,
+ nsChangeHint aMinHint)
+ {
++ if (aPrimaryFrame && aPrimaryFrame->GetContent() != aContent) {
++ // XXXbz this is due to image maps messing with the primary frame mapping.
++ // See bug 135040. We can remove this block once that's fixed.
++ aPrimaryFrame = nsnull;
++ }
+ #ifdef ACCESSIBILITY
+ nsIAtom *prevRenderedFrameType = nsnull;
+ if (mPresShell->IsAccessibilityActive()) {
+ prevRenderedFrameType = GetRenderedFrameType(aPrimaryFrame);
+ }
+ #endif
+ if (aMinHint & nsChangeHint_ReconstructFrame) {
+ RecreateFramesForContent(aContent);
+--- .pc/437142_backport_att350047.patch/layout/generic/nsImageMap.cpp 2009-01-26 12:09:32.000000000 +0100
++++ layout/generic/nsImageMap.cpp 2009-01-26 12:10:17.000000000 +0100
+@@ -895,16 +895,22 @@ nsImageMap::AddArea(nsIContent* aArea)
+ return NS_ERROR_OUT_OF_MEMORY;
+
+ //Add focus listener to track area focus changes
+ nsCOMPtr<nsIDOMEventReceiver> rec(do_QueryInterface(aArea));
+ if (rec) {
+ rec->AddEventListenerByIID(this, NS_GET_IID(nsIDOMFocusListener));
+ }
+
++
++ // This is a nasty hack. It needs to go away: see bug 135040. Once this is
++ // removed, the code added to nsCSSFrameConstructor::RestyleElement,
++ // nsCSSFrameConstructor::ContentRemoved (both hacks there), and
++ // nsCSSFrameConstructor::ProcessRestyledFrames to work around this issue can
++ // be removed.
+ mPresShell->FrameManager()->SetPrimaryFrameFor(aArea, mImageFrame);
+ aArea->SetMayHaveFrame(PR_TRUE);
+ NS_ASSERTION(aArea->MayHaveFrame(), "SetMayHaveFrame failed?");
+
+ area->ParseCoords(coords);
+ mAreas.AppendElement(area);
+ return NS_OK;
+ }