https://issues.apache.org/ooo/show_bug.cgi?id=120077
Ariel Constenla-Haile <[email protected]> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |REOPENED CC| |[email protected] Resolution|FIXED |--- --- Comment #12 from Ariel Constenla-Haile <[email protected]> --- (In reply to comment #10) > ALG: in principle, the whole SfxStyleSheetBasePool::CreateIterator is not > needed; a SfxStyleSheetIterator can be created by everyone This breaks the styles in Writer: - Create a new Writer document - Press F11 - There are no styles for any style family ---------------------------------------------------------------- The UNO layer is affected too. Run the following macro: REM ***** BASIC ***** Option Explicit Sub Main Dim oDoc as Object oDoc = ThisComponent Dim sStyleFamilies$() Dim oStyleFamilies as Object oStyleFamilies = oDoc.getStyleFamilies() sStyleFamilies = oStyleFamilies.getElementNames() Dim sStyleFamily$ Dim oFamily as Object For Each sStyleFamily in sStyleFamilies oFamily = oStyleFamilies.getByName(sStyleFamily) Dim sStyleNames$() Dim sStyle$, sStyleName$ Dim oStyle as Object sStyleNames = oFamily.getElementNames() For Each sStyle In sStyleNames oStyle = oFamily.getByName(sStyle) sStyleName = oStyle.Name Next Next End Sub Style families are empty ---------------------------------------------------------------- You cannot simply replace SfxStyleSheetBasePool::CreateIterator with creating a SfxStyleSheetIterator. Writer sub-classes SfxStyleSheetBasePool in SwDocStyleSheetPool and overrides this function to return an SwStyleSheetIterator, derived from SfxStyleSheetIterator; and obviously SfxStyleSheetIterator and SwStyleSheetIterator are not exchangeable (without breaking functionality, like in this case). This happens in SwXStyleFamily::getElementNames(), where the pBasePool is likely (== I didn't debug this code) an SwDocStyleSheetPool and the iterator should be a SwStyleSheetIterator, not a SfxStyleSheetIterator. This is why the UNO layer is broken. And it happens in the "Style and Formatting" window, in all the code in sfx2/source/dialog/templdlg.cxx the SfxStyleSheetBasePool is really a SwDocStyleSheetPool when we have a Writer document: in void SfxCommonTemplateDialog_Impl::Update_Impl() - SfxObjectShell is really a SwDocShell - pDocShell->GetStyleSheetPool() will be returning an SwDocStyleSheetPool (SfxStyleSheetBasePool* SwDocShell::GetStyleSheetPool()) - this means SfxStyleSheetBasePool::GetIterator_Impl cannot simply create a SfxStyleSheetIterator, and CreateIterator was there with the idea to return a SwDocStyleSheetPool in this case. -- You are receiving this mail because: You are the assignee for the bug.
