Fixed crashes on multi-monitor systems

This commit is contained in:
Martin Stransky 2022-10-14 10:26:51 +02:00
parent 1f98173a5b
commit 949ba97268
2 changed files with 71 additions and 1 deletions

65
D158747.diff Normal file
View File

@ -0,0 +1,65 @@
diff --git a/widget/gtk/ScreenHelperGTK.cpp b/widget/gtk/ScreenHelperGTK.cpp
--- a/widget/gtk/ScreenHelperGTK.cpp
+++ b/widget/gtk/ScreenHelperGTK.cpp
@@ -221,11 +221,11 @@
refreshRate, contentsScale, defaultCssScale, dpi,
Screen::IsPseudoDisplay::No);
}
void ScreenGetterGtk::RefreshScreens() {
- LOG_SCREEN("Refreshing screens");
+ LOG_SCREEN("ScreenGetterGtk::RefreshScreens()");
AutoTArray<RefPtr<Screen>, 4> screenList;
GdkScreen* defaultScreen = gdk_screen_get_default();
gint numScreens = gdk_screen_get_n_monitors(defaultScreen);
LOG_SCREEN("GDK reports %d screens", numScreens);
@@ -387,16 +387,16 @@
monitor->refresh, contentsScale, defaultCssScale,
dpi, Screen::IsPseudoDisplay::No);
}
void ScreenGetterWayland::RefreshScreens() {
- LOG_SCREEN("Refreshing screens");
+ LOG_SCREEN("ScreenGetterWayland::RefreshScreens()");
AutoTArray<RefPtr<Screen>, 4> managerScreenList;
mScreenList.Clear();
const gint numScreens = mMonitors.Length();
- LOG_SCREEN("Wayland reports %d screens", numScreens);
+ LOG_SCREEN("Wayland reports %d monitors", numScreens);
for (gint i = 0; i < numScreens; i++) {
RefPtr<Screen> screen = MakeScreenWayland(i);
mScreenList.AppendElement(screen);
managerScreenList.AppendElement(screen);
}
@@ -446,18 +446,27 @@
return -1;
}
RefPtr<nsIScreen> ScreenGetterWayland::GetScreenForWindow(nsWindow* aWindow) {
- if (mScreenList.IsEmpty()) {
+ if (mMonitors.IsEmpty()) {
return nullptr;
}
int monitor = GetMonitorForWindow(aWindow);
if (monitor < 0) {
return nullptr;
}
+
+ if (mMonitors.Length() != mScreenList.Length()) {
+ // Gtk list of GtkScreens are out of sync with our monitor list.
+ // Try to refresh it now.
+ RefreshScreens();
+ }
+
+ MOZ_DIAGNOSTIC_ASSERT((unsigned)monitor < mScreenList.Length(),
+ "We're missing screen?");
return mScreenList[monitor];
}
static bool IsGNOMECompositor() {
const char* currentDesktop = getenv("XDG_CURRENT_DESKTOP");

View File

@ -163,7 +163,7 @@ ExcludeArch: i686
Summary: Mozilla Firefox Web browser
Name: firefox
Version: 105.0.2
Release: 1%{?pre_tag}%{?dist}
Release: 2%{?pre_tag}%{?dist}
URL: https://www.mozilla.org/firefox/
License: MPLv1.1 or GPLv2+ or LGPLv2+
Source0: https://archive.mozilla.org/pub/firefox/releases/%{version}%{?pre_version}/source/firefox-%{version}%{?pre_version}.source.tar.xz
@ -243,6 +243,7 @@ Patch407: mozilla-1667096.patch
Patch408: mozilla-1663844.patch
Patch415: mozilla-1670333.patch
Patch416: mozilla-1791856.patch
Patch417: D158747.diff
# PGO/LTO patches
Patch600: pgo.patch
@ -501,6 +502,7 @@ This package contains results of tests executed during build.
%patch408 -p1 -b .1663844
%patch415 -p1 -b .1670333
%patch416 -p1 -b .1791856
%patch417 -p1 -b .D158747
# PGO patches
%if %{build_with_pgo}
@ -1090,6 +1092,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
#---------------------------------------------------------------------
%changelog
* Fri Oct 14 2022 Martin Stransky <stransky@redhat.com>- 105.0.2-2
- Fixed crashes on multi-monitor systems (mzbz#1793922)
* Wed Oct 5 2022 Martin Stransky <stransky@redhat.com>- 105.0.2-1
- Updated to 105.0.2