[Libreoffice-commits] core.git: sc/inc sc/sdi sc/source sc/uiconfig

Dennis Francis dennisfrancis.in at gmail.com
Mon Oct 24 11:28:05 UTC 2016


 sc/inc/document.hxx                     |    5 ++++-
 sc/inc/sc.hrc                           |    1 +
 sc/inc/sortparam.hxx                    |    1 +
 sc/inc/table.hxx                        |    2 +-
 sc/sdi/scalc.sdi                        |    2 +-
 sc/source/core/data/document.cxx        |    4 ++--
 sc/source/core/data/sortparam.cxx       |    9 ++++++---
 sc/source/core/data/table1.cxx          |    8 +++++++-
 sc/source/ui/dbgui/tpsort.cxx           |    4 ++++
 sc/source/ui/docshell/dbdocfun.cxx      |    3 ++-
 sc/source/ui/inc/tpsort.hxx             |    2 ++
 sc/source/ui/view/cellsh2.cxx           |    5 +++++
 sc/source/ui/view/gridwin.cxx           |    1 +
 sc/uiconfig/scalc/ui/sortoptionspage.ui |   32 +++++++++++++++++++++++---------
 14 files changed, 60 insertions(+), 19 deletions(-)

New commits:
commit 258d039798b9ca4cc95a14d62e30bb725ad2c8ec
Author: Dennis Francis <dennisfrancis.in at gmail.com>
Date:   Fri Oct 7 20:50:43 2016 +0530

    tdf#100517 : Optionally include comment-only columns when sorting
    
    Change-Id: I6b8d4cceda276bef95b28706fb15cb040e07f4c6
    Reviewed-on: https://gerrit.libreoffice.org/29593
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Eike Rathke <erack at redhat.com>
    Tested-by: Eike Rathke <erack at redhat.com>

diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx
index 3a53e66..ed7bdab 100644
--- a/sc/inc/document.hxx
+++ b/sc/inc/document.hxx
@@ -1253,13 +1253,16 @@ public:
                                 If TRUE, do not adjust the top row.
                         @param  bStickyLeftCol
                                 If TRUE, do not adjust the left column.
+                        @param  bConsiderCellNotes
+                                If TRUE, consider the presence of cell notes besides data.
 
                         @returns true if there is any data, false if not.
                      */
     bool            ShrinkToUsedDataArea( bool& o_bShrunk,
                                           SCTAB nTab, SCCOL& rStartCol, SCROW& rStartRow,
                                           SCCOL& rEndCol, SCROW& rEndRow, bool bColumnsOnly,
-                                          bool bStickyTopRow = false, bool bStickyLeftCol = false ) const;
+                                          bool bStickyTopRow = false, bool bStickyLeftCol = false,
+                                          bool bConsiderCellNotes = false ) const;
 
     /**
      * Return the last non-empty row position in given columns that's no
diff --git a/sc/inc/sc.hrc b/sc/inc/sc.hrc
index 31bd7d6..0966da0 100644
--- a/sc/inc/sc.hrc
+++ b/sc/inc/sc.hrc
@@ -687,6 +687,7 @@
 #define SID_SORT_ATTRIBS        (SC_PARAM_START+3)
 #define SID_SORT_USERDEF        (SC_PARAM_START+4)
 #define SID_SORT_NATURALSORT    (SC_PARAM_START+5)
+#define SID_SORT_INCCOMMENTS    (SC_PARAM_START+6)
 
 // Sidebar -------------------------------------------------------------
 
diff --git a/sc/inc/sortparam.hxx b/sc/inc/sortparam.hxx
index 268b14c..3351249 100644
--- a/sc/inc/sortparam.hxx
+++ b/sc/inc/sortparam.hxx
@@ -49,6 +49,7 @@ struct SC_DLLPUBLIC ScSortParam
     bool        bByRow;
     bool        bCaseSens;
     bool        bNaturalSort;
+    bool        bIncludeComments;
     bool        bUserDef;
     bool        bIncludePattern;
     bool        bInplace;
diff --git a/sc/inc/table.hxx b/sc/inc/table.hxx
index e163233..350dcbd 100644
--- a/sc/inc/table.hxx
+++ b/sc/inc/table.hxx
@@ -504,7 +504,7 @@ public:
 
     bool        ShrinkToUsedDataArea( bool& o_bShrunk, SCCOL& rStartCol, SCROW& rStartRow,
                                       SCCOL& rEndCol, SCROW& rEndRow, bool bColumnsOnly,
-                                      bool bStickyTopRow, bool bStickyLeftCol ) const;
+                                      bool bStickyTopRow, bool bStickyLeftCol, bool bConsiderCellNotes=false ) const;
 
     SCROW GetLastDataRow( SCCOL nCol1, SCCOL nCol2, SCROW nLastRow ) const;
 
diff --git a/sc/sdi/scalc.sdi b/sc/sdi/scalc.sdi
index fee950c..aff8050 100644
--- a/sc/sdi/scalc.sdi
+++ b/sc/sdi/scalc.sdi
@@ -1259,7 +1259,7 @@ SfxVoidItem DataSelect SID_DATA_SELECT
 
 
 SfxVoidItem DataSort SID_SORT
-(SfxBoolItem ByRows SID_SORT_BYROW,SfxBoolItem HasHeader SID_SORT_HASHEADER,SfxBoolItem CaseSensitive SID_SORT_CASESENS,SfxBoolItem NaturalSort SID_SORT_NATURALSORT,SfxBoolItem IncludeAttribs SID_SORT_ATTRIBS,SfxUInt16Item UserDefIndex SID_SORT_USERDEF,SfxInt32Item Col1 FN_PARAM_1,SfxBoolItem Ascending1 FN_PARAM_2,SfxInt32Item Col2 FN_PARAM_3,SfxBoolItem Ascending2 FN_PARAM_4,SfxInt32Item Col3 FN_PARAM_5,SfxBoolItem Ascending3 FN_PARAM_6)
+(SfxBoolItem ByRows SID_SORT_BYROW,SfxBoolItem HasHeader SID_SORT_HASHEADER,SfxBoolItem CaseSensitive SID_SORT_CASESENS,SfxBoolItem NaturalSort SID_SORT_NATURALSORT,SfxBoolItem IncludeAttribs SID_SORT_ATTRIBS,SfxUInt16Item UserDefIndex SID_SORT_USERDEF,SfxInt32Item Col1 FN_PARAM_1,SfxBoolItem Ascending1 FN_PARAM_2,SfxInt32Item Col2 FN_PARAM_3,SfxBoolItem Ascending2 FN_PARAM_4,SfxInt32Item Col3 FN_PARAM_5,SfxBoolItem Ascending3 FN_PARAM_6,SfxBoolItem IncludeComments SID_SORT_INCCOMMENTS)
 [
     AutoUpdate = FALSE,
     FastCall = FALSE,
diff --git a/sc/source/core/data/document.cxx b/sc/source/core/data/document.cxx
index de7ee84..c22ac0f 100644
--- a/sc/source/core/data/document.cxx
+++ b/sc/source/core/data/document.cxx
@@ -1093,7 +1093,7 @@ bool ScDocument::ShrinkToDataArea(SCTAB nTab, SCCOL& rStartCol, SCROW& rStartRow
 
 bool ScDocument::ShrinkToUsedDataArea( bool& o_bShrunk, SCTAB nTab, SCCOL& rStartCol,
         SCROW& rStartRow, SCCOL& rEndCol, SCROW& rEndRow, bool bColumnsOnly,
-        bool bStickyTopRow, bool bStickyLeftCol ) const
+        bool bStickyTopRow, bool bStickyLeftCol, bool bConsiderCellNotes ) const
 {
     if (!ValidTab(nTab) || nTab >= static_cast<SCTAB> (maTabs.size()) || !maTabs[nTab])
     {
@@ -1101,7 +1101,7 @@ bool ScDocument::ShrinkToUsedDataArea( bool& o_bShrunk, SCTAB nTab, SCCOL& rStar
         return false;
     }
     return maTabs[nTab]->ShrinkToUsedDataArea( o_bShrunk, rStartCol, rStartRow, rEndCol, rEndRow,
-            bColumnsOnly, bStickyTopRow, bStickyLeftCol);
+            bColumnsOnly, bStickyTopRow, bStickyLeftCol, bConsiderCellNotes );
 }
 
 SCROW ScDocument::GetLastDataRow( SCTAB nTab, SCCOL nCol1, SCCOL nCol2, SCROW nLastRow ) const
diff --git a/sc/source/core/data/sortparam.cxx b/sc/source/core/data/sortparam.cxx
index 0f7c158..38439e5 100644
--- a/sc/source/core/data/sortparam.cxx
+++ b/sc/source/core/data/sortparam.cxx
@@ -35,7 +35,7 @@ ScSortParam::ScSortParam()
 ScSortParam::ScSortParam( const ScSortParam& r ) :
         nCol1(r.nCol1),nRow1(r.nRow1),nCol2(r.nCol2),nRow2(r.nRow2),nUserIndex(r.nUserIndex),
         bHasHeader(r.bHasHeader),bByRow(r.bByRow),bCaseSens(r.bCaseSens),
-        bNaturalSort(r.bNaturalSort),bUserDef(r.bUserDef),
+        bNaturalSort(r.bNaturalSort),bIncludeComments(r.bIncludeComments),bUserDef(r.bUserDef),
         bIncludePattern(r.bIncludePattern),bInplace(r.bInplace),
         nDestTab(r.nDestTab),nDestCol(r.nDestCol),nDestRow(r.nDestRow),
         maKeyState( r.maKeyState ),
@@ -56,6 +56,7 @@ void ScSortParam::Clear()
     nDestTab = 0;
     nUserIndex = 0;
     bHasHeader=bCaseSens=bUserDef=bNaturalSort = false;
+    bIncludeComments = false;
     bByRow=bIncludePattern=bInplace = true;
     aCollatorLocale = css::lang::Locale();
     aCollatorAlgorithm.clear();
@@ -79,6 +80,7 @@ ScSortParam& ScSortParam::operator=( const ScSortParam& r )
     bByRow          = r.bByRow;
     bCaseSens       = r.bCaseSens;
     bNaturalSort    = r.bNaturalSort;
+    bIncludeComments= r.bIncludeComments;
     bUserDef        = r.bUserDef;
     bIncludePattern = r.bIncludePattern;
     bInplace        = r.bInplace;
@@ -122,6 +124,7 @@ bool ScSortParam::operator==( const ScSortParam& rOther ) const
         && (bByRow          == rOther.bByRow)
         && (bCaseSens       == rOther.bCaseSens)
         && (bNaturalSort    == rOther.bNaturalSort)
+        && (bIncludeComments== rOther.bIncludeComments)
         && (bUserDef        == rOther.bUserDef)
         && (nUserIndex      == rOther.nUserIndex)
         && (bIncludePattern == rOther.bIncludePattern)
@@ -150,7 +153,7 @@ bool ScSortParam::operator==( const ScSortParam& rOther ) const
 ScSortParam::ScSortParam( const ScSubTotalParam& rSub, const ScSortParam& rOld ) :
         nCol1(rSub.nCol1),nRow1(rSub.nRow1),nCol2(rSub.nCol2),nRow2(rSub.nRow2),nUserIndex(rSub.nUserIndex),
         bHasHeader(true),bByRow(true),bCaseSens(rSub.bCaseSens),bNaturalSort(rOld.bNaturalSort),
-        bUserDef(rSub.bUserDef),bIncludePattern(rSub.bIncludePattern),
+        bIncludeComments(rOld.bIncludeComments),bUserDef(rSub.bUserDef),bIncludePattern(rSub.bIncludePattern),
         bInplace(true),
         nDestTab(0),nDestCol(0),nDestRow(0),
         aCollatorLocale( rOld.aCollatorLocale ), aCollatorAlgorithm( rOld.aCollatorAlgorithm ),
@@ -193,7 +196,7 @@ ScSortParam::ScSortParam( const ScSubTotalParam& rSub, const ScSortParam& rOld )
 ScSortParam::ScSortParam( const ScQueryParam& rParam, SCCOL nCol ) :
         nCol1(nCol),nRow1(rParam.nRow1),nCol2(nCol),nRow2(rParam.nRow2),nUserIndex(0),
         bHasHeader(rParam.bHasHeader),bByRow(true),bCaseSens(rParam.bCaseSens),
-        bNaturalSort(false),
+        bNaturalSort(false),bIncludeComments(false),
 //TODO: what about Locale and Algorithm?
         bUserDef(false),bIncludePattern(false),
         bInplace(true),
diff --git a/sc/source/core/data/table1.cxx b/sc/source/core/data/table1.cxx
index 8f34af0..7d3d94a 100644
--- a/sc/source/core/data/table1.cxx
+++ b/sc/source/core/data/table1.cxx
@@ -924,7 +924,8 @@ void ScTable::GetDataArea( SCCOL& rStartCol, SCROW& rStartRow, SCCOL& rEndCol, S
 }
 
 bool ScTable::ShrinkToUsedDataArea( bool& o_bShrunk, SCCOL& rStartCol, SCROW& rStartRow,
-        SCCOL& rEndCol, SCROW& rEndRow, bool bColumnsOnly, bool bStickyTopRow, bool bStickyLeftCol ) const
+        SCCOL& rEndCol, SCROW& rEndRow, bool bColumnsOnly, bool bStickyTopRow, bool bStickyLeftCol,
+        bool bConsiderCellNotes ) const
 {
     o_bShrunk = false;
 
@@ -955,6 +956,8 @@ bool ScTable::ShrinkToUsedDataArea( bool& o_bShrunk, SCCOL& rStartCol, SCROW& rS
     {
         if (aCol[rEndCol].IsEmptyBlock( rStartRow, rEndRow))
         {
+            if (bConsiderCellNotes && !aCol[rEndCol].IsNotesEmptyBlock( rStartRow, rEndRow ))
+                break;
             --rEndCol;
             o_bShrunk = true;
         }
@@ -968,6 +971,9 @@ bool ScTable::ShrinkToUsedDataArea( bool& o_bShrunk, SCCOL& rStartCol, SCROW& rS
         {
             if (aCol[rStartCol].IsEmptyBlock( rStartRow, rEndRow))
             {
+                if (bConsiderCellNotes && !aCol[rStartCol].IsNotesEmptyBlock( rStartRow, rEndRow ))
+                    break;
+
                 ++rStartCol;
                 o_bShrunk = true;
             }
diff --git a/sc/source/ui/dbgui/tpsort.cxx b/sc/source/ui/dbgui/tpsort.cxx
index 147a35e..4908858 100644
--- a/sc/source/ui/dbgui/tpsort.cxx
+++ b/sc/source/ui/dbgui/tpsort.cxx
@@ -503,6 +503,7 @@ ScTabPageSortOptions::ScTabPageSortOptions( vcl::Window*             pParent,
     get(m_pBtnHeader, "header");
     get(m_pBtnFormats, "formats");
     get(m_pBtnNaturalSort, "naturalsort");
+    get(m_pBtnIncComments, "includenotes");
     get(m_pBtnCopyResult, "copyresult");
     get(m_pLbOutPos, "outarealb");
     get(m_pEdOutPos, "outareaed");
@@ -535,6 +536,7 @@ void ScTabPageSortOptions::dispose()
     m_pBtnHeader.clear();
     m_pBtnFormats.clear();
     m_pBtnNaturalSort.clear();
+    m_pBtnIncComments.clear();
     m_pBtnCopyResult.clear();
     m_pLbOutPos.clear();
     m_pEdOutPos.clear();
@@ -656,6 +658,7 @@ void ScTabPageSortOptions::Reset( const SfxItemSet* /* rArgSet */ )
     m_pBtnFormats->Check       ( aSortData.bIncludePattern );
     m_pBtnHeader->Check        ( aSortData.bHasHeader );
     m_pBtnNaturalSort->Check   ( aSortData.bNaturalSort );
+    m_pBtnIncComments->Check   ( aSortData.bIncludeComments );
 
     if ( aSortData.bByRow )
     {
@@ -720,6 +723,7 @@ bool ScTabPageSortOptions::FillItemSet( SfxItemSet* rArgSet )
     aNewSortData.bHasHeader      = m_pBtnHeader->IsChecked();
     aNewSortData.bCaseSens       = m_pBtnCase->IsChecked();
     aNewSortData.bNaturalSort    = m_pBtnNaturalSort->IsChecked();
+    aNewSortData.bIncludeComments= m_pBtnIncComments->IsChecked();
     aNewSortData.bIncludePattern = m_pBtnFormats->IsChecked();
     aNewSortData.bInplace        = !m_pBtnCopyResult->IsChecked();
     aNewSortData.nDestCol        = theOutPos.Col();
diff --git a/sc/source/ui/docshell/dbdocfun.cxx b/sc/source/ui/docshell/dbdocfun.cxx
index 73d5840..f33efe8 100644
--- a/sc/source/ui/docshell/dbdocfun.cxx
+++ b/sc/source/ui/docshell/dbdocfun.cxx
@@ -513,7 +513,8 @@ bool ScDBDocFunc::Sort( SCTAB nTab, const ScSortParam& rSortParam,
     // so empty leading cells will be sorted to the end.
     bool bShrunk = false;
     rDoc.ShrinkToUsedDataArea( bShrunk, nTab, aLocalParam.nCol1, aLocalParam.nRow1,
-            aLocalParam.nCol2, aLocalParam.nRow2, false, aLocalParam.bByRow, !aLocalParam.bByRow);
+            aLocalParam.nCol2, aLocalParam.nRow2, false, aLocalParam.bByRow, !aLocalParam.bByRow,
+            aLocalParam.bIncludeComments );
 
     SCROW nStartRow = aLocalParam.nRow1;
     if (aLocalParam.bByRow && aLocalParam.bHasHeader && nStartRow < aLocalParam.nRow2)
diff --git a/sc/source/ui/inc/tpsort.hxx b/sc/source/ui/inc/tpsort.hxx
index ca323dd..87cd6eb 100644
--- a/sc/source/ui/inc/tpsort.hxx
+++ b/sc/source/ui/inc/tpsort.hxx
@@ -142,6 +142,8 @@ private:
     VclPtr<RadioButton>        m_pBtnTopDown;
     VclPtr<RadioButton>        m_pBtnLeftRight;
 
+    VclPtr<CheckBox>           m_pBtnIncComments;
+
     OUString            aStrRowLabel;
     OUString            aStrColLabel;
     OUString            aStrUndefined;
diff --git a/sc/source/ui/view/cellsh2.cxx b/sc/source/ui/view/cellsh2.cxx
index 67ffe2b..9f65339 100644
--- a/sc/source/ui/view/cellsh2.cxx
+++ b/sc/source/ui/view/cellsh2.cxx
@@ -379,6 +379,7 @@ void ScCellShell::ExecuteDB( SfxRequest& rReq )
                     aSortParam.bByRow           = true;
                     aSortParam.bCaseSens        = false;
                     aSortParam.bNaturalSort     = false;
+                    aSortParam.bIncludeComments = false;
                     aSortParam.bIncludePattern  = true;
                     aSortParam.bInplace         = true;
                     aSortParam.maKeyState[0].bDoSort = true;
@@ -432,6 +433,8 @@ void ScCellShell::ExecuteDB( SfxRequest& rReq )
                             aSortParam.bCaseSens = static_cast<const SfxBoolItem*>(pItem)->GetValue();
                         if ( pArgs->GetItemState( SID_SORT_NATURALSORT, true, &pItem ) == SfxItemState::SET )
                             aSortParam.bNaturalSort = static_cast<const SfxBoolItem*>(pItem)->GetValue();
+                        if ( pArgs->GetItemState( SID_SORT_INCCOMMENTS, true, &pItem ) == SfxItemState::SET )
+                            aSortParam.bIncludeComments = static_cast<const SfxBoolItem*>(pItem)->GetValue();
                         if ( pArgs->GetItemState( SID_SORT_ATTRIBS, true, &pItem ) == SfxItemState::SET )
                             aSortParam.bIncludePattern = static_cast<const SfxBoolItem*>(pItem)->GetValue();
                         if ( pArgs->GetItemState( SID_SORT_USERDEF, true, &pItem ) == SfxItemState::SET )
@@ -516,6 +519,8 @@ void ScCellShell::ExecuteDB( SfxRequest& rReq )
                                     rOutParam.bCaseSens ) );
                                 rReq.AppendItem( SfxBoolItem( SID_SORT_NATURALSORT,
                                             rOutParam.bNaturalSort ) );
+                                rReq.AppendItem( SfxBoolItem( SID_SORT_INCCOMMENTS,
+                                            rOutParam.bIncludeComments ) );
                                 rReq.AppendItem( SfxBoolItem( SID_SORT_ATTRIBS,
                                     rOutParam.bIncludePattern ) );
                                 sal_uInt16 nUser = rOutParam.bUserDef ? ( rOutParam.nUserIndex + 1 ) : 0;
diff --git a/sc/source/ui/view/gridwin.cxx b/sc/source/ui/view/gridwin.cxx
index 96b4033..e18f5b1 100644
--- a/sc/source/ui/view/gridwin.cxx
+++ b/sc/source/ui/view/gridwin.cxx
@@ -795,6 +795,7 @@ void ScGridWindow::UpdateAutoFilterFromMenu(AutoFilterMode eMode)
             aSortParam.bByRow = true;
             aSortParam.bCaseSens = false;
             aSortParam.bNaturalSort = false;
+            aSortParam.bIncludeComments = false;
             aSortParam.bIncludePattern = true;
             aSortParam.bInplace = true;
             aSortParam.maKeyState[0].bDoSort = true;
diff --git a/sc/uiconfig/scalc/ui/sortoptionspage.ui b/sc/uiconfig/scalc/ui/sortoptionspage.ui
index 88873be..6a1a157 100644
--- a/sc/uiconfig/scalc/ui/sortoptionspage.ui
+++ b/sc/uiconfig/scalc/ui/sortoptionspage.ui
@@ -85,6 +85,20 @@
                   </packing>
                 </child>
                 <child>
+                  <object class="GtkCheckButton" id="includenotes">
+                    <property name="label" translatable="yes">Include comments-only boundary column(s)</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">False</property>
+                    <property name="xalign">0</property>
+                    <property name="draw_indicator">True</property>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">4</property>
+                  </packing>
+                </child>
+                <child>
                   <object class="GtkCheckButton" id="copyresult">
                     <property name="label" translatable="yes">Copy sort results to:</property>
                     <property name="visible">True</property>
@@ -98,7 +112,7 @@
                   </object>
                   <packing>
                     <property name="left_attach">0</property>
-                    <property name="top_attach">4</property>
+                    <property name="top_attach">5</property>
                   </packing>
                 </child>
                 <child>
@@ -118,7 +132,7 @@
                   </object>
                   <packing>
                     <property name="left_attach">0</property>
-                    <property name="top_attach">5</property>
+                    <property name="top_attach">6</property>
                   </packing>
                 </child>
                 <child>
@@ -138,7 +152,7 @@
                   </object>
                   <packing>
                     <property name="left_attach">1</property>
-                    <property name="top_attach">5</property>
+                    <property name="top_attach">6</property>
                   </packing>
                 </child>
                 <child>
@@ -155,7 +169,7 @@
                   </object>
                   <packing>
                     <property name="left_attach">0</property>
-                    <property name="top_attach">6</property>
+                    <property name="top_attach">7</property>
                   </packing>
                 </child>
                 <child>
@@ -175,7 +189,7 @@
                   </object>
                   <packing>
                     <property name="left_attach">0</property>
-                    <property name="top_attach">7</property>
+                    <property name="top_attach">8</property>
                     <property name="width">2</property>
                   </packing>
                 </child>
@@ -190,7 +204,7 @@
                   </object>
                   <packing>
                     <property name="left_attach">0</property>
-                    <property name="top_attach">8</property>
+                    <property name="top_attach">9</property>
                   </packing>
                 </child>
                 <child>
@@ -204,7 +218,7 @@
                   </object>
                   <packing>
                     <property name="left_attach">1</property>
-                    <property name="top_attach">8</property>
+                    <property name="top_attach">9</property>
                   </packing>
                 </child>
                 <child>
@@ -214,7 +228,7 @@
                   </object>
                   <packing>
                     <property name="left_attach">0</property>
-                    <property name="top_attach">9</property>
+                    <property name="top_attach">10</property>
                   </packing>
                 </child>
                 <child>
@@ -224,7 +238,7 @@
                   </object>
                   <packing>
                     <property name="left_attach">1</property>
-                    <property name="top_attach">9</property>
+                    <property name="top_attach">10</property>
                   </packing>
                 </child>
                 <child>


More information about the Libreoffice-commits mailing list