sw/qa/uitest/writer_tests/trackedChanges.py |   29 ++++++++++++++++++++++++++++
 sw/source/uibase/misc/redlndlg.cxx          |   27 ++++++++++++++++++++++++++
 2 files changed, 56 insertions(+)

New commits:
commit a21ef822f9769ded6ff834dbfa347cf0e5f913fd
Author:     László Németh <nem...@numbertext.org>
AuthorDate: Thu Apr 7 17:58:06 2022 +0200
Commit:     László Németh <nem...@numbertext.org>
CommitDate: Fri Apr 8 12:00:10 2022 +0200

    tdf#147179 sw: select tracked row change in Manage Changes
    
    In Manage Changes dialog window, selecting items
    of list of changes results selection of the associated
    text changes in the main text, as a visual feedback.
    From commit eebe4747d2d13545004937bb0267ccfc8ab9d63f,
    text changes of deleted/inserted rows or tables are
    listed under a single "tracked row" list item, as its
    children. Selecting a "tracked row" list item in
    Manage Changes resulted incomplete text selection in
    the main text: only the first text change in the first
    cell was selected instead of all associated text changes
    of tracked row(s) or table.
    
    Note: Manage Changes supports multiple selections,
    i.e. it's possible to select multiple list items by
    Ctrl + click, and select ranges by Shift + click.
    This commit does the same with redlines of tracked
    row changes.
    
    Follow-up to commit eebe4747d2d13545004937bb0267ccfc8ab9d63f
    "tdf#144270 sw: manage tracked table (row) deletion/insertion".
    
    Change-Id: If7b12e8d3c0e437495e1fcae0e8f04e34301c516
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132685
    Tested-by: Jenkins
    Reviewed-by: László Németh <nem...@numbertext.org>

diff --git a/sw/qa/uitest/writer_tests/trackedChanges.py 
b/sw/qa/uitest/writer_tests/trackedChanges.py
index c04034e7149b..0d13ddcdff8d 100644
--- a/sw/qa/uitest/writer_tests/trackedChanges.py
+++ b/sw/qa/uitest/writer_tests/trackedChanges.py
@@ -353,4 +353,33 @@ class trackedchanges(UITestCase):
                 # This was False (missing comment)
                 self.assertEqual(True, 
get_state_as_dict(xChild)["Text"].endswith('\tComment added'))
 
+    def test_tdf147179(self):
+        with 
self.ui_test.load_file(get_url_for_data_file("TC-table-del-add.docx")) as 
document:
+            xWriterDoc = self.xUITest.getTopFocusWindow()
+            xWriterEdit = xWriterDoc.getChild("writer_edit")
+
+            tables = document.getTextTables()
+            self.assertEqual(3, len(tables))
+
+            # Select text of the tracked row, not only text of its first cell
+            with 
self.ui_test.execute_modeless_dialog_through_command(".uno:AcceptTrackedChanges",
 close_button="close") as xTrackDlg:
+                changesList = xTrackDlg.getChild("writerchanges")
+
+                # select second tracked table row in tree list
+                changesList.executeAction("TYPE", mkPropertyValues({"KEYCODE": 
"DOWN"}))
+                xToolkit = 
self.xContext.ServiceManager.createInstance('com.sun.star.awt.Toolkit')
+                while get_state_as_dict(xWriterEdit)["SelectedText"] != 'klj':
+                    xToolkit.processEventsToIdle()
+
+                # this was "j" (only text of the first cell was selected, not 
text of the row)
+                
self.assertEqual(get_state_as_dict(xWriterEdit)["SelectedText"], "klj" )
+
+                # select first tracked table row in tree list
+                changesList.executeAction("TYPE", mkPropertyValues({"KEYCODE": 
"UP"}))
+                while get_state_as_dict(xWriterEdit)["SelectedText"] != 'bca':
+                    xToolkit.processEventsToIdle()
+
+                # this was "a" (only text of the first cell was selected, not 
text of the row)
+                
self.assertEqual(get_state_as_dict(xWriterEdit)["SelectedText"], "bca" )
+
 # vim: set shiftwidth=4 softtabstop=4 expandtab:
diff --git a/sw/source/uibase/misc/redlndlg.cxx 
b/sw/source/uibase/misc/redlndlg.cxx
index 7bed942acbf5..dd5feeacc747 100644
--- a/sw/source/uibase/misc/redlndlg.cxx
+++ b/sw/source/uibase/misc/redlndlg.cxx
@@ -1123,6 +1123,33 @@ IMPL_LINK_NOARG(SwRedlineAcceptDlg, GotoHdl, Timer *, 
void)
                         pSh->EnterAddMode();
                     }
                 }
+
+                // select all redlines of tracked table rows
+                std::unique_ptr<weld::TreeIter> 
xChild(rTreeView.make_iterator( &*xActEntry ));
+                if ( rTreeView.iter_children(*xChild) )
+                {
+                    RedlinData *pData = 
reinterpret_cast<RedlinData*>(rTreeView.get_id(*xChild).toInt64());
+                    // disabled for redline stack, but not for redlines of 
table rows
+                    if ( !pData->bDisabled )
+                    {
+                        do
+                        {
+                            nPos = GetRedlinePos(*xChild);
+                            if (nPos != SwRedlineTable::npos)
+                            {
+                                const SwRangeRedline& rRedln = 
pSh->GetRedline( nPos );
+                                bIsNotFormated |= RedlineType::Format != 
rRedln.GetType();
+
+                                if (pSh->GotoRedline(nPos, true))
+                                {
+                                    pSh->SetInSelect();
+                                    pSh->EnterAddMode();
+                                }
+                            }
+                        }
+                        while ( rTreeView.iter_next_sibling(*xChild) );
+                    }
+                }
                 return false;
             });
 

Reply via email to