mozilla-bmo1708709.patch
author Wolfgang Rosenauer <wr@rosenauer.org>
Fri, 01 Oct 2021 12:00:20 +0200
branchfirefox92
changeset 1163 849d6343405b
parent 1161 36ae1e4f15eb
permissions -rw-r--r--
latest 92.0.1 version
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1161
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     1
Index: firefox-91.0.2/dom/xul/XULPopupElement.cpp
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     2
===================================================================
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     3
--- firefox-91.0.2.orig/dom/xul/XULPopupElement.cpp
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     4
+++ firefox-91.0.2/dom/xul/XULPopupElement.cpp
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     5
@@ -271,8 +271,7 @@ already_AddRefed<DOMRect> XULPopupElemen
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     6
     // For native menus we can't query the true size. Use the anchor rect
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     7
     // instead, which at least has the position at which we were intending to
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     8
     // open the menu.
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     9
-    screenRect = Some(CSSRect(
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    10
-        CSSIntRect::FromUnknownRect(menuPopupFrame->GetScreenAnchorRect())));
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    11
+    screenRect = Some(CSSRect(menuPopupFrame->GetScreenAnchorRect()));
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    12
   } else {
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    13
     // For non-native menus, query the bounds from the widget.
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    14
     if (nsView* view = menuPopupFrame->GetView()) {
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    15
Index: firefox-91.0.2/layout/xul/nsMenuPopupFrame.h
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    16
===================================================================
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    17
--- firefox-91.0.2.orig/layout/xul/nsMenuPopupFrame.h
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    18
+++ firefox-91.0.2/layout/xul/nsMenuPopupFrame.h
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    19
@@ -321,7 +321,7 @@ class nsMenuPopupFrame final : public ns
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    20
   // If aUpdateAttrs is true, and the popup already has left or top attributes,
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    21
   // then those attributes are updated to the new location.
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    22
   // The frame may be destroyed by this method.
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    23
-  void MoveTo(const mozilla::CSSIntPoint& aPos, bool aUpdateAttrs);
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    24
+  void MoveTo(const mozilla::CSSPoint& aPos, bool aUpdateAttrs);
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    25
 
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    26
   void MoveToAnchor(nsIContent* aAnchorContent, const nsAString& aPosition,
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    27
                     int32_t aXPos, int32_t aYPos, bool aAttributesOverride);
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    28
@@ -370,7 +370,9 @@ class nsMenuPopupFrame final : public ns
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    29
 
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    30
   // Return the screen coordinates in CSS pixels of the popup,
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    31
   // or (-1, -1, 0, 0) if anchored.
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    32
-  nsIntRect GetScreenAnchorRect() const { return mScreenRect; }
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    33
+  mozilla::CSSIntRect GetScreenAnchorRect() const {
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    34
+    return mozilla::CSSRect::FromAppUnitsRounded(mScreenRect);
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    35
+  }
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    36
 
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    37
   mozilla::LayoutDeviceIntPoint GetLastClientOffset() const {
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    38
     return mLastClientOffset;
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    39
@@ -557,7 +559,7 @@ class nsMenuPopupFrame final : public ns
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    40
   // override mXPos and mYPos.
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    41
   int32_t mXPos;
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    42
   int32_t mYPos;
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    43
-  nsIntRect mScreenRect;
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    44
+  nsRect mScreenRect;
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    45
   // Used for store rectangle which the popup is going to be anchored to,
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    46
   // we need that for Wayland
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    47
 #ifdef MOZ_WAYLAND
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    48
Index: firefox-91.0.2/layout/xul/nsMenuPopupFrame.cpp
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    49
===================================================================
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    50
--- firefox-91.0.2.orig/layout/xul/nsMenuPopupFrame.cpp
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    51
+++ firefox-91.0.2/layout/xul/nsMenuPopupFrame.cpp
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    52
@@ -868,8 +868,9 @@ void nsMenuPopupFrame::InitializePopup(n
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    53
       InitPositionFromAnchorAlign(anchor, align);
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    54
     }
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    55
   }
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    56
-
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    57
-  mScreenRect = nsIntRect(-1, -1, 0, 0);
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    58
+  // When converted back to CSSIntRect it is (-1, -1, 0, 0) - as expected in
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    59
+  // nsXULPopupManager::Rollup
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    60
+  mScreenRect = nsRect(-AppUnitsPerCSSPixel(), -AppUnitsPerCSSPixel(), 0, 0);
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    61
 
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    62
   if (aAttributesOverride) {
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    63
     // Use |left| and |top| dimension attributes to position the popup if
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    64
@@ -881,11 +882,13 @@ void nsMenuPopupFrame::InitializePopup(n
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    65
     nsresult err;
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    66
     if (!left.IsEmpty()) {
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    67
       int32_t x = left.ToInteger(&err);
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    68
-      if (NS_SUCCEEDED(err)) mScreenRect.x = x;
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    69
+      if (NS_SUCCEEDED(err))
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    70
+        mScreenRect.x = nsPresContext::CSSPixelsToAppUnits(x);
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    71
     }
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    72
     if (!top.IsEmpty()) {
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    73
       int32_t y = top.ToInteger(&err);
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    74
-      if (NS_SUCCEEDED(err)) mScreenRect.y = y;
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    75
+      if (NS_SUCCEEDED(err))
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    76
+        mScreenRect.y = nsPresContext::CSSPixelsToAppUnits(y);
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    77
     }
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    78
   }
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    79
 }
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    80
@@ -900,7 +903,8 @@ void nsMenuPopupFrame::InitializePopupAt
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    81
   mPopupState = ePopupShowing;
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    82
   mAnchorContent = nullptr;
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    83
   mTriggerContent = aTriggerContent;
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    84
-  mScreenRect = nsIntRect(aXPos, aYPos, 0, 0);
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    85
+  mScreenRect = nsRect(nsPresContext::CSSPixelsToAppUnits(aXPos),
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    86
+                       nsPresContext::CSSPixelsToAppUnits(aYPos), 0, 0);
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    87
   mXPos = 0;
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    88
   mYPos = 0;
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    89
   mFlip = FlipType_Default;
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    90
@@ -920,7 +924,8 @@ void nsMenuPopupFrame::InitializePopupAs
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    91
   mTriggerContent = aTriggerContent;
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    92
   mPopupState = ePopupShowing;
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    93
   mAnchorContent = nullptr;
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    94
-  mScreenRect = nsIntRect(aXPos, aYPos, 0, 0);
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    95
+  mScreenRect = nsRect(nsPresContext::CSSPixelsToAppUnits(aXPos),
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    96
+                       nsPresContext::CSSPixelsToAppUnits(aYPos), 0, 0);
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    97
   mXPos = 0;
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    98
   mYPos = 0;
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    99
   mFlip = FlipType_Default;
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   100
@@ -941,7 +946,7 @@ void nsMenuPopupFrame::InitializePopupAt
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   101
                                              bool aAttributesOverride) {
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   102
   InitializePopup(nullptr, aTriggerContent, aPosition, 0, 0,
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   103
                   MenuPopupAnchorType_Rect, aAttributesOverride);
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   104
-  mScreenRect = aRect;
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   105
+  mScreenRect = ToAppUnits(aRect, AppUnitsPerCSSPixel());
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   106
 }
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   107
 
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   108
 void nsMenuPopupFrame::ShowPopup(bool aIsContextMenu) {
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   109
@@ -1430,7 +1435,7 @@ nsresult nsMenuPopupFrame::SetPopupPosit
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   110
     // If anchored to a rectangle, use that rectangle. Otherwise, determine the
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   111
     // rectangle from the anchor.
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   112
     if (mAnchorType == MenuPopupAnchorType_Rect) {
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   113
-      anchorRect = ToAppUnits(mScreenRect, AppUnitsPerCSSPixel());
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   114
+      anchorRect = mScreenRect;
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   115
     } else {
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   116
       // if the frame is not specified, use the anchor node passed to OpenPopup.
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   117
       // If that wasn't specified either, use the root frame. Note that
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   118
@@ -1539,10 +1544,8 @@ nsresult nsMenuPopupFrame::SetPopupPosit
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   119
       // Account for the margin that will end up being added to the screen
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   120
       // coordinate the next time SetPopupPosition is called.
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   121
       mAnchorType = MenuPopupAnchorType_Point;
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   122
-      mScreenRect.x =
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   123
-          nsPresContext::AppUnitsToIntCSSPixels(screenPoint.x - margin.left);
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   124
-      mScreenRect.y =
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   125
-          nsPresContext::AppUnitsToIntCSSPixels(screenPoint.y - margin.top);
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   126
+      mScreenRect.x = screenPoint.x - margin.left;
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   127
+      mScreenRect.y = screenPoint.y - margin.top;
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   128
     }
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   129
   } else {
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   130
     // The popup is positioned at a screen coordinate.
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   131
@@ -1571,10 +1574,8 @@ nsresult nsMenuPopupFrame::SetPopupPosit
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   132
     }
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   133
 
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   134
     // next, convert into app units accounting for the zoom
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   135
-    screenPoint.x = presContext->DevPixelsToAppUnits(
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   136
-        nsPresContext::CSSPixelsToAppUnits(mScreenRect.x) / factor);
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   137
-    screenPoint.y = presContext->DevPixelsToAppUnits(
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   138
-        nsPresContext::CSSPixelsToAppUnits(mScreenRect.y) / factor);
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   139
+    screenPoint.x = presContext->DevPixelsToAppUnits(mScreenRect.x / factor);
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   140
+    screenPoint.y = presContext->DevPixelsToAppUnits(mScreenRect.y / factor);
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   141
     anchorRect = nsRect(screenPoint, nsSize(0, 0));
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   142
 
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   143
     // add the margins on the popup
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   144
@@ -2377,9 +2378,10 @@ void nsMenuPopupFrame::DestroyFrom(nsIFr
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   145
   nsBoxFrame::DestroyFrom(aDestructRoot, aPostDestroyData);
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   146
 }
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   147
 
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   148
-void nsMenuPopupFrame::MoveTo(const CSSIntPoint& aPos, bool aUpdateAttrs) {
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   149
+void nsMenuPopupFrame::MoveTo(const CSSPoint& aPos, bool aUpdateAttrs) {
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   150
   nsIWidget* widget = GetWidget();
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   151
-  if ((mScreenRect.x == aPos.x && mScreenRect.y == aPos.y) &&
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   152
+  nsPoint appUnitsPos = mozilla::CSSPixel::ToAppUnits(aPos);
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   153
+  if ((mScreenRect.x == appUnitsPos.x && mScreenRect.y == appUnitsPos.y) &&
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   154
       (!widget || widget->GetClientOffset() == mLastClientOffset)) {
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   155
     return;
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   156
   }
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   157
@@ -2400,8 +2402,8 @@ void nsMenuPopupFrame::MoveTo(const CSSI
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   158
   }
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   159
 
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   160
   mAnchorType = MenuPopupAnchorType_Point;
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   161
-  mScreenRect.x = aPos.x - nsPresContext::AppUnitsToIntCSSPixels(margin.left);
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   162
-  mScreenRect.y = aPos.y - nsPresContext::AppUnitsToIntCSSPixels(margin.top);
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   163
+  mScreenRect.x = appUnitsPos.x - margin.left;
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   164
+  mScreenRect.y = appUnitsPos.y - margin.top;
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   165
 
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   166
   SetPopupPosition(nullptr, true, false);
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   167
 
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   168
@@ -2409,8 +2411,8 @@ void nsMenuPopupFrame::MoveTo(const CSSI
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   169
   if (aUpdateAttrs && (popup->HasAttr(kNameSpaceID_None, nsGkAtoms::left) ||
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   170
                        popup->HasAttr(kNameSpaceID_None, nsGkAtoms::top))) {
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   171
     nsAutoString left, top;
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   172
-    left.AppendInt(aPos.x);
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   173
-    top.AppendInt(aPos.y);
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   174
+    left.AppendInt(RoundedToInt(aPos).x);
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   175
+    top.AppendInt(RoundedToInt(aPos).y);
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   176
     popup->SetAttr(kNameSpaceID_None, nsGkAtoms::left, left, false);
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   177
     popup->SetAttr(kNameSpaceID_None, nsGkAtoms::top, top, false);
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   178
   }
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   179
Index: firefox-91.0.2/layout/xul/nsXULPopupManager.cpp
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   180
===================================================================
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   181
--- firefox-91.0.2.orig/layout/xul/nsXULPopupManager.cpp
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   182
+++ firefox-91.0.2/layout/xul/nsXULPopupManager.cpp
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   183
@@ -269,8 +269,7 @@ bool nsXULPopupManager::Rollup(uint32_t
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   184
       if (popupFrame->IsAnchored()) {
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   185
         // Check if the popup has a screen anchor rectangle. If not, get the
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   186
         // rectangle from the anchor element.
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   187
-        anchorRect =
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   188
-            CSSIntRect::FromUnknownRect(popupFrame->GetScreenAnchorRect());
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   189
+        anchorRect = popupFrame->GetScreenAnchorRect();
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   190
         if (anchorRect.x == -1 || anchorRect.y == -1) {
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   191
           nsCOMPtr<nsIContent> anchor = popupFrame->GetAnchor();
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   192
 
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   193
@@ -507,7 +506,7 @@ void nsXULPopupManager::PopupMoved(nsIFr
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   194
   } else {
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   195
     CSSPoint cssPos = LayoutDeviceIntPoint::FromUnknownPoint(aPnt) /
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   196
                       menuPopupFrame->PresContext()->CSSToDevPixelScale();
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   197
-    menuPopupFrame->MoveTo(RoundedToInt(cssPos), false);
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   198
+    menuPopupFrame->MoveTo(cssPos, false);
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   199
   }
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   200
 }
36ae1e4f15eb latest 91.0 patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   201