diff -r 849d6343405b -r bb219fd0d646 mozilla-bmo1708709.patch --- a/mozilla-bmo1708709.patch Fri Oct 01 12:00:20 2021 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,201 +0,0 @@ -Index: firefox-91.0.2/dom/xul/XULPopupElement.cpp -=================================================================== ---- firefox-91.0.2.orig/dom/xul/XULPopupElement.cpp -+++ firefox-91.0.2/dom/xul/XULPopupElement.cpp -@@ -271,8 +271,7 @@ already_AddRefed XULPopupElemen - // For native menus we can't query the true size. Use the anchor rect - // instead, which at least has the position at which we were intending to - // open the menu. -- screenRect = Some(CSSRect( -- CSSIntRect::FromUnknownRect(menuPopupFrame->GetScreenAnchorRect()))); -+ screenRect = Some(CSSRect(menuPopupFrame->GetScreenAnchorRect())); - } else { - // For non-native menus, query the bounds from the widget. - if (nsView* view = menuPopupFrame->GetView()) { -Index: firefox-91.0.2/layout/xul/nsMenuPopupFrame.h -=================================================================== ---- firefox-91.0.2.orig/layout/xul/nsMenuPopupFrame.h -+++ firefox-91.0.2/layout/xul/nsMenuPopupFrame.h -@@ -321,7 +321,7 @@ class nsMenuPopupFrame final : public ns - // If aUpdateAttrs is true, and the popup already has left or top attributes, - // then those attributes are updated to the new location. - // The frame may be destroyed by this method. -- void MoveTo(const mozilla::CSSIntPoint& aPos, bool aUpdateAttrs); -+ void MoveTo(const mozilla::CSSPoint& aPos, bool aUpdateAttrs); - - void MoveToAnchor(nsIContent* aAnchorContent, const nsAString& aPosition, - int32_t aXPos, int32_t aYPos, bool aAttributesOverride); -@@ -370,7 +370,9 @@ class nsMenuPopupFrame final : public ns - - // Return the screen coordinates in CSS pixels of the popup, - // or (-1, -1, 0, 0) if anchored. -- nsIntRect GetScreenAnchorRect() const { return mScreenRect; } -+ mozilla::CSSIntRect GetScreenAnchorRect() const { -+ return mozilla::CSSRect::FromAppUnitsRounded(mScreenRect); -+ } - - mozilla::LayoutDeviceIntPoint GetLastClientOffset() const { - return mLastClientOffset; -@@ -557,7 +559,7 @@ class nsMenuPopupFrame final : public ns - // override mXPos and mYPos. - int32_t mXPos; - int32_t mYPos; -- nsIntRect mScreenRect; -+ nsRect mScreenRect; - // Used for store rectangle which the popup is going to be anchored to, - // we need that for Wayland - #ifdef MOZ_WAYLAND -Index: firefox-91.0.2/layout/xul/nsMenuPopupFrame.cpp -=================================================================== ---- firefox-91.0.2.orig/layout/xul/nsMenuPopupFrame.cpp -+++ firefox-91.0.2/layout/xul/nsMenuPopupFrame.cpp -@@ -868,8 +868,9 @@ void nsMenuPopupFrame::InitializePopup(n - InitPositionFromAnchorAlign(anchor, align); - } - } -- -- mScreenRect = nsIntRect(-1, -1, 0, 0); -+ // When converted back to CSSIntRect it is (-1, -1, 0, 0) - as expected in -+ // nsXULPopupManager::Rollup -+ mScreenRect = nsRect(-AppUnitsPerCSSPixel(), -AppUnitsPerCSSPixel(), 0, 0); - - if (aAttributesOverride) { - // Use |left| and |top| dimension attributes to position the popup if -@@ -881,11 +882,13 @@ void nsMenuPopupFrame::InitializePopup(n - nsresult err; - if (!left.IsEmpty()) { - int32_t x = left.ToInteger(&err); -- if (NS_SUCCEEDED(err)) mScreenRect.x = x; -+ if (NS_SUCCEEDED(err)) -+ mScreenRect.x = nsPresContext::CSSPixelsToAppUnits(x); - } - if (!top.IsEmpty()) { - int32_t y = top.ToInteger(&err); -- if (NS_SUCCEEDED(err)) mScreenRect.y = y; -+ if (NS_SUCCEEDED(err)) -+ mScreenRect.y = nsPresContext::CSSPixelsToAppUnits(y); - } - } - } -@@ -900,7 +903,8 @@ void nsMenuPopupFrame::InitializePopupAt - mPopupState = ePopupShowing; - mAnchorContent = nullptr; - mTriggerContent = aTriggerContent; -- mScreenRect = nsIntRect(aXPos, aYPos, 0, 0); -+ mScreenRect = nsRect(nsPresContext::CSSPixelsToAppUnits(aXPos), -+ nsPresContext::CSSPixelsToAppUnits(aYPos), 0, 0); - mXPos = 0; - mYPos = 0; - mFlip = FlipType_Default; -@@ -920,7 +924,8 @@ void nsMenuPopupFrame::InitializePopupAs - mTriggerContent = aTriggerContent; - mPopupState = ePopupShowing; - mAnchorContent = nullptr; -- mScreenRect = nsIntRect(aXPos, aYPos, 0, 0); -+ mScreenRect = nsRect(nsPresContext::CSSPixelsToAppUnits(aXPos), -+ nsPresContext::CSSPixelsToAppUnits(aYPos), 0, 0); - mXPos = 0; - mYPos = 0; - mFlip = FlipType_Default; -@@ -941,7 +946,7 @@ void nsMenuPopupFrame::InitializePopupAt - bool aAttributesOverride) { - InitializePopup(nullptr, aTriggerContent, aPosition, 0, 0, - MenuPopupAnchorType_Rect, aAttributesOverride); -- mScreenRect = aRect; -+ mScreenRect = ToAppUnits(aRect, AppUnitsPerCSSPixel()); - } - - void nsMenuPopupFrame::ShowPopup(bool aIsContextMenu) { -@@ -1430,7 +1435,7 @@ nsresult nsMenuPopupFrame::SetPopupPosit - // If anchored to a rectangle, use that rectangle. Otherwise, determine the - // rectangle from the anchor. - if (mAnchorType == MenuPopupAnchorType_Rect) { -- anchorRect = ToAppUnits(mScreenRect, AppUnitsPerCSSPixel()); -+ anchorRect = mScreenRect; - } else { - // if the frame is not specified, use the anchor node passed to OpenPopup. - // If that wasn't specified either, use the root frame. Note that -@@ -1539,10 +1544,8 @@ nsresult nsMenuPopupFrame::SetPopupPosit - // Account for the margin that will end up being added to the screen - // coordinate the next time SetPopupPosition is called. - mAnchorType = MenuPopupAnchorType_Point; -- mScreenRect.x = -- nsPresContext::AppUnitsToIntCSSPixels(screenPoint.x - margin.left); -- mScreenRect.y = -- nsPresContext::AppUnitsToIntCSSPixels(screenPoint.y - margin.top); -+ mScreenRect.x = screenPoint.x - margin.left; -+ mScreenRect.y = screenPoint.y - margin.top; - } - } else { - // The popup is positioned at a screen coordinate. -@@ -1571,10 +1574,8 @@ nsresult nsMenuPopupFrame::SetPopupPosit - } - - // next, convert into app units accounting for the zoom -- screenPoint.x = presContext->DevPixelsToAppUnits( -- nsPresContext::CSSPixelsToAppUnits(mScreenRect.x) / factor); -- screenPoint.y = presContext->DevPixelsToAppUnits( -- nsPresContext::CSSPixelsToAppUnits(mScreenRect.y) / factor); -+ screenPoint.x = presContext->DevPixelsToAppUnits(mScreenRect.x / factor); -+ screenPoint.y = presContext->DevPixelsToAppUnits(mScreenRect.y / factor); - anchorRect = nsRect(screenPoint, nsSize(0, 0)); - - // add the margins on the popup -@@ -2377,9 +2378,10 @@ void nsMenuPopupFrame::DestroyFrom(nsIFr - nsBoxFrame::DestroyFrom(aDestructRoot, aPostDestroyData); - } - --void nsMenuPopupFrame::MoveTo(const CSSIntPoint& aPos, bool aUpdateAttrs) { -+void nsMenuPopupFrame::MoveTo(const CSSPoint& aPos, bool aUpdateAttrs) { - nsIWidget* widget = GetWidget(); -- if ((mScreenRect.x == aPos.x && mScreenRect.y == aPos.y) && -+ nsPoint appUnitsPos = mozilla::CSSPixel::ToAppUnits(aPos); -+ if ((mScreenRect.x == appUnitsPos.x && mScreenRect.y == appUnitsPos.y) && - (!widget || widget->GetClientOffset() == mLastClientOffset)) { - return; - } -@@ -2400,8 +2402,8 @@ void nsMenuPopupFrame::MoveTo(const CSSI - } - - mAnchorType = MenuPopupAnchorType_Point; -- mScreenRect.x = aPos.x - nsPresContext::AppUnitsToIntCSSPixels(margin.left); -- mScreenRect.y = aPos.y - nsPresContext::AppUnitsToIntCSSPixels(margin.top); -+ mScreenRect.x = appUnitsPos.x - margin.left; -+ mScreenRect.y = appUnitsPos.y - margin.top; - - SetPopupPosition(nullptr, true, false); - -@@ -2409,8 +2411,8 @@ void nsMenuPopupFrame::MoveTo(const CSSI - if (aUpdateAttrs && (popup->HasAttr(kNameSpaceID_None, nsGkAtoms::left) || - popup->HasAttr(kNameSpaceID_None, nsGkAtoms::top))) { - nsAutoString left, top; -- left.AppendInt(aPos.x); -- top.AppendInt(aPos.y); -+ left.AppendInt(RoundedToInt(aPos).x); -+ top.AppendInt(RoundedToInt(aPos).y); - popup->SetAttr(kNameSpaceID_None, nsGkAtoms::left, left, false); - popup->SetAttr(kNameSpaceID_None, nsGkAtoms::top, top, false); - } -Index: firefox-91.0.2/layout/xul/nsXULPopupManager.cpp -=================================================================== ---- firefox-91.0.2.orig/layout/xul/nsXULPopupManager.cpp -+++ firefox-91.0.2/layout/xul/nsXULPopupManager.cpp -@@ -269,8 +269,7 @@ bool nsXULPopupManager::Rollup(uint32_t - if (popupFrame->IsAnchored()) { - // Check if the popup has a screen anchor rectangle. If not, get the - // rectangle from the anchor element. -- anchorRect = -- CSSIntRect::FromUnknownRect(popupFrame->GetScreenAnchorRect()); -+ anchorRect = popupFrame->GetScreenAnchorRect(); - if (anchorRect.x == -1 || anchorRect.y == -1) { - nsCOMPtr anchor = popupFrame->GetAnchor(); - -@@ -507,7 +506,7 @@ void nsXULPopupManager::PopupMoved(nsIFr - } else { - CSSPoint cssPos = LayoutDeviceIntPoint::FromUnknownPoint(aPnt) / - menuPopupFrame->PresContext()->CSSToDevPixelScale(); -- menuPopupFrame->MoveTo(RoundedToInt(cssPos), false); -+ menuPopupFrame->MoveTo(cssPos, false); - } - } -