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 <glogow@fbihome.de>
diff --git a/vcl/win/gdi/salfont.cxx b/vcl/win/gdi/salfont.cxx
index c3ad1eb..6dd8365 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 )