> On March 14, 2013, 7:43 p.m., Albert Astals Cid wrote:
> > core/document.cpp, line 3282
> > <http://git.reviewboard.kde.org/r/107442/diff/6/?file=119425#file119425line3282>
> >
> >     I am wondering why do we need this map for the prev contents, as far as 
> > i can see annotwindow does not modify the annotation anymore, so the 
> > annotation * you get here should have the old values still no?
> 
> Jon Mease wrote:
>     Yes, we could assume that the old contents are still in the annotation 
> but this makes me a little nervous because there's nothing stopping a user of 
> Okular core from modifying the annotation's contents as well which would then 
> break the undo stack.  But we could do it this way and just add API 
> documentation specifying that the annotation's contents should not be 
> updated.  
>     
>     If we do go this route I have a question.  The AnnotationWindow class 
> uses the function GuiUtils::contents rather than Annotation::contents when 
> retrieving the contents of an annotation.  Would the Document class need to 
> use this GuiUtils version as well in order to grab the old contents (rather 
> than Annotation::contents?).  I'm not really clear from the source what 
> conditions the GuiUtils version is handling.  If so we'll need to move this 
> function out of GuiUtils (because of the GUI dependency) and into some other 
> core class.  Let me know if you have a preference of where to move it to.
> 
> Albert Astals Cid wrote:
>     "there's nothing stopping a user of Okular core from modifying the 
> annotation's contents"
>     Sure, there's nothing stopping people from doing int *a = 0; *a = 33; 
> either :D We have to document stuff properly and do the best we can to review 
> new stuff so that it does not break
>     
>     About the second part, yes, it seems we'd need that logic somewhere, as 
> you are already doing some special casing in 
> DocumentPrivate::performSetAnnotationContents, honestly i can't really say 
> what the GuiUtils code does either :D About a name, I guess we could always 
> go with Document::annotationContents(Annotation *);

About the first check in GuiUtils::contents ( m_annot->window().text() ): it is 
correct in principle, because under some circumstances the popup windows's text 
overrides the actual annotation contents. However, such circumstances are 
currently not even detectable outside Poppler (*). Furthermore, Poppler-qt4 
never sets popup windows' text and always returns an empty string. So I say 
let's keep it simple and remove it. We can solve this issue at a lower level in 
Poppler itself in the future.
* = [unimportant detail] this happens if the /Popup annotation has *no* 
optional /Parent field (see PDF 32000-1:2008, table 183)

About the second check: in Poppler, inplaceText is a synonym for contents. It 
used to be a separate thing but now it only exists for source compatibility 
purposes. So I think we can kill it in Okular too and always use 
annotation->contents(). Of course it needs to be done in a backward-compatible 
way (we don't want users losing their saved annotations)

tldr: You can remove TextAnnotation's inplaceText/setInplaceText, ignore all 
conditions listed in GuiUtils::contents, kill GuiUtils::contents and always use 
plain Annotation::contents/setContents :D


- Fabio


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://git.reviewboard.kde.org/r/107442/#review29227
-----------------------------------------------------------


On March 12, 2013, 1:26 a.m., Jon Mease wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> http://git.reviewboard.kde.org/r/107442/
> -----------------------------------------------------------
> 
> (Updated March 12, 2013, 1:26 a.m.)
> 
> 
> Review request for Okular.
> 
> 
> Description
> -------
> 
> This patch adds undo/redo support to Okular annotation manipulation commands.
> 
> Functionality:
> The following actions can be undone and redone: creation and removal of 
> annotations, editing arbitrary annotation properties, relocating annotations 
> with Ctrl+drag, and editing the text contents of an annotation.
> 
> This patch does not include support for undoing and redoing editing actions 
> on forms.
> 
>   
> 
> 
> This addresses bug 177501.
>     http://bugs.kde.org/show_bug.cgi?id=177501
> 
> 
> Diffs
> -----
> 
>   core/annotations.h 72abdff 
>   core/annotations.cpp 49ab5bd 
>   core/annotations_p.h 221572d 
>   core/document.h 6ff6536 
>   core/document.cpp 5ab759e 
>   core/document_p.h fb3aec6 
>   core/page.cpp 1db2763 
>   part.rc 39c1571 
>   ui/annotationpropertiesdialog.cpp 4b02258 
>   ui/annotwindow.h f7df9f6 
>   ui/annotwindow.cpp c1bafb9 
>   ui/pageview.cpp b018dfe 
> 
> Diff: http://git.reviewboard.kde.org/r/107442/diff/
> 
> 
> Testing
> -------
> 
> I have tested the undoing and redoing of the specified annotation actions 
> using .dvi and .pdf documents.
> 
> 
> Thanks,
> 
> Jon Mease
> 
>

_______________________________________________
Okular-devel mailing list
Okular-devel@kde.org
https://mail.kde.org/mailman/listinfo/okular-devel

Reply via email to