diff --git a/dlls/dwrite/main.c b/dlls/dwrite/main.c index 1e10431bb4b..05d853f6f85 100644 --- a/dlls/dwrite/main.c +++ b/dlls/dwrite/main.c @@ -813,6 +813,9 @@ static HRESULT WINAPI dwritefactory_RegisterFontFileLoader(IDWriteFactory *iface if (!loader) return E_INVALIDARG; + if ((IDWriteFontFileLoader*)This->localfontfileloader == loader) + return S_OK; + if (factory_get_file_loader(This, loader)) return DWRITE_E_ALREADYREGISTERED; @@ -838,6 +841,9 @@ static HRESULT WINAPI dwritefactory_UnregisterFontFileLoader(IDWriteFactory *ifa if (!loader) return E_INVALIDARG; + if ((IDWriteFontFileLoader*)This->localfontfileloader == loader) + return S_OK; + found = factory_get_file_loader(This, loader); if (!found) return E_INVALIDARG; diff --git a/dlls/dwrite/tests/font.c b/dlls/dwrite/tests/font.c index 2b84ba1f2ec..d9e927fb07c 100644 --- a/dlls/dwrite/tests/font.c +++ b/dlls/dwrite/tests/font.c @@ -885,8 +885,7 @@ static void test_system_fontcollection(void) ok(coll2 == collection, "got %p, was %p\n", coll2, collection); IDWriteFontCollection_Release(coll2); - hr = DWriteCreateFactory(DWRITE_FACTORY_TYPE_ISOLATED, &IID_IDWriteFactory, (IUnknown**)&factory2); - ok(hr == S_OK, "got 0x%08x\n", hr); + factory2 = create_factory(); hr = IDWriteFactory_GetSystemFontCollection(factory2, &coll2, FALSE); ok(hr == S_OK, "got 0x%08x\n", hr); ok(coll2 != collection, "got %p, was %p\n", coll2, collection); @@ -943,6 +942,19 @@ if (file) { ok(hr == S_OK || broken(hr == DWRITE_E_ALREADYREGISTERED), "got 0x%08x\n", hr); hr = IDWriteFactory_UnregisterFontFileLoader(factory, loader); ok(hr == S_OK || broken(hr == E_INVALIDARG), "got 0x%08x\n", hr); + + /* try with a different factory */ + factory2 = create_factory(); + hr = IDWriteFactory_RegisterFontFileLoader(factory2, loader); + ok(hr == S_OK || broken(hr == DWRITE_E_ALREADYREGISTERED), "got 0x%08x\n", hr); + hr = IDWriteFactory_RegisterFontFileLoader(factory2, loader); + ok(hr == DWRITE_E_ALREADYREGISTERED, "got 0x%08x\n", hr); + hr = IDWriteFactory_UnregisterFontFileLoader(factory2, loader); + ok(hr == S_OK || broken(hr == E_INVALIDARG), "got 0x%08x\n", hr); + hr = IDWriteFactory_UnregisterFontFileLoader(factory2, loader); + ok(hr == E_INVALIDARG, "got 0x%08x\n", hr); + IDWriteFactory_Release(factory2); + IDWriteFontFileLoader_Release(loader); } ret = TRUE;