diff --git a/firefox.spec b/firefox.spec index f521986..133be50 100644 --- a/firefox.spec +++ b/firefox.spec @@ -152,6 +152,11 @@ Patch411: mozilla-1321521-2.patch Patch412: mozilla-1337988.patch Patch413: mozilla-1353817.patch +# Wayland patches +Patch450: mozilla-1431052.patch +Patch451: mozilla-1432414.patch +Patch452: mozilla-1434202.patch + # Debian patches Patch500: mozilla-440908.patch @@ -314,6 +319,11 @@ This package contains results of tests executed during build. %patch406 -p1 -b .256180 %patch413 -p1 -b .1353817 +# Wayland patches +%patch450 -p1 -b .1431052 +%patch451 -p1 -b .1432414 +%patch452 -p1 -b .1434202 + # Patch for big endian platforms only %if 0%{?big_endian} %patch26 -p1 -b .icu @@ -844,6 +854,8 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : %changelog * Tue Jan 30 2018 Martin Stransky - 59.0-0.2 - Fixed typo at startup script. +- Added Wayland specific patches mozbz#1431052 mozbz#1432414 + mozbz#1434202 * Mon Jan 29 2018 Martin Stransky - 59.0-0.1 - Update to Firefox 59.0 Beta 4 diff --git a/mozilla-1431052.patch b/mozilla-1431052.patch new file mode 100644 index 0000000..59376bd --- /dev/null +++ b/mozilla-1431052.patch @@ -0,0 +1,21 @@ +diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp +--- a/widget/gtk/nsWindow.cpp ++++ b/widget/gtk/nsWindow.cpp +@@ -6948,11 +6948,15 @@ nsWindow::GetWaylandDisplay() + GdkDisplay* gdkDisplay = gdk_display_get_default(); + return mIsX11Display ? nullptr : + sGdkWaylandDisplayGetWlDisplay(gdkDisplay); + } + + wl_surface* + nsWindow::GetWaylandSurface() + { +- return moz_container_get_wl_surface(MOZ_CONTAINER(mContainer)); ++ if (mContainer) ++ return moz_container_get_wl_surface(MOZ_CONTAINER(mContainer)); ++ ++ NS_WARNING("nsWindow::GetWaylandSurfaces(): We don't have any mContainer for drawing!"); ++ return nullptr; + } + #endif + diff --git a/mozilla-1432414.patch b/mozilla-1432414.patch new file mode 100644 index 0000000..818dbbd --- /dev/null +++ b/mozilla-1432414.patch @@ -0,0 +1,58 @@ +diff --git a/widget/gtk/mozgtk/mozgtk.c b/widget/gtk/mozgtk/mozgtk.c +--- a/widget/gtk/mozgtk/mozgtk.c ++++ b/widget/gtk/mozgtk/mozgtk.c +@@ -224,16 +224,17 @@ STUB(gtk_file_chooser_set_preview_widget + STUB(gtk_file_chooser_set_preview_widget_active) + STUB(gtk_file_chooser_set_select_multiple) + STUB(gtk_file_chooser_widget_get_type) + STUB(gtk_file_filter_add_pattern) + STUB(gtk_file_filter_new) + STUB(gtk_file_filter_set_name) + STUB(gtk_fixed_new) + STUB(gtk_frame_new) ++STUB(gtk_get_current_event_time) + STUB(gtk_grab_add) + STUB(gtk_grab_remove) + STUB(gtk_handle_box_new) + STUB(gtk_hbox_new) + STUB(gtk_icon_info_free) + STUB(gtk_icon_info_load_icon) + STUB(gtk_icon_set_add_source) + STUB(gtk_icon_set_new) +diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp +--- a/widget/gtk/nsWindow.cpp ++++ b/widget/gtk/nsWindow.cpp +@@ -1358,23 +1358,27 @@ SetUserTimeAndStartupIDForActivatedWindo + // we don't want to reuse the timestamp next time we raise the window + GTKToolkit->SetFocusTimestamp(0); + GTKToolkit->SetDesktopStartupID(EmptyCString()); + } + + /* static */ guint32 + nsWindow::GetLastUserInputTime() + { +- // gdk_x11_display_get_user_time tracks button and key presses, +- // DESKTOP_STARTUP_ID used to start the app, drop events from external +- // drags, WM_DELETE_WINDOW delete events, but not usually mouse motion nor ++ // gdk_x11_display_get_user_time/gtk_get_current_event_time tracks ++ // button and key presses, DESKTOP_STARTUP_ID used to start the app, ++ // drop events from external drags, ++ // WM_DELETE_WINDOW delete events, but not usually mouse motion nor + // button and key releases. Therefore use the most recent of + // gdk_x11_display_get_user_time and the last time that we have seen. +- guint32 timestamp = +- gdk_x11_display_get_user_time(gdk_display_get_default()); ++ GdkDisplay* gdkDisplay = gdk_display_get_default(); ++ guint32 timestamp = GDK_IS_X11_DISPLAY(gdkDisplay) ? ++ gdk_x11_display_get_user_time(gdkDisplay) : ++ gtk_get_current_event_time(); ++ + if (sLastUserInputTime != GDK_CURRENT_TIME && + TimestampIsNewerThan(sLastUserInputTime, timestamp)) { + return sLastUserInputTime; + } + + return timestamp; + } + + diff --git a/mozilla-1434202.patch b/mozilla-1434202.patch new file mode 100644 index 0000000..d91f55e --- /dev/null +++ b/mozilla-1434202.patch @@ -0,0 +1,25 @@ +diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp +--- a/widget/gtk/nsWindow.cpp ++++ b/widget/gtk/nsWindow.cpp +@@ -3785,16 +3785,20 @@ nsWindow::Create(nsIWidget* aParent, + SetCursor(eCursor_standard); + + if (aInitData->mNoAutoHide) { + gint wmd = ConvertBorderStyles(mBorderStyle); + if (wmd != -1) + gdk_window_set_decorations(mGdkWindow, (GdkWMDecoration) wmd); + } + ++ if (!mIsX11Display) { ++ gtk_widget_set_app_paintable(mShell, TRUE); ++ } ++ + // If the popup ignores mouse events, set an empty input shape. + if (aInitData->mMouseTransparent) { + cairo_rectangle_int_t rect = { 0, 0, 0, 0 }; + cairo_region_t *region = cairo_region_create_rectangle(&rect); + + gdk_window_input_shape_combine_region(mGdkWindow, region, 0, 0); + cairo_region_destroy(region); + } +