summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--firefox-wayland-crash-mozbz1507475.patch94
-rw-r--r--firefox.spec7
2 files changed, 100 insertions, 1 deletions
diff --git a/firefox-wayland-crash-mozbz1507475.patch b/firefox-wayland-crash-mozbz1507475.patch
new file mode 100644
index 0000000..bab96bc
--- /dev/null
+++ b/firefox-wayland-crash-mozbz1507475.patch
@@ -0,0 +1,94 @@
+diff -up firefox-63.0.3/widget/gtk/mozcontainer.cpp.mozbz1507475 firefox-63.0.3/widget/gtk/mozcontainer.cpp
+--- firefox-63.0.3/widget/gtk/mozcontainer.cpp.mozbz1507475 2018-11-15 01:20:56.000000000 +0100
++++ firefox-63.0.3/widget/gtk/mozcontainer.cpp 2018-11-21 15:41:41.858692640 +0100
+@@ -169,6 +169,8 @@ moz_container_class_init (MozContainerCl
+ }
+
+ #if defined(MOZ_WAYLAND)
++static struct wl_subcompositor *subcompositor;
++
+ static void
+ registry_handle_global (void *data,
+ struct wl_registry *registry,
+@@ -176,9 +178,8 @@ registry_handle_global (void *data,
+ const char *interface,
+ uint32_t version)
+ {
+- MozContainer *container = MOZ_CONTAINER(data);
+ if(strcmp(interface, "wl_subcompositor") == 0) {
+- container->subcompositor =
++ subcompositor =
+ static_cast<wl_subcompositor*>(wl_registry_bind(registry,
+ name,
+ &wl_subcompositor_interface,
+@@ -197,6 +198,24 @@ static const struct wl_registry_listener
+ registry_handle_global,
+ registry_handle_global_remove
+ };
++
++struct wl_subcompositor* subcompositor_get(void)
++{
++ if (!subcompositor) {
++ GdkDisplay *gdk_display = gdk_display_get_default();
++ // Available as of GTK 3.8+
++ static auto sGdkWaylandDisplayGetWlDisplay =
++ (wl_display *(*)(GdkDisplay *))
++ dlsym(RTLD_DEFAULT, "gdk_wayland_display_get_wl_display");
++
++ wl_display* display = sGdkWaylandDisplayGetWlDisplay(gdk_display);
++ wl_registry* registry = wl_display_get_registry(display);
++ wl_registry_add_listener(registry, &registry_listener, nullptr);
++ wl_display_dispatch(display);
++ wl_display_roundtrip(display);
++ }
++ return subcompositor;
++}
+ #endif
+
+ void
+@@ -208,25 +227,10 @@ moz_container_init (MozContainer *contai
+
+ #if defined(MOZ_WAYLAND)
+ {
+- container->subcompositor = nullptr;
+ container->surface = nullptr;
+ container->subsurface = nullptr;
+ container->eglwindow = nullptr;
+ container->parent_surface_committed = false;
+-
+- GdkDisplay *gdk_display = gtk_widget_get_display(GTK_WIDGET(container));
+- if (GDK_IS_WAYLAND_DISPLAY (gdk_display)) {
+- // Available as of GTK 3.8+
+- static auto sGdkWaylandDisplayGetWlDisplay =
+- (wl_display *(*)(GdkDisplay *))
+- dlsym(RTLD_DEFAULT, "gdk_wayland_display_get_wl_display");
+-
+- wl_display* display = sGdkWaylandDisplayGetWlDisplay(gdk_display);
+- wl_registry* registry = wl_display_get_registry(display);
+- wl_registry_add_listener(registry, &registry_listener, container);
+- wl_display_dispatch(display);
+- wl_display_roundtrip(display);
+- }
+ }
+ #endif
+ }
+@@ -298,7 +302,7 @@ moz_container_map_surface(MozContainer *
+ }
+
+ container->subsurface =
+- wl_subcompositor_get_subsurface (container->subcompositor,
++ wl_subcompositor_get_subsurface (subcompositor_get(),
+ container->surface,
+ gtk_surface);
+ gint x, y;
+diff -up firefox-63.0.3/widget/gtk/mozcontainer.h.mozbz1507475 firefox-63.0.3/widget/gtk/mozcontainer.h
+--- firefox-63.0.3/widget/gtk/mozcontainer.h.mozbz1507475 2018-11-15 01:20:56.000000000 +0100
++++ firefox-63.0.3/widget/gtk/mozcontainer.h 2018-11-21 14:16:54.412397805 +0100
+@@ -69,7 +69,6 @@ struct _MozContainer
+ GList *children;
+
+ #ifdef MOZ_WAYLAND
+- struct wl_subcompositor *subcompositor;
+ struct wl_surface *surface;
+ struct wl_subsurface *subsurface;
+ struct wl_egl_window *eglwindow;
diff --git a/firefox.spec b/firefox.spec
index 61dc7f0..f67f50d 100644
--- a/firefox.spec
+++ b/firefox.spec
@@ -88,7 +88,7 @@
Summary: Mozilla Firefox Web browser
Name: firefox
Version: 63.0.3
-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
@@ -158,6 +158,7 @@ Patch574: firefox-pipewire.patch
Patch581: mozilla-1493081.patch
Patch582: mozilla-1504689.patch
Patch583: firefox-init-wayland-clipboard.patch
+Patch584: firefox-wayland-crash-mozbz1507475.patch
# Debian patches
Patch500: mozilla-440908.patch
@@ -376,6 +377,7 @@ This package contains results of tests executed during build.
%patch581 -p1 -b .mozilla-1493081
%patch582 -p1 -b .mozilla-1504689
%patch583 -p1 -b .init-wayland-clipboard
+%patch584 -p1 -b .mozbz1507475
%{__rm} -f .mozconfig
%{__cp} %{SOURCE10} .mozconfig
@@ -932,6 +934,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
#---------------------------------------------------------------------
%changelog
+* Wed Nov 21 2018 Martin Stransky <stransky@redhat.com> - 63.0.3-2
+- Fixed mozbz#1507475 - crash when display changes (rhbz#1646151).
+
* Thu Nov 15 2018 Martin Stransky <stransky@redhat.com> - 63.0.3-1
- Updated to latest upstream (63.0.3)
bgstack15