avmedia/source/viewer/mediawindow_impl.cxx | 13 basic/qa/basic_coverage/test_string_fixed_len.bas | 54 basic/source/comp/parser.cxx | 14 basic/source/runtime/runtime.cxx | 5 compilerplugins/clang/ostr.cxx | 26 configure.ac | 2 cui/source/dialogs/hlinettp.cxx | 39 cui/source/dialogs/hltpbase.cxx | 44 cui/source/tabpages/transfrm.cxx | 1 cui/uiconfig/ui/possizetabpage.ui | 14 desktop/source/lib/init.cxx | 4 download.lst | 28 editeng/qa/editeng/editeng.cxx | 34 editeng/source/editeng/impedit4.cxx | 63 editeng/source/items/frmitems.cxx | 9 embeddedobj/source/commonembedding/persistence.cxx | 17 external/gpgmepp/ExternalPackage_gpgmepp.mk | 4 external/gpgmepp/UnpackedTarball_gpgmepp.mk | 2 external/gpgmepp/gettid.patch | 14 external/gpgmepp/strcasecmp.patch | 14 external/gpgmepp/w32-fix-win32-macro.patch.1 | 11 external/gpgmepp/w32-include.patch | 20 external/libgpg-error/ExternalPackage_libgpg-error.mk | 2 external/libgpg-error/UnpackedTarball_libgpg-error.mk | 3 external/libgpg-error/w32-build-fixes-6.patch | 15 filter/qa/unit/data/tdf91315.fodp | 429 ++ filter/qa/unit/svg.cxx | 15 filter/source/svg/svgwriter.cxx | 10 forms/source/component/ImageControl.cxx | 7 forms/source/component/clickableimage.cxx | 11 i18nlangtag/source/isolang/isolang.cxx | 2 i18npool/Library_localedata_euro.mk | 1 i18npool/Library_localedata_others.mk | 1 i18npool/source/localedata/data/fr_GN.xml | 41 i18npool/source/localedata/data/sat_IN.xml | 175 i18npool/source/localedata/data/sat_Olck_IN.xml | 181 i18npool/source/localedata/localedata.cxx | 4 include/i18nlangtag/lang.h | 4 include/svtools/popupmenucontrollerbase.hxx | 2 include/toolkit/controls/unocontrols.hxx | 2 include/unotools/fcm.hxx | 11 include/vcl/toolbox.hxx | 2 l10ntools/source/ulfconv/msi-encodinglist.txt | 3 lingucomponent/source/hyphenator/hyphen/hyphenimp.cxx | 17 lingucomponent/source/hyphenator/hyphen/hyphenimp.hxx | 2 oox/qa/unit/data/tdf163803_image_with_fill.pptx |binary oox/qa/unit/export.cxx | 16 oox/source/export/shapes.cxx | 1 package/qa/cppunit/data/pass/no_usb_2024-11-06.xlsx |binary package/qa/cppunit/data/tdf163818.odg |binary package/qa/cppunit/test_zippackage.cxx | 22 package/source/zipapi/ZipFile.cxx | 33 readlicense_oo/license/CREDITS.fodt | 1838 +++++----- sc/inc/cellvalue.hxx | 2 sc/inc/lookupcache.hxx | 24 sc/qa/unit/copy_paste_test.cxx | 28 sc/qa/unit/data/functions/spreadsheet/fods/xmatch.fods | 266 + sc/qa/unit/data/ods/autofilter-colbutton.ods |binary sc/qa/unit/data/xlsx/tdf122716_font_with_charset.xlsx |binary sc/qa/unit/subsequent_export_test2.cxx | 13 sc/source/core/data/cellvalue.cxx | 20 sc/source/core/data/column3.cxx | 47 sc/source/core/data/patattr.cxx | 2 sc/source/core/tool/interpr1.cxx | 4 sc/source/core/tool/lookupcache.cxx | 11 sc/source/filter/excel/excrecds.cxx | 4 sc/source/filter/excel/xestyle.cxx | 2 sc/source/filter/xml/xmlcelli.cxx | 7 sc/source/filter/xml/xmlexprt.cxx | 16 sc/source/ui/view/tabview.cxx | 4 sd/source/ui/func/futext.cxx | 23 sd/source/ui/view/Outliner.cxx | 26 sfx2/source/appl/linkmgr2.cxx | 5 sfx2/source/view/lokhelper.cxx | 2 svtools/inc/langtab.hrc | 6 sw/qa/extras/layout/data/572-min.rtf | 178 sw/qa/extras/layout/data/section-nested-with-pagebreaks.fodt | 148 sw/qa/extras/layout/data/tdf163720.fodt | 209 + sw/qa/extras/layout/layout2.cxx | 55 sw/qa/extras/layout/layout3.cxx | 210 + sw/qa/extras/odfimport/data/nested_footnote.fodt | 11 sw/qa/extras/odfimport/odfimport.cxx | 15 sw/qa/extras/ooxmlexport/data/deleted_pageref.docx |binary sw/qa/extras/ooxmlexport/ooxmlexport21.cxx | 18 sw/qa/extras/uiwriter/data/IndexElementsInHiddenSections.fodt | 63 sw/qa/extras/uiwriter/data/tdf153636.odt |binary sw/qa/extras/uiwriter/uiwriter8.cxx | 31 sw/qa/extras/uiwriter/uiwriter9.cxx | 43 sw/qa/extras/unowriter/data/section-table.fodt | 162 sw/qa/extras/unowriter/unowriter.cxx | 31 sw/qa/uitest/writer_tests3/hyperlinkdialog.py | 36 sw/source/core/doc/docfmt.cxx | 3 sw/source/core/doc/doctxm.cxx | 101 sw/source/core/docnode/section.cxx | 4 sw/source/core/layout/paintfrm.cxx | 27 sw/source/core/layout/sectfrm.cxx | 15 sw/source/core/layout/sortedobjs.cxx | 6 sw/source/core/text/itradj.cxx | 5 sw/source/core/tox/tox.cxx | 3 sw/source/core/unocore/unoobj2.cxx | 30 sw/source/filter/html/htmlgrin.cxx | 3 sw/source/filter/ww8/docxattributeoutput.cxx | 32 sw/source/filter/ww8/docxtableexport.cxx | 3 sw/source/uibase/dialog/SwSpellDialogChildWindow.cxx | 2 sw/source/uibase/uno/unotxdoc.cxx | 3 sw/source/writerfilter/dmapper/PropertyMap.cxx | 27 toolkit/inc/helper/property.hxx | 1 toolkit/source/awt/vclxwindows.cxx | 1 toolkit/source/controls/dialogcontrol.cxx | 4 toolkit/source/controls/grid/sortablegriddatamodel.cxx | 48 toolkit/source/controls/unocontrols.cxx | 14 toolkit/source/helper/property.cxx | 2 tools/source/fsys/urlobj.cxx | 1 unotools/source/misc/mediadescriptor.cxx | 4 vcl/inc/osx/salframeview.h | 3 vcl/inc/scrwnd.hxx | 6 vcl/inc/svdata.hxx | 1 vcl/osx/salframe.cxx | 14 vcl/osx/salframeview.mm | 156 vcl/osx/salinst.cxx | 4 vcl/osx/saltimer.cxx | 4 vcl/skia/gdiimpl.cxx | 17 vcl/source/app/salvtables.cxx | 7 vcl/source/app/scheduler.cxx | 2 vcl/source/filter/graphicfilter.cxx | 8 vcl/source/gdi/embeddedfontshelper.cxx | 16 vcl/source/gdi/pdfwriter_impl.cxx | 31 vcl/source/window/scrwnd.cxx | 59 vcl/source/window/toolbox2.cxx | 26 vcl/unx/generic/printer/cupsmgr.cxx | 11 vcl/unx/gtk3/a11y/atkwrapper.cxx | 5 vcl/win/dtrans/WinClipboard.cxx | 29 vcl/win/window/salframe.cxx | 51 xmloff/source/forms/elementimport.cxx | 9 xmloff/source/text/XMLFootnoteImportContext.cxx | 14 xmloff/source/text/XMLFootnoteImportContext.hxx | 1 xmlsecurity/source/helper/documentsignaturehelper.cxx | 2 137 files changed, 4133 insertions(+), 1686 deletions(-)
New commits: commit c853b956c45991b213fdbec8e368b13f851368c6 Merge: ad3a7bba7737 0edf32e4c683 Author: Thorsten Behrens <thorsten.behr...@allotropia.de> AuthorDate: Tue Nov 26 23:45:21 2024 +0100 Commit: Thorsten Behrens <thorsten.behr...@allotropia.de> CommitDate: Tue Nov 26 23:45:21 2024 +0100 Merge remote-tracking branch 'libreoffice-24-8' into feature/cib_contract49d Conflicts: configure.ac dictionaries readlicense_oo/license/CREDITS.fodt sw/qa/extras/uiwriter/uiwriter9.cxx sw/source/writerfilter/dmapper/PropertyMap.cxx Change-Id: I450fa8f47dd1c6b6b142740c1b56aa6d4362c36f diff --cc configure.ac index 18392ba4ee68,67a836db4977..15bfacec72b6 --- a/configure.ac +++ b/configure.ac @@@ -9,7 -9,7 +9,7 @@@ dnl in order to create a configure scri # several non-alphanumeric characters, those are split off and used only for the # ABOUTBOXPRODUCTVERSIONSUFFIX in openoffice.lst. Why that is necessary, no idea. - AC_INIT([LibreOffice],[24.8.3.2],[],[],[http://documentfoundation.org/]) -AC_INIT([LibreOffice],[24.8.4.0.0+],[],[],[http://documentfoundation.org/]) ++AC_INIT([LibreOffice],[24.8.4.0],[],[],[http://documentfoundation.org/]) dnl libnumbertext needs autoconf 2.68, but that can pick up autoconf268 just fine if it is installed dnl whereas aclocal (as run by autogen.sh) insists on using autoconf and fails hard diff --cc sw/qa/extras/uiwriter/uiwriter9.cxx index 9d493eb21edc,2f8d9b68ba2f..e0a1b49c1493 --- a/sw/qa/extras/uiwriter/uiwriter9.cxx +++ b/sw/qa/extras/uiwriter/uiwriter9.cxx @@@ -679,96 -677,49 +679,139 @@@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest9, t CPPUNIT_ASSERT_EQUAL(u"Word"_ustr, pWrtShell->GetSelText()); } +CPPUNIT_TEST_FIXTURE(SwUiWriterTest9, testTdf163340) +{ + createSwDoc("tdf163340.odt"); + uno::Reference<frame::XModel> xModel(mxComponent, uno::UNO_QUERY); + uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference<text::XText> xText = xTextDocument->getText(); + uno::Reference<view::XSelectionSupplier> xSelSupplier(xModel->getCurrentController(), + uno::UNO_QUERY_THROW); + uno::Reference<text::XParagraphCursor> xParaCursor(xTextDocument->getText()->createTextCursor(), + uno::UNO_QUERY); + + for (int i = 0; i < 14; i++) + xParaCursor->gotoNextParagraph(false); + xParaCursor->gotoEndOfParagraph(true); + xSelSupplier->select(uno::Any(xParaCursor)); + + CPPUNIT_ASSERT_EQUAL(u"A."_ustr, getProperty<OUString>(xParaCursor, u"ListLabelString"_ustr)); + dispatchCommand(mxComponent, u".uno:Copy"_ustr, {}); + + xParaCursor = uno::Reference<text::XParagraphCursor>(xText->createTextCursor(), uno::UNO_QUERY); + for (int i = 0; i < 3; i++) + xParaCursor->gotoNextParagraph(false); + xParaCursor->gotoEndOfParagraph(true); + CPPUNIT_ASSERT_EQUAL(u"1."_ustr, getProperty<OUString>(xParaCursor, u"ListLabelString"_ustr)); + xSelSupplier->select(uno::Any(xParaCursor)); + dispatchCommand(mxComponent, u".uno:Paste"_ustr, {}); + CPPUNIT_ASSERT_EQUAL(u"A."_ustr, getProperty<OUString>(xParaCursor, u"ListLabelString"_ustr)); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest9, testTdf162326_Pargraph) +{ + createSwDoc("tdf162326.odt"); + SwXTextDocument* pDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get()); + CPPUNIT_ASSERT(pDoc); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + CPPUNIT_ASSERT(pWrtShell); + + CPPUNIT_ASSERT_EQUAL(awt::FontWeight::BOLD, + getProperty<float>(getRun(getParagraph(1), 1), u"CharWeight"_ustr)); + CPPUNIT_ASSERT_EQUAL( + awt::FontSlant_ITALIC, + getProperty<awt::FontSlant>(getRun(getParagraph(2), 2), u"CharPosture"_ustr)); + CPPUNIT_ASSERT_EQUAL(short(1), + getProperty<short>(getRun(getParagraph(3), 2), u"CharUnderline"_ustr)); + + pWrtShell->Down(/*bSelect=*/true, 3); + + dispatchCommand(mxComponent, u".uno:StyleApply"_ustr, + { comphelper::makePropertyValue(u"FamilyName"_ustr, u"ParagraphStyles"_ustr), + comphelper::makePropertyValue(u"Style"_ustr, u"Footnote"_ustr), + comphelper::makePropertyValue(u"KeyModifier"_ustr, uno::Any(KEY_MOD1)) }); + + CPPUNIT_ASSERT_EQUAL(awt::FontWeight::NORMAL, + getProperty<float>(getRun(getParagraph(1), 1), u"CharWeight"_ustr)); + CPPUNIT_ASSERT_THROW(getRun(getParagraph(2), 2), css::container::NoSuchElementException); + CPPUNIT_ASSERT_THROW(getRun(getParagraph(3), 2), css::container::NoSuchElementException); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest9, testTdf162326_Character) +{ + createSwDoc("tdf162326.odt"); + SwXTextDocument* pDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get()); + CPPUNIT_ASSERT(pDoc); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + CPPUNIT_ASSERT(pWrtShell); + + CPPUNIT_ASSERT_EQUAL(awt::FontWeight::BOLD, + getProperty<float>(getRun(getParagraph(1), 1), u"CharWeight"_ustr)); + CPPUNIT_ASSERT_EQUAL( + awt::FontSlant_ITALIC, + getProperty<awt::FontSlant>(getRun(getParagraph(2), 2), u"CharPosture"_ustr)); + CPPUNIT_ASSERT_EQUAL(short(1), + getProperty<short>(getRun(getParagraph(3), 2), u"CharUnderline"_ustr)); + + pWrtShell->Down(/*bSelect=*/true, 3); + + //add Ctrl/MOD_1 + dispatchCommand(mxComponent, u".uno:StyleApply"_ustr, + { comphelper::makePropertyValue(u"FamilyName"_ustr, u"CharacterStyles"_ustr), + comphelper::makePropertyValue(u"Style"_ustr, u"Definition"_ustr), + comphelper::makePropertyValue(u"KeyModifier"_ustr, uno::Any(KEY_MOD1)) }); + + CPPUNIT_ASSERT_EQUAL(awt::FontWeight::NORMAL, + getProperty<float>(getRun(getParagraph(1), 1), u"CharWeight"_ustr)); + CPPUNIT_ASSERT_THROW(getRun(getParagraph(2), 2), css::container::NoSuchElementException); + //last runs are not changed because the selection ends at the beginning of that paragraph + CPPUNIT_ASSERT_EQUAL(short(1), + getProperty<short>(getRun(getParagraph(3), 2), u"CharUnderline"_ustr)); +} + + CPPUNIT_TEST_FIXTURE(SwUiWriterTest9, testTdf162195) + { + // Given a document, which has some index entries in a hidden section + createSwDoc("IndexElementsInHiddenSections.fodt"); + + auto xIndexSupplier(mxComponent.queryThrow<css::text::XDocumentIndexesSupplier>()); + auto xIndexes = xIndexSupplier->getDocumentIndexes(); + CPPUNIT_ASSERT(xIndexes); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xIndexes->getCount()); // A ToC and a table index + + auto xToC(xIndexes->getByIndex(0).queryThrow<css::text::XDocumentIndex>()); + xToC->update(); + // Without the fix, all the elements from the hidden section appeared in the index + CPPUNIT_ASSERT_EQUAL(u"Table of Contents" SAL_NEWLINE_STRING "Section Visible 1"_ustr, + xToC->getAnchor()->getString()); + + auto xTables(xIndexes->getByIndex(1).queryThrow<css::text::XDocumentIndex>()); + xTables->update(); + // Without the fix, all the elements from the hidden section appeared in the index + CPPUNIT_ASSERT_EQUAL(u"Index of Tables" SAL_NEWLINE_STRING "Table1 1"_ustr, + xTables->getAnchor()->getString()); + + // Show the hidden section + auto xTextSectionsSupplier = mxComponent.queryThrow<css::text::XTextSectionsSupplier>(); + auto xSections = xTextSectionsSupplier->getTextSections(); + CPPUNIT_ASSERT(xSections); + auto xSection + = xSections->getByName(u"Section Hidden"_ustr).queryThrow<css::beans::XPropertySet>(); + xSection->setPropertyValue(u"IsVisible"_ustr, css::uno::Any(true)); + + xToC->update(); + CPPUNIT_ASSERT_EQUAL(u"Table of Contents" SAL_NEWLINE_STRING + "Section Visible 1" SAL_NEWLINE_STRING + "Section Hidden 1" SAL_NEWLINE_STRING "entry 1" SAL_NEWLINE_STRING + "CustomTOCStyle paragraph 1"_ustr, + xToC->getAnchor()->getString()); + + xTables->update(); + CPPUNIT_ASSERT_EQUAL(u"Index of Tables" SAL_NEWLINE_STRING "Table1 1" SAL_NEWLINE_STRING + "Table2 1"_ustr, + xTables->getAnchor()->getString()); + } + } // end of anonymous namespace CPPUNIT_PLUGIN_IMPLEMENT(); commit 0edf32e4c6832b9e2c5a0306ae0088fb25d44cc0 Author: Noel Grandin <noelgran...@collabora.co.uk> AuthorDate: Tue Nov 26 14:18:59 2024 +0200 Commit: Xisco Fauli <xiscofa...@libreoffice.org> CommitDate: Tue Nov 26 19:28:26 2024 +0100 tdf#162815 Greyscale images not corrrectly exported to PDF regression from commit 21734247d58a6e915b058d8fa55ece949d049613 "drop internal support for 1-bit images" This only works on Linux because the HasGreyPaletteAny() check is returning false on Linux, because on linux the swap in/out is more aggressive, and after it is has gone through the swap in/out process, the image palette is no longer one that matches anything that HasGreyPaletteAny() checks for (it contains 256 entries, but only 2 of them are used) I'm not exactly sure why the greyscale bitmap generation code is generating bad PDF data, but the RGB code works great, so lets just use that rather. Change-Id: Ibb9e837540d5ed567c706e21e7ff93fe92118580 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177329 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> (cherry picked from commit 668dbfd99ada1888d5919cffedcfd7486c101717) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177357 Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org> diff --git a/vcl/source/gdi/pdfwriter_impl.cxx b/vcl/source/gdi/pdfwriter_impl.cxx index 9b8775a15faa..cb914231d049 100644 --- a/vcl/source/gdi/pdfwriter_impl.cxx +++ b/vcl/source/gdi/pdfwriter_impl.cxx @@ -9626,37 +9626,6 @@ bool PDFWriterImpl::writeBitmapObject( const BitmapEmit& rObject, bool bMask ) aLine.append( "/ColorSpace" ); if( bTrueColor ) aLine.append( "/DeviceRGB " ); - else if( aBitmap.HasGreyPaletteAny() ) - { - aLine.append( "/DeviceGray " ); - if (aBitmap.getPixelFormat() == vcl::PixelFormat::N8_BPP) - { - // #i47395# 1 bit bitmaps occasionally have an inverted grey palette - sal_uInt16 nBlackIndex = pAccess->GetBestPaletteIndex( BitmapColor( COL_BLACK ) ); - assert( nBlackIndex == 0 || nBlackIndex == 1); - sal_uInt16 nWhiteIndex = pAccess->GetBestPaletteIndex( BitmapColor( COL_WHITE ) ); - if( pAccess->GetPalette()[nBlackIndex] == BitmapColor( COL_BLACK ) && - pAccess->GetPalette()[nWhiteIndex] == BitmapColor( COL_WHITE ) ) - { - // It is black and white - if( nBlackIndex == 1 ) - aLine.append( "/Decode[1 0] " ); - } - else - { - // It is two levels of grey - aLine.append( "/Decode[" ); - assert( pAccess->GetPalette()[0].GetRed() == pAccess->GetPalette()[0].GetGreen() && - pAccess->GetPalette()[0].GetRed() == pAccess->GetPalette()[0].GetBlue() && - pAccess->GetPalette()[1].GetRed() == pAccess->GetPalette()[1].GetGreen() && - pAccess->GetPalette()[1].GetRed() == pAccess->GetPalette()[1].GetBlue() ); - aLine.append( pAccess->GetPalette()[0].GetRed() / 255.0 ); - aLine.append( " " ); - aLine.append( pAccess->GetPalette()[1].GetRed() / 255.0 ); - aLine.append( "] " ); - } - } - } else { aLine.append( "[ /Indexed/DeviceRGB " ); commit e177d2f3df8cb57a188752e0ddccbd9233ad207b Author: Miklos Vajna <vmik...@collabora.com> AuthorDate: Tue Nov 26 09:14:02 2024 +0100 Commit: Xisco Fauli <xiscofa...@libreoffice.org> CommitDate: Tue Nov 26 19:27:25 2024 +0100 sfx2 lok: fix crash in SfxLokHelper::notifyUpdate() Crashreport signature: > kit-09946-09946 2024-11-25 16:46:13.180120 +0000 [ kitbroker_498 ] SIG Fatal signal received: SIGSEGV code: 1 for address: 0x0 > program/libmergedlo.so > SfxLokHelper::notifyUpdate(SfxViewShell const*, int) > sfx2/source/view/lokhelper.cxx:1072 > program/libswlo.so > SwViewShell::GetSfxViewShell() const > sw/inc/viewsh.hxx:472 > program/libswlo.so > SwCursorShell::UpdateCursor(unsigned short, bool) > sw/source/core/crsr/crsrsh.cxx:2382 ... > program/libmergedlo.so > framework::Desktop::loadComponentFromURL(rtl::OUString const&, rtl::OUString const&, int, com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&) > framework/source/services/desktop.cxx:592 I.e. it can happen that during load we don't yet have a view, handle this in SfxLokHelper::notifyUpdate() till it takes a pointer and not a reference. Change-Id: Ifa5d9300029076e91ba8722152a7d91a1f2ecbc0 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177343 Reviewed-by: Miklos Vajna <vmik...@collabora.com> Tested-by: Jenkins (cherry picked from commit 7cfcfa30aa606536d7693ea09f39e57c60af00d6) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177355 Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org> diff --git a/sfx2/source/view/lokhelper.cxx b/sfx2/source/view/lokhelper.cxx index 549f43906908..12ee20427d25 100644 --- a/sfx2/source/view/lokhelper.cxx +++ b/sfx2/source/view/lokhelper.cxx @@ -823,7 +823,7 @@ void SfxLokHelper::notifyLog(const std::ostringstream& stream) void SfxLokHelper::notifyUpdate(SfxViewShell const* pThisView, int nType) { - if (DisableCallbacks::disabled()) + if (DisableCallbacks::disabled() || !pThisView) return; pThisView->libreOfficeKitViewUpdatedCallback(nType); commit 68391d1dcd1410e64845df58aacfe03cb0ae76a3 Author: Aron Budea <aron.bu...@collabora.com> AuthorDate: Tue Nov 26 18:29:44 2024 +1030 Commit: Xisco Fauli <xiscofa...@libreoffice.org> CommitDate: Tue Nov 26 19:26:41 2024 +0100 Operator should be logical AND instead of OR Change-Id: Ife1870da9979e974fa9dc11ca7dff87c8cfe66bc Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177310 Tested-by: Jenkins Reviewed-by: Aron Budea <aron.bu...@collabora.com> (cherry picked from commit 2af9fcddba57632e4a13797dcd5894f4cfeb51a7) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177356 Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org> diff --git a/xmlsecurity/source/helper/documentsignaturehelper.cxx b/xmlsecurity/source/helper/documentsignaturehelper.cxx index b35c709915f4..bdbaa5a0fd64 100644 --- a/xmlsecurity/source/helper/documentsignaturehelper.cxx +++ b/xmlsecurity/source/helper/documentsignaturehelper.cxx @@ -377,7 +377,7 @@ SignatureStreamHelper DocumentSignatureHelper::OpenSignatureStream( sal_Int64 nSize = 0; uno::Reference<beans::XPropertySet> xPropertySet(xInputStream, uno::UNO_QUERY); xPropertySet->getPropertyValue(u"Size"_ustr) >>= nSize; - if (nSize >= 0 || nSize < SAL_MAX_INT32) + if (nSize >= 0 && nSize < SAL_MAX_INT32) { uno::Sequence<sal_Int8> aData; xInputStream->readBytes(aData, nSize); commit acf704eca7e14a2faea1d3b6e66718db07f8b041 Author: Mike Kaganski <mike.kagan...@collabora.com> AuthorDate: Tue Nov 26 00:37:53 2024 +0500 Commit: Xisco Fauli <xiscofa...@libreoffice.org> CommitDate: Tue Nov 26 10:40:10 2024 +0100 tdf#146269: don't set modified when connecting frame, model and controller Change-Id: I487a989a97389af11c98e10ac001c860d7855aec Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177300 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com> (cherry picked from commit 1e54b2037a4d58dacc821bd8833e924f6691a7fd) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177317 Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org> diff --git a/include/unotools/fcm.hxx b/include/unotools/fcm.hxx index 30df362884ba..6fd6b8283777 100644 --- a/include/unotools/fcm.hxx +++ b/include/unotools/fcm.hxx @@ -23,6 +23,7 @@ #include <com/sun/star/frame/XFrame.hpp> #include <com/sun/star/frame/XModel.hpp> #include <com/sun/star/uno/Reference.hxx> +#include <com/sun/star/util/XModifiable2.hpp> namespace utl { @@ -40,12 +41,22 @@ ConnectFrameControllerModel(const css::uno::Reference<css::frame::XFrame>& xFram const css::uno::Reference<css::frame::XController2>& xController, const css::uno::Reference<css::frame::XModel>& xModel) { + auto xModifiable = xModel.query<css::util::XModifiable2>(); + bool bOldModifiable = false; + if (xModifiable) + { + bOldModifiable = xModifiable->isSetModifiedEnabled(); + if (bOldModifiable) + xModifiable->disableSetModified(); + } ConnectModelController(xModel, xController); if (xFrame) xFrame->setComponent(xController->getComponentWindow(), xController); // creates the view and menu // for correct menu creation the initialized component must be already set into the frame xController->attachFrame(xFrame); + if (xModifiable && bOldModifiable) + xModifiable->enableSetModified(); } } diff --git a/sw/qa/extras/ooxmlexport/data/deleted_pageref.docx b/sw/qa/extras/ooxmlexport/data/deleted_pageref.docx new file mode 100644 index 000000000000..3b34327eaa40 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/deleted_pageref.docx differ diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport21.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport21.cxx index ea9d652b44a3..41c3061fb8e7 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport21.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport21.cxx @@ -857,6 +857,24 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf162746) assertXPath(pDump, "//page[1]/body/tab/infos/prtBounds"_ostr, "width"_ostr, u"9360"_ustr); } +CPPUNIT_TEST_FIXTURE(Test, testTdf146269) +{ + // Given a focument with a field in a redline: + createSwDoc("deleted_pageref.docx"); + // It must open unmodified: + { + auto xModifiable = mxComponent.queryThrow<util::XModifiable>(); + CPPUNIT_ASSERT(!xModifiable->isModified()); + } + + // Test also after save-and-reload: + saveAndReload(u"Office Open XML Text"_ustr); + { + auto xModifiable = mxComponent.queryThrow<util::XModifiable>(); + CPPUNIT_ASSERT(!xModifiable->isModified()); + } +} + } // end of anonymous namespace CPPUNIT_PLUGIN_IMPLEMENT(); commit 058f0d1cac5d9e5d109dc7fe360bf03f8e1facc1 Author: Szymon Kłos <szymon.k...@collabora.com> AuthorDate: Mon Nov 25 15:15:36 2024 +0100 Commit: Xisco Fauli <xiscofa...@libreoffice.org> CommitDate: Tue Nov 26 10:16:36 2024 +0100 tdf#86731 bNoDictionaryAvailable should trigger meesagebox Reverts "PVS: V547 Expression 'bNoDictionaryAvailable' is always false" This reverts commit 816b51c7a9cdd72eaa01f3c074ba5a8446917d19. It removed the message completely from the code while, we should fix it rather by using correct condition. It was somehow too aggresively limited in commit f200dd5cb84681558700c49de0969907f78f8db1 tdf#86731 Don't show 'start from beginning' when dictionary is missing Change-Id: I5f4b859047216399a09c7aefb8a47244c4833df5 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177271 (cherry picked from commit 16bce5bb1cb4e446f45633b128f6ab02a48b6840) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177316 Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org> Reviewed-by: Szymon Kłos <szymon.k...@collabora.com> Tested-by: Jenkins diff --git a/sw/source/uibase/dialog/SwSpellDialogChildWindow.cxx b/sw/source/uibase/dialog/SwSpellDialogChildWindow.cxx index 6a865078af74..9f91675381b2 100644 --- a/sw/source/uibase/dialog/SwSpellDialogChildWindow.cxx +++ b/sw/source/uibase/dialog/SwSpellDialogChildWindow.cxx @@ -398,7 +398,7 @@ The code below would only be part of the solution. bCloseMessage = false; // no closing message if a wrap around has been denied } } - if( aRet.empty() && bCloseMessage && !bNoDictionaryAvailable ) + if( aRet.empty() && bCloseMessage ) { LockFocusNotification( true ); OUString sInfo( SwResId( bNoDictionaryAvailable ? STR_DICTIONARY_UNAVAILABLE : STR_SPELLING_COMPLETED ) ); commit 7efe1e9c079fa8efd3ed0d78c6e0993470bf0ab5 Author: prrvchr <prrv...@gmail.com> AuthorDate: Mon Nov 25 11:52:29 2024 +0100 Commit: Xisco Fauli <xiscofa...@libreoffice.org> CommitDate: Tue Nov 26 09:29:53 2024 +0100 tdf#164040 Expose XGridDataListener type in SortableGridDataModel It had been introduced in commit de9dba9275aff2863978f7f665685d54ef82b0ad (gridsort: introduce XSortableGridDataModel::removeColumnSort, 2011-01-18), but in getTypes, an explicit exclusion for it had been made. Change-Id: I4915949b26ef15905ec810aa54e69d0e62100b90 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177256 Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com> Tested-by: Jenkins (cherry picked from commit 4178b34521227e726bd1f393d384c17c63909c3d) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177294 Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org> diff --git a/toolkit/source/controls/grid/sortablegriddatamodel.cxx b/toolkit/source/controls/grid/sortablegriddatamodel.cxx index 4ca74107805b..85a721dbe3f4 100644 --- a/toolkit/source/controls/grid/sortablegriddatamodel.cxx +++ b/toolkit/source/controls/grid/sortablegriddatamodel.cxx @@ -53,13 +53,11 @@ namespace { class SortableGridDataModel; typedef ::comphelper::WeakComponentImplHelper < css::awt::grid::XSortableMutableGridDataModel + , css::awt::grid::XGridDataListener , css::lang::XServiceInfo , css::lang::XInitialization > SortableGridDataModel_Base; -typedef ::cppu::ImplHelper1 < css::awt::grid::XGridDataListener - > SortableGridDataModel_PrivateBase; class SortableGridDataModel :public SortableGridDataModel_Base - ,public SortableGridDataModel_PrivateBase { public: explicit SortableGridDataModel( const css::uno::Reference< css::uno::XComponentContext > & rxContext ); @@ -122,15 +120,6 @@ public: // XEventListener virtual void SAL_CALL disposing( const css::lang::EventObject& i_event ) override; - // XInterface - virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type& aType ) override; - virtual void SAL_CALL acquire( ) noexcept final override; - virtual void SAL_CALL release( ) noexcept override; - - // XTypeProvider - virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes( ) override; - virtual css::uno::Sequence< ::sal_Int8 > SAL_CALL getImplementationId( ) override; - private: /** translates the given public index into one to be passed to our delegator @throws css::lang::IndexOutOfBoundsException @@ -221,7 +210,6 @@ void lcl_clear( STLCONTAINER& i_container ) { } - SortableGridDataModel::SortableGridDataModel( SortableGridDataModel const & i_copySource ) :m_xContext( i_copySource.m_xContext ) ,m_isInitialized( true ) @@ -244,40 +232,6 @@ void lcl_clear( STLCONTAINER& i_container ) dispose(); } - - Any SAL_CALL SortableGridDataModel::queryInterface( const Type& aType ) - { - Any aReturn( SortableGridDataModel_Base::queryInterface( aType ) ); - if ( !aReturn.hasValue() ) - aReturn = SortableGridDataModel_PrivateBase::queryInterface( aType ); - return aReturn; - } - - - void SAL_CALL SortableGridDataModel::acquire( ) noexcept - { - SortableGridDataModel_Base::acquire(); - } - - - void SAL_CALL SortableGridDataModel::release( ) noexcept - { - SortableGridDataModel_Base::release(); - } - - - Sequence< Type > SAL_CALL SortableGridDataModel::getTypes( ) - { - return SortableGridDataModel_Base::getTypes(); - // don't expose the types got via SortableGridDataModel_PrivateBase - they're private, after all - } - - - Sequence< ::sal_Int8 > SAL_CALL SortableGridDataModel::getImplementationId( ) - { - return css::uno::Sequence<sal_Int8>(); - } - Reference< XCollator > lcl_loadDefaultCollator_throw( const Reference<XComponentContext> & rxContext ) { Reference< XCollator > const xCollator = Collator::create( rxContext ); commit aa1c2fa118e6ad9c71769881b0017ec74cba3cae Author: Caolán McNamara <caolan.mcnam...@collabora.com> AuthorDate: Mon Nov 25 16:49:52 2024 +0000 Commit: Thorsten Behrens <thorsten.behr...@allotropia.de> CommitDate: Mon Nov 25 23:24:37 2024 +0100 Resolves: tdf#163777 Ignore pageup and down when modifier held... in a SalInstanceEntryTreeView, otherwise the ctrl+pageup/down gets processed twice by the toplevel notebook due to the forwarding used here. Change-Id: Ic5003064ddba44f940fb4c4a727d8081c3644361 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177279 Reviewed-by: Thorsten Behrens <thorsten.behr...@allotropia.de> Tested-by: Jenkins diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx index e989a0160e8d..6acd5153fc91 100644 --- a/vcl/source/app/salvtables.cxx +++ b/vcl/source/app/salvtables.cxx @@ -6951,9 +6951,12 @@ IMPL_LINK(SalInstanceEntryTreeView, KeyPressListener, VclWindowEvent&, rEvent, v if (rEvent.GetId() != VclEventId::WindowKeyInput) return; const KeyEvent& rKeyEvent = *static_cast<KeyEvent*>(rEvent.GetData()); + if (rKeyEvent.GetKeyCode().GetModifier()) // tdf#163777 ignore when modifier held + return; sal_uInt16 nKeyCode = rKeyEvent.GetKeyCode().GetCode(); - if (!(nKeyCode == KEY_UP || nKeyCode == KEY_DOWN || nKeyCode == KEY_PAGEUP - || nKeyCode == KEY_PAGEDOWN)) + const bool bNavigation = nKeyCode == KEY_UP || nKeyCode == KEY_DOWN || nKeyCode == KEY_PAGEUP + || nKeyCode == KEY_PAGEDOWN; + if (!bNavigation) return; m_pTreeView->disable_notify_events(); commit dd8eeb63368a657b54e645e3549bafc5a112ef07 Author: Michael Stahl <michael.st...@allotropia.de> AuthorDate: Fri Nov 22 14:40:50 2024 +0100 Commit: Thorsten Behrens <thorsten.behr...@allotropia.de> CommitDate: Mon Nov 25 23:21:58 2024 +0100 sw: do not paint hidden frames' borders SwFrame::PaintSwFrameShadowAndBorder() is called by upper's SwFrame::PaintSwFrameBackground() so it needs another check. (regression from commit ff7f1b59e22092d8548459e75fe912db852f056f) Change-Id: Ic7ac28e4af8e0abf4970d87edb40a79ad4d25156 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177032 Tested-by: Jenkins Reviewed-by: Michael Stahl <michael.st...@allotropia.de> (cherry picked from commit ea1d0a62d9b9790c235044a754604166ec5df6d4) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177041 Reviewed-by: Thorsten Behrens <thorsten.behr...@allotropia.de> diff --git a/sw/source/core/layout/paintfrm.cxx b/sw/source/core/layout/paintfrm.cxx index 6fdbe66cf2da..abe0a0c41ba6 100644 --- a/sw/source/core/layout/paintfrm.cxx +++ b/sw/source/core/layout/paintfrm.cxx @@ -5567,6 +5567,11 @@ void SwFrame::PaintSwFrameShadowAndBorder( return; } + if (!getFramePrintArea().HasArea()) + { // hidden text frame, may be called by upper from PaintSwFrameBackground() + return; + } + const bool bLine = rAttrs.IsLine(); const bool bShadow = rAttrs.GetShadow().GetLocation() != SvxShadowLocation::NONE; commit fd22f6aff23d2777469913f94cb68c7a21440c31 Author: Michael Stahl <michael.st...@allotropia.de> AuthorDate: Mon Nov 25 13:45:39 2024 +0100 Commit: Thorsten Behrens <thorsten.behr...@allotropia.de> CommitDate: Mon Nov 25 23:21:18 2024 +0100 sw: fix property set implementation of SwXTextRange RANGE_IS_SECTION Use cursor that includes section nodes, the core implementation should not need start/end to be a text node. Fix one case in SwDoc::ResetAttrs() where a text node is expected. (regression from commit 7ab349296dac79dad3fec09f60348efcbb9ea17e) Change-Id: I56960b5d233ced02703a7c522ebe6afa3347cd25 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177259 Tested-by: Jenkins Reviewed-by: Michael Stahl <michael.st...@allotropia.de> (cherry picked from commit 4fef75d4c8798dd5ebff1c6bd66993665602507d) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177274 Reviewed-by: Thorsten Behrens <thorsten.behr...@allotropia.de> diff --git a/sw/qa/extras/unowriter/data/section-table.fodt b/sw/qa/extras/unowriter/data/section-table.fodt new file mode 100644 index 000000000000..4f46ac086c91 --- /dev/null +++ b/sw/qa/extras/unowriter/data/section-table.fodt @@ -0,0 +1,162 @@ +<?xml version='1.0' encoding='UTF-8'?> +<office:document xmlns:css3t="http://www.w3.org/TR/css3-text/" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:c alcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:rpt="http://openoffice.org/2005/report" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:officeooo="http://openoffice.org/2009/office" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns: meta:1.0" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" office:version="1.4" office:mimetype="application/vnd.oasis.opendocument.text"> + <office:meta><meta:initial-creator>GCC</meta:initial-creator><meta:creation-date>2024-11-25T12:23:18.360978950</meta:creation-date><dc:date>2024-11-25T12:24:38.999591414</dc:date><dc:creator>GCC</dc:creator><meta:editing-duration>PT1M22S</meta:editing-duration><meta:editing-cycles>1</meta:editing-cycles><meta:document-statistic meta:table-count="1" meta:image-count="0" meta:object-count="0" meta:page-count="1" meta:paragraph-count="2" meta:word-count="5" meta:character-count="31" meta:non-whitespace-character-count="28"/><meta:generator>LibreOfficeDev/25.2.0.0.alpha0$Linux_X86_64 LibreOffice_project/10f916791e49306b51a6a299739b130fc2129de1</meta:generator></office:meta> + <office:font-face-decls> + <style:font-face style:name="Liberation Serif" svg:font-family="'Liberation Serif'" style:font-family-generic="roman" style:font-pitch="variable"/> + <style:font-face style:name="Lucida Sans1" svg:font-family="'Lucida Sans'" style:font-family-generic="system" style:font-pitch="variable"/> + <style:font-face style:name="Noto Serif CJK SC" svg:font-family="'Noto Serif CJK SC'" style:font-family-generic="system" style:font-pitch="variable"/> + </office:font-face-decls> + <office:styles> + <style:default-style style:family="graphic"> + <style:graphic-properties svg:stroke-color="#3465a4" draw:fill-color="#729fcf" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.3cm" draw:shadow-offset-y="0.3cm" draw:start-line-spacing-horizontal="0.283cm" draw:start-line-spacing-vertical="0.283cm" draw:end-line-spacing-horizontal="0.283cm" draw:end-line-spacing-vertical="0.283cm" style:flow-with-text="false"/> + <style:paragraph-properties style:text-autospace="ideograph-alpha" style:line-break="strict" loext:tab-stop-distance="0cm" style:writing-mode="lr-tb" style:font-independent-line-spacing="false"> + <style:tab-stops/> + </style:paragraph-properties> + <style:text-properties style:use-window-font-color="true" loext:opacity="0%" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="de" fo:country="DE" style:letter-kerning="true" style:font-name-asian="Noto Serif CJK SC" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Lucida Sans1" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN"/> + </style:default-style> + <style:default-style style:family="paragraph"> + <style:paragraph-properties fo:orphans="2" fo:widows="2" fo:hyphenation-ladder-count="no-limit" fo:hyphenation-keep="auto" loext:hyphenation-keep-type="column" style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" style:line-break="strict" style:tab-stop-distance="1.251cm" style:writing-mode="page"/> + <style:text-properties style:use-window-font-color="true" loext:opacity="0%" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="de" fo:country="DE" style:letter-kerning="true" style:font-name-asian="Noto Serif CJK SC" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Lucida Sans1" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN" fo:hyphenate="false" fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2" loext:hyphenation-no-caps="false" loext:hyphenation-no-last-word="false" loext:hyphenation-word-char-count="5" loext:hyphenation-zone="no-limit"/> + </style:default-style> + <style:default-style style:family="table"> + <style:table-properties table:border-model="collapsing"/> + </style:default-style> + <style:default-style style:family="table-row"> + <style:table-row-properties fo:keep-together="auto"/> + </style:default-style> + <style:style style:name="Standard" style:family="paragraph" style:class="text"/> + <style:style style:name="Table_20_Contents" style:display-name="Table Contents" style:family="paragraph" style:parent-style-name="Standard" style:class="extra"> + <style:paragraph-properties fo:orphans="0" fo:widows="0" text:number-lines="false" text:line-number="0"/> + </style:style> + <text:outline-style style:name="Outline"> + <text:outline-level-style text:level="1" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="2" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="3" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="4" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="5" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="6" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="7" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="8" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="9" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="10" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + </text:outline-style> + <text:notes-configuration text:note-class="footnote" style:num-format="1" text:start-value="0" text:footnotes-position="page" text:start-numbering-at="document"/> + <text:notes-configuration text:note-class="endnote" style:num-format="i" text:start-value="0"/> + <text:linenumbering-configuration text:number-lines="false" text:offset="0.499cm" style:num-format="1" text:number-position="left" text:increment="5"/> + </office:styles> + <office:automatic-styles> + <style:style style:name="Table1" style:family="table"> + <style:table-properties style:width="17cm" table:align="margins"/> + </style:style> + <style:style style:name="Table1.A" style:family="table-column"> + <style:table-column-properties style:column-width="8.5cm" style:rel-column-width="32767*"/> + </style:style> + <style:style style:name="Table1.A1" style:family="table-cell"> + <style:table-cell-properties fo:padding="0.097cm" fo:border-left="0.5pt solid #000000" fo:border-right="none" fo:border-top="0.5pt solid #000000" fo:border-bottom="0.5pt solid #000000"/> + </style:style> + <style:style style:name="Table1.B1" style:family="table-cell"> + <style:table-cell-properties fo:padding="0.097cm" fo:border="0.5pt solid #000000"/> + </style:style> + <style:style style:name="Table1.A2" style:family="table-cell"> + <style:table-cell-properties fo:padding="0.097cm" fo:border-left="0.5pt solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.5pt solid #000000"/> + </style:style> + <style:style style:name="Table1.B2" style:family="table-cell"> + <style:table-cell-properties fo:padding="0.097cm" fo:border-left="0.5pt solid #000000" fo:border-right="0.5pt solid #000000" fo:border-top="none" fo:border-bottom="0.5pt solid #000000"/> + </style:style> + <style:style style:name="P1" style:family="paragraph" style:parent-style-name="Table_20_Contents"> + <style:text-properties/> + </style:style> + <style:style style:name="P2" style:family="paragraph" style:parent-style-name="Standard"> + <style:text-properties/> + </style:style> + <style:style style:name="Sect1" style:family="section"> + <style:section-properties fo:background-color="#158466" style:editable="false"> + <style:columns fo:column-count="1" fo:column-gap="0cm"/> + <style:background-image/> + </style:section-properties> + </style:style> + <style:page-layout style:name="pm1"> + <style:page-layout-properties fo:page-width="21.001cm" fo:page-height="29.7cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="2cm" fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm" loext:margin-gutter="0cm"> + <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:line-style="solid" style:adjustment="left" style:rel-width="25%" style:color="#000000"/> + </style:page-layout-properties> + <style:header-style/> + <style:footer-style/> + </style:page-layout> + </office:automatic-styles> + <office:master-styles> + <style:master-page style:name="Standard" style:page-layout-name="pm1"/> + </office:master-styles> + <office:body> + <office:text> + <text:sequence-decls> + <text:sequence-decl text:display-outline-level="0" text:name="Illustration"/> + <text:sequence-decl text:display-outline-level="0" text:name="Table"/> + <text:sequence-decl text:display-outline-level="0" text:name="Text"/> + <text:sequence-decl text:display-outline-level="0" text:name="Drawing"/> + <text:sequence-decl text:display-outline-level="0" text:name="Figure"/> + </text:sequence-decls> + <text:section text:style-name="Sect1" text:name="Section1"> + <table:table table:name="Table1" table:style-name="Table1"> + <table:table-column table:style-name="Table1.A" table:number-columns-repeated="2"/> + <table:table-row> + <table:table-cell table:style-name="Table1.A1" office:value-type="string"> + <text:p text:style-name="P1">Table in section</text:p> + </table:table-cell> + <table:table-cell table:style-name="Table1.B1" office:value-type="string"> + <text:p text:style-name="Table_20_Contents"/> + </table:table-cell> + </table:table-row> + <table:table-row> + <table:table-cell table:style-name="Table1.A2" office:value-type="string"> + <text:p text:style-name="Table_20_Contents"/> + </table:table-cell> + <table:table-cell table:style-name="Table1.B2" office:value-type="string"> + <text:p text:style-name="Table_20_Contents"/> + </table:table-cell> + </table:table-row> + </table:table> + </text:section> + <text:p text:style-name="P2">Outside section</text:p> + </office:text> + </office:body> +</office:document> \ No newline at end of file diff --git a/sw/qa/extras/unowriter/unowriter.cxx b/sw/qa/extras/unowriter/unowriter.cxx index 9c798b22068e..f39448455bbf 100644 --- a/sw/qa/extras/unowriter/unowriter.cxx +++ b/sw/qa/extras/unowriter/unowriter.cxx @@ -562,6 +562,37 @@ CPPUNIT_TEST_FIXTURE(SwUnoWriter, testSectionAnchorCopyTable) xCursor->getString()); } +CPPUNIT_TEST_FIXTURE(SwUnoWriter, testSectionAnchorProperties) +{ + createSwDoc("section-table.fodt"); + + uno::Reference<text::XTextSectionsSupplier> const xTextSectionsSupplier(mxComponent, + uno::UNO_QUERY); + uno::Reference<container::XIndexAccess> const xSections( + xTextSectionsSupplier->getTextSections(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xSections->getCount()); + + uno::Reference<text::XTextContent> const xSection(xSections->getByIndex(0), uno::UNO_QUERY); + uno::Reference<text::XTextRange> const xAnchor(xSection->getAnchor()); + uno::Reference<beans::XPropertySet> const xAnchorProp(xAnchor, uno::UNO_QUERY); + + // the problem was that the property set didn't work + auto xSecFromProp = getProperty<uno::Reference<text::XTextContent>>(xAnchorProp, "TextSection"); + CPPUNIT_ASSERT_EQUAL(xSection, xSecFromProp); + + xAnchorProp->setPropertyValue("CharHeight", uno::Any(float(64))); + CPPUNIT_ASSERT_EQUAL(float(64), getProperty<float>(xAnchorProp, "CharHeight")); + uno::Reference<beans::XPropertyState> const xAnchorState(xAnchor, uno::UNO_QUERY); + // TODO: why does this return DEFAULT_VALUE instead of DIRECT_VALUE? + CPPUNIT_ASSERT_EQUAL(beans::PropertyState_DEFAULT_VALUE, + xAnchorState->getPropertyState("CharHeight")); + CPPUNIT_ASSERT_EQUAL(beans::PropertyState_DEFAULT_VALUE, + xAnchorState->getPropertyStates({ "CharHeight" })[0]); + CPPUNIT_ASSERT_EQUAL(float(12), xAnchorState->getPropertyDefault("CharHeight").get<float>()); + xAnchorState->setPropertyToDefault("CharHeight"); + CPPUNIT_ASSERT_EQUAL(float(12), getProperty<float>(xAnchorProp, "CharHeight")); +} + CPPUNIT_TEST_FIXTURE(SwUnoWriter, testTextRangeInTable) { createSwDoc("bookmarkintable.fodt"); diff --git a/sw/source/core/doc/docfmt.cxx b/sw/source/core/doc/docfmt.cxx index 1db9943bf142..831ec8092ffe 100644 --- a/sw/source/core/doc/docfmt.cxx +++ b/sw/source/core/doc/docfmt.cxx @@ -364,7 +364,8 @@ void SwDoc::ResetAttrs( const SwPaM &rRg, ++aTmpStt; } - if( pEnd->GetContentIndex() == pEnd->GetNode().GetContentNode()->Len() ) + if (!pEnd->GetNode().IsContentNode() + || pEnd->GetContentIndex() == pEnd->GetNode().GetContentNode()->Len()) { // set up a later, and all CharFormatAttr -> TextFormatAttr ++aTmpEnd; diff --git a/sw/source/core/unocore/unoobj2.cxx b/sw/source/core/unocore/unoobj2.cxx index b5a100b3f563..f043515aefb4 100644 --- a/sw/source/core/unocore/unoobj2.cxx +++ b/sw/source/core/unocore/unoobj2.cxx @@ -1439,12 +1439,13 @@ SwXTextRange::setPropertyValue( { SolarMutexGuard aGuard; - if (!m_pImpl->GetBookmark()) + if (!m_pImpl->GetBookmark() + && (m_pImpl->m_eRangePosition != RANGE_IS_SECTION || !m_pImpl->m_pTableOrSectionFormat)) { throw uno::RuntimeException(u"range has no mark (table?)"_ustr); } SwPaM aPaM(GetDoc().GetNodes()); - GetPositions(aPaM); + GetPositions(aPaM, ::sw::TextRangeMode::AllowNonTextNode); SwUnoCursorHelper::SetPropertyValue(aPaM, m_pImpl->m_rPropSet, rPropertyName, rValue); } @@ -1454,12 +1455,13 @@ SwXTextRange::getPropertyValue(const OUString& rPropertyName) { SolarMutexGuard aGuard; - if (!m_pImpl->GetBookmark()) + if (!m_pImpl->GetBookmark() + && (m_pImpl->m_eRangePosition != RANGE_IS_SECTION || !m_pImpl->m_pTableOrSectionFormat)) { throw uno::RuntimeException(u"range has no mark (table?)"_ustr); } SwPaM aPaM(GetDoc().GetNodes()); - GetPositions(aPaM); + GetPositions(aPaM, ::sw::TextRangeMode::AllowNonTextNode); return SwUnoCursorHelper::GetPropertyValue(aPaM, m_pImpl->m_rPropSet, rPropertyName); } @@ -1501,12 +1503,13 @@ SwXTextRange::getPropertyState(const OUString& rPropertyName) { SolarMutexGuard aGuard; - if (!m_pImpl->GetBookmark()) + if (!m_pImpl->GetBookmark() + && (m_pImpl->m_eRangePosition != RANGE_IS_SECTION || !m_pImpl->m_pTableOrSectionFormat)) { throw uno::RuntimeException(u"range has no mark (table?)"_ustr); } SwPaM aPaM(GetDoc().GetNodes()); - GetPositions(aPaM); + GetPositions(aPaM, ::sw::TextRangeMode::AllowNonTextNode); return SwUnoCursorHelper::GetPropertyState(aPaM, m_pImpl->m_rPropSet, rPropertyName); } @@ -1516,12 +1519,13 @@ SwXTextRange::getPropertyStates(const uno::Sequence< OUString >& rPropertyName) { SolarMutexGuard g; - if (!m_pImpl->GetBookmark()) + if (!m_pImpl->GetBookmark() + && (m_pImpl->m_eRangePosition != RANGE_IS_SECTION || !m_pImpl->m_pTableOrSectionFormat)) { throw uno::RuntimeException(u"range has no mark (table?)"_ustr); } SwPaM aPaM(GetDoc().GetNodes()); - GetPositions(aPaM); + GetPositions(aPaM, ::sw::TextRangeMode::AllowNonTextNode); return SwUnoCursorHelper::GetPropertyStates(aPaM, m_pImpl->m_rPropSet, rPropertyName); } @@ -1530,12 +1534,13 @@ void SAL_CALL SwXTextRange::setPropertyToDefault(const OUString& rPropertyName) { SolarMutexGuard aGuard; - if (!m_pImpl->GetBookmark()) + if (!m_pImpl->GetBookmark() + && (m_pImpl->m_eRangePosition != RANGE_IS_SECTION || !m_pImpl->m_pTableOrSectionFormat)) { throw uno::RuntimeException(u"range has no mark (table?)"_ustr); } SwPaM aPaM(GetDoc().GetNodes()); - GetPositions(aPaM); + GetPositions(aPaM, ::sw::TextRangeMode::AllowNonTextNode); SwUnoCursorHelper::SetPropertyToDefault(aPaM, m_pImpl->m_rPropSet, rPropertyName); } @@ -1545,12 +1550,13 @@ SwXTextRange::getPropertyDefault(const OUString& rPropertyName) { SolarMutexGuard aGuard; - if (!m_pImpl->GetBookmark()) + if (!m_pImpl->GetBookmark() + && (m_pImpl->m_eRangePosition != RANGE_IS_SECTION || !m_pImpl->m_pTableOrSectionFormat)) { throw uno::RuntimeException(u"range has no mark (table?)"_ustr); } SwPaM aPaM(GetDoc().GetNodes()); - GetPositions(aPaM); + GetPositions(aPaM, ::sw::TextRangeMode::AllowNonTextNode); return SwUnoCursorHelper::GetPropertyDefault(aPaM, m_pImpl->m_rPropSet, rPropertyName); } commit 04b3542e5c37e93f5ff8aa088b06bcdf204e38af Author: Xisco Fauli <xiscofa...@libreoffice.org> AuthorDate: Wed Nov 20 09:26:02 2024 +0100 Commit: Adolfo Jayme Barrientos <fit...@ubuntu.com> CommitDate: Mon Nov 25 12:37:19 2024 +0100 update language-subtag-registry to 2024-11-19 How the file was created: mkdir data cd data wget https://www.iana.org/assignments/language-subtag-registry/language-subtag-registry cd .. tar cvjf language-subtag-registry-2024-11-19.tar.bz2 data/language-subtag-registry Change-Id: I1ae31648771642592f8ce5c201ded8fd84eef8c9 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/176821 Tested-by: Jenkins Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org> (cherry picked from commit b4bd177f841db980754e233f7996c1a855647ed4) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/176831 Reviewed-by: Adolfo Jayme Barrientos <fit...@ubuntu.com> diff --git a/download.lst b/download.lst index afae43f0ee6d..d2de689e6c7b 100644 --- a/download.lst +++ b/download.lst @@ -359,8 +359,8 @@ LIBJPEG_TURBO_TARBALL := libjpeg-turbo-2.1.5.1.tar.gz # three static lines # so that git cherry-pick # will not run into conflicts -LANGTAGREG_SHA256SUM := 75bc394dd83ddfd62b172a462db1b66bdb5950f40823ed63b8c7db6b71e37e75 -LANGTAGREG_TARBALL := language-subtag-registry-2024-06-14.tar.bz2 +LANGTAGREG_SHA256SUM := 121f27bd1fabac9a74fb042cf68396b6df74cdf5d1ccc30f4c9b78584cc13864 +LANGTAGREG_TARBALL := language-subtag-registry-2024-11-19.tar.bz2 # three static lines # so that git cherry-pick # will not run into conflicts commit da7ed89441a98adbba917fd9611c38415368a8b6 Author: Mike Kaganski <mike.kagan...@collabora.com> AuthorDate: Sat Nov 23 15:42:02 2024 +0500 Commit: Adolfo Jayme Barrientos <fit...@ubuntu.com> CommitDate: Mon Nov 25 12:36:06 2024 +0100 tdf#164005: also initialize locales in hyphenate() ... which is also used in queryAlternativeSpelling Change-Id: I7f0bbbc6e598d56156efe1446f422f9674ed6f25 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177187 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com> Signed-off-by: Xisco Fauli <xiscofa...@libreoffice.org> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177244 Reviewed-by: Adolfo Jayme Barrientos <fit...@ubuntu.com> diff --git a/lingucomponent/source/hyphenator/hyphen/hyphenimp.cxx b/lingucomponent/source/hyphenator/hyphen/hyphenimp.cxx index da7f9682e16e..a0f23e1e3295 100644 --- a/lingucomponent/source/hyphenator/hyphen/hyphenimp.cxx +++ b/lingucomponent/source/hyphenator/hyphen/hyphenimp.cxx @@ -273,6 +273,7 @@ Reference< XHyphenatedWord > SAL_CALL Hyphenator::hyphenate( const OUString& aWo Reference< XHyphenatedWord > xRes; + ensureLocales(); int k = -1; for (size_t j = 0; j < mvDicts.size(); ++j) { @@ -660,7 +661,6 @@ Reference < XHyphenatedWord > SAL_CALL Hyphenator::queryAlternativeSpelling( sal_Int16 nIndex, const css::uno::Sequence< css::beans::PropertyValue >& aProperties ) { - ensureLocales(); // Firstly we allow only one plus character before the hyphen to avoid to miss the right break point: for (int extrachar = 1; extrachar <= 2; extrachar++) { commit d2905f1a72cc77c96bbcde26022fe39ba96b7a6c Author: Mike Kaganski <mike.kagan...@collabora.com> AuthorDate: Sat Nov 23 09:52:53 2024 +0500 Commit: Adolfo Jayme Barrientos <fit...@ubuntu.com> CommitDate: Mon Nov 25 12:35:48 2024 +0100 tdf#164006: Only use original word's positions, ignore extra encoded length The encoding of the string passed to Hunspell/hyphen service depends on the encoding of the dictionary itself. When the usual UTF-8 encoding is used, the resulting octet string may be longer than the original UTF-16 code unit count. In that case, the length of the buffer receiving the positions will be longer, respectively. But on return, the buffer will only contain data in positions corresponding to the characters, not code units (it is unclear if we even need to pass buffer that large). So just as the following loop only iterates up to nWord length, the calculation of hyphen count must use its length, too, not the length of encWord. I suspect that the use of UTF-16 code units as hyphen positions is wrong; it will break in SMP surrogate pairs. The proper would be to iterate code points. However, I don't have data to test, so let it be TODO/LATER. Change-Id: Ieed5e696e03cb22e3b48fabc14537372bbe74363 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177077 Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com> Tested-by: Jenkins Signed-off-by: Xisco Fauli <xiscofa...@libreoffice.org> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177243 Reviewed-by: Adolfo Jayme Barrientos <fit...@ubuntu.com> diff --git a/lingucomponent/source/hyphenator/hyphen/hyphenimp.cxx b/lingucomponent/source/hyphenator/hyphen/hyphenimp.cxx index d6c061bd4c53..da7f9682e16e 100644 --- a/lingucomponent/source/hyphenator/hyphen/hyphenimp.cxx +++ b/lingucomponent/source/hyphenator/hyphen/hyphenimp.cxx @@ -785,7 +785,8 @@ Reference< XPossibleHyphens > SAL_CALL Hyphenator::createPossibleHyphens( const sal_Int32 nHyphCount = 0; - for ( sal_Int32 i = 0; i < encWord.getLength(); i++) + // FIXME: shouldn't we iterate code points instead? + for (sal_Int32 i = 0; i < nWord.getLength(); i++) { if (hyphens[i]&1) nHyphCount++; commit c899fd58d259c927aae1dcc73829b11252778b5f Author: Mike Kaganski <mike.kagan...@collabora.com> AuthorDate: Sat Nov 23 09:38:02 2024 +0500 Commit: Adolfo Jayme Barrientos <fit...@ubuntu.com> CommitDate: Mon Nov 25 12:35:26 2024 +0100 tdf#164005: make sure to initialize locales before use of Hyphenator Change-Id: I23ab742801ab00b68e4f8c5e7bc415c401e28c37 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177076 Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com> Tested-by: Jenkins Signed-off-by: Xisco Fauli <xiscofa...@libreoffice.org> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177242 Reviewed-by: Adolfo Jayme Barrientos <fit...@ubuntu.com> diff --git a/lingucomponent/source/hyphenator/hyphen/hyphenimp.cxx b/lingucomponent/source/hyphenator/hyphen/hyphenimp.cxx index f2e311b1a432..d6c061bd4c53 100644 --- a/lingucomponent/source/hyphenator/hyphen/hyphenimp.cxx +++ b/lingucomponent/source/hyphenator/hyphen/hyphenimp.cxx @@ -108,7 +108,7 @@ PropertyHelper_Hyphenation& Hyphenator::GetPropHelper_Impl() return *pPropHelper; } -Sequence< Locale > SAL_CALL Hyphenator::getLocales() +void Hyphenator::ensureLocales() { MutexGuard aGuard( GetLinguMutex() ); @@ -212,17 +212,19 @@ Sequence< Locale > SAL_CALL Hyphenator::getLocales() aSuppLocales.realloc(0); } } +} +Sequence< Locale > SAL_CALL Hyphenator::getLocales() +{ + MutexGuard aGuard(GetLinguMutex()); + ensureLocales(); return aSuppLocales; } sal_Bool SAL_CALL Hyphenator::hasLocale(const Locale& rLocale) { MutexGuard aGuard( GetLinguMutex() ); - - if (!aSuppLocales.hasElements()) - getLocales(); - + ensureLocales(); return comphelper::findValue(aSuppLocales, rLocale) != -1; } @@ -658,6 +660,7 @@ Reference < XHyphenatedWord > SAL_CALL Hyphenator::queryAlternativeSpelling( sal_Int16 nIndex, const css::uno::Sequence< css::beans::PropertyValue >& aProperties ) { + ensureLocales(); // Firstly we allow only one plus character before the hyphen to avoid to miss the right break point: for (int extrachar = 1; extrachar <= 2; extrachar++) { @@ -686,6 +689,7 @@ Reference< XPossibleHyphens > SAL_CALL Hyphenator::createPossibleHyphens( const aWord, Sequence< sal_Int16 >() ); } + ensureLocales(); int k = -1; for (size_t j = 0; j < mvDicts.size(); ++j) { diff --git a/lingucomponent/source/hyphenator/hyphen/hyphenimp.hxx b/lingucomponent/source/hyphenator/hyphen/hyphenimp.hxx index 45ebca112544..f60639ff2aa6 100644 --- a/lingucomponent/source/hyphenator/hyphen/hyphenimp.hxx +++ b/lingucomponent/source/hyphenator/hyphen/hyphenimp.hxx @@ -119,6 +119,8 @@ private: static OUString makeLowerCase(const OUString&, CharClass const *); static OUString makeUpperCase(const OUString&, CharClass const *); static OUString makeInitCap(const OUString&, CharClass const *); + + void ensureLocales(); }; #endif commit ea06acb6489c65f382e35f8ea68862596cc09639 Author: Caolán McNamara <caolan.mcnam...@collabora.com> AuthorDate: Mon Nov 25 08:47:31 2024 +0000 Commit: Adolfo Jayme Barrientos <fit...@ubuntu.com> CommitDate: Mon Nov 25 12:31:37 2024 +0100 tdf#163289 Labels can just use mnemonic-widget to indicate what they label the more complex label-for/labelled-by only need to get used when when using something non-standard as a "label" Change-Id: Ibbe13b868622646e20357703e31cfc26e31fac7a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177238 Reviewed-by: Caolán McNamara <caolan.mcnam...@collabora.com> Tested-by: Jenkins (cherry picked from commit 7e1ecd89fb3e389bb3d5f331ed178cb76d8d5cfa) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177251 Reviewed-by: Adolfo Jayme Barrientos <fit...@ubuntu.com> diff --git a/cui/uiconfig/ui/possizetabpage.ui b/cui/uiconfig/ui/possizetabpage.ui index f0f785a97a3c..e57862902047 100644 --- a/cui/uiconfig/ui/possizetabpage.ui +++ b/cui/uiconfig/ui/possizetabpage.ui @@ -234,10 +234,8 @@ <property name="can-focus">False</property> <property name="label" translatable="yes" context="possizetabpage|FT_WIDTH">Wi_dth:</property> <property name="use-underline">True</property> + <property name="mnemonic-widget">MTR_FLD_WIDTH</property> <property name="xalign">0</property> - <accessibility> - <relation type="label-for" target="MTR_FLD_WIDTH"/> - </accessibility> </object> <packing> <property name="left-attach">0</property> @@ -329,9 +327,6 @@ <property name="truncate-multiline">True</property> <property name="adjustment">adjustmentSIZE</property> <property name="digits">2</property> - <accessibility> - <relation type="labelled-by" target="FT_WIDTH"/> - </accessibility> <child internal-child="accessible"> <object class="AtkObject" id="MTR_FLD_WIDTH-atkobject"> <property name="AtkObject::accessible-description" translatable="yes" context="possizetabpage|extended_tip|MTR_FLD_WIDTH">Enter a width for the selected object.</property> @@ -352,9 +347,6 @@ <property name="truncate-multiline">True</property> <property name="adjustment">adjustmentSIZE1</property> <property name="digits">2</property> - <accessibility> - <relation type="labelled-by" target="FT_HEIGHT"/> - </accessibility> <child internal-child="accessible"> <object class="AtkObject" id="MTR_FLD_HEIGHT-atkobject"> <property name="AtkObject::accessible-description" translatable="yes" context="possizetabpage|extended_tip|MTR_FLD_HEIGHT">Enter a height for the selected object.</property> @@ -372,10 +364,8 @@ <property name="can-focus">False</property> <property name="label" translatable="yes" context="possizetabpage|FT_HEIGHT">H_eight:</property> <property name="use-underline">True</property> + <property name="mnemonic-widget">MTR_FLD_HEIGHT</property> <property name="xalign">0</property> - <accessibility> - <relation type="label-for" target="MTR_FLD_HEIGHT"/> - </accessibility> </object> <packing> <property name="left-attach">0</property> commit 31f3e6f15b40514da1567859286d1f567fed0c8c Author: Caolán McNamara <caolan.mcnam...@collabora.com> AuthorDate: Fri Nov 22 09:59:44 2024 +0000 Commit: Michael Stahl <michael.st...@allotropia.de> CommitDate: Mon Nov 25 11:13:00 2024 +0100 crashtesting: invalid iterator on load of forum-de-1233.odt docx export although the actual order doesn't change there is a Delete/Insert of the object in case the order should change. ::Insert will check if sorted and resort if not anyway, so presumably if we just skip the middle-men and resort here if we need to then that is equivalent, but without the invalidation for the already sorted case. #0 SwSortedObjs::Remove (this=0x510ed40, _rAnchoredObj=...) at core/sw/source/core/layout/sortedobjs.cxx:243 #1 0x00007fffce0af130 in SwSortedObjs::Update (this=0x510ed40, _rAnchoredObj=...) at core/sw/source/core/layout/sortedobjs.cxx:282 #2 0x00007fffcdf32c40 in SwAnchoredObject::UpdateObjInSortedList (this=0x51123c0) at core/sw/source/core/layout/anchoredobject.cxx:661 #3 0x00007fffcdf8fc38 in SwFlyFrame::SwClientNotify (this=0x5112260, rMod=..., rHint=...) at core/sw/source/core/layout/fly.cxx:859 #4 0x00007fffcdf9d1bf in SwFlyAtContentFrame::SwClientNotify (this=0x5112260, rMod=..., rHint=...) at core/sw/source/core/layout/flycnt.cxx:112 #5 0x00007fffcd65bca8 in SwModify::CallSwClientNotify (this=0x4e68da0, rHint=...) at core/sw/source/core/attr/calbck.cxx:311 #6 0x00007fffcd65bd71 in sw::BroadcastingModify::CallSwClientNotify (this=0x4e68da0, rHint=...) at core/sw/source/core/attr/calbck.cxx:316 #7 0x00007fffcd65b42f in SwModify::SwClientNotify (this=0x4e68da0, rHint=...) at core/sw/source/core/attr/calbck.cxx:302 #8 0x00007fffcd66771b in SwFormat::SwClientNotify (this=0x4e68da0, rHint=...) at core/sw/source/core/attr/format.cxx:300 #9 0x00007fffcdf4448a in SwFrameFormat::SwClientNotify (this=0x4e68da0, rMod=..., rHint=...) at core/sw/source/core/layout/atrfrm.cxx:2843 #10 0x00007fffcd65be1e in sw::ClientNotifyAttrChg (rModify=..., aSet=..., aOld=..., aNew=...) at core/sw/source/core/attr/calbck.cxx:325 #11 0x00007fffcd66948e in SwFormat::SetFormatAttr (this=0x4e68da0, rSet=SfxItemSet of pool 0x1bcebe0 with parent 0x4e68e68 and Which ranges: [(88, 141), (159, 159), (1014, 1034)] = {...}) at core/sw/source/core/attr/format.cxx:597 #12 0x00007fffce649a2c in SwXFrame::setPropertyValue (this=0x5e47b90, rPropertyName="Size", _rValue=uno::Any("com.sun.star.awt.Size": ...)) at core/sw/source/core/unocore/unoframe.cxx:1867 #13 0x00007fffcdc4d7ea in SwTextBoxHelper::syncProperty (pShape=0x4dce770, nWID=89, nMemberID=0 ' at core/sw/source/core/doc/textboxhelper.cxx:995 #14 0x00007fffcdf2e2d7 in SwAnchoredDrawObject::GetObjBoundRect (this=0x4e69dd0) at core/sw/source/core/layout/anchoreddrawobject.cxx:757 #15 0x00007fffcdf320ca in SwAnchoredObject::GetObjRectWithSpaces (this=0x4e69dd0) at core/sw/source/core/layout/anchoredobject.cxx:575 #16 0x00007fffcdf31eaa in SwAnchoredObject::InvalidateObjPosForConsiderWrapInfluence (this=0x4e69dd0) at core/sw/source/core/layout/anchoredobject.cxx:400 #17 0x00007fffcdf32be5 in SwAnchoredObject::UpdateObjInSortedList (this=0x510e530) at core/sw/source/core/layout/anchoredobject.cxx:654 #18 0x00007fffcdf8fc38 in SwFlyFrame::SwClientNotify (this=0x510e3d0, rMod=..., rHint=...) at core/sw/source/core/layout/fly.cxx:859 #19 0x00007fffcdf9d1bf in SwFlyAtContentFrame::SwClientNotify (this=0x510e3d0, rMod=..., rHint=...) at core/sw/source/core/layout/flycnt.cxx:112 #20 0x00007fffcd65bca8 in SwModify::CallSwClientNotify (this=0x4e364a0, rHint=...) at core/sw/source/core/attr/calbck.cxx:311 #21 0x00007fffcd65bd71 in sw::BroadcastingModify::CallSwClientNotify (this=0x4e364a0, rHint=...) at core/sw/source/core/attr/calbck.cxx:316 #22 0x00007fffcd65b42f in SwModify::SwClientNotify (this=0x4e364a0, rHint=...) at core/sw/source/core/attr/calbck.cxx:302 #23 0x00007fffcd66771b in SwFormat::SwClientNotify (this=0x4e364a0, rHint=...) at core/sw/source/core/attr/format.cxx:300 #24 0x00007fffcdf4448a in SwFrameFormat::SwClientNotify (this=0x4e364a0, rMod=..., rHint=...) at core/sw/source/core/layout/atrfrm.cxx:2843 #25 0x00007fffcd65be1e in sw::ClientNotifyAttrChg (rModify=..., aSet=..., aOld=..., aNew=...) at core/sw/source/core/attr/calbck.cxx:325 #26 0x00007fffcd66948e in SwFormat::SetFormatAttr (this=0x4e364a0, rSet=SfxItemSet of pool 0x1bcebe0 with parent 0x4e36568 and Which ranges: [(88, 141), (159, 159), (1014, 1034)] = {...}) at core/sw/source/core/attr/format.cxx:597 #27 0x00007fffce649a2c in SwXFrame::setPropertyValue (this=0x4a86e10, rPropertyName="Size", _rValue=uno::Any("com.sun.star.awt.Size": ...)) at core/sw/source/core/unocore/unoframe.cxx:1867 #28 0x00007fffcdc4d7ea in SwTextBoxHelper::syncProperty (pShape=0x4dc65f0, nWID=89, nMemberID=0 ' at core/sw/source/core/doc/textboxhelper.cxx:995 #29 0x00007fffcdf2e2d7 in SwAnchoredDrawObject::GetObjBoundRect (this=0x4e3a0d0) at core/sw/source/core/layout/anchoreddrawobject.cxx:757 #30 0x00007fffcdf320ca in SwAnchoredObject::GetObjRectWithSpaces (this=0x4e3a0d0) at core/sw/source/core/layout/anchoredobject.cxx:575 #31 0x00007fffcdf815b3 in (anonymous namespace)::IsNextContentFullPage (rThis=...) at core/sw/source/core/layout/flowfrm.cxx:217 #32 0x00007fffcdf81002 in SwFlowFrame::IsKeep (this=0x4e5a630, rKeep=..., rBreak=..., bCheckIfLastRowShouldKeep=false) at core/sw/source/core/layout/flowfrm.cxx:259 Change-Id: If2191e8b99d1b0347bab54a704013ce0a9a19410 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/176992 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolan.mcnam...@collabora.com> (cherry picked from commit f2cf4d91687fcebcad90a839dd5232a28b47e6e1) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177030 Reviewed-by: Michael Stahl <michael.st...@allotropia.de> diff --git a/sw/source/core/layout/sortedobjs.cxx b/sw/source/core/layout/sortedobjs.cxx index e0c29d51801c..da3fba27598a 100644 --- a/sw/source/core/layout/sortedobjs.cxx +++ b/sw/source/core/layout/sortedobjs.cxx @@ -275,8 +275,10 @@ void SwSortedObjs::Update( SwAnchoredObject& _rAnchoredObj ) return; } - Remove( _rAnchoredObj ); - Insert( _rAnchoredObj ); + if (is_sorted()) + return; + + UpdateAll(); } void SwSortedObjs::UpdateAll() commit a5edc358b158ec017f26ab83ca42e0af31ce0147 Author: Mike Kaganski <mike.kagan...@collabora.com> AuthorDate: Sat Nov 23 11:02:07 2024 +0500 Commit: Xisco Fauli <xiscofa...@libreoffice.org> CommitDate: Mon Nov 25 10:25:02 2024 +0100 tdf#162195: use SwFrame::IsHiddenNow when building index Before commit 0c96119895b347f8eb5bb89f393351bd3c02b9f1 (tdf#159565 prerequisite: make hidden sections have zero-height frames, 2024-02-15), the hidden sections were absent from layout, so didn't appear in the SwTOXBaseSection::Update* functions. Now they are zero-height, but present, so their visibility must be taken into account explicitly. Change-Id: I95cc72b383a99e1f65152579c5458e253a3f60ea Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177079 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177102 Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org> diff --git a/sw/qa/extras/uiwriter/data/IndexElementsInHiddenSections.fodt b/sw/qa/extras/uiwriter/data/IndexElementsInHiddenSections.fodt new file mode 100644 index 000000000000..5fb3d809404f --- /dev/null +++ b/sw/qa/extras/uiwriter/data/IndexElementsInHiddenSections.fodt @@ -0,0 +1,63 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" office:version="1.4" office:mimetype="application/vnd.oasis.opendocument.text"> + <office:styles> + <style:style style:name="CustomTOCStyle" style:family="paragraph" style:class="text"/> + </office:styles> + <office:body> + <office:text> + <text:table-of-content> + <text:table-of-content-source text:outline-level="1" text:use-index-source-styles="true"> + <text:index-title-template text:style-name="Contents_20_Heading">Table of Contents</text:index-title-template> + <text:table-of-content-entry-template text:outline-level="1" text:style-name="Contents_20_1"> + <text:index-entry-link-start text:style-name="Index_20_Link"/> + <text:index-entry-chapter/> + <text:index-entry-text/> + <text:index-entry-tab-stop style:type="right" style:leader-char="."/> + <text:index-entry-page-number/> + <text:index-entry-link-end/> + </text:table-of-content-entry-template> + <text:index-source-styles text:outline-level="1"> + <text:index-source-style text:style-name="CustomTOCStyle"/> + </text:index-source-styles> + </text:table-of-content-source> + </text:table-of-content> + <text:section text:name="Section Visible"> + <text:h text:outline-level="1">Section Visible</text:h> + <text:p>foo</text:p> + <table:table table:name="Table1"> + <table:table-column/> + <table:table-row> + <table:table-cell/> + </table:table-row> + </table:table> + </text:section> + <text:section text:name="Section Hidden" text:display="none"> + <text:h text:outline-level="1">Section Hidden</text:h> + <text:p>bar</text:p> + <text:p/> + <text:p>A level-1 <text:toc-mark-start text:id="IMark1" text:outline-level="1"/>entry<text:toc-mark-end text:id="IMark1"/></text:p> + <text:p/> + <text:p text:style-name="CustomTOCStyle">CustomTOCStyle paragraph</text:p> + <table:table table:name="Table2"> + <table:table-column/> + <table:table-row> + <table:table-cell/> + </table:table-row> + </table:table> + </text:section> + <text:table-index> + <text:table-index-source text:use-caption="false" text:caption-sequence-name="Table" text:caption-sequence-format="text"> + <text:index-title-template text:style-name="Table_20_index_20_heading">Index of Tables</text:index-title-template> + <text:table-index-entry-template text:style-name="Table_20_index_20_1"> + <text:index-entry-link-start text:style-name="Index_20_Link"/> + <text:index-entry-text/> + <text:index-entry-tab-stop style:type="right" style:leader-char="."/> + <text:index-entry-page-number/> + <text:index-entry-link-end/> + </text:table-index-entry-template> + </text:table-index-source> + </text:table-index> + </office:text> + </office:body> +</office:document> \ No newline at end of file diff --git a/sw/qa/extras/uiwriter/uiwriter9.cxx b/sw/qa/extras/uiwriter/uiwriter9.cxx index 8523bd95c9eb..2f8d9b68ba2f 100644 --- a/sw/qa/extras/uiwriter/uiwriter9.cxx +++ b/sw/qa/extras/uiwriter/uiwriter9.cxx @@ -677,6 +677,49 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest9, testTdf144752) CPPUNIT_ASSERT_EQUAL(u"Word"_ustr, pWrtShell->GetSelText()); } +CPPUNIT_TEST_FIXTURE(SwUiWriterTest9, testTdf162195) +{ + // Given a document, which has some index entries in a hidden section + createSwDoc("IndexElementsInHiddenSections.fodt"); + + auto xIndexSupplier(mxComponent.queryThrow<css::text::XDocumentIndexesSupplier>()); + auto xIndexes = xIndexSupplier->getDocumentIndexes(); + CPPUNIT_ASSERT(xIndexes); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xIndexes->getCount()); // A ToC and a table index + + auto xToC(xIndexes->getByIndex(0).queryThrow<css::text::XDocumentIndex>()); + xToC->update(); + // Without the fix, all the elements from the hidden section appeared in the index + CPPUNIT_ASSERT_EQUAL(u"Table of Contents" SAL_NEWLINE_STRING "Section Visible 1"_ustr, + xToC->getAnchor()->getString()); + + auto xTables(xIndexes->getByIndex(1).queryThrow<css::text::XDocumentIndex>()); + xTables->update(); + // Without the fix, all the elements from the hidden section appeared in the index + CPPUNIT_ASSERT_EQUAL(u"Index of Tables" SAL_NEWLINE_STRING "Table1 1"_ustr, + xTables->getAnchor()->getString()); + + // Show the hidden section + auto xTextSectionsSupplier = mxComponent.queryThrow<css::text::XTextSectionsSupplier>(); + auto xSections = xTextSectionsSupplier->getTextSections(); + CPPUNIT_ASSERT(xSections); + auto xSection + = xSections->getByName(u"Section Hidden"_ustr).queryThrow<css::beans::XPropertySet>(); + xSection->setPropertyValue(u"IsVisible"_ustr, css::uno::Any(true)); + + xToC->update(); + CPPUNIT_ASSERT_EQUAL(u"Table of Contents" SAL_NEWLINE_STRING + "Section Visible 1" SAL_NEWLINE_STRING + "Section Hidden 1" SAL_NEWLINE_STRING "entry 1" SAL_NEWLINE_STRING + "CustomTOCStyle paragraph 1"_ustr, + xToC->getAnchor()->getString()); + + xTables->update(); + CPPUNIT_ASSERT_EQUAL(u"Index of Tables" SAL_NEWLINE_STRING "Table1 1" SAL_NEWLINE_STRING + "Table2 1"_ustr, + xTables->getAnchor()->getString()); +} + } // end of anonymous namespace CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/sw/source/core/doc/doctxm.cxx b/sw/source/core/doc/doctxm.cxx index 4463bdc7c29b..2c82418d5c96 100644 --- a/sw/source/core/doc/doctxm.cxx +++ b/sw/source/core/doc/doctxm.cxx @@ -1350,6 +1350,48 @@ void SwTOXBaseSection::UpdateMarks(const SwTOXInternational& rIntl, } } +static SwContentFrame* useContentNodeForIndex(const SwContentNode* node, bool fromChapter, + const SwTextNode* chapter, const SwRootFrame* layout) +{ + if (!node) + return nullptr; + if (!node->HasWriterListeners()) + return nullptr; + if (!node->GetNodes().IsDocNodes()) + return nullptr; + if (layout && layout->HasMergedParas() && node->GetRedlineMergeFlag() == SwNode::Merge::Hidden) + return nullptr; + auto pFrame = node->getLayoutFrame(layout); + if (!pFrame) + return nullptr; + if (fromChapter && !IsHeadingContained(chapter, *node)) + return nullptr; + if (pFrame->IsHiddenNow()) + return nullptr; + + return pFrame; +} + +static bool useTextNodeForIndex(const SwTextNode* node, int maxLevel, bool fromChapter, + const SwTextNode* chapter, const SwRootFrame* layout) +{ + auto pTextFrame = static_cast<const SwTextFrame*>(useContentNodeForIndex(node, fromChapter, chapter, layout)); + if (!pTextFrame) + return false; + if (node->Len() == 0) + return false; + if (maxLevel >= 0 && node->GetAttrOutlineLevel() > maxLevel) + return false; + if (node->IsHiddenByParaField()) + return false; + if (node->HasHiddenCharAttribute(true)) + return false; + if (layout && layout->HasMergedParas() && pTextFrame->GetTextNodeForParaProps() != node) + return false; + + return true; +} + /// Generate table of contents from outline void SwTOXBaseSection::UpdateOutline( const SwTextNode* pOwnChapterNode, SwRootFrame const*const pLayout) @@ -1362,14 +1404,7 @@ void SwTOXBaseSection::UpdateOutline( const SwTextNode* pOwnChapterNode, { ::SetProgressState( 0, pDoc->GetDocShell() ); SwTextNode* pTextNd = pOutlineNode->GetTextNode(); - if( pTextNd && pTextNd->Len() && pTextNd->HasWriterListeners() && - o3tl::make_unsigned( pTextNd->GetAttrOutlineLevel()) <= GetLevel() && - pTextNd->getLayoutFrame(pLayout) && - !pTextNd->IsHiddenByParaField() && - !pTextNd->HasHiddenCharAttribute( true ) && - (!pLayout || !pLayout->HasMergedParas() - || static_cast<SwTextFrame*>(pTextNd->getLayoutFrame(pLayout))->GetTextNodeForParaProps() == pTextNd) && - ( !IsFromChapter() || IsHeadingContained(pOwnChapterNode, *pTextNd) )) + if (useTextNodeForIndex(pTextNd, GetLevel(), IsFromChapter(), pOwnChapterNode, pLayout)) { InsertSorted(MakeSwTOXSortTabBase<SwTOXPara>(pLayout, *pTextNd, SwTOXElement::OutlineLevel)); } @@ -1380,6 +1415,7 @@ void SwTOXBaseSection::UpdateOutline( const SwTextNode* pOwnChapterNode, void SwTOXBaseSection::UpdateTemplate(const SwTextNode* pOwnChapterNode, SwRootFrame const*const pLayout) { + int nMaxLevel = SwTOXBase::GetType() == TOX_CONTENT ? GetLevel() : -1; SwDoc* pDoc = GetFormat()->GetDoc(); for(sal_uInt16 i = 0; i < MAXLEVEL; i++) { @@ -1404,15 +1440,7 @@ void SwTOXBaseSection::UpdateTemplate(const SwTextNode* pOwnChapterNode, { ::SetProgressState( 0, pDoc->GetDocShell() ); - if (pTextNd->GetText().getLength() && - pTextNd->getLayoutFrame(pLayout) && - pTextNd->GetNodes().IsDocNodes() && - // tdf#40142 - consider level settings of the various text nodes - (TOX_CONTENT != SwTOXBase::GetType() || - o3tl::make_unsigned(pTextNd->GetAttrOutlineLevel()) <= GetLevel()) && - (!pLayout || !pLayout->HasMergedParas() - || static_cast<SwTextFrame*>(pTextNd->getLayoutFrame(pLayout))->GetTextNodeForParaProps() == pTextNd) && - (!IsFromChapter() || IsHeadingContained(pOwnChapterNode, *pTextNd))) + if (useTextNodeForIndex(pTextNd, nMaxLevel, IsFromChapter(), pOwnChapterNode, pLayout)) { InsertSorted(MakeSwTOXSortTabBase<SwTOXPara>(pLayout, *pTextNd, SwTOXElement::Template, i + 1)); } @@ -1438,9 +1466,7 @@ void SwTOXBaseSection::UpdateSequence(const SwTextNode* pOwnChapterNode, SwTextNode& rTextNode = pTextField->GetTextNode(); ::SetProgressState( 0, pDoc->GetDocShell() ); - if (rTextNode.GetText().getLength() && - rTextNode.getLayoutFrame(pLayout) && - ( !IsFromChapter() || IsHeadingContained(pOwnChapterNode, rTextNode)) + if (useTextNodeForIndex(&rTextNode, -1, IsFromChapter(), pOwnChapterNode, pLayout) && (!pLayout || !pLayout->IsHideRedlines() || !sw::IsFieldDeletedInModel(pDoc->getIDocumentRedlineAccess(), *pTextField))) { @@ -1481,8 +1507,7 @@ void SwTOXBaseSection::UpdateAuthorities(const SwTOXInternational& rIntl, const SwTextNode& rTextNode = pFormatField->GetTextField()->GetTextNode(); ::SetProgressState( 0, pDoc->GetDocShell() ); - if (rTextNode.GetText().getLength() && - rTextNode.getLayoutFrame(pLayout) && + if (useTextNodeForIndex(&rTextNode, -1, false, nullptr, pLayout) && (!pLayout || !pLayout->IsHideRedlines() || !sw::IsFieldDeletedInModel(pDoc->getIDocumentRedlineAccess(), *pTextField))) { @@ -1630,10 +1655,7 @@ void SwTOXBaseSection::UpdateContent( SwTOXElement eMyType, } } - if (pCNd->getLayoutFrame(pLayout) - && (!pLayout || !pLayout->HasMergedParas() - || pCNd->GetRedlineMergeFlag() != SwNode::Merge::Hidden) - && ( !IsFromChapter() || IsHeadingContained(pOwnChapterNode, *pCNd))) + if (useContentNodeForIndex(pCNd, IsFromChapter(), pOwnChapterNode, pLayout)) { std::unique_ptr<SwTOXPara> pNew( MakeSwTOXSortTabBase<SwTOXPara>( pLayout, *pCNd, eMyType, @@ -1670,10 +1692,7 @@ void SwTOXBaseSection::UpdateTable(const SwTextNode* pOwnChapterNode, while( nullptr != ( pCNd = SwNodes::GoNext( &aContentIdx ) ) && aContentIdx.GetIndex() < pTableNd->EndOfSectionIndex() ) { - if (pCNd->getLayoutFrame(pLayout) - && (!pLayout || !pLayout->HasMergedParas() - || pCNd->GetRedlineMergeFlag() != SwNode::Merge::Hidden) - && (!IsFromChapter() || IsHeadingContained(pOwnChapterNode, *pCNd))) + if (useContentNodeForIndex(pCNd, IsFromChapter(), pOwnChapterNode, pLayout)) { std::unique_ptr<SwTOXTable> pNew(new SwTOXTable( *pCNd )); if( IsLevelFromChapter() && TOX_TABLES != SwTOXBase::GetType()) diff --git a/sw/source/core/tox/tox.cxx b/sw/source/core/tox/tox.cxx index ef38ff3a17b6..476ecd804166 100644 --- a/sw/source/core/tox/tox.cxx +++ b/sw/source/core/tox/tox.cxx @@ -197,6 +197,9 @@ void SwTOXMark::Notify(const SfxHint& rHint) // Check for being hidden by hidden redlines if (pLayout && pLayout->HasMergedParas() && sw::IsMarkHintHidden(*pLayout, rNode, rTextMark)) return; + // Check for being hidden by hidden sections + if (auto pFrame(rNode.getLayoutFrame(pLayout)); !pFrame || pFrame->IsHiddenNow()) + return; pCollectLayoutHint->m_rMarks.push_back(rTextMark); } } commit 92fea20939beaeeef76589022130e63796967350 Author: Caolán McNamara <caolan.mcnam...@collabora.com> AuthorDate: Sun Nov 24 15:43:56 2024 +0000 Commit: Caolán McNamara <caolan.mcnam...@collabora.com> CommitDate: Sun Nov 24 22:20:14 2024 +0100 Resolves: tdf#164026 explicitly make these insensitive Change-Id: Ifa399d9bb42bad8e5209f5937052fa9b616f8914 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177215 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolan.mcnam...@collabora.com> (cherry picked from commit 737c4e624f660970eb66dd9a80de3e0306647937) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177221 Reviewed-by: Ilmari Lauhakangas <ilmari.lauhakan...@libreoffice.org> diff --git a/cui/source/tabpages/transfrm.cxx b/cui/source/tabpages/transfrm.cxx index 4ccf16dfd822..9cfeff9b1ff8 100644 --- a/cui/source/tabpages/transfrm.cxx +++ b/cui/source/tabpages/transfrm.cxx @@ -392,6 +392,7 @@ SvxSlantTabPage::SvxSlantTabPage(weld::Container* pPage, weld::DialogController* m_aControlX[i] = m_xBuilder->weld_metric_spin_button("controlx" + OUString::number(i+1), FieldUnit::CM); m_aControlGroupY[i] = m_xBuilder->weld_widget("controlgroupy" + OUString::number(i+1)); m_aControlY[i] = m_xBuilder->weld_metric_spin_button("controly" + OUString::number(i+1), FieldUnit::CM); + m_aControlGroups[i]->set_sensitive(false); } // this page needs ExchangeSupport commit e7fe6c626ee8c8fe97f2af95b62d58643e478bb4 Author: Noel Grandin <noel.gran...@collabora.co.uk> AuthorDate: Fri Nov 1 11:39:58 2024 +0200 Commit: Thorsten Behrens <thorsten.behr...@allotropia.de> CommitDate: Sun Nov 24 01:01:14 2024 +0100 tdf#163667 speed up spreadsheet with lots of cond formatting Attempt to avoid the cost of GetCondResult when dealing with large runs of identical cells Change-Id: If9192a9858e6785263ea1621e98d1b1d5de74c4c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/175909 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com> Reviewed-by: Caolán McNamara <caolan.mcnam...@collabora.com> (cherry picked from commit 7d7d94b7713d86e2fd972c3b81845eaffb5761e5) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/175898 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> (cherry picked from commit 2c280a6de9cba0ba0cc9f1ae2ee120c0011eca09) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/175983 Reviewed-by: Thorsten Behrens <thorsten.behr...@allotropia.de> diff --git a/sc/inc/cellvalue.hxx b/sc/inc/cellvalue.hxx index d5a29c607c90..f1e74ef96fa6 100644 --- a/sc/inc/cellvalue.hxx +++ b/sc/inc/cellvalue.hxx @@ -128,6 +128,8 @@ public: SC_DLLPUBLIC ScRefCellValue( ScDocument& rDoc, const ScAddress& rPos ); SC_DLLPUBLIC ScRefCellValue( ScDocument& rDoc, const ScAddress& rPos, sc::ColumnBlockPosition& rBlockPos ); + bool operator==(const ScRefCellValue&) const; + void clear(); CellType getType() const { return meType; } diff --git a/sc/source/core/data/cellvalue.cxx b/sc/source/core/data/cellvalue.cxx index 4330ea972992..b74b841a988f 100644 --- a/sc/source/core/data/cellvalue.cxx +++ b/sc/source/core/data/cellvalue.cxx @@ -685,4 +685,24 @@ bool ScRefCellValue::equalsWithoutFormat( const ScRefCellValue& r ) const return equalsWithoutFormatImpl(*this, r); } +bool ScRefCellValue::operator==( const ScRefCellValue& r ) const +{ + if (meType != r.meType) + return false; + + switch (meType) + { + case CELLTYPE_NONE: + return true; + case CELLTYPE_VALUE: + return mfValue == r.mfValue; + case CELLTYPE_STRING: + return mpString == r.mpString; + case CELLTYPE_FORMULA: + return equalsFormulaCells(getFormula(), r.getFormula()); + default: + return false; + } +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/core/data/column3.cxx b/sc/source/core/data/column3.cxx index e0f5006f0d63..32348d8bd134 100644 --- a/sc/source/core/data/column3.cxx +++ b/sc/source/core/data/column3.cxx @@ -2721,26 +2721,44 @@ void ScColumn::GetBackColorFilterEntries(SCROW nRow1, SCROW nRow2, ScFilterEntri return; ScAddress aCell(GetCol(), 0, GetTab()); + ScDocument& rDoc = GetDoc(); + const ScPatternAttr* pPrevPattern = nullptr; + ScRefCellValue aPrevCellValue; while (nRow1 <= nRow2) { aCell.SetRow(nRow1); Color aBackColor; bool bCondBackColor = false; + const ScPatternAttr* pPattern = rDoc.GetPattern(aCell.Col(), aCell.Row(), aCell.Tab()); + ScConditionalFormat* pCondFormat = rDoc.GetCondFormat(aCell.Col(), aCell.Row(), aCell.Tab()); - const ScPatternAttr* pPattern = GetDoc().GetPattern(aCell.Col(), aCell.Row(), aCell.Tab()); if (pPattern) { + // Speed up processing when dealing with runs of identical cells. We only + // care about collecting unique colors, so no need to process a cell if the result + // will be the same as the previous cell. + // Which we can only do if there is no conditional format to override the color on this cell. + if (!pCondFormat) + { + ScRefCellValue aCellValue = GetCellValue(nRow1); + if (pPrevPattern == pPattern && aCellValue == aPrevCellValue) + { + nRow1++; + continue; + } + aPrevCellValue = aCellValue; + pPrevPattern = pPattern; + } if (!pPattern->GetItem(ATTR_CONDITIONAL).GetCondFormatData().empty()) { - const SfxItemSet* pCondSet = GetDoc().GetCondResult(GetCol(), nRow1, GetTab()); + const SfxItemSet* pCondSet = rDoc.GetCondResult(GetCol(), nRow1, GetTab()); const SvxBrushItem* pBrush = &pPattern->GetItem(ATTR_BACKGROUND, pCondSet); aBackColor = pBrush->GetColor(); bCondBackColor = true; } } - ScConditionalFormat* pCondFormat = GetDoc().GetCondFormat(aCell.Col(), aCell.Row(), aCell.Tab()); if (pCondFormat) { for (size_t nFormat = 0; nFormat < pCondFormat->size(); nFormat++) @@ -2754,6 +2772,8 @@ void ScColumn::GetBackColorFilterEntries(SCROW nRow1, SCROW nRow2, ScFilterEntri { aBackColor = *oColor; bCondBackColor = true; + // we are overriding the color, so we need to clear the one-item cache. + pPrevPattern = nullptr; } } } @@ -2761,7 +2781,7 @@ void ScColumn::GetBackColorFilterEntries(SCROW nRow1, SCROW nRow2, ScFilterEntri if (!bCondBackColor) { - const SvxBrushItem* pBrush = GetDoc().GetAttr(aCell, ATTR_BACKGROUND); + const SvxBrushItem* pBrush = rDoc.GetAttr(aCell, ATTR_BACKGROUND); aBackColor = pBrush->GetColor(); } commit 15e86b4fe6a49fced04d9599104195e9eee89a9d Author: Xisco Fauli <xiscofa...@libreoffice.org> AuthorDate: Wed Nov 6 20:56:11 2024 +0100 Commit: Thorsten Behrens <thorsten.behr...@allotropia.de> CommitDate: Sun Nov 24 01:00:54 2024 +0100 gpgme: Upgrade to 1.24.0 * external/gpgmepp/gettid.patch fixes /opt/rh/gcc-toolset-12/root/usr/libexec/gcc/x86_64-redhat-linux/12/ld: ./.libs/libgpgme.so: undefined reference to `gettid' * external/gpgmepp/strcasecmp.patch fixes libgpgme.lib(key.obj) : error LNK2019: unresolved external symbol _strcasecmp referenced in function __gpgme_key_append_name Downloaded from https://www.gnupg.org/ftp/gcrypt/gpgme/gpgme-1.24.0.tar.bz2 Change-Id: I2f2587f5157db7610d6ffaa84b49f9677ba1cc4c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/176160 Tested-by: Jenkins Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org> (cherry picked from commit 96fb0457f49975a7e9a90eb92442e678b5d279ba) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/176237 Reviewed-by: Thorsten Behrens <thorsten.behr...@allotropia.de> diff --git a/download.lst b/download.lst index c286476b1bd9..afae43f0ee6d 100644 --- a/download.lst +++ b/download.lst @@ -282,8 +282,8 @@ GLM_TARBALL := glm-1.0.1.zip # three static lines # so that git cherry-pick # will not run into conflicts -GPGME_SHA256SUM := 9499e8b1f33cccb6815527a1bc16049d35a6198a6c5fae0185f2bd561bce5224 -GPGME_TARBALL := gpgme-1.23.2.tar.bz2 +GPGME_SHA256SUM := 61e3a6ad89323fecfaff176bc1728fb8c3312f2faa83424d9d5077ba20f5f7da +GPGME_TARBALL := gpgme-1.24.0.tar.bz2 # three static lines # so that git cherry-pick # will not run into conflicts diff --git a/external/gpgmepp/ExternalPackage_gpgmepp.mk b/external/gpgmepp/ExternalPackage_gpgmepp.mk index be32afd6b324..098df90cefd8 100644 --- a/external/gpgmepp/ExternalPackage_gpgmepp.mk +++ b/external/gpgmepp/ExternalPackage_gpgmepp.mk @@ -15,8 +15,8 @@ ifneq ($(DISABLE_DYNLOADING),TRUE) ifeq ($(OS),LINUX) -$(eval $(call gb_ExternalPackage_add_file,gpgmepp,$(LIBO_LIB_FOLDER)/libgpgmepp.so.6,lang/cpp/src/.libs/libgpgmepp.so.6.20.1)) -$(eval $(call gb_ExternalPackage_add_file,gpgmepp,$(LIBO_LIB_FOLDER)/libgpgme.so.11,src/.libs/libgpgme.so.11.32.1)) +$(eval $(call gb_ExternalPackage_add_file,gpgmepp,$(LIBO_LIB_FOLDER)/libgpgmepp.so.6,lang/cpp/src/.libs/libgpgmepp.so.6.21.0)) +$(eval $(call gb_ExternalPackage_add_file,gpgmepp,$(LIBO_LIB_FOLDER)/libgpgme.so.11,src/.libs/libgpgme.so.11.33.0)) else ifeq ($(OS),MACOSX) diff --git a/external/gpgmepp/UnpackedTarball_gpgmepp.mk b/external/gpgmepp/UnpackedTarball_gpgmepp.mk index dcbda38d591d..58126ba4a29d 100644 --- a/external/gpgmepp/UnpackedTarball_gpgmepp.mk +++ b/external/gpgmepp/UnpackedTarball_gpgmepp.mk @@ -24,9 +24,11 @@ $(eval $(call gb_UnpackedTarball_add_patches,gpgmepp, \ $(if $(filter MSC,$(COM)),external/gpgmepp/w32-fix-win32-macro.patch.1) \ $(if $(filter MSC,$(COM)),external/gpgmepp/w32-fix-libtool.patch.1) \ $(if $(filter MSC,$(COM)),external/gpgmepp/w32-add-initializer.patch.1) \ + $(if $(filter MSC,$(COM)),external/gpgmepp/strcasecmp.patch) \ external/gpgmepp/w32-build-fixes-2.patch \ $(if $(filter LINUX,$(OS)),external/gpgmepp/asan.patch) \ $(if $(filter LINUX,$(OS)),external/gpgmepp/rpath.patch) \ + $(if $(filter LINUX,$(OS)),external/gpgmepp/gettid.patch) \ external/gpgmepp/ubsan.patch \ external/gpgmepp/c++20.patch \ external/gpgmepp/clang-cl.patch \ diff --git a/external/gpgmepp/gettid.patch b/external/gpgmepp/gettid.patch new file mode 100644 index 000000000000..292cc4a4baa7 --- /dev/null +++ b/external/gpgmepp/gettid.patch @@ -0,0 +1,14 @@ +--- src/debug.c 2024-11-08 13:08:06.174085089 +0100 ++++ src/debug.c 2024-11-08 13:11:43.133601548 +0100 +@@ -152,8 +152,10 @@ + #ifdef HAVE_W32_SYSTEM + thread = (uintptr_t)GetCurrentThreadId (); + #elif defined(__linux) ++#ifdef SYS_gettid + thread = (uintptr_t)gettid (); + #endif ++#endif + if (sizeof (thread) < len) + { + int zerolen = len; + diff --git a/external/gpgmepp/strcasecmp.patch b/external/gpgmepp/strcasecmp.patch new file mode 100644 index 000000000000..4dc382a07b03 --- /dev/null +++ b/external/gpgmepp/strcasecmp.patch @@ -0,0 +1,14 @@ +--- src/key.c 2024-11-08 20:45:01.826019597 +0100 ++++ src/key.c 2024-11-08 20:46:15.369716357 +0100 +@@ -19,6 +19,10 @@ + * SPDX-License-Identifier: LGPL-2.1-or-later + */ + ++#ifdef _MSC_VER ++# define strcasecmp _stricmp ++#endif ++ + #if HAVE_CONFIG_H + #include <config.h> + #endif + diff --git a/external/gpgmepp/w32-fix-win32-macro.patch.1 b/external/gpgmepp/w32-fix-win32-macro.patch.1 index 8ab7b0fab089..7041385f7962 100644 --- a/external/gpgmepp/w32-fix-win32-macro.patch.1 +++ b/external/gpgmepp/w32-fix-win32-macro.patch.1 @@ -121,17 +121,6 @@ diff -ur gpgmepp.org/lang/cpp/src/key.cpp gpgmepp/lang/cpp/src/key.cpp const GpgME::Key::Null GpgME::Key::null; namespace GpgME -diff -ur gpgmepp.org/lang/cpp/src/key.h gpgmepp/lang/cpp/src/key.h ---- gpgmepp.org/lang/cpp/src/key.h 2017-03-20 20:10:15.000000000 +0100 -+++ gpgmepp/lang/cpp/src/key.h 2017-11-20 17:07:51.551632000 +0100 -@@ -30,7 +30,6 @@ - #include "gpgmefw.h" - - #include <memory> --#include <sys/time.h> - - #include <vector> - #include <algorithm> diff -ur gpgmepp.org/lang/qt/src/qgpgme_export.h gpgmepp/lang/qt/src/qgpgme_export.h --- gpgmepp.org/lang/qt/src/qgpgme_export.h 2016-11-03 17:32:30.000000000 +0100 +++ gpgmepp/lang/qt/src/qgpgme_export.h 2017-11-20 16:58:27.395388000 +0100 diff --git a/external/gpgmepp/w32-include.patch b/external/gpgmepp/w32-include.patch index 0fda72c2b072..30fdba5f8f26 100644 --- a/external/gpgmepp/w32-include.patch +++ b/external/gpgmepp/w32-include.patch @@ -20,23 +20,3 @@ #include <process.h> #include "priv-io.h" ---- lang/cpp/src/gpgaddexistingsubkeyeditinteractor.h -+++ lang/cpp/src/gpgaddexistingsubkeyeditinteractor.h -@@ -27,6 +27,7 @@ - #include "editinteractor.h" - - #include <memory> -+#include <string> - - namespace GpgME - { ---- lang/cpp/src/gpgrevokekeyeditinteractor.h -+++ lang/cpp/src/gpgrevokekeyeditinteractor.h -@@ -28,6 +28,7 @@ - #include "global.h" - - #include <memory> -+#include <string> - #include <vector> - - namespace GpgME commit d5c8d611b8c17841b01b6d093e0a33ebdc66b776 Author: Michael Stahl <michael.st...@allotropia.de> AuthorDate: Wed Nov 20 19:30:54 2024 +0100 Commit: Thorsten Behrens <thorsten.behr...@allotropia.de> CommitDate: Sun Nov 24 01:00:19 2024 +0100 sw: fix hiding/unhiding section via condition The problem was that when un-hiding a section, table rows that contained only empty paragraphs were not reformatted and remained at height 0. It turns out that the table row that became visible did so because the cells had a VertOrientation different from NONE and so SwContentNotify::ImplDestroy() invalidated the cells' printarea. However, the real problem isn't in the layout code at all, as it then turns out that the reason why anything is reformatted at all is that there are docinfo fields on the same page as the section and also in the paragraphs at the start of the section, and these get invalidated somehow after unhiding the section. Unhiding the section didn't actually invalidate anything in the layout because in ImplSetHiddenFlag() no change is detected, and that is because the section was first hidden by removing its (false) condition, which calls SwSection::SetSectionData() and that didn't call ImplSetHiddenFlag(), again relying on docinfo field update to trigger the relayouting. -e ... etc. - the rest is truncated