diff -up firefox-71.0/widget/gtk/nsWindow.cpp.1568569 firefox-71.0/widget/gtk/nsWindow.cpp --- firefox-71.0/widget/gtk/nsWindow.cpp.1568569 2019-11-26 10:51:08.303063138 +0100 +++ firefox-71.0/widget/gtk/nsWindow.cpp 2019-11-26 10:54:28.428994823 +0100 @@ -3348,6 +3348,8 @@ void nsWindow::OnWindowStateEvent(GtkWid return; } + nsSizeMode lastSizeState = mSizeState; + if (aEvent->new_window_state & GDK_WINDOW_STATE_ICONIFIED) { LOG(("\tIconified\n")); mSizeState = nsSizeMode_Minimized; @@ -3379,6 +3381,18 @@ void nsWindow::OnWindowStateEvent(GtkWid mIsTiled = false; } + // Fullscreen video playback may generate bogus alpha values which blends + // with desktop background in fullscreen video playback (Bug 1568569). + // As a workaround enable to draw mShell background in fullscreen mode + // if we draw to mContainer. + if (gtk_widget_get_has_window(GTK_WIDGET(mContainer))) { + if (mSizeState == nsSizeMode_Fullscreen) { + gtk_widget_set_app_paintable(mShell, FALSE); + } else if (lastSizeState == nsSizeMode_Fullscreen) { + gtk_widget_set_app_paintable(mShell, TRUE); + } + } + if (mWidgetListener) { mWidgetListener->SizeModeChanged(mSizeState); if (aEvent->changed_mask & GDK_WINDOW_STATE_FULLSCREEN) { @@ -3930,6 +3944,11 @@ nsresult nsWindow::Create(nsIWidget* aPa gtk_widget_add_events(eventWidget, kEvents); if (drawToContainer) { gtk_widget_add_events(mShell, GDK_PROPERTY_CHANGE_MASK); + // Don't paint mShell background when we draw to mContainer. + // Otherwise we see mShell backround to shine through + // mContainer (Bug 1507608). + // But it may also lead to various bugs where mContainer has unintended + // transparent parts which blend with underlying desktop (Bug 1516224). gtk_widget_set_app_paintable(mShell, TRUE); } if (mTransparencyBitmapForTitlebar) {