tdf#147435 sw: enable Accept Change for table selection

Accept/Reject Track Change options were only enabled for
table selections, if the first cell of the selected cell range
contains a redline. Now they are enabled, when arbitrary cell
of the table selection contains a redline.

Note: if the selected columns don't contain any redlines and
any tracked row changes, but the adjacent not selected columns
contain a redline, there is a false Enable.

Follow-up to commit 23846867ea
"tdf#147182 sw: accept/reject all changes of a table selection".

Change-Id: I1d7af04aa3fe5232bb1ff7f9af6116bcdc621ae7
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/129811
Tested-by: László Németh <nemeth@numbertext.org>
Reviewed-by: László Németh <nemeth@numbertext.org>
This commit is contained in:
László Németh
2022-02-11 08:58:05 +01:00
parent 71e8a94775
commit c4f6fee3be
2 changed files with 66 additions and 1 deletions

View File

@@ -107,4 +107,51 @@ class tdf146145(UITestCase):
xToolkit.processEventsToIdle()
self.assertEqual(len(tables[0].getRows()), 3)
def test_Related_tdf147182(self):
with self.ui_test.load_file(get_url_for_data_file("TC-table-del-add.docx")) as self.document:
# Check enabling Accept/Reject Track Change icons
# and Accept Change/Reject Change context menu items
# on table rows with tracked deletion or insertion
# enable Track Changes toolbar
self.xUITest.executeCommand(".uno:AvailableToolbars?Toolbar:string=changes")
xToolkit = self.xContext.ServiceManager.createInstance('com.sun.star.awt.Toolkit')
xToolkit.processEventsToIdle()
# cursor at changed text: Accept Track Change is enabled
self.assertTrue(self.is_enabled_Accept_Track_Change())
# cursor in a changed row, but not at changed text: Accept Track Change is enabled now
self.xUITest.executeCommand(".uno:GoRight")
xToolkit.processEventsToIdle()
# This was false
self.assertTrue(self.is_enabled_Accept_Track_Change())
# delete first row
self.xUITest.executeCommand(".uno:AcceptTrackedChange")
xToolkit.processEventsToIdle()
# disabled Accept Track Change
while self.is_enabled_Accept_Track_Change():
time.sleep(0.1)
self.assertFalse(self.is_enabled_Accept_Track_Change())
# delete first row
self.xUITest.executeCommand(".uno:SelectAll")
self.xUITest.executeCommand(".uno:SelectAll")
xToolkit.processEventsToIdle()
# This was false
while not self.is_enabled_Accept_Track_Change():
time.sleep(0.1)
self.assertTrue(self.is_enabled_Accept_Track_Change())
# delete all changes in the selected table
self.xUITest.executeCommand(".uno:AcceptTrackedChange")
xToolkit.processEventsToIdle()
while self.is_enabled_Accept_Track_Change():
time.sleep(0.1)
# disabled Accept Track Change
self.assertFalse(self.is_enabled_Accept_Track_Change())
# vim: set shiftwidth=4 softtabstop=4 expandtab:

View File

@@ -389,10 +389,28 @@ void SwView::GetState(SfxItemSet &rSet)
redline = nullptr;
if( redline == nullptr )
{
// for table selections, GetCursor() gives only PaM of the first cell,
// so extend the redline limit to end of last cell of the selection
// TODO: adjust this for column selections, where the selected columns
// don't contain any redlines and any tracked row changes, but the
// adjacent not selected columns do to avoid false Enable
std::unique_ptr<SwPosition> pSelectionEnd;
if ( m_pWrtShell->IsTableMode() &&
m_pWrtShell->GetTableCursor()->GetSelectedBoxesCount() )
{
const SwSelBoxes& rBoxes = m_pWrtShell->GetTableCursor()->GetSelectedBoxes();
const SwStartNode *pSttNd = rBoxes.back()->GetSttNd();
const SwNode* pEndNode = pSttNd->GetNodes()[pSttNd->EndOfSectionIndex()];
pSelectionEnd.reset(new SwPosition(*pEndNode));
}
else
pSelectionEnd.reset(
new SwPosition(pCursor->End()->nNode, pCursor->End()->nContent));
for(; index < table.size(); ++index )
{
const SwRangeRedline* tmp = table[ index ];
if( *tmp->Start() >= *pCursor->End())
if( *tmp->Start() >= *pSelectionEnd )
break;
if( tmp->HasMark() && tmp->IsVisible())
{