summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--firefox.spec13
-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
+
bgstack15