blob: ab6225a185064a62a0914c67823f020a19e16322 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp
--- a/widget/gtk/nsWindow.cpp
+++ b/widget/gtk/nsWindow.cpp
@@ -3238,16 +3238,18 @@ void nsWindow::OnWindowStateEvent(GtkWid
// We don't care about anything but changes in the maximized/icon/fullscreen
// states
if ((aEvent->changed_mask &
(GDK_WINDOW_STATE_ICONIFIED | GDK_WINDOW_STATE_MAXIMIZED |
GDK_WINDOW_STATE_FULLSCREEN)) == 0) {
return;
}
+ nsSizeMode lastSizeState = mSizeState;
+
if (aEvent->new_window_state & GDK_WINDOW_STATE_ICONIFIED) {
LOG(("\tIconified\n"));
mSizeState = nsSizeMode_Minimized;
#ifdef ACCESSIBILITY
DispatchMinimizeEventAccessible();
#endif // ACCESSIBILITY
} else if (aEvent->new_window_state & GDK_WINDOW_STATE_FULLSCREEN) {
LOG(("\tFullscreen\n"));
@@ -3261,16 +3263,28 @@ void nsWindow::OnWindowStateEvent(GtkWid
} else {
LOG(("\tNormal\n"));
mSizeState = nsSizeMode_Normal;
#ifdef ACCESSIBILITY
DispatchRestoreEventAccessible();
#endif // ACCESSIBILITY
}
+ // 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) {
mWidgetListener->FullscreenChanged(aEvent->new_window_state &
GDK_WINDOW_STATE_FULLSCREEN);
}
}
@@ -3787,16 +3801,21 @@ nsresult nsWindow::Create(nsIWidget* aPa
eventWidget = (drawToContainer) ? container : mShell;
// Prevent GtkWindow from painting a background to avoid flickering.
gtk_widget_set_app_paintable(eventWidget, TRUE);
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) {
moz_container_force_default_visual(mContainer);
}
// If we draw to mContainer window then configure it now because
// gtk_container_add() realizes the child widget.
|