Date: prev next · Thread: first prev next last
2013 Archives by date, by thread · List index


Hi,

I have submitted a patch for review:

    https://gerrit.libreoffice.org/2163

To pull it, you can do:

    git pull ssh://gerrit.libreoffice.org:29418/core refs/changes/63/2163/1

fdo#60738 SwPostItMgr: let the cursor know if we're in annotation mode

This solves the conflicting requirements:

If the annotation has focus ("in annotation mode"), then we want to
be read-only only in case the comment anchor is inside a protected
section, or so. Ignoring the fact that in the main document, the cursor
is right before the annotation anchor, which is a read-only position.

OTOH, if the annotation has no focus and the cursor position is before
the annotation anchor position, then we do want to be read-only.

With this commit, the first case passes around a boolean flag, so the
annotation frame won't be read-only without a reason.

(cherry picked from commit 9104d5e8905c2ec2b576b5ca452d3e23d5555e49)

Conflicts:
        sw/inc/pam.hxx
        sw/source/core/crsr/pam.cxx

Change-Id: I25781a4501f752f7c4d024795d57b884cb800547
---
M sw/inc/crsrsh.hxx
M sw/inc/pam.hxx
M sw/source/core/crsr/crsrsh.cxx
M sw/source/core/crsr/pam.cxx
M sw/source/ui/docvw/PostItMgr.cxx
M sw/source/ui/inc/view.hxx
M sw/source/ui/uiview/view.cxx
M sw/source/ui/uiview/view2.cxx
8 files changed, 21 insertions(+), 10 deletions(-)



diff --git a/sw/inc/crsrsh.hxx b/sw/inc/crsrsh.hxx
index 6d47927..5a061db 100644
--- a/sw/inc/crsrsh.hxx
+++ b/sw/inc/crsrsh.hxx
@@ -476,7 +476,7 @@
 
     // Cursor is placed in something that is protected or selection contains
     // something that is protected.
-    sal_Bool HasReadonlySel() const;
+    sal_Bool HasReadonlySel(bool bAnnotationMode = false) const;
 
     // Can the cursor be set to read only ranges?
     sal_Bool IsReadOnlyAvailable() const { return bSetCrsrInReadOnly; }
diff --git a/sw/inc/pam.hxx b/sw/inc/pam.hxx
index bfe7214..b74f990 100644
--- a/sw/inc/pam.hxx
+++ b/sw/inc/pam.hxx
@@ -287,7 +287,7 @@
 
     /** Is in something protected (readonly) or selection contains
        something protected. */
-    sal_Bool HasReadonlySel( bool bFormView ) const;
+    sal_Bool HasReadonlySel( bool bFormView, bool bAnnotationMode = false ) const;
 
     sal_Bool ContainsPosition(const SwPosition & rPos)
     { return *Start() <= rPos && rPos <= *End(); }
diff --git a/sw/source/core/crsr/crsrsh.cxx b/sw/source/core/crsr/crsrsh.cxx
index 3486a74..379af07 100644
--- a/sw/source/core/crsr/crsrsh.cxx
+++ b/sw/source/core/crsr/crsrsh.cxx
@@ -2888,7 +2888,7 @@
     }
 }
 
-sal_Bool SwCrsrShell::HasReadonlySel() const
+sal_Bool SwCrsrShell::HasReadonlySel(bool bAnnotationMode) const
 {
     sal_Bool bRet = sal_False;
     if( IsReadOnlyAvailable() || GetViewOptions()->IsFormView() )
@@ -2901,7 +2901,7 @@
             const SwPaM* pCrsr = pCurCrsr;
 
             do {
-                if( pCrsr->HasReadonlySel( GetViewOptions()->IsFormView() ) )
+                if( pCrsr->HasReadonlySel( GetViewOptions()->IsFormView(), bAnnotationMode ) )
                     bRet = sal_True;
             } while( !bRet && pCurCrsr != ( pCrsr = (SwPaM*)pCrsr->GetNext() ));
         }
diff --git a/sw/source/core/crsr/pam.cxx b/sw/source/core/crsr/pam.cxx
index e745e80..c36b582 100644
--- a/sw/source/core/crsr/pam.cxx
+++ b/sw/source/core/crsr/pam.cxx
@@ -589,7 +589,7 @@
 }
 
 /// is in protected section or selection surrounds something protected
-sal_Bool SwPaM::HasReadonlySel( bool bFormView ) const
+sal_Bool SwPaM::HasReadonlySel( bool bFormView, bool bAnnotationMode ) const
 {
     sal_Bool bRet = sal_False;
     Point aTmpPt;
@@ -731,8 +731,8 @@
     }
 
     // Don't allow inserting characters between the 'field mark end' and
-    // the 'comment anchor'.
-    if (!bRet)
+    // the 'comment anchor', unless the cursor is inside the annotation.
+    if (!bRet && !bAnnotationMode)
     {
         if (!pA && GetPoint() && GetPoint()->nNode.GetNode().IsTxtNode() && 
GetPoint()->nContent.GetIndex() > 0)
         {
diff --git a/sw/source/ui/docvw/PostItMgr.cxx b/sw/source/ui/docvw/PostItMgr.cxx
index 83b1cc9..3a24565 100644
--- a/sw/source/ui/docvw/PostItMgr.cxx
+++ b/sw/source/ui/docvw/PostItMgr.cxx
@@ -1626,7 +1626,9 @@
         if (mpActivePostIt)
         {
             mpActivePostIt->GotoPos();
+            mpView->SetAnnotationMode(true);
             mpView->AttrChangedNotify(0);
+            mpView->SetAnnotationMode(false);
             mpActivePostIt->ActivatePostIt();
         }
     }
diff --git a/sw/source/ui/inc/view.hxx b/sw/source/ui/inc/view.hxx
index c1be2bb..4df29ac 100644
--- a/sw/source/ui/inc/view.hxx
+++ b/sw/source/ui/inc/view.hxx
@@ -265,7 +265,8 @@
                     bInDtor : 1, //detect destructor to prevent creating of sub shells while 
closing
                     bOldShellWasPagePreView : 1,
                     bIsPreviewDoubleClick : 1, // #i114045#
-                    bMakeSelectionVisible : 1; // transport the bookmark selection
+                    bMakeSelectionVisible : 1, // transport the bookmark selection
+                    m_bAnnotationMode; ///< The real cursor position is inside an annotation.
 
     // methods for searching
     // set search context
@@ -658,6 +659,8 @@
     void SelectShellForDrop();
 
     void UpdateDocStats();
+    /// Where is the real cursor: in the annotation or in the main document?
+    void SetAnnotationMode(bool bMode);
 };
 
 // ----------------- inline Methoden ----------------------
diff --git a/sw/source/ui/uiview/view.cxx b/sw/source/ui/uiview/view.cxx
index df77bd1..d192dd9 100644
--- a/sw/source/ui/uiview/view.cxx
+++ b/sw/source/ui/uiview/view.cxx
@@ -653,7 +653,7 @@
     sal_uInt32 nDisableFlags = 0;
     SfxDispatcher &rDis = GetDispatcher();
 
-    if( pWrtShell->HasReadonlySel() &&
+    if( pWrtShell->HasReadonlySel(m_bAnnotationMode) &&
         ( !pWrtShell->GetDrawView() ||
             !pWrtShell->GetDrawView()->GetMarkedObjectList().GetMarkCount() ))
         nDisableFlags |= SW_DISABLE_ON_PROTECTED_CURSOR;
@@ -747,7 +747,8 @@
     bInMailMerge(sal_False),
     bInDtor(sal_False),
     bOldShellWasPagePreView(sal_False),
-    bIsPreviewDoubleClick(sal_False)
+    bIsPreviewDoubleClick(sal_False),
+    m_bAnnotationMode(false)
 {
     // According to discussion with MBA and further
     // investigations, no old SfxViewShell will be set as parameter <pOldSh>,
diff --git a/sw/source/ui/uiview/view2.cxx b/sw/source/ui/uiview/view2.cxx
index 61b9440..b6a7d10 100644
--- a/sw/source/ui/uiview/view2.cxx
+++ b/sw/source/ui/uiview/view2.cxx
@@ -1210,6 +1210,11 @@
     rBnd.Update( FN_STAT_WORDCOUNT );
 }
 
+void SwView::SetAnnotationMode(bool bMode)
+{
+    m_bAnnotationMode = bMode;
+}
+
 /*--------------------------------------------------------------------
     Beschreibung:   Status der Stauszeile
  --------------------------------------------------------------------*/

-- 
To view, visit https://gerrit.libreoffice.org/2163
To unsubscribe, visit https://gerrit.libreoffice.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I25781a4501f752f7c4d024795d57b884cb800547
Gerrit-PatchSet: 1
Gerrit-Project: core
Gerrit-Branch: libreoffice-4-0
Gerrit-Owner: Miklos Vajna <vmiklos@suse.cz>

Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.