summaryrefslogtreecommitdiff
path: root/mozilla-1553747.patch
blob: 36261123452a84dd1b90f83b6039aef3ea966fed (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
diff -up firefox-67.0/widget/gtk/WindowSurfaceWayland.cpp.old firefox-67.0/widget/gtk/WindowSurfaceWayland.cpp
--- firefox-67.0/widget/gtk/WindowSurfaceWayland.cpp.old	2019-05-23 09:57:11.794580879 +0200
+++ firefox-67.0/widget/gtk/WindowSurfaceWayland.cpp	2019-05-23 10:05:15.505606976 +0200
@@ -416,7 +416,7 @@ WindowSurfaceWayland::~WindowSurfaceWayl
 }
 
 WindowBackBuffer* WindowSurfaceWayland::GetWaylandBufferToDraw(int aWidth,
-                                                               int aHeight) {
+  int aHeight, bool aFullScreenUpdate) {
   if (!mWaylandBuffer) {
     LOGWAYLAND(("%s [%p] Create [%d x %d]\n", __PRETTY_FUNCTION__, (void*)this,
                 aWidth, aHeight));
@@ -473,8 +473,10 @@ WindowBackBuffer* WindowSurfaceWayland::
                 (void*)this, aWidth, aHeight));
     // Former front buffer has the same size as a requested one.
     // Gecko may expect a content already drawn on screen so copy
-    // existing data to the new buffer.
-    mWaylandBuffer->SetImageDataFromBuffer(lastWaylandBuffer);
+    // existing data to the new buffer if we don't do fullscreen redraw.
+    if (!aFullScreenUpdate) {
+      mWaylandBuffer->SetImageDataFromBuffer(lastWaylandBuffer);
+    }
     // When buffer switches we need to damage whole screen
     // (https://bugzilla.redhat.com/show_bug.cgi?id=1418260)
     mWaylandBufferFullScreenDamage = true;
@@ -491,8 +493,9 @@ WindowBackBuffer* WindowSurfaceWayland::
 }
 
 already_AddRefed<gfx::DrawTarget> WindowSurfaceWayland::LockWaylandBuffer(
-    int aWidth, int aHeight, bool aClearBuffer) {
-  WindowBackBuffer* buffer = GetWaylandBufferToDraw(aWidth, aHeight);
+    int aWidth, int aHeight, bool aClearBuffer, bool aFullScreenUpdate) {
+  WindowBackBuffer* buffer = GetWaylandBufferToDraw(aWidth, aHeight,
+    aFullScreenUpdate);
   if (!buffer) {
     NS_WARNING(
         "WindowSurfaceWayland::LockWaylandBuffer(): No buffer available");
@@ -557,7 +560,7 @@ already_AddRefed<gfx::DrawTarget> Window
   if (mDrawToWaylandBufferDirectly) {
     RefPtr<gfx::DrawTarget> dt =
         LockWaylandBuffer(screenRect.width, screenRect.height,
-                          mWindow->WaylandSurfaceNeedsClear());
+                          mWindow->WaylandSurfaceNeedsClear(), true);
     if (dt) {
       // When we have a request to update whole screen at once
       // (surface was created, resized or changed somehow)
@@ -590,7 +593,8 @@ bool WindowSurfaceWayland::CommitImageSu
   }
 
   RefPtr<gfx::DrawTarget> dt = LockWaylandBuffer(
-      screenRect.width, screenRect.height, mWindow->WaylandSurfaceNeedsClear());
+      screenRect.width, screenRect.height, mWindow->WaylandSurfaceNeedsClear(),
+      false);
   RefPtr<gfx::SourceSurface> surf =
       gfx::Factory::CreateSourceSurfaceForCairoSurface(
           mImageSurface->CairoSurface(), mImageSurface->GetSize(),
diff -up firefox-67.0/widget/gtk/WindowSurfaceWayland.h.old firefox-67.0/widget/gtk/WindowSurfaceWayland.h
--- firefox-67.0/widget/gtk/WindowSurfaceWayland.h.old	2019-05-23 09:57:16.208572833 +0200
+++ firefox-67.0/widget/gtk/WindowSurfaceWayland.h	2019-05-23 09:58:34.497430120 +0200
@@ -96,7 +96,7 @@ class WindowSurfaceWayland : public Wind
   WindowBackBuffer* GetWaylandBufferToDraw(int aWidth, int aHeight);
 
   already_AddRefed<gfx::DrawTarget> LockWaylandBuffer(int aWidth, int aHeight,
-                                                      bool aClearBuffer);
+      bool aClearBuffer, bool aFullScreenUpdate);
   already_AddRefed<gfx::DrawTarget> LockImageSurface(
       const gfx::IntSize& aLockSize);
   bool CommitImageSurfaceToWaylandBuffer(const LayoutDeviceIntRegion& aRegion);
bgstack15