[Libreoffice-commits] core.git: 2 commits - helpcontent2 include/sfx2 officecfg/registry sfx2/source sw/inc sw/source

Johnny_M (via logerrit) logerrit at kemper.freedesktop.org
Mon Apr 12 08:45:32 UTC 2021


 helpcontent2                                                   |    2 
 include/sfx2/strings.hrc                                       |    2 
 include/sfx2/viewfrm.hxx                                       |    1 
 officecfg/registry/schema/org/openoffice/Office/UI/Infobar.xcs |    6 
 sfx2/source/dialog/infobar.cxx                                 |    2 
 sfx2/source/view/viewfrm.cxx                                   |  109 ++++++----
 sw/inc/strings.hrc                                             |    4 
 sw/source/uibase/uiview/viewstat.cxx                           |   29 ++
 8 files changed, 112 insertions(+), 43 deletions(-)

New commits:
commit f4bdd40d0d92fd1305e7a6931a02e3ea43e0030e
Author:     Johnny_M <klasse at partyheld.de>
AuthorDate: Mon Apr 12 10:44:57 2021 +0200
Commit:     Gerrit Code Review <gerrit at gerrit.libreoffice.org>
CommitDate: Mon Apr 12 10:44:57 2021 +0200

    Update git submodules
    
    * Update helpcontent2 from branch 'master'
      to 50827fc77d659c80f335576e7af189ab81477b44
      - tdf#132643 Translate German section IDs
    
        Change-Id: Ib9b6773d5df73aeb861d924941b12f606e2e0156
        Reviewed-on: https://gerrit.libreoffice.org/c/help/+/113916
        Tested-by: Jenkins
        Reviewed-by: Olivier Hallot <olivier.hallot at libreoffice.org>

diff --git a/helpcontent2 b/helpcontent2
index 43af3c00658c..50827fc77d65 160000
--- a/helpcontent2
+++ b/helpcontent2
@@ -1 +1 @@
-Subproject commit 43af3c00658cb8495d9a5899a5e46d55d32d0214
+Subproject commit 50827fc77d659c80f335576e7af189ab81477b44
commit d89786054715b44aa983d0752484216825c74ae2
Author:     László Németh <nemeth at numbertext.org>
AuthorDate: Thu Apr 8 10:20:02 2021 +0200
Commit:     László Németh <nemeth at numbertext.org>
CommitDate: Mon Apr 12 10:44:49 2021 +0200

    tdf#125909 tdf#141298 sw: show (Hidden) Track Changes infobar
    
    instead of enabling Track Changes toolbar automatically,
    when there are hidden track changes data or settings in
    the document, i.e. Track Changes toolbar and Show Changes
    are disabled, but
    
    – the document contains (not visible) recorded changes, or
    
    – Record Track Changes is enabled (which will result hidden
      recording, e.g. unintended publishing of the deletions of
      the document); or
    
    – both of them.
    
    Messages of the infobar show these cases.
    
    Button of the Track Changes infobar allows to show/hide the
    Track Changes toolbar. Hiding the Track Changes toolbar with
    button of the Track Changes infobar closes the infobar, too.
    
    Regression from commit afbbfb3b55beb937555a972d9edbb47ede91001a
    "tdf#83958: sw: enable Track Changes toolbar automatically" and
    commit 1989201c56c03b1ef13a282cfd09af69620040ea
    "tdf#138870 sw: fix Track Changes toolbar reappearing".
    
    Change-Id: I9162102d63d671b412fa0228e6bbfb5c356ee03e
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/113792
    Tested-by: Jenkins
    Reviewed-by: László Németh <nemeth at numbertext.org>

diff --git a/include/sfx2/strings.hrc b/include/sfx2/strings.hrc
index 14e1066447ba..c5d3c003e313 100644
--- a/include/sfx2/strings.hrc
+++ b/include/sfx2/strings.hrc
@@ -292,6 +292,8 @@
 #define STR_SIGNATURE_NOTVALIDATED_PARTIAL_OK   NC_("STR_SIGNATURE_NOTVALIDATED_PARTIAL_OK", "The certificate could not be validated and the document is only partially signed.")
 #define STR_SIGNATURE_OK                        NC_("STR_SIGNATURE_OK", "This document is digitally signed and the signature is valid.")
 #define STR_SIGNATURE_SHOW                      NC_("STR_SIGNATURE_SHOW", "Show Signatures")
+#define STR_TRACK_CHANGES_BUTTON                NC_("STR_TRACK_CHANGES_BUTTON", "Show Toolbar")
+#define STR_TRACK_CHANGES_BUTTON_HIDE           NC_("STR_TRACK_CHANGES_BUTTON_HIDE", "Hide Toolbar")
 
 #define STR_CLOSE_PANE                          NC_("STR_CLOSE_PANE", "Close Pane")
 
diff --git a/include/sfx2/viewfrm.hxx b/include/sfx2/viewfrm.hxx
index 7692636fd24c..c01da176b847 100644
--- a/include/sfx2/viewfrm.hxx
+++ b/include/sfx2/viewfrm.hxx
@@ -67,6 +67,7 @@ protected:
     DECL_LINK(WhatsNewHandler, weld::Button&, void);
     DECL_LINK(SwitchReadOnlyHandler, weld::Button&, void);
     DECL_LINK(SignDocumentHandler, weld::Button&, void);
+    DECL_LINK(HiddenTrackChangesHandler, weld::Button&, void);
     SAL_DLLPRIVATE void KillDispatcher_Impl();
 
     virtual                 ~SfxViewFrame() override;
diff --git a/officecfg/registry/schema/org/openoffice/Office/UI/Infobar.xcs b/officecfg/registry/schema/org/openoffice/Office/UI/Infobar.xcs
index a7f996dc4ed8..6b29f0b47e6a 100644
--- a/officecfg/registry/schema/org/openoffice/Office/UI/Infobar.xcs
+++ b/officecfg/registry/schema/org/openoffice/Office/UI/Infobar.xcs
@@ -54,6 +54,12 @@
         </info>
         <value>true</value>
       </prop>
+      <prop oor:name="HiddenTrackChanges" oor:type="xs:boolean" oor:nillable="false">
+        <info>
+          <desc>Whether an Infobar is shown when hidden Track Changes settings or data are there in a document</desc>
+        </info>
+        <value>true</value>
+      </prop>
     </group>
   </component>
 </oor:component-schema>
diff --git a/sfx2/source/dialog/infobar.cxx b/sfx2/source/dialog/infobar.cxx
index 4844e8eb88df..3af15ee3f62c 100644
--- a/sfx2/source/dialog/infobar.cxx
+++ b/sfx2/source/dialog/infobar.cxx
@@ -434,6 +434,8 @@ bool SfxInfoBarContainerWindow::isInfobarEnabled(std::u16string_view sId)
         return officecfg::Office::UI::Infobar::Enabled::HyphenationMissing::get();
     if (sId == u"whatsnew")
         return officecfg::Office::UI::Infobar::Enabled::WhatsNew::get();
+    if (sId == u"hiddentrackchanges")
+        return officecfg::Office::UI::Infobar::Enabled::HiddenTrackChanges::get();
 
     return true;
 }
diff --git a/sfx2/source/view/viewfrm.cxx b/sfx2/source/view/viewfrm.cxx
index 596d8ab3d9fb..09c54757986d 100644
--- a/sfx2/source/view/viewfrm.cxx
+++ b/sfx2/source/view/viewfrm.cxx
@@ -133,6 +133,8 @@ using ::com::sun::star::container::XIndexContainer;
 #define ShellClass_SfxViewFrame
 #include <sfxslots.hxx>
 
+#define CHANGES_STR "private:resource/toolbar/changes"
+
 SFX_IMPL_SUPERCLASS_INTERFACE(SfxViewFrame,SfxShell)
 
 void SfxViewFrame::InitInterface_Impl()
@@ -1280,6 +1282,28 @@ void SfxViewFrame::AppendReadOnlyInfobar()
     }
 }
 
+namespace
+{
+css::uno::Reference<css::frame::XLayoutManager> getLayoutManager(const SfxFrame& rFrame)
+{
+    css::uno::Reference<css::frame::XLayoutManager> xLayoutManager;
+    css::uno::Reference<css::beans::XPropertySet> xPropSet(rFrame.GetFrameInterface(),
+                                                 uno::UNO_QUERY);
+    if (xPropSet.is())
+    {
+        try
+        {
+            xLayoutManager.set(xPropSet->getPropertyValue("LayoutManager"), uno::UNO_QUERY);
+        }
+        catch (const Exception& e)
+        {
+            SAL_WARN("sfx.view", "Failure getting layout manager: " + e.Message);
+        }
+    }
+    return xLayoutManager;
+}
+}
+
 void SfxViewFrame::Notify( SfxBroadcaster& /*rBC*/, const SfxHint& rHint )
 {
     if(m_pImpl->bIsDowning)
@@ -1437,9 +1461,34 @@ void SfxViewFrame::Notify( SfxBroadcaster& /*rBC*/, const SfxHint& rHint )
                 while (!aPendingInfobars.empty())
                 {
                     InfobarData& aInfobarData = aPendingInfobars.back();
-                    AppendInfoBar(aInfobarData.msId, aInfobarData.msPrimaryMessage,
+
+                    // don't show Track Changes infobar, if Track Changes toolbar is visible
+                    if (aInfobarData.msId == "hiddentrackchanges")
+                    {
+                        if (auto xLayoutManager = getLayoutManager(GetFrame()))
+                        {
+                            if ( xLayoutManager->getElement(CHANGES_STR).is() )
+                            {
+                                aPendingInfobars.pop_back();
+                                continue;
+                            }
+                        }
+                    }
+
+                    VclPtr<SfxInfoBarWindow> pInfoBar =
+                        AppendInfoBar(aInfobarData.msId, aInfobarData.msPrimaryMessage,
                                   aInfobarData.msSecondaryMessage, aInfobarData.maInfobarType,
                                   aInfobarData.mbShowCloseButton);
+
+                    // Track Changes infobar: add a button to show/hide Track Changes functions
+                    if ( pInfoBar && aInfobarData.msId == "hiddentrackchanges" )
+                    {
+                        weld::Button& rTrackChangesButton = pInfoBar->addButton();
+                        rTrackChangesButton.set_label(SfxResId(STR_TRACK_CHANGES_BUTTON));
+                        rTrackChangesButton.connect_clicked(LINK(this,
+                                                    SfxViewFrame, HiddenTrackChangesHandler));
+                    }
+
                     aPendingInfobars.pop_back();
                 }
 
@@ -1559,6 +1608,27 @@ IMPL_LINK_NOARG(SfxViewFrame, SignDocumentHandler, weld::Button&, void)
     GetDispatcher()->Execute(SID_SIGNATURE);
 }
 
+IMPL_LINK(SfxViewFrame, HiddenTrackChangesHandler, weld::Button&, rButton, void)
+{
+    // enable Track Changes toolbar, if it is disabled.
+    // Otherwise disable the toolbar, and close the infobar
+    if (auto xLayoutManager = getLayoutManager(GetFrame()))
+    {
+        if (!xLayoutManager->getElement(CHANGES_STR).is())
+        {
+            xLayoutManager->createElement(CHANGES_STR);
+            xLayoutManager->showElement(CHANGES_STR);
+            rButton.set_label(SfxResId(STR_TRACK_CHANGES_BUTTON_HIDE));
+        }
+        else
+        {
+            xLayoutManager->hideElement(CHANGES_STR);
+            xLayoutManager->destroyElement(CHANGES_STR);
+            RemoveInfoBar(u"hiddentrackchanges");
+        }
+    }
+}
+
 void SfxViewFrame::Construct_Impl( SfxObjectShell *pObjSh )
 {
     m_pImpl->bResizeInToOut = true;
@@ -2876,24 +2946,7 @@ void SfxViewFrame::MiscExec_Impl( SfxRequest& rReq )
 
         case SID_TOGGLESTATUSBAR:
         {
-            css::uno::Reference< css::frame::XFrame > xFrame =
-                    GetFrame().GetFrameInterface();
-
-            Reference< css::beans::XPropertySet > xPropSet( xFrame, UNO_QUERY );
-            Reference< css::frame::XLayoutManager > xLayoutManager;
-            if ( xPropSet.is() )
-            {
-                try
-                {
-                    Any aValue = xPropSet->getPropertyValue("LayoutManager");
-                    aValue >>= xLayoutManager;
-                }
-                catch ( Exception& )
-                {
-                }
-            }
-
-            if ( xLayoutManager.is() )
+            if ( auto xLayoutManager = getLayoutManager(GetFrame()) )
             {
                 static const OUStringLiteral aStatusbarResString( u"private:resource/statusbar/statusbar" );
                 // Evaluate parameter.
@@ -2929,23 +2982,7 @@ void SfxViewFrame::MiscExec_Impl( SfxRequest& rReq )
                 WorkWindow* pWork = static_cast<WorkWindow*>( pTop->GetFrame().GetTopWindow_Impl() );
                 if ( pWork )
                 {
-                    css::uno::Reference< css::frame::XFrame > xFrame =
-                            GetFrame().GetFrameInterface();
-
-                    Reference< css::beans::XPropertySet > xPropSet( xFrame, UNO_QUERY );
-                    Reference< css::frame::XLayoutManager > xLayoutManager;
-                    if ( xPropSet.is() )
-                    {
-                        try
-                        {
-                            Any aValue = xPropSet->getPropertyValue("LayoutManager");
-                            aValue >>= xLayoutManager;
-                        }
-                        catch ( Exception& )
-                        {
-                        }
-                    }
-
+                    Reference< css::frame::XLayoutManager > xLayoutManager = getLayoutManager(GetFrame());
                     bool bNewFullScreenMode = pItem ? pItem->GetValue() : !pWork->IsFullScreenMode();
                     if ( bNewFullScreenMode != pWork->IsFullScreenMode() )
                     {
diff --git a/sw/inc/strings.hrc b/sw/inc/strings.hrc
index b4017a06cc80..bb1c568a09bb 100644
--- a/sw/inc/strings.hrc
+++ b/sw/inc/strings.hrc
@@ -404,6 +404,10 @@
 #define STR_HYPH_TITLE                          NC_("STR_HYPH_TITLE", "Hyphenation")
 #define STR_HYPH_MISSING                        NC_("STR_HYPH_MISSING", "Missing hyphenation data")
 #define STR_HYPH_MISSING_DETAIL                 NC_("STR_HYPH_MISSING", "Please install the hyphenation package for locale “%1”.")
+#define STR_HIDDEN_CHANGES                      NC_("STR_HIDDEN_CHANGES", "Track Changes")
+#define STR_HIDDEN_CHANGES_DETAIL               NC_("STR_HIDDEN_CHANGES_DETAIL", "Document contains tracked changes and recording is enabled.")
+#define STR_HIDDEN_CHANGES_DETAIL2              NC_("STR_HIDDEN_CHANGES_DETAIL2", "Recording of changes is enabled.")
+#define STR_HIDDEN_CHANGES_DETAIL3              NC_("STR_HIDDEN_CHANGES_DETAIL3", "Document contains tracked changes.")
 
 // Undo
 #define STR_CANT_UNDO                           NC_("STR_CANT_UNDO", "not possible")
diff --git a/sw/source/uibase/uiview/viewstat.cxx b/sw/source/uibase/uiview/viewstat.cxx
index 30c18bdc0180..06b740042bb0 100644
--- a/sw/source/uibase/uiview/viewstat.cxx
+++ b/sw/source/uibase/uiview/viewstat.cxx
@@ -49,6 +49,9 @@
 #include <redline.hxx>
 #include <rootfrm.hxx>
 #include <docary.hxx>
+#include <sfx2/infobar.hxx>
+#include <docsh.hxx>
+#include <strings.hrc>
 
 #include <cmdid.h>
 #include <IDocumentRedlineAccess.hxx>
@@ -324,13 +327,27 @@ void SwView::GetState(SfxItemSet &rSet)
             break;
             case FN_REDLINE_ON:
                 rSet.Put( SfxBoolItem( nWhich, GetDocShell()->IsChangeRecording() ) );
-                // switch on the disabled Tracked Changes toolbar if the view is
-                // new (e.g. on load), and if recording of changes is enabled
-                // or if it contains tracked changes.
-                if ( m_bForceChangesToolbar && ( GetDocShell()->IsChangeRecording() ||
-                    m_pWrtShell->GetDoc()->getIDocumentRedlineAccess().GetRedlineTable().size() ) )
+                // When the view is new (e.g. on load), show the Hidden Track Changes infobar
+                // if Show Changes is disabled, but recording of changes is enabled
+                // or hidden tracked changes are there already in the document.
+                // Note: the infobar won't be shown, if the Track Changes toolbar is already
+                // enabled, see in sfx2.
+                if ( m_bForceChangesToolbar && m_pWrtShell->GetLayout()->IsHideRedlines() )
                 {
-                    ShowUIElement("private:resource/toolbar/changes");
+                    bool isRecording = GetDocShell()->IsChangeRecording();
+                    bool hasRecorded =
+                        m_pWrtShell->GetDoc()->getIDocumentRedlineAccess().GetRedlineTable().size();
+                    if ( isRecording || hasRecorded )
+                    {
+                        GetDocShell()->AppendInfoBarWhenReady(
+                            "hiddentrackchanges", SwResId(STR_HIDDEN_CHANGES),
+                            SwResId( (isRecording && hasRecorded)
+                                    ? STR_HIDDEN_CHANGES_DETAIL
+                                    : isRecording
+                                        ? STR_HIDDEN_CHANGES_DETAIL2
+                                        : STR_HIDDEN_CHANGES_DETAIL3 ),
+                            InfobarType::INFO);
+                    }
                 }
                 m_bForceChangesToolbar = false;
             break;


More information about the Libreoffice-commits mailing list