Added fix for mozbz#1579794 - Flickering on video playback on 4k/HiDPI displays
This commit is contained in:
		
							parent
							
								
									8eab606fb2
								
							
						
					
					
						commit
						36345da513
					
				
							
								
								
									
										10
									
								
								firefox.spec
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								firefox.spec
									
									
									
									
									
								
							| @ -94,7 +94,7 @@ ExcludeArch: ppc64le | |||||||
| Summary:        Mozilla Firefox Web browser | Summary:        Mozilla Firefox Web browser | ||||||
| Name:           firefox | Name:           firefox | ||||||
| Version:        69.0 | Version:        69.0 | ||||||
| Release:        3%{?pre_tag}%{?dist} | Release:        4%{?pre_tag}%{?dist} | ||||||
| URL:            https://www.mozilla.org/firefox/ | URL:            https://www.mozilla.org/firefox/ | ||||||
| License:        MPLv1.1 or GPLv2+ or LGPLv2+ | License:        MPLv1.1 or GPLv2+ or LGPLv2+ | ||||||
| Source0:        https://archive.mozilla.org/pub/firefox/releases/%{version}%{?pre_version}/source/firefox-%{version}%{?pre_version}.source.tar.xz | Source0:        https://archive.mozilla.org/pub/firefox/releases/%{version}%{?pre_version}/source/firefox-%{version}%{?pre_version}.source.tar.xz | ||||||
| @ -162,6 +162,8 @@ Patch579:        mozilla-1567434-2.patch | |||||||
| Patch580:        mozilla-1573813.patch | Patch580:        mozilla-1573813.patch | ||||||
| Patch581:        mozilla-1574036.patch | Patch581:        mozilla-1574036.patch | ||||||
| Patch582:        mozilla-1576268.patch | Patch582:        mozilla-1576268.patch | ||||||
|  | Patch583:        mozilla-1579794-1.patch | ||||||
|  | Patch584:        mozilla-1579794-2.patch | ||||||
| 
 | 
 | ||||||
| # PGO/LTO patches | # PGO/LTO patches | ||||||
| Patch600:        pgo.patch | Patch600:        pgo.patch | ||||||
| @ -376,6 +378,8 @@ This package contains results of tests executed during build. | |||||||
| %patch580 -p1 -b .mozilla-1573813 | %patch580 -p1 -b .mozilla-1573813 | ||||||
| %patch581 -p1 -b .mozilla-1574036 | %patch581 -p1 -b .mozilla-1574036 | ||||||
| %patch582 -p1 -b .mozilla-1576268 | %patch582 -p1 -b .mozilla-1576268 | ||||||
|  | %patch583 -p1 -b .mozilla-1579794-1 | ||||||
|  | %patch584 -p1 -b .mozilla-1579794-2 | ||||||
| 
 | 
 | ||||||
| # PGO patches | # PGO patches | ||||||
| %patch600 -p1 -b .pgo | %patch600 -p1 -b .pgo | ||||||
| @ -952,6 +956,10 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : | |||||||
| #--------------------------------------------------------------------- | #--------------------------------------------------------------------- | ||||||
| 
 | 
 | ||||||
| %changelog | %changelog | ||||||
|  | * Wed Sep 11 2019 Martin Stransky <stransky@redhat.com> - 69.0-4 | ||||||
|  | - Added fix for mozbz#1579794 - Flickering on video playback on | ||||||
|  |   4k/HiDPI displays. | ||||||
|  | 
 | ||||||
| * Mon Sep 9 2019 Martin Stransky <stransky@redhat.com> - 69.0-3 | * Mon Sep 9 2019 Martin Stransky <stransky@redhat.com> - 69.0-3 | ||||||
| - Added fix for mozbz#1579023 | - Added fix for mozbz#1579023 | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										134
									
								
								mozilla-1579794-1.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										134
									
								
								mozilla-1579794-1.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,134 @@ | |||||||
|  | diff --git a/widget/gtk/WindowSurfaceWayland.h b/widget/gtk/WindowSurfaceWayland.h
 | ||||||
|  | --- a/widget/gtk/WindowSurfaceWayland.h
 | ||||||
|  | +++ b/widget/gtk/WindowSurfaceWayland.h
 | ||||||
|  | @@ -154,11 +154,12 @@
 | ||||||
|  |    void Draw(gfx::DrawTarget* aDest, | ||||||
|  |              LayoutDeviceIntRegion& aWaylandBufferDamage); | ||||||
|  |   | ||||||
|  | -  WindowImageSurface(gfx::SourceSurface* aSurface,
 | ||||||
|  | +  WindowImageSurface(gfxImageSurface* aImageSurface,
 | ||||||
|  |                       const LayoutDeviceIntRegion& aUpdateRegion); | ||||||
|  |   | ||||||
|  |   private: | ||||||
|  |    RefPtr<gfx::SourceSurface> mSurface; | ||||||
|  | +  RefPtr<gfxImageSurface> mImageSurface;
 | ||||||
|  |    const LayoutDeviceIntRegion mUpdateRegion; | ||||||
|  |  }; | ||||||
|  |   | ||||||
|  | diff --git a/widget/gtk/WindowSurfaceWayland.cpp b/widget/gtk/WindowSurfaceWayland.cpp
 | ||||||
|  | --- a/widget/gtk/WindowSurfaceWayland.cpp
 | ||||||
|  | +++ b/widget/gtk/WindowSurfaceWayland.cpp
 | ||||||
|  | @@ -890,8 +890,12 @@
 | ||||||
|  |  } | ||||||
|  |   | ||||||
|  |  WindowImageSurface::WindowImageSurface( | ||||||
|  | -    gfx::SourceSurface* aSurface, const LayoutDeviceIntRegion& aUpdateRegion)
 | ||||||
|  | -    : mSurface(aSurface), mUpdateRegion(aUpdateRegion){};
 | ||||||
|  | +    gfxImageSurface* aImageSurface, const LayoutDeviceIntRegion& aUpdateRegion)
 | ||||||
|  | +    : mImageSurface(aImageSurface), mUpdateRegion(aUpdateRegion) {
 | ||||||
|  | +  mSurface = gfx::Factory::CreateSourceSurfaceForCairoSurface(
 | ||||||
|  | +      mImageSurface->CairoSurface(), mImageSurface->GetSize(),
 | ||||||
|  | +      mImageSurface->Format());
 | ||||||
|  | +}
 | ||||||
|  |   | ||||||
|  |  void WindowSurfaceWayland::DrawDelayedImageCommits( | ||||||
|  |      gfx::DrawTarget* aDrawTarget, LayoutDeviceIntRegion& aWaylandBufferDamage) { | ||||||
|  | @@ -915,36 +919,24 @@
 | ||||||
|  |    LOGWAYLAND(("%s [%p] screenSize [%d x %d]\n", __PRETTY_FUNCTION__, | ||||||
|  |                (void*)this, mBufferScreenRect.width, mBufferScreenRect.height)); | ||||||
|  |   | ||||||
|  | -  RefPtr<gfx::SourceSurface> surf =
 | ||||||
|  | -      gfx::Factory::CreateSourceSurfaceForCairoSurface(
 | ||||||
|  | -          mImageSurface->CairoSurface(), mImageSurface->GetSize(),
 | ||||||
|  | -          mImageSurface->Format());
 | ||||||
|  | -  if (!surf) {
 | ||||||
|  | -    NS_WARNING("Failed to create source cairo surface!");
 | ||||||
|  | -    return false;
 | ||||||
|  | -  }
 | ||||||
|  | +  mDelayedImageCommits.AppendElement(
 | ||||||
|  | +      WindowImageSurface(mImageSurface, aRegion));
 | ||||||
|  | +  // mImageSurface is owned by mDelayedImageCommits
 | ||||||
|  | +  mImageSurface = nullptr;
 | ||||||
|  |   | ||||||
|  |    RefPtr<gfx::DrawTarget> dt = LockWaylandBuffer( | ||||||
|  |        /* aCanSwitchBuffer */ mWholeWindowBufferDamage); | ||||||
|  | -  if (dt) {
 | ||||||
|  | -    LOGWAYLAND(
 | ||||||
|  | -        ("   Flushing %ld cached WindowImageSurfaces to Wayland buffer\n",
 | ||||||
|  | -         long(mDelayedImageCommits.Length() + 1)));
 | ||||||
|  | -
 | ||||||
|  | -    // Draw any delayed image commits first
 | ||||||
|  | -    DrawDelayedImageCommits(dt, aWaylandBufferDamage);
 | ||||||
|  | -    // Draw image from recent WindowSurfaceWayland::Lock().
 | ||||||
|  | -    WindowImageSurface::Draw(surf, dt, aRegion);
 | ||||||
|  | -    // Submit all drawing to final Wayland buffer upload
 | ||||||
|  | -    aWaylandBufferDamage.OrWith(aRegion);
 | ||||||
|  | -    UnlockWaylandBuffer();
 | ||||||
|  | -  } else {
 | ||||||
|  | -    mDelayedImageCommits.AppendElement(WindowImageSurface(surf, aRegion));
 | ||||||
|  | -    LOGWAYLAND(("   Added WindowImageSurfaces, cached surfaces %ld\n",
 | ||||||
|  | -                long(mDelayedImageCommits.Length())));
 | ||||||
|  | +  if (!dt) {
 | ||||||
|  |      return false; | ||||||
|  |    } | ||||||
|  |   | ||||||
|  | +  LOGWAYLAND(("   Flushing %ld cached WindowImageSurfaces to Wayland buffer\n",
 | ||||||
|  | +              long(mDelayedImageCommits.Length() + 1)));
 | ||||||
|  | +
 | ||||||
|  | +  // Draw any delayed image commits first
 | ||||||
|  | +  DrawDelayedImageCommits(dt, aWaylandBufferDamage);
 | ||||||
|  | +  UnlockWaylandBuffer();
 | ||||||
|  | +
 | ||||||
|  |    return true; | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | @@ -980,23 +972,6 @@
 | ||||||
|  |    LOGWAYLAND(("   mFrameCallback = %p\n", mFrameCallback)); | ||||||
|  |    LOGWAYLAND(("   mLastCommittedSurface = %p\n", mLastCommittedSurface)); | ||||||
|  |   | ||||||
|  | -  if (!mDrawToWaylandBufferDirectly) {
 | ||||||
|  | -    MOZ_ASSERT(mDelayedImageCommits.Length(),
 | ||||||
|  | -               "Indirect drawing without any image?");
 | ||||||
|  | -
 | ||||||
|  | -    // There's some cached drawings - try to flush them now.
 | ||||||
|  | -    RefPtr<gfx::DrawTarget> dt = LockWaylandBuffer(
 | ||||||
|  | -        /* aCanSwitchBuffer */ mWholeWindowBufferDamage);
 | ||||||
|  | -
 | ||||||
|  | -    if (dt) {
 | ||||||
|  | -      LOGWAYLAND(("%s [%p] flushed indirect drawing\n", __PRETTY_FUNCTION__,
 | ||||||
|  | -                  (void*)this));
 | ||||||
|  | -      DrawDelayedImageCommits(dt, mWaylandBufferDamage);
 | ||||||
|  | -      UnlockWaylandBuffer();
 | ||||||
|  | -      mDrawToWaylandBufferDirectly = true;
 | ||||||
|  | -    }
 | ||||||
|  | -  }
 | ||||||
|  | -
 | ||||||
|  |    wl_surface* waylandSurface = mWindow->GetWaylandSurface(); | ||||||
|  |    if (!waylandSurface) { | ||||||
|  |      LOGWAYLAND(("%s [%p] mWindow->GetWaylandSurface() failed, delay commit.\n", | ||||||
|  | @@ -1105,6 +1080,7 @@
 | ||||||
|  |        mWaylandBufferDamage.OrWith(aInvalidRegion); | ||||||
|  |      } | ||||||
|  |      UnlockWaylandBuffer(); | ||||||
|  | +    mPendingCommit = true;
 | ||||||
|  |    } else { | ||||||
|  |      MOZ_ASSERT(!mWaylandBuffer->IsLocked(), | ||||||
|  |                 "Drawing to already locked buffer?"); | ||||||
|  | @@ -1112,12 +1088,13 @@
 | ||||||
|  |                                            mWaylandBufferDamage)) { | ||||||
|  |        // Our cached drawing is flushed, we can draw fullscreen again. | ||||||
|  |        mDrawToWaylandBufferDirectly = true; | ||||||
|  | +      mPendingCommit = true;
 | ||||||
|  |      } | ||||||
|  |    } | ||||||
|  |   | ||||||
|  | -  // We're ready to commit.
 | ||||||
|  | -  mPendingCommit = true;
 | ||||||
|  | -  CommitWaylandBuffer();
 | ||||||
|  | +  if (mPendingCommit) {
 | ||||||
|  | +    CommitWaylandBuffer();
 | ||||||
|  | +  }
 | ||||||
|  |  } | ||||||
|  |   | ||||||
|  |  void WindowSurfaceWayland::FrameCallbackHandler() { | ||||||
|  | 
 | ||||||
							
								
								
									
										166
									
								
								mozilla-1579794-2.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										166
									
								
								mozilla-1579794-2.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,166 @@ | |||||||
|  | diff --git a/widget/gtk/WindowSurfaceWayland.h b/widget/gtk/WindowSurfaceWayland.h
 | ||||||
|  | --- a/widget/gtk/WindowSurfaceWayland.h
 | ||||||
|  | +++ b/widget/gtk/WindowSurfaceWayland.h
 | ||||||
|  | @@ -204,7 +204,6 @@
 | ||||||
|  |        const LayoutDeviceIntRegion& aRegion, | ||||||
|  |        LayoutDeviceIntRegion& aWaylandBufferDamage); | ||||||
|  |    void CommitWaylandBuffer(); | ||||||
|  | -  void CalcRectScale(LayoutDeviceIntRect& aRect, int scale);
 | ||||||
|  |   | ||||||
|  |    void DrawDelayedImageCommits(gfx::DrawTarget* aDrawTarget, | ||||||
|  |                                 LayoutDeviceIntRegion& aWaylandBufferDamage); | ||||||
|  | diff --git a/widget/gtk/WindowSurfaceWayland.cpp b/widget/gtk/WindowSurfaceWayland.cpp
 | ||||||
|  | --- a/widget/gtk/WindowSurfaceWayland.cpp
 | ||||||
|  | +++ b/widget/gtk/WindowSurfaceWayland.cpp
 | ||||||
|  | @@ -951,16 +951,6 @@
 | ||||||
|  |    } | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | -void WindowSurfaceWayland::CalcRectScale(LayoutDeviceIntRect& aRect,
 | ||||||
|  | -                                         int aScale) {
 | ||||||
|  | -  aRect.x = aRect.x / aScale;
 | ||||||
|  | -  aRect.y = aRect.y / aScale;
 | ||||||
|  | -
 | ||||||
|  | -  // We don't need exact damage size - just safely cover the round errors.
 | ||||||
|  | -  aRect.width = (aRect.width / aScale) + 2;
 | ||||||
|  | -  aRect.height = (aRect.height / aScale) + 2;
 | ||||||
|  | -}
 | ||||||
|  | -
 | ||||||
|  |  void WindowSurfaceWayland::CommitWaylandBuffer() { | ||||||
|  |    MOZ_ASSERT(mPendingCommit, "Committing empty surface!"); | ||||||
|  |   | ||||||
|  | @@ -1022,16 +1012,10 @@
 | ||||||
|  |      mWholeWindowBufferDamage = false; | ||||||
|  |      mNeedScaleFactorUpdate = true; | ||||||
|  |    } else { | ||||||
|  | -    gint scaleFactor = mWindow->GdkScaleFactor();
 | ||||||
|  |      for (auto iter = mWaylandBufferDamage.RectIter(); !iter.Done(); | ||||||
|  |           iter.Next()) { | ||||||
|  |        mozilla::LayoutDeviceIntRect r = iter.Get(); | ||||||
|  | -      // We need to remove the scale factor because the wl_surface_damage
 | ||||||
|  | -      // also multiplies by current  scale factor.
 | ||||||
|  | -      if (scaleFactor > 1) {
 | ||||||
|  | -        CalcRectScale(r, scaleFactor);
 | ||||||
|  | -      }
 | ||||||
|  | -      wl_surface_damage(waylandSurface, r.x, r.y, r.width, r.height);
 | ||||||
|  | +      wl_surface_damage_buffer(waylandSurface, r.x, r.y, r.width, r.height);
 | ||||||
|  |      } | ||||||
|  |    } | ||||||
|  |   | ||||||
|  | diff --git a/widget/gtk/mozcontainer.cpp b/widget/gtk/mozcontainer.cpp
 | ||||||
|  | --- a/widget/gtk/mozcontainer.cpp
 | ||||||
|  | +++ b/widget/gtk/mozcontainer.cpp
 | ||||||
|  | @@ -578,16 +578,12 @@
 | ||||||
|  |        return nullptr; | ||||||
|  |      } | ||||||
|  |      GdkDisplay* display = gtk_widget_get_display(GTK_WIDGET(container)); | ||||||
|  | +    nsWaylandDisplay* waylandDisplay = WaylandDisplayGet(display);
 | ||||||
|  |   | ||||||
|  |      // Available as of GTK 3.8+ | ||||||
|  | -    static auto sGdkWaylandDisplayGetWlCompositor =
 | ||||||
|  | -        (wl_compositor * (*)(GdkDisplay*))
 | ||||||
|  | -            dlsym(RTLD_DEFAULT, "gdk_wayland_display_get_wl_compositor");
 | ||||||
|  | -    struct wl_compositor* compositor =
 | ||||||
|  | -        sGdkWaylandDisplayGetWlCompositor(display);
 | ||||||
|  | +    struct wl_compositor* compositor = waylandDisplay->GetCompositor();
 | ||||||
|  |      container->surface = wl_compositor_create_surface(compositor); | ||||||
|  |   | ||||||
|  | -    nsWaylandDisplay* waylandDisplay = WaylandDisplayGet(display);
 | ||||||
|  |      container->subsurface = wl_subcompositor_get_subsurface( | ||||||
|  |          waylandDisplay->GetSubcompositor(), container->surface, | ||||||
|  |          moz_container_get_gtk_container_surface(container)); | ||||||
|  | diff --git a/widget/gtk/mozwayland/mozwayland.h b/widget/gtk/mozwayland/mozwayland.h
 | ||||||
|  | --- a/widget/gtk/mozwayland/mozwayland.h
 | ||||||
|  | +++ b/widget/gtk/mozwayland/mozwayland.h
 | ||||||
|  | @@ -108,6 +108,17 @@
 | ||||||
|  |  } | ||||||
|  |  #endif | ||||||
|  |   | ||||||
|  | +#ifndef WL_SURFACE_DAMAGE_BUFFER
 | ||||||
|  | +#  define WL_SURFACE_DAMAGE_BUFFER 9
 | ||||||
|  | +
 | ||||||
|  | +static inline void wl_surface_damage_buffer(struct wl_surface* wl_surface,
 | ||||||
|  | +                                            int32_t x, int32_t y, int32_t width,
 | ||||||
|  | +                                            int32_t height) {
 | ||||||
|  | +  wl_proxy_marshal((struct wl_proxy*)wl_surface, WL_SURFACE_DAMAGE_BUFFER, x, y,
 | ||||||
|  | +                   width, height);
 | ||||||
|  | +}
 | ||||||
|  | +#endif
 | ||||||
|  | +
 | ||||||
|  |  #ifdef __cplusplus | ||||||
|  |  } | ||||||
|  |  #endif | ||||||
|  | diff --git a/widget/gtk/mozwayland/mozwayland.c b/widget/gtk/mozwayland/mozwayland.c
 | ||||||
|  | --- a/widget/gtk/mozwayland/mozwayland.c
 | ||||||
|  | +++ b/widget/gtk/mozwayland/mozwayland.c
 | ||||||
|  | @@ -30,6 +30,7 @@
 | ||||||
|  |  const struct wl_interface wl_seat_interface; | ||||||
|  |  const struct wl_interface wl_surface_interface; | ||||||
|  |  const struct wl_interface wl_subsurface_interface; | ||||||
|  | +const struct wl_interface wl_compositor_interface;
 | ||||||
|  |  const struct wl_interface wl_subcompositor_interface; | ||||||
|  |  #pragma GCC visibility pop | ||||||
|  |   | ||||||
|  | diff --git a/widget/gtk/nsWaylandDisplay.h b/widget/gtk/nsWaylandDisplay.h
 | ||||||
|  | --- a/widget/gtk/nsWaylandDisplay.h
 | ||||||
|  | +++ b/widget/gtk/nsWaylandDisplay.h
 | ||||||
|  | @@ -45,6 +45,7 @@
 | ||||||
|  |    MessageLoop* GetDispatcherThreadLoop() { return mDispatcherThreadLoop; } | ||||||
|  |    wl_display* GetDisplay() { return mDisplay; }; | ||||||
|  |    wl_event_queue* GetEventQueue() { return mEventQueue; }; | ||||||
|  | +  wl_compositor* GetCompositor(void) { return mCompositor; };
 | ||||||
|  |    wl_subcompositor* GetSubcompositor(void) { return mSubcompositor; }; | ||||||
|  |    wl_data_device_manager* GetDataDeviceManager(void) { | ||||||
|  |      return mDataDeviceManager; | ||||||
|  | @@ -56,6 +57,7 @@
 | ||||||
|  |    }; | ||||||
|  |   | ||||||
|  |    void SetShm(wl_shm* aShm); | ||||||
|  | +  void SetCompositor(wl_compositor* aCompositor);
 | ||||||
|  |    void SetSubcompositor(wl_subcompositor* aSubcompositor); | ||||||
|  |    void SetDataDeviceManager(wl_data_device_manager* aDataDeviceManager); | ||||||
|  |    void SetSeat(wl_seat* aSeat); | ||||||
|  | @@ -88,6 +90,7 @@
 | ||||||
|  |    wl_display* mDisplay; | ||||||
|  |    wl_event_queue* mEventQueue; | ||||||
|  |    wl_data_device_manager* mDataDeviceManager; | ||||||
|  | +  wl_compositor* mCompositor;
 | ||||||
|  |    wl_subcompositor* mSubcompositor; | ||||||
|  |    wl_seat* mSeat; | ||||||
|  |    wl_shm* mShm; | ||||||
|  | diff --git a/widget/gtk/nsWaylandDisplay.cpp b/widget/gtk/nsWaylandDisplay.cpp
 | ||||||
|  | --- a/widget/gtk/nsWaylandDisplay.cpp
 | ||||||
|  | +++ b/widget/gtk/nsWaylandDisplay.cpp
 | ||||||
|  | @@ -116,6 +116,10 @@
 | ||||||
|  |   | ||||||
|  |  void nsWaylandDisplay::SetShm(wl_shm* aShm) { mShm = aShm; } | ||||||
|  |   | ||||||
|  | +void nsWaylandDisplay::SetCompositor(wl_compositor* aCompositor) {
 | ||||||
|  | +  mCompositor = aCompositor;
 | ||||||
|  | +}
 | ||||||
|  | +
 | ||||||
|  |  void nsWaylandDisplay::SetSubcompositor(wl_subcompositor* aSubcompositor) { | ||||||
|  |    mSubcompositor = aSubcompositor; | ||||||
|  |  } | ||||||
|  | @@ -223,6 +227,12 @@
 | ||||||
|  |      wl_proxy_set_queue((struct wl_proxy*)primary_selection_device_manager, | ||||||
|  |                         display->GetEventQueue()); | ||||||
|  |      display->SetPrimarySelectionDeviceManager(primary_selection_device_manager); | ||||||
|  | +  } else if (strcmp(interface, "wl_compositor") == 0) {
 | ||||||
|  | +    // Requested wl_compositor version 4 as we need wl_surface_damage_buffer().
 | ||||||
|  | +    auto compositor = static_cast<wl_compositor*>(
 | ||||||
|  | +        wl_registry_bind(registry, id, &wl_compositor_interface, 4));
 | ||||||
|  | +    wl_proxy_set_queue((struct wl_proxy*)compositor, display->GetEventQueue());
 | ||||||
|  | +    display->SetCompositor(compositor);
 | ||||||
|  |    } else if (strcmp(interface, "wl_subcompositor") == 0) { | ||||||
|  |      auto subcompositor = static_cast<wl_subcompositor*>( | ||||||
|  |          wl_registry_bind(registry, id, &wl_subcompositor_interface, 1)); | ||||||
|  | @@ -306,6 +316,7 @@
 | ||||||
|  |        mDisplay(aDisplay), | ||||||
|  |        mEventQueue(nullptr), | ||||||
|  |        mDataDeviceManager(nullptr), | ||||||
|  | +      mCompositor(nullptr),
 | ||||||
|  |        mSubcompositor(nullptr), | ||||||
|  |        mSeat(nullptr), | ||||||
|  |        mShm(nullptr), | ||||||
|  | 
 | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user