diff --git a/widget/gtk/MozContainerWayland.cpp b/widget/gtk/MozContainerWayland.cpp --- a/widget/gtk/MozContainerWayland.cpp +++ b/widget/gtk/MozContainerWayland.cpp @@ -22,6 +22,7 @@ # include "mozilla/Logging.h" # include "nsTArray.h" # include "Units.h" +# include "nsWindow.h" extern mozilla::LazyLogModule gWidgetWaylandLog; # define LOGWAYLAND(args) \ MOZ_LOG(gWidgetWaylandLog, mozilla::LogLevel::Debug, args) @@ -343,21 +344,19 @@ moz_container_wayland_set_opaque_region_locked(container); } -static int moz_gtk_widget_get_scale_factor(MozContainer* container) { - static auto sGtkWidgetGetScaleFactor = - (gint(*)(GtkWidget*))dlsym(RTLD_DEFAULT, "gtk_widget_get_scale_factor"); - return sGtkWidgetGetScaleFactor - ? sGtkWidgetGetScaleFactor(GTK_WIDGET(container)) - : 1; -} - static void moz_container_wayland_set_scale_factor_locked( MozContainer* container) { if (!container->wl_container.surface) { return; } - wl_surface_set_buffer_scale(container->wl_container.surface, - moz_gtk_widget_get_scale_factor(container)); + gpointer user_data = g_object_get_data(G_OBJECT(container), "nsWindow"); + nsWindow* wnd = static_cast(user_data); + + int scale = 1; + if (wnd) { + scale = wnd->GdkScaleFactor(); + } + wl_surface_set_buffer_scale(container->wl_container.surface, scale); } void moz_container_wayland_set_scale_factor(MozContainer* container) {