--- a/mozilla-bmo1609538.patch Mon Mar 30 21:49:01 2020 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,191 +0,0 @@
-# HG changeset patch
-# Parent 047fa9d20b78759029e87c48f0d64f819e889e4c
-
-diff --git a/widget/gtk/mozcontainer.cpp b/widget/gtk/mozcontainer.cpp
---- a/widget/gtk/mozcontainer.cpp
-+++ b/widget/gtk/mozcontainer.cpp
-@@ -159,23 +159,25 @@ void moz_container_move(MozContainer* co
-
- // Wayland subsurface is not created yet.
- if (!container->subsurface) {
- return;
- }
-
- // wl_subsurface_set_position is actually property of parent surface
- // which is effective when parent surface is commited.
-- wl_surface* parent_surface =
-- moz_gtk_widget_get_wl_surface(GTK_WIDGET(container));
-- if (parent_surface) {
-- wl_subsurface_set_position(container->subsurface, container->subsurface_dx,
-- container->subsurface_dy);
-- wl_surface_commit(parent_surface);
-- container->surface_position_needs_update = false;
-+ wl_subsurface_set_position(container->subsurface, container->subsurface_dx,
-+ container->subsurface_dy);
-+ container->surface_position_needs_update = false;
-+
-+ GdkWindow* window = gtk_widget_get_window(GTK_WIDGET(container));
-+ if (window) {
-+ GdkRectangle rect = (GdkRectangle){0, 0, gdk_window_get_width(window),
-+ gdk_window_get_height(window)};
-+ gdk_window_invalidate_rect(window, &rect, false);
- }
- }
-
- // This is called from layout/compositor code only with
- // size equal to GL rendering context. Otherwise there are
- // rendering artifacts as wl_egl_window size does not match
- // GL rendering pipeline setup.
- void moz_container_egl_window_set_size(MozContainer* container, int width,
-@@ -217,16 +219,17 @@ void moz_container_init(MozContainer* co
- container->subsurface = nullptr;
- container->eglwindow = nullptr;
- container->frame_callback_handler = nullptr;
- container->frame_callback_handler_surface_id = -1;
- // We can draw to x11 window any time.
- container->ready_to_draw = gfxPlatformGtk::GetPlatform()->IsX11Display();
- container->opaque_region_needs_update = false;
- container->opaque_region_subtract_corners = false;
-+ container->opaque_region_fullscreen = false;
- container->surface_needs_clear = true;
- container->subsurface_dx = 0;
- container->subsurface_dy = 0;
- container->surface_position_needs_update = 0;
- container->initial_draw_cbs.clear();
- #endif
-
- LOG(("%s [%p]\n", __FUNCTION__, (void*)container));
-@@ -569,22 +572,26 @@ static void moz_container_add(GtkContain
- moz_container_put(MOZ_CONTAINER(container), widget, 0, 0);
- }
-
- #ifdef MOZ_WAYLAND
- static void moz_container_set_opaque_region(MozContainer* container) {
- GtkAllocation allocation;
- gtk_widget_get_allocation(GTK_WIDGET(container), &allocation);
-
-- // Set region to mozcontainer which does not have any offset
-- wl_region* region =
-- CreateOpaqueRegionWayland(0, 0, allocation.width, allocation.height,
-- container->opaque_region_subtract_corners);
-- wl_surface_set_opaque_region(container->surface, region);
-- wl_region_destroy(region);
-+ // Set region to mozcontainer for normal state only
-+ if (!container->opaque_region_fullscreen) {
-+ wl_region* region =
-+ CreateOpaqueRegionWayland(0, 0, allocation.width, allocation.height,
-+ container->opaque_region_subtract_corners);
-+ wl_surface_set_opaque_region(container->surface, region);
-+ wl_region_destroy(region);
-+ } else {
-+ wl_surface_set_opaque_region(container->surface, nullptr);
-+ }
- }
-
- struct wl_surface* moz_container_get_wl_surface(MozContainer* container) {
- LOGWAYLAND(("%s [%p] surface %p ready_to_draw %d\n", __FUNCTION__,
- (void*)container, (void*)container->surface,
- container->ready_to_draw));
-
- if (!container->surface) {
-@@ -670,17 +677,19 @@ gboolean moz_container_has_wl_egl_window
-
- gboolean moz_container_surface_needs_clear(MozContainer* container) {
- int ret = container->surface_needs_clear;
- container->surface_needs_clear = false;
- return ret;
- }
-
- void moz_container_update_opaque_region(MozContainer* container,
-- bool aSubtractCorners) {
-+ bool aSubtractCorners,
-+ bool aFullScreen) {
- container->opaque_region_needs_update = true;
- container->opaque_region_subtract_corners = aSubtractCorners;
-+ container->opaque_region_fullscreen = aFullScreen;
- }
- #endif
-
- void moz_container_force_default_visual(MozContainer* container) {
- container->force_default_visual = true;
- }
-diff --git a/widget/gtk/mozcontainer.h b/widget/gtk/mozcontainer.h
---- a/widget/gtk/mozcontainer.h
-+++ b/widget/gtk/mozcontainer.h
-@@ -77,16 +77,17 @@ struct _MozContainer {
- struct wl_surface* surface;
- struct wl_subsurface* subsurface;
- int subsurface_dx, subsurface_dy;
- struct wl_egl_window* eglwindow;
- struct wl_callback* frame_callback_handler;
- int frame_callback_handler_surface_id;
- gboolean opaque_region_needs_update;
- gboolean opaque_region_subtract_corners;
-+ gboolean opaque_region_fullscreen;
- gboolean surface_position_needs_update;
- gboolean surface_needs_clear;
- gboolean ready_to_draw;
- std::vector<std::function<void(void)>> initial_draw_cbs;
- #endif
- gboolean force_default_visual;
- };
-
-@@ -112,12 +113,13 @@ void moz_container_move_resize(MozContai
- void moz_container_egl_window_set_size(MozContainer* container, int width,
- int height);
- void moz_container_scale_changed(MozContainer* container,
- GtkAllocation* aAllocation);
- void moz_container_add_initial_draw_callback(
- MozContainer* container, const std::function<void(void)>& initial_draw_cb);
- wl_surface* moz_gtk_widget_get_wl_surface(GtkWidget* aWidget);
- void moz_container_update_opaque_region(MozContainer* container,
-- bool aSubtractCorners);
-+ bool aSubtractCorners,
-+ bool aFullScreen);
- #endif
-
- #endif /* __MOZ_CONTAINER_H__ */
-diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp
---- a/widget/gtk/nsWindow.cpp
-+++ b/widget/gtk/nsWindow.cpp
-@@ -4860,27 +4860,34 @@ void nsWindow::UpdateTopLevelOpaqueRegio
- int width = DevicePixelsToGdkCoordRoundDown(mBounds.width);
- int height = DevicePixelsToGdkCoordRoundDown(mBounds.height);
-
- GdkRectangle rect = {x, y, width, height};
- if (!mToplevelOpaqueRegionState.NeedsUpdate(rect, aSubtractCorners)) {
- return;
- }
-
-- wl_region* region =
-- CreateOpaqueRegionWayland(x, y, width, height, aSubtractCorners);
-- wl_surface_set_opaque_region(surface, region);
-- wl_region_destroy(region);
--
-+ // Set opaque region to toplevel window only in fullscreen mode.
-+ bool fullScreen = mSizeState != nsSizeMode_Normal && !mIsTiled;
-+ if (fullScreen) {
-+ wl_region* region =
-+ CreateOpaqueRegionWayland(x, y, width, height, aSubtractCorners);
-+ wl_surface_set_opaque_region(surface, region);
-+ wl_region_destroy(region);
-+ } else {
-+ wl_surface_set_opaque_region(surface, nullptr);
-+ }
-+
-+ // TODO -> create a function for it
- GdkWindow* window = gtk_widget_get_window(mShell);
- if (window) {
- gdk_window_invalidate_rect(window, &rect, false);
- }
-
-- moz_container_update_opaque_region(mContainer, aSubtractCorners);
-+ moz_container_update_opaque_region(mContainer, aSubtractCorners, fullScreen);
- }
- #endif
-
- static void GdkWindowSetOpaqueRegion(GdkWindow* aGdkWindow,
- cairo_region_t* aRegion) {
- // Available as of GTK 3.10+
- static auto sGdkWindowSetOpaqueRegion =
- (void (*)(GdkWindow*, cairo_region_t*))dlsym(