tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit f95b20bfa25962f932cddd363844bce7f96a648b
parent 3fc5674a9037846fcf760920c9e34e9c2f7a480e
Author: stransky <stransky@redhat.com>
Date:   Tue,  4 Nov 2025 19:14:23 +0000

Bug 1986260 [Wayland] Request commit after opaque region frame callback request r=emilio

Differential Revision: https://phabricator.services.mozilla.com/D271212

Diffstat:
Mwidget/gtk/WaylandSurface.cpp | 22+++++++++-------------
1 file changed, 9 insertions(+), 13 deletions(-)

diff --git a/widget/gtk/WaylandSurface.cpp b/widget/gtk/WaylandSurface.cpp @@ -281,17 +281,6 @@ void WaylandSurface::FrameCallbackHandler(struct wl_callback* aCallback, } } -static void FrameCallbackHandler(void* aWaylandSurface, - struct wl_callback* aCallback, - uint32_t aTime) { - RefPtr waylandSurface = static_cast<WaylandSurface*>(aWaylandSurface); - waylandSurface->FrameCallbackHandler(aCallback, aTime, - /* aRoutedFromChildSurface */ false); -} - -static const struct wl_callback_listener sWaylandSurfaceFrameListener = { - ::FrameCallbackHandler}; - void WaylandSurface::RequestFrameCallbackLocked( const WaylandSurfaceLock& aProofOfLock) { LOGVERBOSE( @@ -317,6 +306,7 @@ void WaylandSurface::RequestFrameCallbackLocked( }}; mOpaqueRegionFrameCallback = wl_surface_frame(mSurface); wl_callback_add_listener(mOpaqueRegionFrameCallback, &listener, this); + mSurfaceNeedsCommit = true; } if (!mFrameCallbackEnabled || !mFrameCallbackHandler.IsSet()) { @@ -326,9 +316,15 @@ void WaylandSurface::RequestFrameCallbackLocked( MOZ_DIAGNOSTIC_ASSERT(mSurface, "Missing mapped surface!"); if (!mFrameCallback) { + static const struct wl_callback_listener listener{ + [](void* aData, struct wl_callback* callback, uint32_t time) { + RefPtr waylandSurface = static_cast<WaylandSurface*>(aData); + waylandSurface->FrameCallbackHandler( + callback, time, + /* aRoutedFromChildSurface */ false); + }}; mFrameCallback = wl_surface_frame(mSurface); - wl_callback_add_listener(mFrameCallback, &sWaylandSurfaceFrameListener, - this); + wl_callback_add_listener(mFrameCallback, &listener, this); mSurfaceNeedsCommit = true; }