tor-browser

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

commit 08d129ddc5b86a4b259806d379507a2b2be0d0ce
parent fe16ae088c03b008d8af634302d5b3ae4f9b7cec
Author: Martin Stransky <stransky@redhat.com>
Date:   Tue,  2 Dec 2025 09:49:29 +0000

Bug 2002773 [Wayland] Apply WaylandSurface viewport size after viewport creation r=emilio

As we cache WaylandSurface states and sizes between map/unmap and also cache window size at nsWindow, re-apply correct viewport size
when it's created to have correct window size and scale.

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

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

diff --git a/widget/gtk/WaylandSurface.cpp b/widget/gtk/WaylandSurface.cpp @@ -723,6 +723,8 @@ bool WaylandSurface::EnableFractionalScaleLocked( std::function<void(void)> aFractionalScaleCallback, bool aManageViewport) { MOZ_DIAGNOSTIC_ASSERT(&aProofOfLock == mSurfaceLock); + LOGWAYLAND("WaylandSurface::SetupFractionalScale()"); + MOZ_DIAGNOSTIC_ASSERT(!mFractionalScaleListener); auto* manager = WaylandDisplayGet()->GetFractionalScaleManager(); if (!manager) { @@ -740,29 +742,36 @@ bool WaylandSurface::EnableFractionalScaleLocked( // regular rendering uses Viewport for fraction scale only. if (aManageViewport && !CreateViewportLocked(aProofOfLock, /* aFollowsSizeChanges */ true)) { + LOGWAYLAND("WaylandSurface::SetupFractionalScale() failed"); return false; } mFractionalScaleCallback = std::move(aFractionalScaleCallback); + if (mViewportFollowsSizeChanges) { + SetViewPortDestLocked(aProofOfLock, mSize); + } + // Init scale to default values and load ceiled screen scale from GdkWindow. // We use it as fallback before we get mScreenScale from system. mScaleType = ScaleType::Fractional; - - LOGWAYLAND("WaylandSurface::SetupFractionalScale()"); return true; } bool WaylandSurface::EnableCeiledScaleLocked( const WaylandSurfaceLock& aProofOfLock) { MOZ_DIAGNOSTIC_ASSERT(&aProofOfLock == mSurfaceLock); + LOGWAYLAND("WaylandSurface::EnableCeiledScaleLocked()"); if (!CreateViewportLocked(aProofOfLock, /* aFollowsSizeChanges */ true)) { + LOGWAYLAND("WaylandSurface::EnableCeiledScaleLocked() failed"); return false; } - mScaleType = ScaleType::Ceiled; + if (mViewportFollowsSizeChanges) { + SetViewPortDestLocked(aProofOfLock, mSize); + } - LOGWAYLAND("WaylandSurface::EnableCeiledScaleLocked()"); + mScaleType = ScaleType::Ceiled; return true; } @@ -1113,7 +1122,6 @@ void WaylandSurface::RemoveAttachedBufferLocked( LOGWAYLAND("WaylandSurface::RemoveAttachedBufferLocked()"); - SetRenderingSizeLocked(aSurfaceLock, DesktopIntSize()); wl_surface_attach(mSurface, nullptr, 0, 0); mLatestAttachedBuffer = 0; mSurfaceNeedsCommit = true;