summaryrefslogtreecommitdiff
path: root/mozilla-1493081.patch
diff options
context:
space:
mode:
Diffstat (limited to 'mozilla-1493081.patch')
-rw-r--r--mozilla-1493081.patch122
1 files changed, 0 insertions, 122 deletions
diff --git a/mozilla-1493081.patch b/mozilla-1493081.patch
deleted file mode 100644
index a3ab9ef..0000000
--- a/mozilla-1493081.patch
+++ /dev/null
@@ -1,122 +0,0 @@
-diff --git a/view/nsView.cpp b/view/nsView.cpp
---- a/view/nsView.cpp
-+++ b/view/nsView.cpp
-@@ -320,7 +320,6 @@
- // Stash a copy of these and use them so we can handle this being deleted (say
- // from sync painting/flushing from Show/Move/Resize on the widget).
- LayoutDeviceIntRect newBounds;
-- RefPtr<nsDeviceContext> dx = mViewManager->GetDeviceContext();
-
- nsWindowType type = widget->WindowType();
-
-@@ -360,7 +359,8 @@
- // because of the potential for device-pixel coordinate spaces for mixed
- // hidpi/lodpi screens to overlap each other and result in bad placement
- // (bug 814434).
-- DesktopToLayoutDeviceScale scale = dx->GetDesktopToDeviceScale();
-+
-+ DesktopToLayoutDeviceScale scale = widget->GetDesktopToDeviceScaleByScreen();
-
- DesktopRect deskRect = newBounds / scale;
- if (changedPos) {
-diff --git a/widget/gtk/nsWindow.h b/widget/gtk/nsWindow.h
---- a/widget/gtk/nsWindow.h
-+++ b/widget/gtk/nsWindow.h
-@@ -125,6 +125,7 @@
- virtual float GetDPI() override;
- virtual double GetDefaultScaleInternal() override;
- mozilla::DesktopToLayoutDeviceScale GetDesktopToDeviceScale() override;
-+ mozilla::DesktopToLayoutDeviceScale GetDesktopToDeviceScaleByScreen() override;
- virtual void SetParent(nsIWidget* aNewParent) override;
- virtual void SetModal(bool aModal) override;
- virtual bool IsVisible() const override;
-diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp
---- a/widget/gtk/nsWindow.cpp
-+++ b/widget/gtk/nsWindow.cpp
-@@ -57,6 +57,7 @@
-
- #if defined(MOZ_WAYLAND)
- #include <gdk/gdkwayland.h>
-+#include "nsView.h"
- #endif
-
- #include "nsGkAtoms.h"
-@@ -841,6 +842,37 @@
- return DesktopToLayoutDeviceScale(1.0);
- }
-
-+DesktopToLayoutDeviceScale
-+nsWindow::GetDesktopToDeviceScaleByScreen()
-+{
-+#ifdef MOZ_WAYLAND
-+ GdkDisplay* gdkDisplay = gdk_display_get_default();
-+ // In Wayland there's no way to get absolute position of the window and use it to
-+ // determine the screen factor of the monitor on which the window is placed.
-+ // The window is notified of the current scale factor but not at this point,
-+ // so the GdkScaleFactor can return wrong value which can lead to wrong popup
-+ // placement.
-+ // We need to use parent's window scale factor for the new one.
-+ if (GDK_IS_WAYLAND_DISPLAY(gdkDisplay)) {
-+ nsView* view = nsView::GetViewFor(this);
-+ if (view) {
-+ nsView* parentView = view->GetParent();
-+ if (parentView) {
-+ nsIWidget* parentWidget = parentView->GetNearestWidget(nullptr);
-+ if (parentWidget) {
-+ return DesktopToLayoutDeviceScale(parentWidget->RoundsWidgetCoordinatesTo());
-+ } else {
-+ NS_WARNING("Widget has no parent");
-+ }
-+ }
-+ } else {
-+ NS_WARNING("Cannot find widget view");
-+ }
-+ }
-+#endif
-+ return nsBaseWidget::GetDesktopToDeviceScale();
-+}
-+
- void
- nsWindow::SetParent(nsIWidget *aNewParent)
- {
-diff --git a/widget/nsBaseWidget.h b/widget/nsBaseWidget.h
---- a/widget/nsBaseWidget.h
-+++ b/widget/nsBaseWidget.h
-@@ -24,6 +24,8 @@
- #include "nsIWidgetListener.h"
- #include "nsPIDOMWindow.h"
- #include "nsWeakReference.h"
-+#include "nsView.h"
-+#include "nsViewManager.h"
- #include <algorithm>
-
- #if defined(XP_WIN)
-@@ -238,6 +240,10 @@
- mozilla::DesktopToLayoutDeviceScale GetDesktopToDeviceScale() override {
- return mozilla::DesktopToLayoutDeviceScale(1.0);
- }
-+ mozilla::DesktopToLayoutDeviceScale GetDesktopToDeviceScaleByScreen() override {
-+ return (nsView::GetViewFor(this)->GetViewManager()->GetDeviceContext())->GetDesktopToDeviceScale();
-+ }
-+
- virtual void ConstrainPosition(bool aAllowSlop,
- int32_t *aX,
- int32_t *aY) override {}
-diff --git a/widget/nsIWidget.h b/widget/nsIWidget.h
---- a/widget/nsIWidget.h
-+++ b/widget/nsIWidget.h
-@@ -578,6 +578,13 @@
- virtual mozilla::DesktopToLayoutDeviceScale GetDesktopToDeviceScale() = 0;
-
- /**
-+ * Return the scaling factor between device pixels and the platform-
-+ * dependent "desktop pixels" by looking up the screen by the position
-+ * of the widget.
-+ */
-+ virtual mozilla::DesktopToLayoutDeviceScale GetDesktopToDeviceScaleByScreen() = 0;
-+
-+ /**
- * Return the default scale factor for the window. This is the
- * default number of device pixels per CSS pixel to use. This should
- * depend on OS/platform settings such as the Mac's "UI scale factor"
-
bgstack15