From f47aab61671ad0d031fcea56c2204f8d0c47fff7 Mon Sep 17 00:00:00 2001 From: Huw Davies Date: Mon, 9 Nov 2015 16:11:42 +0000 Subject: [PATCH] riched20: Release the font cache when changing the default style. Signed-off-by: Huw Davies Signed-off-by: Alexandre Julliard --- dlls/riched20/run.c | 19 ------------------- dlls/riched20/style.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 19 deletions(-) diff --git a/dlls/riched20/run.c b/dlls/riched20/run.c index d76737a96b7..d2612136860 100644 --- a/dlls/riched20/run.c +++ b/dlls/riched20/run.c @@ -763,25 +763,6 @@ void ME_SetCharFormat(ME_TextEditor *editor, ME_Cursor *start, ME_Cursor *end, C } } -/****************************************************************************** - * ME_SetDefaultCharFormat - * - * Applies a style change to the default character style. - */ -void ME_SetDefaultCharFormat(ME_TextEditor *editor, CHARFORMAT2W *mod) -{ - ME_Style *style; - - assert(mod->cbSize == sizeof(CHARFORMAT2W)); - style = ME_ApplyStyle(editor->pBuffer->pDefaultStyle, mod); - editor->pBuffer->pDefaultStyle->fmt = style->fmt; - editor->pBuffer->pDefaultStyle->tm = style->tm; - ScriptFreeCache( &editor->pBuffer->pDefaultStyle->script_cache ); - ME_ReleaseStyle(style); - ME_MarkAllForWrapping(editor); - /* pcf = editor->pBuffer->pDefaultStyle->fmt; */ -} - static void ME_GetRunCharFormat(ME_TextEditor *editor, ME_DisplayItem *run, CHARFORMAT2W *pFmt) { ME_CopyCharFormat(pFmt, &run->member.run.style->fmt); diff --git a/dlls/riched20/style.c b/dlls/riched20/style.c index 0e990e2f0ac..37f56d92eb6 100644 --- a/dlls/riched20/style.c +++ b/dlls/riched20/style.c @@ -508,3 +508,31 @@ void ME_ClearTempStyle(ME_TextEditor *editor) ME_ReleaseStyle(editor->pBuffer->pCharStyle); editor->pBuffer->pCharStyle = NULL; } + +/****************************************************************************** + * ME_SetDefaultCharFormat + * + * Applies a style change to the default character style. + * + * The default style is special in that it is mutable - runs + * in the document that have this style should change if the + * default style changes. That means we need to fix up this + * style manually. + */ +void ME_SetDefaultCharFormat(ME_TextEditor *editor, CHARFORMAT2W *mod) +{ + ME_Style *style, *def = editor->pBuffer->pDefaultStyle; + + assert(mod->cbSize == sizeof(CHARFORMAT2W)); + style = ME_ApplyStyle(def, mod); + def->fmt = style->fmt; + def->tm = style->tm; + if (def->font_cache) + { + release_font_cache( def->font_cache ); + def->font_cache = NULL; + } + ScriptFreeCache( &def->script_cache ); + ME_ReleaseStyle( style ); + ME_MarkAllForWrapping( editor ); +}