vcl/win/gdi/salfont.cxx | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-)
New commits: commit 3476106890ea2a00e6f949c918f6c05e17c66a36 Author: Jan-Marek Glogowski <glo...@fbihome.de> AuthorDate: Mon Sep 27 18:26:17 2021 +0200 Commit: Jan-Marek Glogowski <glo...@fbihome.de> CommitDate: Tue Sep 28 13:02:04 2021 +0200 tdf#144754 WIN de-assert ReleaseFonts / setFont DeInitGraphics might already have reset the default HDC font, while the WinSalGraphics still has a font fallback stack. Not sure why this didn't trigger the existing assert before. Quite probably there was an existing lifecycle bug. Regression from commit 42f9d4335bfa4b7299224801fd7ccdd97ae92fbf ("WIN always (de-)init WinSalGraphics") Change-Id: Ie5826e632310a0d69e8f9617cf6f3629bc31f152 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/122726 Tested-by: Jenkins Reviewed-by: Jan-Marek Glogowski <glo...@fbihome.de> diff --git a/vcl/win/gdi/salfont.cxx b/vcl/win/gdi/salfont.cxx index c3ad1eb5817d..6dd8365e6955 100644 --- a/vcl/win/gdi/salfont.cxx +++ b/vcl/win/gdi/salfont.cxx @@ -856,16 +856,22 @@ HFONT WinSalGraphics::ImplDoSetFont(vcl::font::FontSelectPattern const & i_rFont void WinSalGraphics::SetFont(LogicalFontInstance* pFont, int nFallbackLevel) { + // check that we don't change the first font while ScopedFont has replaced HFONT + assert(!mpWinFontEntry[0].is() || nFallbackLevel != 0 || mpWinFontEntry[0]->GetHFONT()); + assert(nFallbackLevel >= 0 && nFallbackLevel < MAX_FALLBACK); + // return early if there is no new font if( !pFont ) { if (!mpWinFontEntry[nFallbackLevel].is()) return; - // select original DC font - assert(mhDefFont); - ::SelectFont(getHDC(), mhDefFont); - mhDefFont = nullptr; + // DeInitGraphics doesn't free the cached fonts, so mhDefFont might be nullptr + if (mhDefFont) + { + ::SelectFont(getHDC(), mhDefFont); + mhDefFont = nullptr; + } // release no longer referenced font handles for( int i = nFallbackLevel; i < MAX_FALLBACK; ++i )