diff options
-rw-r--r-- | firefox.spec | 13 | ||||
-rw-r--r-- | mozilla-1507475.patch (renamed from firefox-wayland-crash-mozbz1507475.patch) | 104 |
2 files changed, 111 insertions, 6 deletions
diff --git a/firefox.spec b/firefox.spec index f67f50d..f314364 100644 --- a/firefox.spec +++ b/firefox.spec @@ -88,7 +88,7 @@ Summary: Mozilla Firefox Web browser Name: firefox Version: 63.0.3 -Release: 2%{?pre_tag}%{?dist} +Release: 3%{?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,7 +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 +Patch585: mozilla-1507475.patch # Debian patches Patch500: mozilla-440908.patch @@ -377,7 +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 +%patch585 -p1 -b .mozbz1507475 %{__rm} -f .mozconfig %{__cp} %{SOURCE10} .mozconfig @@ -934,8 +934,13 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : #--------------------------------------------------------------------- %changelog +* Mon Nov 26 2018 Martin Stransky <stransky@redhat.com> - 63.0.3-3 +- [Wayland] Fixed issues with Sway compositor and wl_keyboard setup + (mozbz#1507475). + * Wed Nov 21 2018 Martin Stransky <stransky@redhat.com> - 63.0.3-2 -- Fixed mozbz#1507475 - crash when display changes (rhbz#1646151). +- [Wayland] 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) diff --git a/firefox-wayland-crash-mozbz1507475.patch b/mozilla-1507475.patch index bab96bc..20267b8 100644 --- a/firefox-wayland-crash-mozbz1507475.patch +++ b/mozilla-1507475.patch @@ -1,6 +1,6 @@ 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 ++++ firefox-63.0.3/widget/gtk/mozcontainer.cpp 2018-11-26 09:36:13.083772336 +0100 @@ -169,6 +169,8 @@ moz_container_class_init (MozContainerCl } @@ -83,7 +83,7 @@ diff -up firefox-63.0.3/widget/gtk/mozcontainer.cpp.mozbz1507475 firefox-63.0.3/ 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 ++++ firefox-63.0.3/widget/gtk/mozcontainer.h 2018-11-26 09:36:13.083772336 +0100 @@ -69,7 +69,6 @@ struct _MozContainer GList *children; @@ -92,3 +92,103 @@ diff -up firefox-63.0.3/widget/gtk/mozcontainer.h.mozbz1507475 firefox-63.0.3/wi struct wl_surface *surface; struct wl_subsurface *subsurface; struct wl_egl_window *eglwindow; +diff -up firefox-63.0.3/widget/gtk/nsGtkKeyUtils.cpp.mozbz1507475 firefox-63.0.3/widget/gtk/nsGtkKeyUtils.cpp +--- firefox-63.0.3/widget/gtk/nsGtkKeyUtils.cpp.mozbz1507475 2018-11-15 01:20:56.000000000 +0100 ++++ firefox-63.0.3/widget/gtk/nsGtkKeyUtils.cpp 2018-11-26 09:36:13.084772332 +0100 +@@ -584,68 +584,37 @@ static const struct wl_keyboard_listener + keyboard_handle_modifiers, + }; + +-static void +-seat_handle_capabilities(void *data, struct wl_seat *seat, +- unsigned int caps) +-{ +- static wl_keyboard *keyboard = nullptr; +- +- if (caps & WL_SEAT_CAPABILITY_KEYBOARD) { +- keyboard = wl_seat_get_keyboard(seat); +- wl_keyboard_add_listener(keyboard, &keyboard_listener, nullptr); +- } else if (keyboard && !(caps & WL_SEAT_CAPABILITY_KEYBOARD)) { +- wl_keyboard_destroy(keyboard); +- keyboard = nullptr; +- } +-} +- +-static const struct wl_seat_listener seat_listener = { +- seat_handle_capabilities, +-}; +- +-static void +-gdk_registry_handle_global(void *data, +- struct wl_registry *registry, +- uint32_t id, +- const char *interface, +- uint32_t version) +-{ +- if (strcmp(interface, "wl_seat") == 0) { +- wl_seat *seat = +- (wl_seat*)wl_registry_bind(registry, id, &wl_seat_interface, 1); +- wl_seat_add_listener(seat, &seat_listener, data); +- } +-} +- +-static void +-gdk_registry_handle_global_remove(void *data, +- struct wl_registry *registry, +- uint32_t id) +-{ +-} +- +-static const struct wl_registry_listener keyboard_registry_listener = { +- gdk_registry_handle_global, +- gdk_registry_handle_global_remove +-}; +- + void + KeymapWrapper::InitBySystemSettingsWayland() + { +- // 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_get_default()); +- wl_registry_add_listener(wl_display_get_registry(display), +- &keyboard_registry_listener, this); +- +- // Call wl_display_roundtrip() twice to make sure all +- // callbacks are processed. +- wl_display_roundtrip(display); +- wl_display_roundtrip(display); ++ GdkDeviceManager* manager = ++ gdk_display_get_device_manager(gdk_display_get_default()); ++ GList* devices = ++ gdk_device_manager_list_devices(manager, GDK_DEVICE_TYPE_MASTER); ++ GdkDevice* device = nullptr; ++ ++ GList* list = devices; ++ while (devices) { ++ device = static_cast<GdkDevice*>(devices->data); ++ if (gdk_device_get_source(device) == GDK_SOURCE_KEYBOARD) { ++ break; ++ } ++ devices = devices->next; ++ } ++ ++ if (list) { ++ g_list_free(list); ++ } ++ ++ if (device) { ++ // Present in Gtk+ 3.10 ++ static auto sGdkWaylandDeviceGetWlKeyboard = ++ (struct wl_keyboard * (*)(GdkDevice *device)) ++ dlsym(RTLD_DEFAULT, "gdk_wayland_device_get_wl_keyboard"); ++ ++ wl_keyboard_add_listener(sGdkWaylandDeviceGetWlKeyboard(device), ++ &keyboard_listener, nullptr); ++ } + } + #endif + |