In KoTextDocumentLayout::documentChanged update only following pages (fixes loop)

C. Boemann cbo at boemann.dk
Sun May 15 20:52:07 BST 2011


On Sunday 15 May 2011 21:36:48 Sebastian Sauer wrote:
> Hi,
> 
> please see following patch for libs/textlayout/KoTextDocumentLayout.cpp to
> prevent doing full relayouts just cause we update the page-variable.
> 
> This fixes the infinite loop with the
> http://www.zagge.de/anchor/110407/wiki.services.openoffice.org%252Fw%252Fim
> ages%252F9%252F91%252F%25305%25308IG3- SlidesNotesHandouts.odt
> http://www.zagge.de/anchor/110407/wiki.services.openoffice.org%252Fw%252Fim
> ages%252Fe%252Fe6%252F%25303%25304CG- ChartsAndGraphs.odt
> 
> Ok to commit (will remove the #if 0-part + add dox before)?
> 
> diff --git a/libs/textlayout/KoTextDocumentLayout.cpp
> b/libs/textlayout/KoTextDocumentLayout.cpp
> index 71f7b91..0a5ec61 100644
> --- a/libs/textlayout/KoTextDocumentLayout.cpp
> +++ b/libs/textlayout/KoTextDocumentLayout.cpp
> @@ -245,12 +245,21 @@ void KoTextDocumentLayout::documentChanged(int
> position, int charsRemoved, int c
>          from = block.position() + block.length();
>      }
> 
> +#if 0
>  //TODO FIXME make corresponding root area as dirty and then do layout
>  // right now we are just marking all as dirty
>      foreach (KoTextLayoutRootArea *rootArea, d->rootAreaList) {
>          if (!rootArea->isDirty())
>              rootArea->setDirty();
>      }
> +#else
> +    KoTextLayoutRootArea *area = rootAreaForPosition(position);
> +    if (!area)
> +        return;
> +    for(int i = qMax(0, d->rootAreaList.indexOf(area)); i < d-
> 
> >rootAreaList.count(); ++i)
> 
> +        d->rootAreaList[i]->setDirty();
> +#endif
> +
>      emitLayoutIsDirty();
>  }
> 
> _______________________________________________
> calligra-devel mailing list
> calligra-devel at kde.org
> https://mail.kde.org/mailman/listinfo/calligra-devel
i think it's should be

qMax(0, d->rootAreaList.indexOf(area) - 1)

as a change on one page might allow it to fit on the previous page

it should also be possible to calc something similar for the last page to loop



More information about the calligra-devel mailing list