From 52c3ff2e32ea7db2656571c0188733a0cfcd3540 Mon Sep 17 00:00:00 2001 From: Bogdan Buzea Date: Sun, 23 Jun 2024 16:54:53 +0200 Subject: [PATCH 001/194] Resave with newer Glade version Change-Id: Ia266b96c1cc558ca4eb17194a58a1623c3f3ed54 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169392 Tested-by: Jenkins Reviewed-by: Taichi Haradaguchi <20001722@ymail.ne.jp> --- sc/uiconfig/scalc/ui/solverprogressdialog.ui | 100 +++++++++---------- 1 file changed, 50 insertions(+), 50 deletions(-) diff --git a/sc/uiconfig/scalc/ui/solverprogressdialog.ui b/sc/uiconfig/scalc/ui/solverprogressdialog.ui index 914214616eb7..75afe4825ba1 100644 --- a/sc/uiconfig/scalc/ui/solverprogressdialog.ui +++ b/sc/uiconfig/scalc/ui/solverprogressdialog.ui @@ -1,69 +1,32 @@ - + - False - 6 + False + 6 Solving... False - dialog + dialog - False + False vertical 12 - - - - True - False - 24 - - - True - False - 0 - Solving in progress... - - - 0 - 0 - - - - - True - False - 0 - (time limit # seconds) - - - 0 - 1 - - - - - False - True - 0 - - - False - end + False + end _OK True False - True - True - True - True - True + True + True + True + True + True False @@ -75,10 +38,47 @@ False True - end + end 2 + + + + True + False + 24 + + + True + False + Solving in progress... + 0 + + + 0 + 0 + + + + + True + False + (time limit # seconds) + 0 + + + 0 + 1 + + + + + False + True + 0 + + From 21249bc76ac8aca79d99ef109bf4130609a687a6 Mon Sep 17 00:00:00 2001 From: Bogdan Buzea Date: Sun, 23 Jun 2024 20:33:15 +0200 Subject: [PATCH 002/194] Resave with newer Glade version Change-Id: I658a8a32cda30ecacd92dda284c924aa0137e14d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169418 Reviewed-by: Taichi Haradaguchi <20001722@ymail.ne.jp> Tested-by: Jenkins --- svx/uiconfig/ui/xformspage.ui | 53 +++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/svx/uiconfig/ui/xformspage.ui b/svx/uiconfig/ui/xformspage.ui index 69bd495ffab4..255439c41264 100644 --- a/svx/uiconfig/ui/xformspage.ui +++ b/svx/uiconfig/ui/xformspage.ui @@ -1,5 +1,5 @@ - + @@ -14,27 +14,28 @@ True - False + False True True - 6 + 6 vertical 6 True - True + True True - icons - False + icons + False 2 True + False start Add Item - True - res/tb01.png + True + res/tb01.png False @@ -44,10 +45,11 @@ True + False start Add Element - True - res/tb02.png + True + res/tb02.png False @@ -57,10 +59,11 @@ True + False start Add Attribute - True - res/tb03.png + True + res/tb03.png False @@ -70,10 +73,11 @@ True + False start Edit - True - res/tb04.png + True + res/tb04.png False @@ -83,7 +87,7 @@ True - False + False False @@ -93,10 +97,11 @@ True + False start Delete - True - res/tb05.png + True + res/tb05.png False @@ -118,22 +123,22 @@ True - True + True True True - in + in True - True - True + True + True True True liststore1 - False + False True - 1 - True + 1 + True From aa1c24888d8b2c5edec553f29ceaafd7bb57337b Mon Sep 17 00:00:00 2001 From: Bogdan Buzea Date: Sun, 23 Jun 2024 16:32:29 +0200 Subject: [PATCH 003/194] Resave with newer Glade version Change-Id: Id2bc88f90d5e73ffa2c99d0fc4c3aa1fb55f568d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169386 Tested-by: Jenkins Reviewed-by: Taichi Haradaguchi <20001722@ymail.ne.jp> --- sw/uiconfig/swriter/ui/infonotfounddialog.ui | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/sw/uiconfig/swriter/ui/infonotfounddialog.ui b/sw/uiconfig/swriter/ui/infonotfounddialog.ui index 9dd8d806d88e..32a9278aa128 100644 --- a/sw/uiconfig/swriter/ui/infonotfounddialog.ui +++ b/sw/uiconfig/swriter/ui/infonotfounddialog.ui @@ -1,29 +1,29 @@ - + - False + False Find False True - dialog - True + dialog + True ok Search key not found. - False + False vertical 12 - False + False False True - end + end 0 From 9a074032582deafe8faa7f56c639e54900b3174c Mon Sep 17 00:00:00 2001 From: Bogdan Buzea Date: Sun, 23 Jun 2024 16:25:12 +0200 Subject: [PATCH 004/194] Resave with newer Glade version Change-Id: Ieaa8a90ddef6a49a3dfbb59575bf8defebeaa854 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169382 Tested-by: Jenkins Reviewed-by: Taichi Haradaguchi <20001722@ymail.ne.jp> --- .../uiconfig/ui/designsavemodifieddialog.ui | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/dbaccess/uiconfig/ui/designsavemodifieddialog.ui b/dbaccess/uiconfig/ui/designsavemodifieddialog.ui index 57e781bb643d..446e31cc1a17 100644 --- a/dbaccess/uiconfig/ui/designsavemodifieddialog.ui +++ b/dbaccess/uiconfig/ui/designsavemodifieddialog.ui @@ -1,30 +1,30 @@ - + - False + False False True - dialog - True - question + dialog + True + question Do you want to save the changes? - The relation design has been changed. + The relation design has been changed. - False + False vertical 12 - False + False _No True - True - True + True + True True @@ -37,10 +37,10 @@ _Yes True - True - True - True - True + True + True + True + True True @@ -53,8 +53,8 @@ _Cancel True - True - True + True + True True @@ -67,7 +67,7 @@ False True - end + end 0 From 6b04c3ff862633896ec1607d3d8a860e310566e0 Mon Sep 17 00:00:00 2001 From: Bogdan Buzea Date: Sun, 23 Jun 2024 19:27:36 +0200 Subject: [PATCH 005/194] Resave with newer Glade version Change-Id: Ia4b40678632d825143c7e9ac2e8719b7e109a64a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169410 Tested-by: Jenkins Reviewed-by: Taichi Haradaguchi <20001722@ymail.ne.jp> --- .../uiconfig/spropctrlr/ui/browserpage.ui | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/extensions/uiconfig/spropctrlr/ui/browserpage.ui b/extensions/uiconfig/spropctrlr/ui/browserpage.ui index 171c837276c4..f61d4d219824 100644 --- a/extensions/uiconfig/spropctrlr/ui/browserpage.ui +++ b/extensions/uiconfig/spropctrlr/ui/browserpage.ui @@ -1,40 +1,40 @@ - + - + True - False + False True True - 6 + 6 True - True + True True True - never + never True - False + False True - False + False True True vertical True - False + False start True True - 6 + 6 vertical 6 True @@ -54,30 +54,30 @@ - 0 - 0 + 0 + 0 True - False - 0 - none + False + 0 + none True - True - False - False + True 12 6 + False + False True - False + False Help @@ -86,8 +86,8 @@ - 0 - 1 + 0 + 1 From c50f771ec85d05ae7396b4503d575244484c37de Mon Sep 17 00:00:00 2001 From: Bogdan Buzea Date: Sun, 23 Jun 2024 19:33:33 +0200 Subject: [PATCH 006/194] Resave with newer Glade version Change-Id: Ibc7f9eb2d9fd0db2861ab7dd62410d534eab1459 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169414 Reviewed-by: Taichi Haradaguchi <20001722@ymail.ne.jp> Tested-by: Jenkins --- .../swriter/ui/warndatasourcedialog.ui | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/sw/uiconfig/swriter/ui/warndatasourcedialog.ui b/sw/uiconfig/swriter/ui/warndatasourcedialog.ui index 31e08207571d..56bc44cd1aa2 100644 --- a/sw/uiconfig/swriter/ui/warndatasourcedialog.ui +++ b/sw/uiconfig/swriter/ui/warndatasourcedialog.ui @@ -1,34 +1,34 @@ - + - False + False Data Source Not Found False True - dialog - True - warning + dialog + True + warning The data source “%1” was not found. - The connection to the data source could not be established. Please check the connection settings. + The connection to the data source could not be established. Please check the connection settings. - False + False vertical 12 - False + False Check Connection Settings... True - True - True - True - True - True + True + True + True + True + True False @@ -40,10 +40,10 @@ _Cancel True - True - True + True + True True - right + right False @@ -55,7 +55,7 @@ False True - end + end 0 From b2613a9fef8b359c4bc000c8ce82da65cf561c2c Mon Sep 17 00:00:00 2001 From: Bogdan Buzea Date: Sun, 23 Jun 2024 19:28:53 +0200 Subject: [PATCH 007/194] Resave with newer Glade version Change-Id: I85e6a1df5196f8e071a94142f429687417f59b60 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169411 Tested-by: Jenkins Reviewed-by: Taichi Haradaguchi <20001722@ymail.ne.jp> --- sd/uiconfig/sdraw/ui/bulletsandnumbering.ui | 105 +++++--------------- 1 file changed, 27 insertions(+), 78 deletions(-) diff --git a/sd/uiconfig/sdraw/ui/bulletsandnumbering.ui b/sd/uiconfig/sdraw/ui/bulletsandnumbering.ui index 327c45e0b31b..3e680869329d 100644 --- a/sd/uiconfig/sdraw/ui/bulletsandnumbering.ui +++ b/sd/uiconfig/sdraw/ui/bulletsandnumbering.ui @@ -1,32 +1,29 @@ - + - False - 6 + False + 6 Bullets and Numbering True - mouse - dialog - - - + mouse + dialog - False + False vertical 12 - False - end + False + end Reset True - True - True + True + True False @@ -38,10 +35,10 @@ _OK True - True - True - True - True + True + True + True + True True @@ -54,8 +51,8 @@ _Cancel True - True - True + True + True True @@ -68,8 +65,8 @@ _Help True - True - True + True + True True @@ -83,47 +80,23 @@ False True - end + end 0 True - True + True True True True - True + True True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -135,43 +108,19 @@ True - False + False Position 3 - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -183,12 +132,12 @@ True - False + False Customize 4 - False + False From b3f58b0058bc507952e5678eb5c4dcd9f1979364 Mon Sep 17 00:00:00 2001 From: Bogdan Buzea Date: Sun, 23 Jun 2024 19:21:28 +0200 Subject: [PATCH 008/194] Resave with newer Glade version Change-Id: If519ec2547d462b418ce51dbd56f0f497c29b4c2 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169406 Tested-by: Jenkins Reviewed-by: Taichi Haradaguchi <20001722@ymail.ne.jp> --- cui/uiconfig/ui/borderbackgrounddialog.ui | 55 +++++++++++------------ 1 file changed, 26 insertions(+), 29 deletions(-) diff --git a/cui/uiconfig/ui/borderbackgrounddialog.ui b/cui/uiconfig/ui/borderbackgrounddialog.ui index fb9a2e46cccb..ec761999f19b 100644 --- a/cui/uiconfig/ui/borderbackgrounddialog.ui +++ b/cui/uiconfig/ui/borderbackgrounddialog.ui @@ -1,34 +1,31 @@ - + - False - 6 + False + 6 Border / Background False True - dialog - - - + dialog - False + False vertical 12 - False - end + False + end _OK True - True - True - True - True + True + True + True + True True @@ -41,8 +38,8 @@ _Cancel True - True - True + True + True True @@ -55,8 +52,8 @@ _Help True - True - True + True + True True @@ -70,8 +67,8 @@ _Reset True - True - True + True + True True @@ -84,23 +81,23 @@ False True - end + end 0 True - True + True True True True - True + True True - False + False @@ -109,18 +106,18 @@ True - False + False Borders - False + False True - False + False @@ -132,12 +129,12 @@ True - False + False Background 1 - False + False From 6670727bbbe26e6b2b9bf9b93fb85bf2b2b1aca6 Mon Sep 17 00:00:00 2001 From: Bogdan Buzea Date: Sun, 23 Jun 2024 16:34:19 +0200 Subject: [PATCH 009/194] Resave with newer Glade version Change-Id: I66bcfe5859bfc9f89cfcd8fc11e0ce6532e3eeb7 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169387 Tested-by: Jenkins Reviewed-by: Taichi Haradaguchi <20001722@ymail.ne.jp> --- desktop/uiconfig/ui/installforalldialog.ui | 38 +++++++++++----------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/desktop/uiconfig/ui/installforalldialog.ui b/desktop/uiconfig/ui/installforalldialog.ui index d2f645220f13..7247a971080a 100644 --- a/desktop/uiconfig/ui/installforalldialog.ui +++ b/desktop/uiconfig/ui/installforalldialog.ui @@ -1,31 +1,31 @@ - + - False + False False True - dialog - True - question + dialog + True + question For whom do you want to install the extension? - Make sure that no further users are working with the same %PRODUCTNAME, when installing an extension for all users in a multi user environment. + Make sure that no further users are working with the same %PRODUCTNAME, when installing an extension for all users in a multi user environment. - False + False vertical 24 - False + False _For all users True - True - True - True + True + True + True False @@ -37,11 +37,11 @@ _Only for me True - True - True - True - True - True + True + True + True + True + True False @@ -53,8 +53,8 @@ _Cancel True - True - True + True + True True @@ -67,7 +67,7 @@ False True - end + end 0 From 23f7ef1c6d06262d1557f8978b48c5275b3d9585 Mon Sep 17 00:00:00 2001 From: Miklos Vajna Date: Mon, 24 Jun 2024 08:58:03 +0200 Subject: [PATCH 010/194] svx: prefix members of SdrUndoMoveObj See tdf#94879 for motivation. Change-Id: If81831d76617da9b9d6ac5aef2e223065e939c4a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169446 Reviewed-by: Miklos Vajna Tested-by: Jenkins --- include/svx/svdundo.hxx | 4 ++-- svx/source/svdraw/svdundo.cxx | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/include/svx/svdundo.hxx b/include/svx/svdundo.hxx index 743afaced0e3..95504986d1e1 100644 --- a/include/svx/svdundo.hxx +++ b/include/svx/svdundo.hxx @@ -188,10 +188,10 @@ public: class SVXCORE_DLLPUBLIC SdrUndoMoveObj final : public SdrUndoObj { - Size aDistance; // Distance by which we move + Size m_aDistance; // Distance by which we move public: - SdrUndoMoveObj(SdrObject& rNewObj, const Size& rDist): SdrUndoObj(rNewObj),aDistance(rDist) {} + SdrUndoMoveObj(SdrObject& rNewObj, const Size& rDist): SdrUndoObj(rNewObj),m_aDistance(rDist) {} virtual ~SdrUndoMoveObj() override; virtual void Undo() override; diff --git a/svx/source/svdraw/svdundo.cxx b/svx/source/svdraw/svdundo.cxx index defe2b362f79..b711a5f4398a 100644 --- a/svx/source/svdraw/svdundo.cxx +++ b/svx/source/svdraw/svdundo.cxx @@ -521,12 +521,12 @@ void SdrUndoMoveObj::Undo() // Trigger PageChangeCall ImpShowPageOfThisObject(); - mxObj->Move(Size(-aDistance.Width(),-aDistance.Height())); + mxObj->Move(Size(-m_aDistance.Width(),-m_aDistance.Height())); } void SdrUndoMoveObj::Redo() { - mxObj->Move(Size(aDistance.Width(),aDistance.Height())); + mxObj->Move(Size(m_aDistance.Width(),m_aDistance.Height())); // Trigger PageChangeCall ImpShowPageOfThisObject(); @@ -539,7 +539,7 @@ OUString SdrUndoMoveObj::GetComment() const void SdrUndoMoveObj::SdrRepeat(SdrView& rView) { - rView.MoveMarkedObj(aDistance); + rView.MoveMarkedObj(m_aDistance); } bool SdrUndoMoveObj::CanSdrRepeat(SdrView& rView) const From 3725d51647b318b680a003afc7cf20c02dc06ef8 Mon Sep 17 00:00:00 2001 From: Michael Stahl Date: Fri, 21 Jun 2024 20:06:32 +0200 Subject: [PATCH 011/194] ucb: webdav-curl: try to get the curl error message for more errors Change-Id: Iad39deeeef55498628616762b6b8dddc5a8f7475 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169345 Tested-by: Jenkins Reviewed-by: Michael Stahl --- ucb/source/ucp/webdav-curl/CurlSession.cxx | 21 +++++++++++++------- ucb/source/ucp/webdav-curl/webdavcontent.cxx | 11 +++++----- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/ucb/source/ucp/webdav-curl/CurlSession.cxx b/ucb/source/ucp/webdav-curl/CurlSession.cxx index 183f8ad6f96a..65f5f684b9fb 100644 --- a/ucb/source/ucp/webdav-curl/CurlSession.cxx +++ b/ucb/source/ucp/webdav-curl/CurlSession.cxx @@ -992,13 +992,16 @@ auto CurlProcessor::ProcessRequestImpl( switch (rc) { case CURLE_UNSUPPORTED_PROTOCOL: - throw DAVException(DAVException::DAV_UNSUPPORTED); + throw DAVException(DAVException::DAV_UNSUPPORTED, u""_ustr, + rtl::OStringToOUString(errorString, RTL_TEXTENCODING_UTF8)); case CURLE_COULDNT_RESOLVE_PROXY: - throw DAVException(DAVException::DAV_HTTP_LOOKUP, rSession.m_Proxy); + throw DAVException(DAVException::DAV_HTTP_LOOKUP, rSession.m_Proxy, + rtl::OStringToOUString(errorString, RTL_TEXTENCODING_UTF8)); case CURLE_COULDNT_RESOLVE_HOST: throw DAVException( DAVException::DAV_HTTP_LOOKUP, - ConnectionEndPointString(rSession.m_URI.GetHost(), rSession.m_URI.GetPort())); + ConnectionEndPointString(rSession.m_URI.GetHost(), rSession.m_URI.GetPort()), + rtl::OStringToOUString(errorString, RTL_TEXTENCODING_UTF8)); case CURLE_COULDNT_CONNECT: case CURLE_SSL_CONNECT_ERROR: case CURLE_SSL_CERTPROBLEM: @@ -1020,7 +1023,8 @@ auto CurlProcessor::ProcessRequestImpl( case CURLE_AUTH_ERROR: throw DAVException( DAVException::DAV_HTTP_AUTH, // probably? - ConnectionEndPointString(rSession.m_URI.GetHost(), rSession.m_URI.GetPort())); + ConnectionEndPointString(rSession.m_URI.GetHost(), rSession.m_URI.GetPort()), + rtl::OStringToOUString(errorString, RTL_TEXTENCODING_UTF8)); case CURLE_WRITE_ERROR: case CURLE_READ_ERROR: // error returned from our callbacks case CURLE_OUT_OF_MEMORY: @@ -1033,13 +1037,16 @@ auto CurlProcessor::ProcessRequestImpl( case CURLE_RECURSIVE_API_CALL: throw DAVException( DAVException::DAV_HTTP_FAILED, - ConnectionEndPointString(rSession.m_URI.GetHost(), rSession.m_URI.GetPort())); + ConnectionEndPointString(rSession.m_URI.GetHost(), rSession.m_URI.GetPort()), + rtl::OStringToOUString(errorString, RTL_TEXTENCODING_UTF8)); case CURLE_OPERATION_TIMEDOUT: throw DAVException( DAVException::DAV_HTTP_TIMEOUT, - ConnectionEndPointString(rSession.m_URI.GetHost(), rSession.m_URI.GetPort())); + ConnectionEndPointString(rSession.m_URI.GetHost(), rSession.m_URI.GetPort()), + rtl::OStringToOUString(errorString, RTL_TEXTENCODING_UTF8)); default: // lots of generic errors - throw DAVException(DAVException::DAV_HTTP_ERROR, u""_ustr, 0); + throw DAVException(DAVException::DAV_HTTP_ERROR, u""_ustr, + rtl::OStringToOUString(errorString, RTL_TEXTENCODING_UTF8)); } } // error handling part 2: HTTP status codes diff --git a/ucb/source/ucp/webdav-curl/webdavcontent.cxx b/ucb/source/ucp/webdav-curl/webdavcontent.cxx index e2533fee9bca..96c0a4f1de61 100644 --- a/ucb/source/ucp/webdav-curl/webdavcontent.cxx +++ b/ucb/source/ucp/webdav-curl/webdavcontent.cxx @@ -3913,6 +3913,9 @@ Content::ResourceType Content::getResourceType( break; case USC_CONNECTION_TIMED_OUT: e = DAVException::DAV_HTTP_TIMEOUT; + throw DAVException(e, + ConnectionEndPointString(aHostName, nPort), + aDAVOptions.getHttpResponseStatusText()); break; case USC_AUTH_FAILED: e = DAVException::DAV_HTTP_AUTH; @@ -4065,11 +4068,9 @@ void Content::getResourceOptions( // cache the internal unofficial status code aDAVOptions.setHttpResponseStatusCode(e.getError() == DAVException::DAV_HTTP_CONNECT ? USC_CONNECT_FAILED : USC_CONNECTION_TIMED_OUT); - if (e.getError() == DAVException::DAV_HTTP_CONNECT) - { // ugly: this is not a HTTP status from the server but message - // from libcurl but the string member is unused... - aDAVOptions.setHttpResponseStatusText(e.getMessage()); - } + // ugly: this is not a HTTP status from the server but message + // from libcurl but the string member is unused... + aDAVOptions.setHttpResponseStatusText(e.getMessage()); // used only internally, so the text doesn't really matter.. aStaticDAVOptionsCache.addDAVOptions( aDAVOptions, m_nOptsCacheLifeNotFound ); From 1f26aa7f42795aed775646cbb616f5ee4e60326c Mon Sep 17 00:00:00 2001 From: Ilmari Lauhakangas Date: Sat, 22 Jun 2024 22:04:39 +0300 Subject: [PATCH 012/194] tdf#161743 Calc Sidebar Functions deck: move focus to document upon Esc while in empty search field Change-Id: I7bb6aaeb69712b293c74bfcf34ab65c4869c860c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169352 Tested-by: Ilmari Lauhakangas Tested-by: Jenkins Reviewed-by: Ilmari Lauhakangas --- sc/source/ui/formdlg/dwfunctr.cxx | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/sc/source/ui/formdlg/dwfunctr.cxx b/sc/source/ui/formdlg/dwfunctr.cxx index 690db4c8aac1..504703f3b478 100644 --- a/sc/source/ui/formdlg/dwfunctr.cxx +++ b/sc/source/ui/formdlg/dwfunctr.cxx @@ -443,6 +443,20 @@ IMPL_LINK(ScFunctionWin, KeyInputHdl, const KeyEvent&, rEvent, bool) break; case KEY_ESCAPE: { + // Escape in an empty search field should move focus to the document, + // adhering to Sidebar guidelines + if (m_xSearchString->get_text().isEmpty()) + { + if (SfxViewShell* pCurSh = SfxViewShell::Current()) + { + vcl::Window* pShellWnd = pCurSh->GetWindow(); + + if (pShellWnd) + pShellWnd->GrabFocusToDocument(); + } + bHandled = true; + break; + } m_xSearchString->set_text(u""_ustr); UpdateFunctionList(u""_ustr); bHandled = true; From 6fb5e52479b0a3e6f63ae96886884b3653abddaf Mon Sep 17 00:00:00 2001 From: Jim Raykowski Date: Wed, 12 Jun 2024 12:59:05 -0800 Subject: [PATCH 013/194] tdf#160541 Resolves Quickfind sidebar: present results with some indication of location in document Change-Id: I9262511c46b9a89fd7c5d7fe93551fecbd21cecf Reviewed-on: https://gerrit.libreoffice.org/c/core/+/168832 Reviewed-by: Jim Raykowski Tested-by: Jenkins --- sw/source/uibase/sidebar/QuickFindPanel.cxx | 80 ++++++++++++++++++--- sw/source/uibase/sidebar/QuickFindPanel.hxx | 2 + 2 files changed, 74 insertions(+), 8 deletions(-) diff --git a/sw/source/uibase/sidebar/QuickFindPanel.cxx b/sw/source/uibase/sidebar/QuickFindPanel.cxx index cffca4511ef2..753888702587 100644 --- a/sw/source/uibase/sidebar/QuickFindPanel.cxx +++ b/sw/source/uibase/sidebar/QuickFindPanel.cxx @@ -21,6 +21,8 @@ #include #include #include +#include +#include const int MinimumPanelWidth = 250; @@ -60,7 +62,6 @@ QuickFindPanel::QuickFindPanel(weld::Widget* pParent) , m_xSearchFindsList(m_xBuilder->weld_tree_view(u"searchfinds"_ustr)) , m_nRowHeight(m_xSearchFindsList->get_height_rows(4)) , m_pWrtShell(::GetActiveWrtShell()) - { m_xContainer->set_size_request(MinimumPanelWidth, -1); m_xSearchFindsList->set_size_request(1, m_nRowHeight); @@ -75,6 +76,7 @@ QuickFindPanel::QuickFindPanel(weld::Widget* pParent) LINK(this, QuickFindPanel, SearchFindsListSelectionChangedHandler)); m_xSearchFindsList->connect_row_activated( LINK(this, QuickFindPanel, SearchFindsListRowActivatedHandler)); + m_xSearchFindsList->connect_mouse_press(LINK(this, QuickFindPanel, MousePressHandler)); } QuickFindPanel::~QuickFindPanel() @@ -83,6 +85,16 @@ QuickFindPanel::~QuickFindPanel() m_xSearchFindsList.reset(); } +IMPL_LINK(QuickFindPanel, MousePressHandler, const MouseEvent&, rMEvt, bool) +{ + if (std::unique_ptr xEntry(m_xSearchFindsList->make_iterator()); + m_xSearchFindsList->get_dest_row_at_pos(rMEvt.GetPosPixel(), xEntry.get(), false, false)) + { + return m_xSearchFindsList->get_id(*xEntry)[0] == '-'; + } + return false; +} + IMPL_LINK_NOARG(QuickFindPanel, SearchFindEntryActivateHandler, weld::Entry&, bool) { FillSearchFindsList(); @@ -100,19 +112,55 @@ IMPL_LINK(QuickFindPanel, SearchFindsListRender, weld::TreeView::render_args, aP vcl::RenderContext& rRenderContext = std::get<0>(aPayload); const ::tools::Rectangle& rRect = std::get<1>(aPayload); const OUString& rId = std::get<3>(aPayload); - int nIndex = m_xSearchFindsList->find_id(rId); - OUString aEntry(m_xSearchFindsList->get_text(nIndex)); - DrawTextFlags const nTextStyle = DrawTextFlags::Left | DrawTextFlags::VCenter - | DrawTextFlags::MultiLine | DrawTextFlags::WordBreak; + tools::Rectangle aRect( rRect.TopLeft(), Size(rRenderContext.GetOutputSize().Width() - rRect.Left(), rRect.GetHeight())); - rRenderContext.DrawText(aRect, aEntry, nTextStyle); + + int nIndex = m_xSearchFindsList->find_id(rId); + OUString aEntry(m_xSearchFindsList->get_text(nIndex)); + + const bool bPageEntry = rId[0] == '-'; + if (!bPageEntry) + { + rRenderContext.DrawText(aRect, aEntry, + DrawTextFlags::VCenter | DrawTextFlags::MultiLine + | DrawTextFlags::WordBreak); + } + else + { + aEntry = aEntry.copy(1); // remove '-' + tools::Long aTextWidth = rRenderContext.GetTextWidth(aEntry); + tools::Long aTextHeight = rRenderContext.GetTextHeight(); + + rRenderContext.Push(); + rRenderContext.SetLineColor(COL_BLACK); + rRenderContext.DrawLine( + aRect.LeftCenter(), + Point(aRect.Center().AdjustX(-(aTextWidth / 2)) - 4, aRect.Center().getY())); + rRenderContext.DrawText(Point(aRect.Center().AdjustX(-(aTextWidth / 2)), + aRect.Center().AdjustY(-(aTextHeight / 2) - 1)), + aEntry); + rRenderContext.DrawLine( + Point(aRect.Center().AdjustX(aTextWidth / 2) + 5, aRect.Center().getY()), + aRect.RightCenter()); + rRenderContext.Pop(); + } } IMPL_LINK_NOARG(QuickFindPanel, SearchFindsListSelectionChangedHandler, weld::TreeView&, void) { - std::unique_ptr& rxPaM = m_vPaMs[m_xSearchFindsList->get_cursor_index()]; + std::unique_ptr xEntry(m_xSearchFindsList->make_iterator()); + if (!m_xSearchFindsList->get_cursor(xEntry.get())) + return; + + OUString sId = m_xSearchFindsList->get_id(*xEntry); + + // check for page number entry + if (sId[0] == '-') + return; + + std::unique_ptr& rxPaM = m_vPaMs[sId.toInt64()]; m_pWrtShell->StartAction(); bool bFound = false; @@ -144,6 +192,14 @@ IMPL_LINK_NOARG(QuickFindPanel, SearchFindsListSelectionChangedHandler, weld::Tr IMPL_LINK_NOARG(QuickFindPanel, SearchFindsListRowActivatedHandler, weld::TreeView&, bool) { + std::unique_ptr xEntry(m_xSearchFindsList->make_iterator()); + if (!m_xSearchFindsList->get_cursor(xEntry.get())) + return false; + + // check for page number entry + if (m_xSearchFindsList->get_id(*xEntry)[0] == '-') + return false; + m_pWrtShell->GetView().GetEditWin().GrabFocus(); return true; } @@ -216,7 +272,7 @@ void QuickFindPanel::FillSearchFindsList() }); // fill list - for (int i = 0; std::unique_ptr & xPaM : m_vPaMs) + for (sal_uInt16 nPage = 0, i = 0; std::unique_ptr & xPaM : m_vPaMs) { SwPosition* pMarkPosition = xPaM->GetMark(); SwPosition* pPointPosition = xPaM->GetPoint(); @@ -282,6 +338,14 @@ void QuickFindPanel::FillSearchFindsList() } } + // tdf#161291 indicate page of search finds + if (xPaM->GetPageNum() != nPage) + { + nPage = xPaM->GetPageNum(); + OUString sPageEntry(u"-"_ustr + SwResId(ST_PGE) + u" "_ustr + OUString::number(nPage)); + m_xSearchFindsList->append(sPageEntry, sPageEntry); + } + auto nCount = nMarkIndex - nStartIndex; OUString sTextBeforeFind = OUString::Concat(sNodeText.subView(nStartIndex, nCount)); auto nCount1 = nPointIndex - nMarkIndex; diff --git a/sw/source/uibase/sidebar/QuickFindPanel.hxx b/sw/source/uibase/sidebar/QuickFindPanel.hxx index af95bd18fb44..1cf241554662 100644 --- a/sw/source/uibase/sidebar/QuickFindPanel.hxx +++ b/sw/source/uibase/sidebar/QuickFindPanel.hxx @@ -36,6 +36,8 @@ private: DECL_LINK(SearchFindsListSelectionChangedHandler, weld::TreeView&, void); DECL_LINK(SearchFindEntryChangedHandler, weld::Entry&, void); DECL_LINK(SearchFindsListRowActivatedHandler, weld::TreeView&, bool); + DECL_LINK(MousePressHandler, const MouseEvent&, bool); + void FillSearchFindsList(); }; } From da278e421909653ba85054daf6103991e56ffa26 Mon Sep 17 00:00:00 2001 From: Noel Grandin Date: Mon, 24 Jun 2024 12:04:57 +0200 Subject: [PATCH 014/194] flatten XMLParaContext a little to avoid pointer-chasing in some hot methods Change-Id: Ie0dc1e47628a8ae1279abe2e95894dabae82f3ed Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169454 Reviewed-by: Noel Grandin Tested-by: Jenkins --- xmloff/source/text/txthints.hxx | 54 +++++++++++++++++++++++++++++ xmloff/source/text/txtparai.cxx | 60 +++++++++------------------------ xmloff/source/text/txtparai.hxx | 4 +-- 3 files changed, 71 insertions(+), 47 deletions(-) create mode 100644 xmloff/source/text/txthints.hxx diff --git a/xmloff/source/text/txthints.hxx b/xmloff/source/text/txthints.hxx new file mode 100644 index 000000000000..235a6c97e91b --- /dev/null +++ b/xmloff/source/text/txthints.hxx @@ -0,0 +1,54 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +#pragma once + +#include +#include +#include + +class XMLHint_Impl; +class XMLIndexMarkHint_Impl; + +class XMLHints_Impl +{ +private: + std::vector> m_Hints; + std::unordered_map m_IndexHintsById; + css::uno::Reference m_xCrossRefHeadingBookmark; + +public: + void push_back(std::unique_ptr pHint); + + void push_back(std::unique_ptr pHint); + + std::vector> const& GetHints() const { return m_Hints; } + + XMLIndexMarkHint_Impl* GetIndexHintById(const OUString& sID) + { + auto it = m_IndexHintsById.find(sID); + return it == m_IndexHintsById.end() ? nullptr : it->second; + } + + css::uno::Reference& GetCrossRefHeadingBookmark() + { + return m_xCrossRefHeadingBookmark; + } +}; + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/xmloff/source/text/txtparai.cxx b/xmloff/source/text/txtparai.cxx index e6c4fa3bd8f5..b22939eb1a39 100644 --- a/xmloff/source/text/txtparai.cxx +++ b/xmloff/source/text/txtparai.cxx @@ -19,9 +19,7 @@ #include -#include #include -#include #include #include @@ -70,43 +68,15 @@ using namespace ::xmloff::token; using ::com::sun::star::container::XEnumerationAccess; using ::com::sun::star::container::XEnumeration; -class XMLHints_Impl +void XMLHints_Impl::push_back(std::unique_ptr pHint) { -private: - - std::vector> m_Hints; - std::unordered_map m_IndexHintsById; - uno::Reference m_xCrossRefHeadingBookmark; - -public: - void push_back(std::unique_ptr pHint) - { - m_Hints.push_back(std::move(pHint)); - } - - void push_back(std::unique_ptr pHint) - { - m_IndexHintsById.emplace(pHint->GetID(), pHint.get()); - m_Hints.push_back(std::move(pHint)); - } - - std::vector> const& GetHints() const - { - return m_Hints; - } - - XMLIndexMarkHint_Impl* GetIndexHintById(const OUString& sID) - { - auto it = m_IndexHintsById.find(sID); - return it == m_IndexHintsById.end() ? nullptr : it->second; - } - - uno::Reference & GetCrossRefHeadingBookmark() - { - return m_xCrossRefHeadingBookmark; - } -}; - + m_IndexHintsById.emplace(pHint->GetID(), pHint.get()); + m_Hints.push_back(std::move(pHint)); +} +void XMLHints_Impl::push_back(std::unique_ptr pHint) +{ + m_Hints.push_back(std::move(pHint)); +} XMLCharContext::XMLCharContext( SvXMLImport& rImport, @@ -1849,14 +1819,14 @@ void XMLParaContext::endFastElement(sal_Int32 ) } } - if (m_xHints) + if (m_oHints) { bool bEmptyHints = false; if (auto xCompare = xTxtImport->GetText().query()) { try { - for (const auto& pHint : m_xHints->GetHints()) + for (const auto& pHint : m_oHints->GetHints()) { if (xCompare->compareRegionStarts(pHint->GetStart(), pHint->GetEnd()) == 0) { @@ -1882,7 +1852,7 @@ void XMLParaContext::endFastElement(sal_Int32 ) { xCursorProps->setPropertyValue(u"NoFormatAttr"_ustr, uno::Any(true)); } - for (const auto & i : m_xHints->GetHints()) + for (const auto & i : m_oHints->GetHints()) { XMLHint_Impl *const pHint = i.get(); xAttrCursor->gotoRange( pHint->GetStart(), false ); @@ -2026,18 +1996,18 @@ void XMLParaContext::endFastElement(sal_Int32 ) xCursorProps->setPropertyValue(u"NoFormatAttr"_ustr, uno::Any(false)); } } - m_xHints.reset(); + m_oHints.reset(); } css::uno::Reference< css::xml::sax::XFastContextHandler > XMLParaContext::createFastChildContext( sal_Int32 nElement, const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList ) { - if (!m_xHints) - m_xHints.reset(new XMLHints_Impl); + if (!m_oHints) + m_oHints.emplace(); return XMLImpSpanContext_Impl::CreateSpanContext( GetImport(), nElement, xAttrList, - *m_xHints, bIgnoreLeadingSpace, + *m_oHints, bIgnoreLeadingSpace, nStarFontsConvFlags); } diff --git a/xmloff/source/text/txtparai.hxx b/xmloff/source/text/txtparai.hxx index fed2690cb429..cfe9408d6648 100644 --- a/xmloff/source/text/txtparai.hxx +++ b/xmloff/source/text/txtparai.hxx @@ -22,8 +22,8 @@ #include #include #include +#include "txthints.hxx" -class XMLHints_Impl; namespace com::sun::star { namespace text { class XTextRange; } namespace xml::sax { class XAttributeList; } @@ -45,7 +45,7 @@ class XMLParaContext : public SvXMLImportContext css::uno::Any m_aMarkerStyleName; bool m_bHaveAbout; sal_Int8 nOutlineLevel; - std::unique_ptr m_xHints; + std::optional m_oHints; // Lost outline numbering in master document (#i73509#) bool mbOutlineLevelAttrFound; bool mbOutlineContentVisible; From a07c6264660d782b396c4a4b2939f8c9767a1bf3 Mon Sep 17 00:00:00 2001 From: Noel Grandin Date: Sun, 23 Jun 2024 20:24:07 +0200 Subject: [PATCH 015/194] no need to use a mix of pimpl and normal fields for SwXFrame Change-Id: I90a6f1f1854ac1c5da2133122f17c14c58ec2d13 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169361 Tested-by: Jenkins Reviewed-by: Noel Grandin --- sw/inc/unoframe.hxx | 6 +++-- sw/source/core/unocore/unoframe.cxx | 36 ++++++++--------------------- 2 files changed, 14 insertions(+), 28 deletions(-) diff --git a/sw/inc/unoframe.hxx b/sw/inc/unoframe.hxx index 46963a85c425..3760bb311200 100644 --- a/sw/inc/unoframe.hxx +++ b/sw/inc/unoframe.hxx @@ -29,6 +29,7 @@ #include #include +#include #include #include #include @@ -38,6 +39,7 @@ #include "unotext.hxx" #include +#include class SdrObject; class SwDoc; @@ -58,8 +60,8 @@ class SAL_DLLPUBLIC_RTTI SAL_LOPLUGIN_ANNOTATE("crosscast") SwXFrame : public cp public SvtListener { private: - class Impl; - ::sw::UnoImplPtr m_pImpl; + std::mutex m_Mutex; // just for OInterfaceContainerHelper4 + ::comphelper::OInterfaceContainerHelper4 m_EventListeners; SwFrameFormat* m_pFrameFormat; const SfxItemPropertySet* m_pPropSet; diff --git a/sw/source/core/unocore/unoframe.cxx b/sw/source/core/unocore/unoframe.cxx index 85d1eee41ece..5c3eb85ea8c1 100644 --- a/sw/source/core/unocore/unoframe.cxx +++ b/sw/source/core/unocore/unoframe.cxx @@ -99,7 +99,6 @@ #include #include #include -#include #include #include #include @@ -112,7 +111,6 @@ #include #include #include -#include #include #include #include @@ -1183,14 +1181,6 @@ bool SwOLEProperties_Impl::AnyToItemSet( return true; } -class SwXFrame::Impl -{ -public: - uno::WeakReference m_wThis; - std::mutex m_Mutex; // just for OInterfaceContainerHelper4 - ::comphelper::OInterfaceContainerHelper4 m_EventListeners; -}; - OUString SwXFrame::getImplementationName() { return u"SwXFrame"_ustr; @@ -1207,8 +1197,7 @@ uno::Sequence< OUString > SwXFrame::getSupportedServiceNames() } SwXFrame::SwXFrame(FlyCntType eSet, const ::SfxItemPropertySet* pSet, SwDoc *pDoc) - : m_pImpl(new Impl) - , m_pFrameFormat(nullptr) + : m_pFrameFormat(nullptr) , m_pPropSet(pSet) , m_pDoc(pDoc) , m_eType(eSet) @@ -1262,8 +1251,7 @@ SwXFrame::SwXFrame(FlyCntType eSet, const ::SfxItemPropertySet* pSet, SwDoc *pDo } SwXFrame::SwXFrame(SwFrameFormat& rFrameFormat, FlyCntType eSet, const ::SfxItemPropertySet* pSet) - : m_pImpl(new Impl) - , m_pFrameFormat(&rFrameFormat) + : m_pFrameFormat(&rFrameFormat) , m_pPropSet(pSet) , m_pDoc(nullptr) , m_eType(eSet) @@ -1301,9 +1289,6 @@ SwXFrame::CreateXFrame(SwDoc & rDoc, SwFrameFormat *const pFrameFormat) } else xFrame = new NameLookupIsHard(&rDoc); - - // need a permanent Reference to initialize m_wThis - xFrame->SwXFrame::m_pImpl->m_wThis = uno::Reference(xFrame.get()); } return xFrame; } @@ -2641,15 +2626,15 @@ uno::Any SwXFrame::getPropertyDefault( const OUString& rPropertyName ) void SAL_CALL SwXFrame::addEventListener( const uno::Reference & xListener) { - std::unique_lock aGuard(m_pImpl->m_Mutex); - m_pImpl->m_EventListeners.addInterface(aGuard, xListener); + std::unique_lock aGuard(m_Mutex); + m_EventListeners.addInterface(aGuard, xListener); } void SAL_CALL SwXFrame::removeEventListener( const uno::Reference & xListener) { - std::unique_lock aGuard(m_pImpl->m_Mutex); - m_pImpl->m_EventListeners.removeInterface(aGuard, xListener); + std::unique_lock aGuard(m_Mutex); + m_EventListeners.removeInterface(aGuard, xListener); } void SwXFrame::DisposeInternal() @@ -2657,15 +2642,14 @@ void SwXFrame::DisposeInternal() mxStyleData.clear(); mxStyleFamily.clear(); m_pDoc = nullptr; - uno::Reference const xThis(m_pImpl->m_wThis); - if (!xThis.is()) + if (m_refCount == 0) { // fdo#72695: if UNO object is already dead, don't revive it with event return; } { - lang::EventObject const ev(xThis); - std::unique_lock aGuard(m_pImpl->m_Mutex); - m_pImpl->m_EventListeners.disposeAndClear(aGuard, ev); + lang::EventObject const ev(static_cast(this)); + std::unique_lock aGuard(m_Mutex); + m_EventListeners.disposeAndClear(aGuard, ev); } m_pFrameFormat = nullptr; EndListeningAll(); From 857eee7c2cf8baaab556db6ce888db0db1c8a858 Mon Sep 17 00:00:00 2001 From: Noel Grandin Date: Sun, 23 Jun 2024 21:14:57 +0200 Subject: [PATCH 016/194] tdf#144208 speedup doc with lots of redline(16) SwXParagraph is heavily used. Reduce the allocation cost of this class by de-pimpl'ing this class. Change-Id: Iebdb9faebfd64416d581641e275e9a4389e2c90e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169362 Tested-by: Jenkins Reviewed-by: Noel Grandin --- sw/inc/unoparagraph.hxx | 55 +++++- sw/source/core/unocore/unoparagraph.cxx | 251 +++++++++--------------- 2 files changed, 138 insertions(+), 168 deletions(-) diff --git a/sw/inc/unoparagraph.hxx b/sw/inc/unoparagraph.hxx index cbdfe202a1cb..a4936991fd60 100644 --- a/sw/inc/unoparagraph.hxx +++ b/sw/inc/unoparagraph.hxx @@ -21,6 +21,7 @@ #define INCLUDED_SW_INC_UNOPARAGRAPH_HXX #include +#include #include #include @@ -32,12 +33,16 @@ #include #include +#include #include #include +#include #include "unobaseclass.hxx" +class SfxItemPropertySet; +struct SfxItemPropertyMapEntry; class SwPaM; class SwUnoCursor; class SwStartNode; @@ -65,9 +70,6 @@ class SwXParagraph final private: - class Impl; - ::sw::UnoImplPtr m_pImpl; - virtual ~SwXParagraph() override; SwXParagraph(css::uno::Reference< SwXText > const & xParent, @@ -77,6 +79,31 @@ private: /// descriptor SwXParagraph(); + /// @throws beans::UnknownPropertyException + /// @throws beans::PropertyVetoException + /// @throws lang::IllegalArgumentException + /// @throws lang::WrappedTargetException + /// @throws uno::RuntimeException + void SetPropertyValues_Impl( + const css::uno::Sequence< OUString >& rPropertyNames, + const css::uno::Sequence< css::uno::Any >& rValues ); + /// @throws beans::UnknownPropertyException + /// @throws lang::WrappedTargetException + /// @throws uno::RuntimeException + css::uno::Sequence< css::uno::Any > GetPropertyValues_Impl( + const css::uno::Sequence< OUString >& rPropertyNames); + SwTextNode& GetTextNodeOrThrow(); + /// @throws uno::RuntimeException + static void GetSinglePropertyValue_Impl( + const SfxItemPropertyMapEntry& rEntry, + const SfxItemSet& rSet, + css::uno::Any& rAny ); + /// @throws uno::RuntimeException + css::uno::Sequence< css::beans::GetDirectPropertyTolerantResult > + GetPropertyValuesTolerant_Impl( + const css::uno::Sequence< OUString >& rPropertyNames, + bool bDirectValuesOnly); + public: static rtl::Reference @@ -84,8 +111,8 @@ public: css::uno::Reference const& xParentText, const sal_Int32 nSelStart = -1, const sal_Int32 nSelEnd = - 1); - const SwTextNode * GetTextNode() const; - bool IsDescriptor() const; + const SwTextNode * GetTextNode() const { return m_pTextNode; } + bool IsDescriptor() const { return m_bIsDescriptor; } /// make rPaM select the paragraph bool SelectPaM(SwPaM & rPaM); /// for SwXText @@ -200,6 +227,24 @@ public: /// tries to return less data, but may return more than just text fields rtl::Reference createTextFieldsEnumeration(); + +private: + std::mutex m_Mutex; // just for OInterfaceContainerHelper4 + ::comphelper::OInterfaceContainerHelper4 m_EventListeners; + SfxItemPropertySet const& m_rPropSet; + bool m_bIsDescriptor; + sal_Int32 m_nSelectionStartPos; + sal_Int32 m_nSelectionEndPos; + OUString m_sText; + css::uno::Reference m_xParentText; + SwTextNode* m_pTextNode; + struct MySvtListener : public SvtListener + { + SwXParagraph& m_rThis; + MySvtListener(SwXParagraph& rThis) : m_rThis(rThis) {} + virtual void Notify(const SfxHint& rHint) override; + }; + std::optional moSvtListener; }; diff --git a/sw/source/core/unocore/unoparagraph.cxx b/sw/source/core/unocore/unoparagraph.cxx index 8c2ec47bd6fd..5e1f0e26ddeb 100644 --- a/sw/source/core/unocore/unoparagraph.cxx +++ b/sw/source/core/unocore/unoparagraph.cxx @@ -19,7 +19,6 @@ #include -#include #include #include #include @@ -57,7 +56,6 @@ #include #include #include -#include #include #include #include @@ -113,88 +111,21 @@ static beans::PropertyState lcl_SwXParagraph_getPropertyState( const SfxItemPropertyMapEntry& rEntry, bool &rAttrSetFetched ); -class SwXParagraph::Impl - : public SvtListener +SwTextNode& SwXParagraph::GetTextNodeOrThrow() { -public: - SwXParagraph& m_rThis; - unotools::WeakReference m_wThis; - std::mutex m_Mutex; // just for OInterfaceContainerHelper4 - ::comphelper::OInterfaceContainerHelper4 m_EventListeners; - SfxItemPropertySet const& m_rPropSet; - bool m_bIsDescriptor; - sal_Int32 m_nSelectionStartPos; - sal_Int32 m_nSelectionEndPos; - OUString m_sText; - css::uno::Reference m_xParentText; - SwTextNode* m_pTextNode; - - Impl(SwXParagraph& rThis, - SwTextNode* const pTextNode = nullptr, css::uno::Reference xParent = nullptr, - const sal_Int32 nSelStart = -1, const sal_Int32 nSelEnd = -1) - : m_rThis(rThis) - , m_rPropSet(*aSwMapProvider.GetPropertySet(PROPERTY_MAP_PARAGRAPH)) - , m_bIsDescriptor(nullptr == pTextNode) - , m_nSelectionStartPos(nSelStart) - , m_nSelectionEndPos(nSelEnd) - , m_xParentText(std::move(xParent)) - , m_pTextNode(pTextNode) - { - m_pTextNode && StartListening(m_pTextNode->GetNotifier()); + if (!m_pTextNode) { + throw uno::RuntimeException(u"SwXParagraph: disposed or invalid"_ustr, nullptr); } + return *m_pTextNode; +} - SwTextNode* GetTextNode() { - return m_pTextNode; - } - - SwTextNode& GetTextNodeOrThrow() { - if (!m_pTextNode) { - throw uno::RuntimeException(u"SwXParagraph: disposed or invalid"_ustr, nullptr); - } - return *m_pTextNode; - } - - bool IsDescriptor() const { return m_bIsDescriptor; } - - /// @throws beans::UnknownPropertyException - /// @throws beans::PropertyVetoException - /// @throws lang::IllegalArgumentException - /// @throws lang::WrappedTargetException - /// @throws uno::RuntimeException - void SetPropertyValues_Impl( - const uno::Sequence< OUString >& rPropertyNames, - const uno::Sequence< uno::Any >& rValues); - - /// @throws beans::UnknownPropertyException - /// @throws lang::WrappedTargetException - /// @throws uno::RuntimeException - uno::Sequence< uno::Any > - GetPropertyValues_Impl( - const uno::Sequence< OUString >& rPropertyNames); - - /// @throws uno::RuntimeException - static void GetSinglePropertyValue_Impl( - const SfxItemPropertyMapEntry& rEntry, - const SfxItemSet& rSet, - uno::Any& rAny ); - - /// @throws uno::RuntimeException - uno::Sequence< beans::GetDirectPropertyTolerantResult > - GetPropertyValuesTolerant_Impl( - const uno::Sequence< OUString >& rPropertyNames, - bool bDirectValuesOnly); -protected: - virtual void Notify(const SfxHint& rHint) override; - -}; - -void SwXParagraph::Impl::Notify(const SfxHint& rHint) +void SwXParagraph::MySvtListener::Notify(const SfxHint& rHint) { if(rHint.GetId() == SfxHintId::Dying) { - m_pTextNode = nullptr; - std::unique_lock aGuard(m_Mutex); - if (m_EventListeners.getLength(aGuard) != 0) + m_rThis.m_pTextNode = nullptr; + std::unique_lock aGuard(m_rThis.m_Mutex); + if (m_rThis.m_EventListeners.getLength(aGuard) != 0) { // fdo#72695: if UNO object is already dead, don't revive it with event // The specific pattern we are guarding against is this: @@ -203,19 +134,23 @@ void SwXParagraph::Impl::Notify(const SfxHint& rHint) // SwXParagraph destructor, which tries to take the SolarMutex, and blocks // [3] Thread1 destroys a SwTextNode, which calls this Notify event, which results // in a double-free if we construct the xThis object. - uno::Reference const xThis(m_wThis); - if (!xThis.is()) + if (m_rThis.m_refCount == 0) { // fdo#72695: if UNO object is already dead, don't revive it with event return; } - lang::EventObject const ev(xThis); - m_EventListeners.disposeAndClear(aGuard, ev); + lang::EventObject const ev(static_cast(&m_rThis)); + m_rThis.m_EventListeners.disposeAndClear(aGuard, ev); } } } SwXParagraph::SwXParagraph() - : m_pImpl( new SwXParagraph::Impl(*this) ) + : m_rPropSet(*aSwMapProvider.GetPropertySet(PROPERTY_MAP_PARAGRAPH)) + , m_bIsDescriptor(true) + , m_nSelectionStartPos(-1) + , m_nSelectionEndPos(-1) + , m_pTextNode(nullptr) + , moSvtListener(std::in_place, *this) { } @@ -223,23 +158,22 @@ SwXParagraph::SwXParagraph( css::uno::Reference< SwXText > const & xParent, SwTextNode & rTextNode, const sal_Int32 nSelStart, const sal_Int32 nSelEnd) - : m_pImpl( - new SwXParagraph::Impl(*this, &rTextNode, xParent, nSelStart, nSelEnd)) + : m_rPropSet(*aSwMapProvider.GetPropertySet(PROPERTY_MAP_PARAGRAPH)) + , m_bIsDescriptor(false) + , m_nSelectionStartPos(nSelStart) + , m_nSelectionEndPos(nSelEnd) + , m_xParentText(xParent) + , m_pTextNode(&rTextNode) + , moSvtListener(std::in_place, *this) { + moSvtListener->StartListening(rTextNode.GetNotifier()); } SwXParagraph::~SwXParagraph() { -} - -const SwTextNode * SwXParagraph::GetTextNode() const -{ - return m_pImpl->GetTextNode(); -} - -bool SwXParagraph::IsDescriptor() const -{ - return m_pImpl->IsDescriptor(); + // need to hold solar mutex while destructing SvtListener + SolarMutexGuard aGuard; + moSvtListener.reset(); } rtl::Reference @@ -276,8 +210,6 @@ SwXParagraph::CreateXParagraph(SwDoc & rDoc, SwTextNode *const pTextNode, { pTextNode->SetXParagraph(xParagraph); } - // need a permanent Reference to initialize m_wThis - pXPara->m_pImpl->m_wThis = xParagraph.get(); return xParagraph; } @@ -327,20 +259,20 @@ SwXParagraph::getSupportedServiceNames() void SwXParagraph::attachToText(SwXText & rParent, SwTextNode & rTextNode) { - OSL_ENSURE(m_pImpl->m_bIsDescriptor, "Paragraph is not a descriptor"); - if (!m_pImpl->m_bIsDescriptor) + OSL_ENSURE(m_bIsDescriptor, "Paragraph is not a descriptor"); + if (!m_bIsDescriptor) return; - m_pImpl->m_bIsDescriptor = false; - m_pImpl->EndListeningAll(); - m_pImpl->StartListening(rTextNode.GetNotifier()); + m_bIsDescriptor = false; + moSvtListener->EndListeningAll(); + moSvtListener->StartListening(rTextNode.GetNotifier()); rTextNode.SetXParagraph(this); - m_pImpl->m_xParentText = &rParent; - if (!m_pImpl->m_sText.isEmpty()) + m_xParentText = &rParent; + if (!m_sText.isEmpty()) { - try { setString(m_pImpl->m_sText); } + try { setString(m_sText); } catch(...){} - m_pImpl->m_sText.clear(); + m_sText.clear(); } } @@ -349,8 +281,7 @@ SwXParagraph::getPropertySetInfo() { SolarMutexGuard g; - static uno::Reference< beans::XPropertySetInfo > xRef = - m_pImpl->m_rPropSet.getPropertySetInfo(); + static uno::Reference< beans::XPropertySetInfo > xRef = m_rPropSet.getPropertySetInfo(); return xRef; } @@ -359,7 +290,7 @@ SwXParagraph::setPropertyValue(const OUString& rPropertyName, const uno::Any& rValue) { SolarMutexGuard aGuard; - m_pImpl->SetPropertyValues_Impl( { rPropertyName }, { rValue } ); + SetPropertyValues_Impl( { rPropertyName }, { rValue } ); } uno::Any @@ -367,12 +298,11 @@ SwXParagraph::getPropertyValue(const OUString& rPropertyName) { SolarMutexGuard aGuard; uno::Sequence aPropertyNames { rPropertyName }; - const uno::Sequence< uno::Any > aRet = - m_pImpl->GetPropertyValues_Impl(aPropertyNames); + const uno::Sequence< uno::Any > aRet = GetPropertyValues_Impl(aPropertyNames); return aRet.getConstArray()[0]; } -void SwXParagraph::Impl::SetPropertyValues_Impl( +void SwXParagraph::SetPropertyValues_Impl( const uno::Sequence< OUString >& rPropertyNames, const uno::Sequence< uno::Any >& rValues ) { @@ -389,13 +319,11 @@ void SwXParagraph::Impl::SetPropertyValues_Impl( { if (SfxItemPropertyMapEntry const* const pEntry = rMap.getByName(name); !pEntry) { - throw beans::UnknownPropertyException("Unknown property: " + name, - m_rThis.getXWeak()); + throw beans::UnknownPropertyException("Unknown property: " + name, getXWeak()); } else if (pEntry->nFlags & beans::PropertyAttribute::READONLY) { - throw beans::PropertyVetoException("Property is read-only: " + name, - m_rThis.getXWeak()); + throw beans::PropertyVetoException("Property is read-only: " + name, getXWeak()); } return comphelper::makePropertyValue(name, value); }); @@ -415,7 +343,7 @@ void SAL_CALL SwXParagraph::setPropertyValues( // workaround for bad designed API try { - m_pImpl->SetPropertyValues_Impl( rPropertyNames, rValues ); + SetPropertyValues_Impl( rPropertyNames, rValues ); } catch (const beans::UnknownPropertyException &rException) { @@ -429,7 +357,7 @@ void SAL_CALL SwXParagraph::setPropertyValues( // Support for DrawingLayer FillStyles for GetPropertyValue() usages // static -void SwXParagraph::Impl::GetSinglePropertyValue_Impl( +void SwXParagraph::GetSinglePropertyValue_Impl( const SfxItemPropertyMapEntry& rEntry, const SfxItemSet& rSet, uno::Any& rAny ) @@ -517,7 +445,7 @@ void SwXParagraph::Impl::GetSinglePropertyValue_Impl( } } -uno::Sequence< uno::Any > SwXParagraph::Impl::GetPropertyValues_Impl( +uno::Sequence< uno::Any > SwXParagraph::GetPropertyValues_Impl( const uno::Sequence< OUString > & rPropertyNames ) { SwTextNode & rTextNode(GetTextNodeOrThrow()); @@ -574,8 +502,7 @@ uno::Sequence< uno::Any > SwXParagraph::Impl::GetPropertyValues_Impl( if (!pEntry) { throw beans::UnknownPropertyException( - "Unknown property: " + pPropertyNames[nProp], - m_rThis.getXWeak()); + "Unknown property: " + pPropertyNames[nProp], getXWeak()); } if (! ::sw::GetDefaultTextContentValue( pValues[nProp], pPropertyNames[nProp], pEntry->nWID)) @@ -601,7 +528,7 @@ SwXParagraph::getPropertyValues(const uno::Sequence< OUString >& rPropertyNames) // workaround for bad designed API try { - aValues = m_pImpl->GetPropertyValues_Impl( rPropertyNames ); + aValues = GetPropertyValues_Impl( rPropertyNames ); } catch (beans::UnknownPropertyException &) { @@ -653,7 +580,7 @@ SwXParagraph::setPropertyValuesTolerant( throw lang::IllegalArgumentException(); } - SwTextNode & rTextNode(m_pImpl->GetTextNodeOrThrow()); + SwTextNode & rTextNode(GetTextNodeOrThrow()); //SwNode& rTextNode = pUnoCursor->GetPoint()->GetNode(); //const SwAttrSet& rAttrSet = static_cast(rTextNode).GetSwAttrSet(); @@ -670,8 +597,7 @@ SwXParagraph::setPropertyValuesTolerant( beans::SetPropertyTolerantFailed *pFailed = aFailed.getArray(); // get entry to start with - const SfxItemPropertyMap &rPropMap = - m_pImpl->m_rPropSet.getPropertyMap(); + const SfxItemPropertyMap &rPropMap = m_rPropSet.getPropertyMap(); SwPosition aPos( rTextNode ); SwCursor aCursor( aPos, nullptr ); @@ -701,7 +627,7 @@ SwXParagraph::setPropertyValuesTolerant( else { SwUnoCursorHelper::SetPropertyValue( - aCursor, m_pImpl->m_rPropSet, pProp[i], pValue[i]); + aCursor, m_rPropSet, pProp[i], pValue[i]); } } } @@ -740,7 +666,7 @@ SwXParagraph::getPropertyValuesTolerant( SolarMutexGuard aGuard; const uno::Sequence< beans::GetDirectPropertyTolerantResult > aTmpRes( - m_pImpl->GetPropertyValuesTolerant_Impl( rPropertyNames, false ) ); + GetPropertyValuesTolerant_Impl( rPropertyNames, false ) ); // copy temporary result to final result type const sal_Int32 nLen = aTmpRes.getLength(); @@ -755,11 +681,11 @@ SwXParagraph::getDirectPropertyValuesTolerant( { SolarMutexGuard aGuard; - return m_pImpl->GetPropertyValuesTolerant_Impl( rPropertyNames, true ); + return GetPropertyValuesTolerant_Impl( rPropertyNames, true ); } uno::Sequence< beans::GetDirectPropertyTolerantResult > -SwXParagraph::Impl::GetPropertyValuesTolerant_Impl( +SwXParagraph::GetPropertyValuesTolerant_Impl( const uno::Sequence< OUString >& rPropertyNames, bool bDirectValuesOnly ) { @@ -1041,11 +967,11 @@ SwXParagraph::getPropertyState(const OUString& rPropertyName) { SolarMutexGuard aGuard; - SwTextNode & rTextNode(m_pImpl->GetTextNodeOrThrow()); + SwTextNode & rTextNode(GetTextNodeOrThrow()); const SwAttrSet* pSet = nullptr; SfxItemPropertyMapEntry const*const pEntry = - m_pImpl->m_rPropSet.getPropertyMap().getByName(rPropertyName); + m_rPropSet.getPropertyMap().getByName(rPropertyName); if (!pEntry) { throw beans::UnknownPropertyException( @@ -1064,12 +990,12 @@ SwXParagraph::getPropertyStates( { SolarMutexGuard aGuard; - SwTextNode & rTextNode(m_pImpl->GetTextNodeOrThrow()); + SwTextNode & rTextNode(GetTextNodeOrThrow()); const OUString* pNames = PropertyNames.getConstArray(); uno::Sequence< beans::PropertyState > aRet(PropertyNames.getLength()); beans::PropertyState* pStates = aRet.getArray(); - const SfxItemPropertyMap &rMap = m_pImpl->m_rPropSet.getPropertyMap(); + const SfxItemPropertyMap &rMap = m_rPropSet.getPropertyMap(); const SwAttrSet* pSet = nullptr; bool bAttrSetFetched = false; @@ -1104,7 +1030,7 @@ SwXParagraph::setPropertyToDefault(const OUString& rPropertyName) { SolarMutexGuard aGuard; - SwTextNode & rTextNode(m_pImpl->GetTextNodeOrThrow()); + SwTextNode & rTextNode(GetTextNodeOrThrow()); SwPosition aPos( rTextNode ); SwCursor aCursor( aPos, nullptr ); @@ -1118,7 +1044,7 @@ SwXParagraph::setPropertyToDefault(const OUString& rPropertyName) // select paragraph SwParaSelection aParaSel( aCursor ); SfxItemPropertyMapEntry const*const pEntry = - m_pImpl->m_rPropSet.getPropertyMap().getByName( rPropertyName ); + m_rPropSet.getPropertyMap().getByName( rPropertyName ); if (!pEntry) { throw beans::UnknownPropertyException( @@ -1192,7 +1118,7 @@ SwXParagraph::getPropertyDefault(const OUString& rPropertyName) { SolarMutexGuard g; - SwTextNode & rTextNode(m_pImpl->GetTextNodeOrThrow()); + SwTextNode & rTextNode(GetTextNodeOrThrow()); uno::Any aRet; if (::sw::GetDefaultTextContentValue(aRet, rPropertyName)) @@ -1201,7 +1127,7 @@ SwXParagraph::getPropertyDefault(const OUString& rPropertyName) } SfxItemPropertyMapEntry const*const pEntry = - m_pImpl->m_rPropSet.getPropertyMap().getByName(rPropertyName); + m_rPropSet.getPropertyMap().getByName(rPropertyName); if (!pEntry) { throw beans::UnknownPropertyException( @@ -1236,14 +1162,14 @@ SwXParagraph::getAnchor() { SolarMutexGuard aGuard; - SwTextNode & rTextNode(m_pImpl->GetTextNodeOrThrow()); + SwTextNode & rTextNode(GetTextNodeOrThrow()); SwPosition aPos( rTextNode ); SwCursor aCursor( aPos, nullptr ); // select paragraph SwParaSelection aParaSel( aCursor ); const uno::Reference< text::XTextRange > xRet = - new SwXTextRange(aCursor, m_pImpl->m_xParentText); + new SwXTextRange(aCursor, m_xParentText); return xRet; } @@ -1251,14 +1177,14 @@ void SAL_CALL SwXParagraph::dispose() { SolarMutexGuard aGuard; - SwTextNode *const pTextNode( m_pImpl->GetTextNode() ); + SwTextNode *const pTextNode( m_pTextNode ); if (pTextNode) { SwCursor aCursor( SwPosition( *pTextNode ), nullptr ); pTextNode->GetDoc().getIDocumentContentOperations().DelFullPara(aCursor); lang::EventObject const ev(getXWeak()); - std::unique_lock aGuard2(m_pImpl->m_Mutex); - m_pImpl->m_EventListeners.disposeAndClear(aGuard2, ev); + std::unique_lock aGuard2(m_Mutex); + m_EventListeners.disposeAndClear(aGuard2, ev); } } @@ -1266,16 +1192,16 @@ void SAL_CALL SwXParagraph::addEventListener( const uno::Reference< lang::XEventListener > & xListener) { // no need to lock here as m_pImpl is const and container threadsafe - std::unique_lock aGuard(m_pImpl->m_Mutex); - m_pImpl->m_EventListeners.addInterface(aGuard, xListener); + std::unique_lock aGuard(m_Mutex); + m_EventListeners.addInterface(aGuard, xListener); } void SAL_CALL SwXParagraph::removeEventListener( const uno::Reference< lang::XEventListener > & xListener) { // no need to lock here as m_pImpl is const and container threadsafe - std::unique_lock aGuard(m_pImpl->m_Mutex); - m_pImpl->m_EventListeners.removeInterface(aGuard, xListener); + std::unique_lock aGuard(m_Mutex); + m_EventListeners.removeInterface(aGuard, xListener); } uno::Reference< container::XEnumeration > SAL_CALL @@ -1283,12 +1209,12 @@ SwXParagraph::createEnumeration() { SolarMutexGuard aGuard; - SwTextNode & rTextNode(m_pImpl->GetTextNodeOrThrow()); + SwTextNode & rTextNode(GetTextNodeOrThrow()); SwPaM aPam ( rTextNode ); const uno::Reference< container::XEnumeration > xRef = - new SwXTextPortionEnumeration(aPam, m_pImpl->m_xParentText, - m_pImpl->m_nSelectionStartPos, m_pImpl->m_nSelectionEndPos); + new SwXTextPortionEnumeration(aPam, m_xParentText, + m_nSelectionStartPos, m_nSelectionEndPos); return xRef; } @@ -1298,11 +1224,11 @@ SwXParagraph::createTextFieldsEnumeration() { SolarMutexGuard aGuard; - SwTextNode & rTextNode(m_pImpl->GetTextNodeOrThrow()); + SwTextNode & rTextNode(GetTextNodeOrThrow()); SwPaM aPam ( rTextNode ); - return new SwXTextPortionEnumeration(aPam, m_pImpl->m_xParentText, - m_pImpl->m_nSelectionStartPos, m_pImpl->m_nSelectionEndPos, /*bOnlyTextFields*/true); + return new SwXTextPortionEnumeration(aPam, m_xParentText, + m_nSelectionStartPos, m_nSelectionEndPos, /*bOnlyTextFields*/true); } uno::Type SAL_CALL SwXParagraph::getElementType() @@ -1321,7 +1247,7 @@ SwXParagraph::getText() { SolarMutexGuard g; - return m_pImpl->m_xParentText; + return m_xParentText; } uno::Reference< text::XTextRange > SAL_CALL @@ -1329,7 +1255,7 @@ SwXParagraph::getStart() { SolarMutexGuard aGuard; - SwTextNode & rTextNode(m_pImpl->GetTextNodeOrThrow()); + SwTextNode & rTextNode(GetTextNodeOrThrow()); SwPosition aPos( rTextNode ); SwCursor aCursor( aPos, nullptr ); @@ -1346,7 +1272,7 @@ SwXParagraph::getEnd() { SolarMutexGuard aGuard; - SwTextNode & rTextNode(m_pImpl->GetTextNodeOrThrow()); + SwTextNode & rTextNode(GetTextNodeOrThrow()); SwPosition aPos( rTextNode ); SwCursor aCursor( aPos, nullptr ); @@ -1370,9 +1296,9 @@ OUString SAL_CALL SwXParagraph::getString() SwParaSelection aParaSel( aCursor ); SwUnoCursorHelper::GetTextFromPam(aCursor, aRet); } - else if (m_pImpl->IsDescriptor()) + else if (IsDescriptor()) { - aRet = m_pImpl->m_sText; + aRet = m_sText; } else { @@ -1402,9 +1328,9 @@ void SAL_CALL SwXParagraph::setString(const OUString& aString) SwUnoCursorHelper::SetString(aCursor, aString); SwUnoCursorHelper::SelectPam(aCursor, false); } - else if (m_pImpl->IsDescriptor()) + else if (IsDescriptor()) { - m_pImpl->m_sText = aString; + m_sText = aString; } else { @@ -1422,7 +1348,7 @@ SwXParagraph::createContentEnumeration(const OUString& rServiceName) throw uno::RuntimeException(); } - SwTextNode & rTextNode(m_pImpl->GetTextNodeOrThrow()); + SwTextNode & rTextNode(GetTextNodeOrThrow()); SwPaM aPam( rTextNode ); uno::Reference< container::XEnumeration > xRet = @@ -1440,13 +1366,12 @@ SwXParagraph::getAvailableServiceNames() // MetadatableMixin ::sfx2::Metadatable* SwXParagraph::GetCoreObject() { - SwTextNode *const pTextNode( m_pImpl->GetTextNode() ); - return pTextNode; + return m_pTextNode; } uno::Reference SwXParagraph::GetModel() { - SwTextNode *const pTextNode( m_pImpl->GetTextNode() ); + SwTextNode *const pTextNode( m_pTextNode ); if (pTextNode) { SwDocShell const*const pShell( pTextNode->GetDoc().GetDocShell() ); From f58e3e3402c87755a2dd3cb83f29d00c40b94f1a Mon Sep 17 00:00:00 2001 From: Miklos Vajna Date: Mon, 24 Jun 2024 15:46:03 +0200 Subject: [PATCH 017/194] Related: tdf#161652 sw, RTF paste: only keep used paragraph styles When pasting from old enough Impress that doesn't have commit afb4ea67463d9f0200dc6216cfd932aec0984c82 (tdf#161652 editeng, RTF copy: only write used paragraph styles, 2024-06-20), it still happened that we got many styles from an Impress slide's paragraph in Writer than just the style of that paragraph itself. The problem is that if we want to avoid problems with bad user input, that has to be handled on the RTF paste / import side, not on the producing side. Fix the problem by filtering out unused paragraph styles also on the RTF import (paste) side, in the IsNewDoc() case, which is the clipboard case (not RTF file open). With this, we attempt to filter out not needed paragraph styles both on the import and export side. Change-Id: Ic2c63e5f45245bb4296ec0d1a95558c459667e29 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169445 Reviewed-by: Miklos Vajna Tested-by: Jenkins --- sw/qa/writerfilter/dmapper/DomainMapper.cxx | 40 +++++++++++++++++++ sw/qa/writerfilter/dmapper/data/clipboard.rtf | 7 ++++ .../writerfilter/dmapper/DomainMapper.cxx | 32 +++++++++++++++ .../dmapper/DomainMapper_Impl.cxx | 4 ++ .../writerfilter/dmapper/StyleSheetTable.cxx | 30 ++++++++++++++ .../writerfilter/dmapper/StyleSheetTable.hxx | 4 ++ 6 files changed, 117 insertions(+) create mode 100644 sw/qa/writerfilter/dmapper/data/clipboard.rtf diff --git a/sw/qa/writerfilter/dmapper/DomainMapper.cxx b/sw/qa/writerfilter/dmapper/DomainMapper.cxx index 3e7acdd3b495..05e6029c8c21 100644 --- a/sw/qa/writerfilter/dmapper/DomainMapper.cxx +++ b/sw/qa/writerfilter/dmapper/DomainMapper.cxx @@ -14,8 +14,13 @@ #include #include #include +#include +#include +#include #include +#include +#include using namespace ::com::sun::star; @@ -185,6 +190,41 @@ CPPUNIT_TEST_FIXTURE(Test, testTableStyleParaBorder) // i.e. the 0 para border distance was applied on the cell instead. CPPUNIT_ASSERT_EQUAL(static_cast(203), nLeftBorderDistance); } + +CPPUNIT_TEST_FIXTURE(Test, testRTFStylePaste) +{ + // Given an empty Writer document: + mxComponent + = loadFromDesktop(u"private:factory/swriter"_ustr, u"com.sun.star.text.TextDocument"_ustr); + + // When pasting RTF that has unreferenced paragraph styles: + uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference xText = xTextDocument->getText(); + uno::Reference xBodyEnd = xText->getEnd(); + uno::Reference xFilter( + m_xSFactory->createInstance(u"com.sun.star.comp.Writer.RtfFilter"_ustr), uno::UNO_QUERY); + uno::Reference xImporter(xFilter, uno::UNO_QUERY); + xImporter->setTargetDocument(mxComponent); + std::unique_ptr pStream( + new SvFileStream(createFileURL(u"clipboard.rtf"), StreamMode::READ)); + uno::Reference xStream(new utl::OStreamWrapper(std::move(pStream))); + uno::Sequence aDescriptor{ comphelper::makePropertyValue(u"InputStream"_ustr, xStream), + comphelper::makePropertyValue(u"InsertMode"_ustr, true), + comphelper::makePropertyValue(u"TextInsertModeRange"_ustr, + xBodyEnd) }; + CPPUNIT_ASSERT(xFilter->filter(aDescriptor)); + + // Then make sure those paragraph styles don't show up in the past result: + uno::Reference xStyleFamiliesSupplier(mxComponent, + uno::UNO_QUERY); + uno::Reference xStyleFamilies + = xStyleFamiliesSupplier->getStyleFamilies(); + uno::Reference xStyleFamily( + xStyleFamilies->getByName(u"ParagraphStyles"_ustr), uno::UNO_QUERY); + // Without the accompanying fix in place, this test would have failed, 'Default Drawing Style' + // was imported, even if no pasted content referenced it. + CPPUNIT_ASSERT(!xStyleFamily->hasByName(u"Default Drawing Style"_ustr)); +} } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/qa/writerfilter/dmapper/data/clipboard.rtf b/sw/qa/writerfilter/dmapper/data/clipboard.rtf new file mode 100644 index 000000000000..0ebaa3aee0e9 --- /dev/null +++ b/sw/qa/writerfilter/dmapper/data/clipboard.rtf @@ -0,0 +1,7 @@ +{\rtf\ansi +{\stylesheet +{\s1 Default Drawing Style;} +{\s37 Beehive~LT~Titel;} +} +\s37 beehive\par +} diff --git a/sw/source/writerfilter/dmapper/DomainMapper.cxx b/sw/source/writerfilter/dmapper/DomainMapper.cxx index 8e32f2e34569..adb29ba57c23 100644 --- a/sw/source/writerfilter/dmapper/DomainMapper.cxx +++ b/sw/source/writerfilter/dmapper/DomainMapper.cxx @@ -2700,7 +2700,39 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, const PropertyMapPtr& rContext ) const OUString sConvertedStyleName = pStyleTable->ConvertStyleNameExt(sStringValue); m_pImpl->SetCurrentParaStyleName( sConvertedStyleName ); if (m_pImpl->GetTopContext() && m_pImpl->GetTopContextType() != CONTEXT_SECTION) + { m_pImpl->GetTopContext()->Insert( PROP_PARA_STYLE_NAME, uno::Any( sConvertedStyleName )); + + if (!m_pImpl->IsNewDoc()) + { + // Mark the paragraph style & its parent / follow as used. + pStyleTable->MarkParagraphStyleAsUsed(sConvertedStyleName); + + auto pStyle = pStyleTable->FindStyleSheetByConvertedStyleName(sConvertedStyleName); + if (pStyle) + { + if (!pStyle->m_sBaseStyleIdentifier.isEmpty()) + { + StyleSheetEntryPtr pParent = pStyleTable->FindStyleSheetByISTD(pStyle->m_sBaseStyleIdentifier); + if (pParent) + { + OUString sParent = StyleSheetTable::ConvertStyleName(pParent->m_sStyleName).first; + pStyleTable->MarkParagraphStyleAsUsed(sParent); + } + } + + if (!pStyle->m_sNextStyleIdentifier.isEmpty()) + { + StyleSheetEntryPtr pFollow = pStyleTable->FindStyleSheetByISTD(pStyle->m_sNextStyleIdentifier); + if (pFollow) + { + OUString sFollow = StyleSheetTable::ConvertStyleName(pFollow->m_sStyleName).first; + pStyleTable->MarkParagraphStyleAsUsed(sFollow); + } + } + } + } + } } break; case NS_ooxml::LN_EG_RPrBase_rStyle: diff --git a/sw/source/writerfilter/dmapper/DomainMapper_Impl.cxx b/sw/source/writerfilter/dmapper/DomainMapper_Impl.cxx index 47ef07610ca7..8bb8da5b1db1 100644 --- a/sw/source/writerfilter/dmapper/DomainMapper_Impl.cxx +++ b/sw/source/writerfilter/dmapper/DomainMapper_Impl.cxx @@ -435,6 +435,10 @@ DomainMapper_Impl::~DomainMapper_Impl() RemoveLastParagraph(); suppress_fun_call_w_exception(GetStyleSheetTable()->ApplyClonedTOCStyles()); } + else if (m_pStyleSheetTable) + { + m_pStyleSheetTable->RemoveUnusedParagraphStyles(); + } if (hasTableManager()) { getTableManager().endLevel(); diff --git a/sw/source/writerfilter/dmapper/StyleSheetTable.cxx b/sw/source/writerfilter/dmapper/StyleSheetTable.cxx index 29f50ecbcf66..5c259de5ff38 100644 --- a/sw/source/writerfilter/dmapper/StyleSheetTable.cxx +++ b/sw/source/writerfilter/dmapper/StyleSheetTable.cxx @@ -285,6 +285,8 @@ struct StyleSheetTable_Impl std::vector< ListCharStylePropertyMap_t > m_aListCharStylePropertyVector; bool m_bHasImportedDefaultParaProps; bool m_bIsNewDoc; + std::set m_aInsertedParagraphStyles; + std::set m_aUsedParagraphStyles; StyleSheetTable_Impl(DomainMapper& rDMapper, rtl::Reference xTextDocument, bool bIsNewDoc); @@ -1422,6 +1424,13 @@ void StyleSheetTable::ApplyStyleSheetsImpl(const FontTablePtr& rFontTable, std:: aMissingParent.emplace_back( sParentStyle, xStyle ); xStyles->insertByName( sConvertedStyleName, uno::Any( xStyle) ); + + if (!m_pImpl->m_bIsNewDoc && bParaStyle) + { + // Remember the inserted style, which may or may not be referred during + // pasting content. + m_pImpl->m_aInsertedParagraphStyles.insert(sConvertedStyleName); + } } beans::PropertyValues aGrabBag = pEntry->GetInteropGrabBagSeq(); @@ -2165,6 +2174,27 @@ OUString StyleSheetTable::getOrCreateCharStyle( PropertyValueVector_t& rCharProp return sListLabel; } +void StyleSheetTable::MarkParagraphStyleAsUsed(const OUString& rName) +{ + m_pImpl->m_aUsedParagraphStyles.insert(rName); +} + +void StyleSheetTable::RemoveUnusedParagraphStyles() +{ + uno::Reference< container::XNameAccess > xStyleFamilies = m_pImpl->m_xTextDocument->getStyleFamilies(); + uno::Reference xParaStyles; + xStyleFamilies->getByName(getPropertyName(PROP_PARAGRAPH_STYLES)) >>= xParaStyles; + for (const auto& rName : m_pImpl->m_aInsertedParagraphStyles) + { + if (m_pImpl->m_aUsedParagraphStyles.contains(rName)) + { + continue; + } + + xParaStyles->removeByName(rName); + } +} + }//namespace writerfilter /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/writerfilter/dmapper/StyleSheetTable.hxx b/sw/source/writerfilter/dmapper/StyleSheetTable.hxx index d388032cdb46..fc2d2a0ba8fa 100644 --- a/sw/source/writerfilter/dmapper/StyleSheetTable.hxx +++ b/sw/source/writerfilter/dmapper/StyleSheetTable.hxx @@ -114,6 +114,10 @@ public: const StyleSheetEntryPtr & GetCurrentEntry() const; + void MarkParagraphStyleAsUsed(const OUString& rName); + /// In case of pasting, removes unused paragraph styles, inserted during the paste. + void RemoveUnusedParagraphStyles(); + private: // Properties virtual void lcl_attribute(Id Name, Value & val) override; From 25cdebe70a9f1c1be9ae9f2ca7c2e1bf9565756d Mon Sep 17 00:00:00 2001 From: Michael Stahl Date: Mon, 24 Jun 2024 14:59:20 +0200 Subject: [PATCH 018/194] libcmis: fix failing AtomTest::authCallbackTest() (regression from commit f91effb36b2be1ff8937d684191fb2f19d6ac97d) Change-Id: I24c8da1c8ca70739ac047918c7036d72c7f7330b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169465 Tested-by: Jenkins Reviewed-by: Michael Stahl --- external/libcmis/exceptions.patch.1 | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/external/libcmis/exceptions.patch.1 b/external/libcmis/exceptions.patch.1 index 29a66f229c4c..3b4090aa54f7 100644 --- a/external/libcmis/exceptions.patch.1 +++ b/external/libcmis/exceptions.patch.1 @@ -1,12 +1,11 @@ --- libcmis/src/libcmis/http-session.cxx.orig 2024-06-21 12:22:36.083125022 +0200 +++ libcmis/src/libcmis/http-session.cxx 2024-06-21 13:08:37.403016695 +0200 -@@ -653,7 +653,8 @@ +@@ -653,7 +653,7 @@ m_authProvided = authProvider->authenticationQuery( m_username, m_password ); if ( !m_authProvided ) { - throw CurlException( "User cancelled authentication request" ); -+ // report this as 401 so it becomes permissionDenied -+ throw CurlException("User cancelled authentication request", CURLE_OK, "", 401); ++ throw CurlException("User cancelled authentication request", CURLE_OK); } } } @@ -62,7 +61,7 @@ void HttpSession::initProtocols( ) { -@@ -981,11 +972,43 @@ +@@ -981,11 +972,45 @@ break; default: msg = what(); @@ -106,6 +105,8 @@ + default: + if ( !isCancelled( ) ) + msg += ": " + m_url; ++ else if (msg == "User cancelled authentication request") ++ type = "permissionDenied"; + break; + } } From a35cd97feb6647facd11ebf06154bab2dcdb444f Mon Sep 17 00:00:00 2001 From: Theppitak Karoonboonyanan Date: Tue, 25 Jun 2024 00:23:02 +0700 Subject: [PATCH 019/194] Update git submodules * Update dictionaries from branch 'master' to fc2dc383a40e56c0118866c9110954bebc6ea41d - tdf#150433 Add Thai thesaurus Change-Id: I0d833c01a76a5c6957487b6cfcd1d4bc0279a5f3 Reviewed-on: https://gerrit.libreoffice.org/c/dictionaries/+/149147 Reviewed-by: Ilmari Lauhakangas Tested-by: Ilmari Lauhakangas --- dictionaries | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dictionaries b/dictionaries index a2bf59878dd7..fc2dc383a40e 160000 --- a/dictionaries +++ b/dictionaries @@ -1 +1 @@ -Subproject commit a2bf59878dd76685803ec260e15d875746ad6e25 +Subproject commit fc2dc383a40e56c0118866c9110954bebc6ea41d From 6f9f643b6d7929423fc83fc7857ed70e140a96ed Mon Sep 17 00:00:00 2001 From: Leonard Sasse Date: Fri, 29 Mar 2024 08:59:16 +0100 Subject: [PATCH 020/194] tdf#158803 F821: fix a number of undefined names and related issues in wizards/ make CharLocale a class attribute in TextDocument.py similar to line 109 fix import of AnyConverter in Configuration.py it turns out LetterWizardDialog.py was importing HID from LetterWizardDialogConst.py but not using that import. But removing it broke LetterWizardDialogImply.py because this was importing HID from LetterWizardDialog.py so now LetterWizardDialogImpl.py is directly importing HID from LetterWizardDialogConst.py Change-Id: I36bf54dcfca084b9cd25cef0f80ae814ef83643a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/165507 Tested-by: Jenkins Tested-by: Ilmari Lauhakangas Reviewed-by: Ilmari Lauhakangas --- .../sun/star/wizards/agenda/AgendaDocument.py | 27 +++++----- .../star/wizards/agenda/AgendaWizardDialog.py | 5 +- .../agenda/AgendaWizardDialogResources.py | 3 +- .../sun/star/wizards/agenda/TopicsControl.py | 2 +- .../sun/star/wizards/common/ConfigGroup.py | 2 +- .../sun/star/wizards/common/Configuration.py | 11 +++- .../wizards/common/NoValidPathException.py | 3 +- .../sun/star/wizards/common/SystemDialog.py | 2 +- .../sun/star/wizards/fax/FaxWizardDialog.py | 5 +- .../star/wizards/fax/FaxWizardDialogImpl.py | 51 ++++++++++--------- .../wizards/fax/FaxWizardDialogResources.py | 3 +- .../star/wizards/letter/LetterWizardDialog.py | 17 ++++--- .../wizards/letter/LetterWizardDialogImpl.py | 2 +- .../letter/LetterWizardDialogResources.py | 3 +- .../com/sun/star/wizards/text/TextDocument.py | 10 ++-- .../star/wizards/text/TextSectionHandler.py | 51 ++++++++++++------- wizards/com/sun/star/wizards/ui/UnoDialog.py | 27 ++++------ wizards/com/sun/star/wizards/ui/UnoDialog2.py | 10 +++- .../com/sun/star/wizards/ui/WizardDialog.py | 23 +++++---- wizards/source/access2base/access2base.py | 5 +- 20 files changed, 151 insertions(+), 111 deletions(-) diff --git a/wizards/com/sun/star/wizards/agenda/AgendaDocument.py b/wizards/com/sun/star/wizards/agenda/AgendaDocument.py index b96fe44cf150..c1f4a8f9016e 100644 --- a/wizards/com/sun/star/wizards/agenda/AgendaDocument.py +++ b/wizards/com/sun/star/wizards/agenda/AgendaDocument.py @@ -15,17 +15,17 @@ # except in compliance with the License. You may obtain a copy of # the License at http://www.apache.org/licenses/LICENSE-2.0 . # -import uno import traceback -from ..text.TextElement import TextElement -from ..text.TextDocument import TextDocument -from ..text.TextSectionHandler import TextSectionHandler -from ..common.FileAccess import FileAccess - from datetime import datetime +import uno +from com.sun.star.i18n.NumberFormatIndex import DATE_SYSTEM_LONG, TIME_HHMM from com.sun.star.text.PlaceholderType import TEXT -from com.sun.star.i18n.NumberFormatIndex import TIME_HHMM, DATE_SYSTEM_LONG + +from ..common.FileAccess import FileAccess +from ..text.TextDocument import TextDocument +from ..text.TextElement import TextElement +from ..text.TextSectionHandler import TextSectionHandler ''' The classes here implement the whole document-functionality of the agenda wizard: @@ -434,7 +434,6 @@ class AgendaDocument(TextDocument): topicStartTime = int(self.agenda.cp_Time) # first I replace the minutes titles... self.items = self.searchFillInItems() - itemIndex = 0 for item in self.items: itemText = item.String.lstrip().lower() if itemText == \ @@ -450,12 +449,15 @@ class AgendaDocument(TextDocument): elif itemText == \ self.templateConsts.FILLIN_MINUTES_DATE: self.fillMinutesItem( - item, getDateString(self.agenda.cp_Date), + item, self.getDateString(self.agenda.cp_Date), self.resources.resPlaceHolderDate) elif itemText == \ self.templateConsts.FILLIN_MINUTES_TIME: - self.fillMinutesItem( item, self.agenda.cp_Time, - self.resources.resPlaceHolderTime) + self.fillMinutesItem( + item, + self.agenda.cp_Time, + self.resources.resPlaceHolderTime + ) self.items.clear() ''' @@ -465,10 +467,9 @@ class AgendaDocument(TextDocument): topics data has *always* an empty topic at the end... ''' - for i in xrange(len(topicsData) - 1): + for i in range(len(topicsData) - 1): topic = topicsData[i] items = self.searchFillInItems() - itemIndex = 0 for item in items: itemText = item.String.lstrip().lower() if itemText == \ diff --git a/wizards/com/sun/star/wizards/agenda/AgendaWizardDialog.py b/wizards/com/sun/star/wizards/agenda/AgendaWizardDialog.py index 91933191a163..7361dd7cf84d 100644 --- a/wizards/com/sun/star/wizards/agenda/AgendaWizardDialog.py +++ b/wizards/com/sun/star/wizards/agenda/AgendaWizardDialog.py @@ -16,7 +16,8 @@ # the License at http://www.apache.org/licenses/LICENSE-2.0 . # -from ..ui.WizardDialog import WizardDialog, uno, UIConsts, PropertyNames +from ..ui.WizardDialog import WizardDialog, uno, PropertyNames +from ..ui.UIConsts import UIConsts from .AgendaWizardDialogConst import AgendaWizardDialogConst, HID from .AgendaWizardDialogResources import AgendaWizardDialogResources @@ -24,7 +25,7 @@ from .AgendaWizardDialogResources import AgendaWizardDialogResources class AgendaWizardDialog(WizardDialog): def __init__(self, xmsf): - super(AgendaWizardDialog,self).__init__(xmsf, HID ) + super(AgendaWizardDialog, self).__init__(xmsf, HID) #Load Resources self.resources = AgendaWizardDialogResources() diff --git a/wizards/com/sun/star/wizards/agenda/AgendaWizardDialogResources.py b/wizards/com/sun/star/wizards/agenda/AgendaWizardDialogResources.py index 9d42e6317f95..8a78fb5ae071 100644 --- a/wizards/com/sun/star/wizards/agenda/AgendaWizardDialogResources.py +++ b/wizards/com/sun/star/wizards/agenda/AgendaWizardDialogResources.py @@ -24,7 +24,8 @@ class AgendaWizardDialogResources(object): SECTION_MINUTES = "MINUTES" def __init__(self): - import sys, os + import sys + import os if sys.version_info < (3,4): import imp diff --git a/wizards/com/sun/star/wizards/agenda/TopicsControl.py b/wizards/com/sun/star/wizards/agenda/TopicsControl.py index 6e269f6bf242..bb8d8b81ae01 100644 --- a/wizards/com/sun/star/wizards/agenda/TopicsControl.py +++ b/wizards/com/sun/star/wizards/agenda/TopicsControl.py @@ -643,7 +643,7 @@ class TopicsControl(ControlScroller): elif tmp_switch_var1 == 3: return cr.timebox else: - raise Exception("No such column"); + raise Exception("No such column") '''getControl returns a control out of the given row, which is diff --git a/wizards/com/sun/star/wizards/common/ConfigGroup.py b/wizards/com/sun/star/wizards/common/ConfigGroup.py index 200d4ef9d1ad..4155e87f63cc 100644 --- a/wizards/com/sun/star/wizards/common/ConfigGroup.py +++ b/wizards/com/sun/star/wizards/common/ConfigGroup.py @@ -47,7 +47,7 @@ class ConfigGroup(object): propertyName = field[len(prefix):] child = getattr(self, field) if isinstance(child, ConfigGroup): - child.setRoot(self.root); + child.setRoot(self.root) child.readConfiguration(configView.getByName(propertyName), prefix) else: diff --git a/wizards/com/sun/star/wizards/common/Configuration.py b/wizards/com/sun/star/wizards/common/Configuration.py index 91274e0b288c..941b7efa0c03 100644 --- a/wizards/com/sun/star/wizards/common/Configuration.py +++ b/wizards/com/sun/star/wizards/common/Configuration.py @@ -18,6 +18,7 @@ import uno import traceback + class Configuration(object): '''This class gives access to the OO configuration api.''' @@ -44,7 +45,7 @@ class Configuration(object): @classmethod def getProductName(self, xMSF): try: - oProdNameAccess = self.getConfigurationRoot(xMSF, "org.openoffice.Setup/Product", False); + oProdNameAccess = self.getConfigurationRoot(xMSF, "org.openoffice.Setup/Product", False) return oProdNameAccess.getByName("ooName") except Exception: traceback.print_exc() @@ -60,7 +61,13 @@ class Configuration(object): @classmethod def getInt(self, name, parent): - o = getNode(name, parent) + o = self.getNode(name, parent) + # com will be undefined as it seems to strem from a java module? + # so no need to add an import statement for this. + # pyflakes will give an undefined name error but it seems + # this can therefore be ignored. + # It would be good to use a linter that we can tell to ignore this + # type of thing (i.e. flake8 or ruff) if (com.sun.star.uno.AnyConverter.isVoid(o)): return 0 return com.sun.star.uno.AnyConverter.toInt(o) diff --git a/wizards/com/sun/star/wizards/common/NoValidPathException.py b/wizards/com/sun/star/wizards/common/NoValidPathException.py index 565f67fefcee..d0625dda9cca 100644 --- a/wizards/com/sun/star/wizards/common/NoValidPathException.py +++ b/wizards/com/sun/star/wizards/common/NoValidPathException.py @@ -22,7 +22,8 @@ class NoValidPathException(Exception): # TODO: NEVER open a dialog in an exception from .SystemDialog import SystemDialog if xMSF: - import sys, os + import sys + import os if sys.version_info < (3,4): import imp diff --git a/wizards/com/sun/star/wizards/common/SystemDialog.py b/wizards/com/sun/star/wizards/common/SystemDialog.py index 35bcdadfac3b..f9c3776b40c1 100644 --- a/wizards/com/sun/star/wizards/common/SystemDialog.py +++ b/wizards/com/sun/star/wizards/common/SystemDialog.py @@ -114,7 +114,7 @@ class SystemDialog(object): return str(i.Value).replace("%productname%", "LibreOffice") raise Exception( - "UIName property not found for Filter " + filterName); + "UIName property not found for Filter " + filterName) except Exception: traceback.print_exc() return None diff --git a/wizards/com/sun/star/wizards/fax/FaxWizardDialog.py b/wizards/com/sun/star/wizards/fax/FaxWizardDialog.py index 0153eb639d30..9624fc4ed9d0 100644 --- a/wizards/com/sun/star/wizards/fax/FaxWizardDialog.py +++ b/wizards/com/sun/star/wizards/fax/FaxWizardDialog.py @@ -15,9 +15,10 @@ # except in compliance with the License. You may obtain a copy of # the License at http://www.apache.org/licenses/LICENSE-2.0 . # +from ..ui.UIConsts import UIConsts +from ..ui.WizardDialog import PropertyNames, WizardDialog, uno +from .FaxWizardDialogConst import HIDMAIN, FaxWizardDialogConst from .FaxWizardDialogResources import FaxWizardDialogResources -from .FaxWizardDialogConst import FaxWizardDialogConst, HIDMAIN, HID -from ..ui.WizardDialog import WizardDialog, uno, UIConsts, PropertyNames class FaxWizardDialog(WizardDialog): diff --git a/wizards/com/sun/star/wizards/fax/FaxWizardDialogImpl.py b/wizards/com/sun/star/wizards/fax/FaxWizardDialogImpl.py index 72952dce2701..4167cd6de2e5 100644 --- a/wizards/com/sun/star/wizards/fax/FaxWizardDialogImpl.py +++ b/wizards/com/sun/star/wizards/fax/FaxWizardDialogImpl.py @@ -15,30 +15,33 @@ # except in compliance with the License. You may obtain a copy of # the License at http://www.apache.org/licenses/LICENSE-2.0 . # -import traceback import os.path -from .FaxWizardDialog import FaxWizardDialog, uno, HID -from .CGFaxWizard import CGFaxWizard -from .FaxDocument import FaxDocument -from ..ui.PathSelection import PathSelection -from ..ui.event.UnoDataAware import UnoDataAware -from ..ui.event.RadioDataAware import RadioDataAware -from ..ui.event.CommonListener import TerminateListenerProcAdapter -from ..text.TextFieldHandler import TextFieldHandler -from ..text.TextElement import TextElement -from ..common.Configuration import Configuration -from ..common.SystemDialog import SystemDialog -from ..common.NoValidPathException import NoValidPathException -from ..common.HelpIds import HelpIds -from ..common.FileAccess import FileAccess -from ..common.Desktop import Desktop -from ..document.OfficeDocument import OfficeDocument +import traceback -from com.sun.star.awt.VclWindowPeerAttribute import YES_NO, DEF_NO +from com.sun.star.awt.VclWindowPeerAttribute import DEF_NO, YES_NO +from com.sun.star.document.MacroExecMode import ALWAYS_EXECUTE +from com.sun.star.document.UpdateDocMode import FULL_UPDATE from com.sun.star.util import CloseVetoException from com.sun.star.view.DocumentZoomType import OPTIMAL -from com.sun.star.document.UpdateDocMode import FULL_UPDATE -from com.sun.star.document.MacroExecMode import ALWAYS_EXECUTE + +from ..common.Configuration import Configuration +from ..common.Desktop import Desktop +from ..common.FileAccess import FileAccess +from ..common.HelpIds import HelpIds +from ..common.NoValidPathException import NoValidPathException +from ..common.SystemDialog import SystemDialog +from ..document.OfficeDocument import OfficeDocument +from ..text.TextElement import TextElement +from ..text.TextFieldHandler import TextFieldHandler +from ..ui.event.CommonListener import TerminateListenerProcAdapter +from ..ui.event.RadioDataAware import RadioDataAware +from ..ui.event.UnoDataAware import UnoDataAware +from ..ui.PathSelection import PathSelection +from .CGFaxWizard import CGFaxWizard +from .FaxDocument import FaxDocument +from .FaxWizardDialog import FaxWizardDialog, uno +from .FaxWizardDialogConst import HID + class FaxWizardDialogImpl(FaxWizardDialog): @@ -210,12 +213,12 @@ class FaxWizardDialogImpl(FaxWizardDialog): def drawConstants(self): '''Localise the template''' constRangeList = self.myFaxDoc.searchFillInItems(1) - + for i in constRangeList: text = i.String.lower() aux = TextElement(i, self.resources.dictConstants[text]) aux.write() - + def insertRoadmap(self): self.addRoadmap() self.insertRoadMapItems( @@ -245,7 +248,7 @@ class FaxWizardDialogImpl(FaxWizardDialog): self.sFaxPath, self.resources.dictBusinessTemplate) self.PrivateFiles = FileAccess.getFolderTitles(xMSF, "pri", self.sFaxPath, self.resources.dictPrivateTemplate) - + self.xDialogModel.lstBusinessStyle.StringItemList = \ tuple(self.BusinessFiles[0]) self.xDialogModel.lstPrivateStyle.StringItemList = \ @@ -604,7 +607,7 @@ class FaxWizardDialogImpl(FaxWizardDialog): self.chkUseFooter.State = 0 self.chkUseFooterItemChanged() - + def optReceiverPlaceholderItemChanged(self): OfficeDocument.attachEventCall( self.myFaxDoc.xTextDocument, "OnNew", "StarBasic", diff --git a/wizards/com/sun/star/wizards/fax/FaxWizardDialogResources.py b/wizards/com/sun/star/wizards/fax/FaxWizardDialogResources.py index fa3254207c2f..cdb03d50a860 100644 --- a/wizards/com/sun/star/wizards/fax/FaxWizardDialogResources.py +++ b/wizards/com/sun/star/wizards/fax/FaxWizardDialogResources.py @@ -19,7 +19,8 @@ class FaxWizardDialogResources(object): def __init__(self): - import sys, os + import sys + import os if sys.version_info < (3,4): import imp diff --git a/wizards/com/sun/star/wizards/letter/LetterWizardDialog.py b/wizards/com/sun/star/wizards/letter/LetterWizardDialog.py index 25f8323fac13..565d777332bd 100644 --- a/wizards/com/sun/star/wizards/letter/LetterWizardDialog.py +++ b/wizards/com/sun/star/wizards/letter/LetterWizardDialog.py @@ -16,10 +16,11 @@ # the License at http://www.apache.org/licenses/LICENSE-2.0 . # -from .LetterWizardDialogConst import LetterWizardDialogConst, HIDMAIN, HID -from .LetterWizardDialogResources import LetterWizardDialogResources from ..common.HelpIds import HelpIds -from ..ui.WizardDialog import WizardDialog, uno, UIConsts, PropertyNames +from ..ui.UIConsts import UIConsts +from ..ui.WizardDialog import PropertyNames, WizardDialog, uno +from .LetterWizardDialogConst import HID, HIDMAIN, LetterWizardDialogConst +from .LetterWizardDialogResources import LetterWizardDialogResources class LetterWizardDialog(WizardDialog): @@ -29,11 +30,11 @@ class LetterWizardDialog(WizardDialog): #Load Resources self.resources = LetterWizardDialogResources() - - #set dialog properties... - self.setDialogProperties(True, 210, True, 104, 52, 1, 1, + + #set dialog properties... + self.setDialogProperties(True, 210, True, 104, 52, 1, 1, self.resources.resLetterWizardDialog_title, 350) - + self.fontDescriptor5 = \ uno.createUnoStruct('com.sun.star.awt.FontDescriptor') self.fontDescriptor6 = \ @@ -43,7 +44,7 @@ class LetterWizardDialog(WizardDialog): def buildStep1(self): self.optBusinessLetter = self.insertRadioButton( - "optBusinessLetter", + "optBusinessLetter", LetterWizardDialogConst.OPTBUSINESSLETTER_ITEM_CHANGED, (PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, diff --git a/wizards/com/sun/star/wizards/letter/LetterWizardDialogImpl.py b/wizards/com/sun/star/wizards/letter/LetterWizardDialogImpl.py index 66c0e33457b5..de85eb50c049 100644 --- a/wizards/com/sun/star/wizards/letter/LetterWizardDialogImpl.py +++ b/wizards/com/sun/star/wizards/letter/LetterWizardDialogImpl.py @@ -234,7 +234,7 @@ class LetterWizardDialogImpl(LetterWizardDialog): self.xUnoDialog.endExecute() self.running = False - return True; + return True def closeDocument(self): try: diff --git a/wizards/com/sun/star/wizards/letter/LetterWizardDialogResources.py b/wizards/com/sun/star/wizards/letter/LetterWizardDialogResources.py index 3a7802f2baa7..c2be2259a014 100644 --- a/wizards/com/sun/star/wizards/letter/LetterWizardDialogResources.py +++ b/wizards/com/sun/star/wizards/letter/LetterWizardDialogResources.py @@ -19,7 +19,8 @@ class LetterWizardDialogResources(object): def __init__(self): - import sys, os + import sys + import os if sys.version_info < (3,4): import imp diff --git a/wizards/com/sun/star/wizards/text/TextDocument.py b/wizards/com/sun/star/wizards/text/TextDocument.py index f975dad5718b..5a25c65bf697 100644 --- a/wizards/com/sun/star/wizards/text/TextDocument.py +++ b/wizards/com/sun/star/wizards/text/TextDocument.py @@ -56,19 +56,21 @@ class TextDocument(object): elif xArgs is not None: '''creates an instance of TextDocument and creates a frame and loads a document''' - self.xDesktop = Desktop.getDesktop(xMSF); + self.xDesktop = Desktop.getDesktop(xMSF) self.xFrame = OfficeDocument.createNewFrame(xMSF, listener) self.xTextDocument = OfficeDocument.load( - self.xFrame, URL, "_self", xArgs); + # TODO: Find out which URL this is supposed to be, + # it is currently not defined + self.xFrame, URL, "_self", xArgs) self.xWindowPeer = self.xFrame.getComponentWindow() self.m_xDocProps = self.xTextDocument.DocumentProperties - CharLocale = self.xTextDocument.CharLocale + self.CharLocale = self.xTextDocument.CharLocale return else: '''creates an instance of TextDocument from the desktop's current frame''' - self.xDesktop = Desktop.getDesktop(xMSF); + self.xDesktop = Desktop.getDesktop(xMSF) self.xFrame = self.xDesktop.getActiveFrame() self.xTextDocument = self.xFrame.getController().Model diff --git a/wizards/com/sun/star/wizards/text/TextSectionHandler.py b/wizards/com/sun/star/wizards/text/TextSectionHandler.py index e8d649a31462..4f9c0c8a700a 100644 --- a/wizards/com/sun/star/wizards/text/TextSectionHandler.py +++ b/wizards/com/sun/star/wizards/text/TextSectionHandler.py @@ -18,6 +18,7 @@ import uno import traceback + class TextSectionHandler(object): '''Creates a new instance of TextSectionHandler''' def __init__(self, xMSF, xTextDocument): @@ -33,7 +34,6 @@ class TextSectionHandler(object): SectionName) self.removeTextSection(oTextSection) - except Exception: traceback.print_exc() @@ -62,8 +62,11 @@ class TextSectionHandler(object): oSectionLink = \ uno.createUnoStruct('com.sun.star.text.SectionFileLink') oSectionLink.FileURL = "" - uno.invoke(oTextSection, "setPropertyValues", - (("FileLink", "LinkRegion"), (oSectionLink, ""))) + uno.invoke( + oTextSection, + "setPropertyValues", + (("FileLink", "LinkRegion"), (oSectionLink, "")) + ) except Exception: traceback.print_exc() @@ -76,8 +79,11 @@ class TextSectionHandler(object): oSectionLink = \ uno.createUnoStruct('com.sun.star.text.SectionFileLink') oSectionLink.FileURL = TemplateName - uno.invoke(oTextSection, "setPropertyValues", - (("FileLink", "LinkRegion"), (oSectionLink, SectionName))) + uno.invoke( + oTextSection, + "setPropertyValues", + (("FileLink", "LinkRegion"), (oSectionLink, SectionName)) + ) NewSectionName = oTextSection.Name if NewSectionName is not SectionName: @@ -85,19 +91,28 @@ class TextSectionHandler(object): except Exception: traceback.print_exc() - def insertTextSection(self, GroupName, TemplateName, _bAddParagraph): - try: - if _bAddParagraph: - xTextCursor = self.xText.createTextCursor() - self.xText.insertControlCharacter( - xTextCursor, ControlCharacter.PARAGRAPH_BREAK, False) - xTextCursor.collapseToEnd() + # The following pyflakes errors flagged this function for me. In my + # opinion it is impossible that the first function is ever used anywhere + # since it is re-defined immediately afterwards. It also contains the + # undefined insertTextSection call which I think is likely erroneous. + # ./TextSectionHandler.py:99:13: undefined name 'insertTextSection' + # ./TextSectionHandler.py:103:5: + # redefinition of unused 'insertTextSection' from line 89 - xSecondTextCursor = self.xText.createTextCursor() - xSecondTextCursor.gotoEnd(False) - insertTextSection(GroupName, TemplateName, xSecondTextCursor) - except Exception: - traceback.print_exc() + # I have therefore commented this out for now. + # def insertTextSection(self, GroupName, TemplateName, _bAddParagraph): + # try: + # if _bAddParagraph: + # xTextCursor = self.xText.createTextCursor() + # self.xText.insertControlCharacter( + # xTextCursor, ControlCharacter.PARAGRAPH_BREAK, False) + # xTextCursor.collapseToEnd() + # + # xSecondTextCursor = self.xText.createTextCursor() + # xSecondTextCursor.gotoEnd(False) + # insertTextSection(GroupName, TemplateName, xSecondTextCursor) + # except Exception: + # traceback.print_exc() def insertTextSection(self, sectionName, templateName, position): try: @@ -110,7 +125,7 @@ class TextSectionHandler(object): position.getText().insertTextContent( position, xTextSection, False) - linkSectiontoTemplate(xTextSection, templateName, sectionName) + self.linkSectiontoTemplate(xTextSection, templateName, sectionName) except Exception: traceback.print_exc() diff --git a/wizards/com/sun/star/wizards/ui/UnoDialog.py b/wizards/com/sun/star/wizards/ui/UnoDialog.py index 174593b09ff8..5def1b184c40 100644 --- a/wizards/com/sun/star/wizards/ui/UnoDialog.py +++ b/wizards/com/sun/star/wizards/ui/UnoDialog.py @@ -18,7 +18,6 @@ # import uno import traceback -from .UIConsts import UIConsts from ..common.PropertyNames import PropertyNames from com.sun.star.awt import Rectangle from com.sun.star.awt.PosSize import POS @@ -223,31 +222,25 @@ class UnoDialog(object): nLuminance = ((nBlue * 28 + nGreen * 151 + nRed * 77) / 256) bisactivated = (nLuminance <= 25) self.BisHighContrastModeActivated = bool(bisactivated) - return bisactivated; + return bisactivated else: return self.BisHighContrastModeActivated else: return False - def getRedColorShare(self, _nColor): - nRed = _nColor / 65536 - nRedModulo = _nColor % 65536 - nGreen = nRedModulo / 256 - nGreenModulo = (nRedModulo % 256) - nBlue = nGreenModulo - return nRed + # previously these methods contained other calculations that had no + # effect on the return value nRed + return _nColor / 65536 def getGreenColorShare(self, _nColor): - nRed = _nColor / 65536 + # previously these methods contained other calculations that had no + # effect on the return value nGreen nRedModulo = _nColor % 65536 - nGreen = nRedModulo / 256 - return nGreen + return nRedModulo / 256 def getBlueColorShare(self, _nColor): - nRed = _nColor / 65536 + # previously these methods contained other calculations that had no + # effect on the return value nGreen nRedModulo = _nColor % 65536 - nGreen = nRedModulo / 256 - nGreenModulo = (nRedModulo % 256) - nBlue = nGreenModulo - return nBlue + return nRedModulo % 256 diff --git a/wizards/com/sun/star/wizards/ui/UnoDialog2.py b/wizards/com/sun/star/wizards/ui/UnoDialog2.py index 42aee8c5f5bd..4c8f8dc9048b 100644 --- a/wizards/com/sun/star/wizards/ui/UnoDialog2.py +++ b/wizards/com/sun/star/wizards/ui/UnoDialog2.py @@ -15,7 +15,9 @@ # except in compliance with the License. You may obtain a copy of # the License at http://www.apache.org/licenses/LICENSE-2.0 . # -from .UnoDialog import UnoDialog, UIConsts + +from .UIConsts import UIConsts +from .UnoDialog import UnoDialog from ..common.Desktop import Desktop from ..common.PropertyNames import PropertyNames from ..common.SystemDialog import SystemDialog @@ -42,7 +44,11 @@ class UnoDialog2(UnoDialog): def __init__(self, xmsf): super(UnoDialog2,self).__init__(xmsf,(), ()) - ControlList = {} + # previously this was variable "ControlList", which was never used + # below there is a self.ControlList in a boolean condition + # which is never initialised, so from that I am inferring that this + # should in fact be self.ControlList + self.ControlList = {} def insertButton( self, sName, actionPerformed, sPropNames, oPropValues, listener): diff --git a/wizards/com/sun/star/wizards/ui/WizardDialog.py b/wizards/com/sun/star/wizards/ui/WizardDialog.py index 333c2e98b529..abff6a8cb97f 100644 --- a/wizards/com/sun/star/wizards/ui/WizardDialog.py +++ b/wizards/com/sun/star/wizards/ui/WizardDialog.py @@ -15,19 +15,21 @@ # except in compliance with the License. You may obtain a copy of # the License at http://www.apache.org/licenses/LICENSE-2.0 . # -import uno +import os +import sys import traceback from abc import ABCMeta, abstractmethod -from .UnoDialog2 import UnoDialog2, Desktop, PropertyNames, UIConsts, \ - ItemListenerProcAdapter -from ..common.HelpIds import HelpIds -from ..common.FileAccess import FileAccess -from com.sun.star.lang import NoSuchMethodException -from com.sun.star.frame import TerminationVetoException +import uno from com.sun.star.awt.PushButtonType import HELP, STANDARD +from com.sun.star.frame import TerminationVetoException +from com.sun.star.lang import NoSuchMethodException -import sys, os +from ..common.FileAccess import FileAccess +from ..common.HelpIds import HelpIds +from .UIConsts import UIConsts +from .UnoDialog2 import (Desktop, ItemListenerProcAdapter, PropertyNames, + UnoDialog2) if sys.version_info < (3,4): import imp @@ -41,8 +43,8 @@ elif sys.version_info < (3,7): else: # have to jump through hoops since 3.7, partly because python does not like loading modules that do have a .py extension import importlib - import importlib.util import importlib.machinery + import importlib.util module_name = 'strings' path = os.path.join(os.path.dirname(__file__), '../common/strings.hrc') spec = importlib.util.spec_from_loader( @@ -188,6 +190,7 @@ class WizardDialog(UnoDialog2): self.oRoadmap.Text = strings.RID_COMMON_START_16 except NoSuchMethodException: from com.sun.star.awt.VclWindowPeerAttribute import OK + from .SystemDialog import SystemDialog sError = "The files required could not be found.\n" + \ "Please start the LibreOffice Setup and choose 'Repair'." @@ -374,7 +377,7 @@ class WizardDialog(UnoDialog2): while self.nNewStep > 0: bIsEnabled = self.isStepEnabled(self.nNewStep) if bIsEnabled: - break; + break self.nNewStep -= 1 if (self.nNewStep == 0): diff --git a/wizards/source/access2base/access2base.py b/wizards/source/access2base/access2base.py index ff0a9fbaa9cc..2410e6d88dae 100644 --- a/wizards/source/access2base/access2base.py +++ b/wizards/source/access2base/access2base.py @@ -40,7 +40,10 @@ import uno XSCRIPTCONTEXT = uno from platform import system as _opsys -import datetime, os, sys, traceback +import datetime +import os +import sys +import traceback _LIBRARY = '' # Should be 'Access2Base' or 'Access2BaseDev' _VERSION = '7.4' # Actual version number From 35d42ca07159a7fa4958c35dba05c527f3be29e6 Mon Sep 17 00:00:00 2001 From: Jim Raykowski Date: Wed, 12 Jun 2024 13:37:00 -0800 Subject: [PATCH 021/194] Partially resolves tdf#160540 Quickfind sidebar: make better use of space for search results Making the row space behavior of SalInstanceTreeView the same as GtkInstanceTreeView would fully resolve this. Change-Id: I5fd5fc755afe3ba2c2e4f4ed56dc1c7f8f541817 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/168833 Reviewed-by: Jim Raykowski Tested-by: Jenkins --- sw/source/uibase/sidebar/QuickFindPanel.cxx | 114 ++++++++++++++++---- sw/source/uibase/sidebar/QuickFindPanel.hxx | 1 - 2 files changed, 96 insertions(+), 19 deletions(-) diff --git a/sw/source/uibase/sidebar/QuickFindPanel.cxx b/sw/source/uibase/sidebar/QuickFindPanel.cxx index 753888702587..da6e016ac394 100644 --- a/sw/source/uibase/sidebar/QuickFindPanel.cxx +++ b/sw/source/uibase/sidebar/QuickFindPanel.cxx @@ -23,8 +23,12 @@ #include #include #include +#include +#include -const int MinimumPanelWidth = 250; +const int MinimumContainerWidth = 250; +const int Rounding = 6; +const int CharactersBeforeAndAfter = 40; namespace { @@ -60,11 +64,10 @@ QuickFindPanel::QuickFindPanel(weld::Widget* pParent) : PanelLayout(pParent, u"QuickFindPanel"_ustr, u"modules/swriter/ui/sidebarquickfind.ui"_ustr) , m_xSearchFindEntry(m_xBuilder->weld_entry(u"Find"_ustr)) , m_xSearchFindsList(m_xBuilder->weld_tree_view(u"searchfinds"_ustr)) - , m_nRowHeight(m_xSearchFindsList->get_height_rows(4)) , m_pWrtShell(::GetActiveWrtShell()) { - m_xContainer->set_size_request(MinimumPanelWidth, -1); - m_xSearchFindsList->set_size_request(1, m_nRowHeight); + m_xContainer->set_size_request(MinimumContainerWidth, 1); + m_xSearchFindEntry->connect_activate( LINK(this, QuickFindPanel, SearchFindEntryActivateHandler)); m_xSearchFindEntry->connect_changed(LINK(this, QuickFindPanel, SearchFindEntryChangedHandler)); @@ -101,10 +104,55 @@ IMPL_LINK_NOARG(QuickFindPanel, SearchFindEntryActivateHandler, weld::Entry&, bo return true; } -IMPL_LINK_NOARG(QuickFindPanel, SearchFindsListCustomGetSizeHandler, weld::TreeView::get_size_args, - Size) +IMPL_LINK(QuickFindPanel, SearchFindsListCustomGetSizeHandler, weld::TreeView::get_size_args, + aPayload, Size) { - return Size(1, m_nRowHeight); + vcl::RenderContext& rRenderContext = std::get<0>(aPayload); + const OUString& rId = std::get<1>(aPayload); + + const bool bPageEntry = rId[0] == '-'; + + OUString aEntry(rId); + if (!bPageEntry) + { + int nIndex = m_xSearchFindsList->find_id(rId); + aEntry = m_xSearchFindsList->get_text(nIndex); + } + + // To not have top and bottom clipping when the sidebar width is made smaller by the user + // calculate the text rectangle using the mimimum width the rectangle can become. + int x, y, width, height; + m_xSearchFindsList->get_extents_relative_to(*m_xContainer, x, y, width, height); + + const int leftTextMargin = 6; + const int rightTextMargin = 6 + 3; + tools::Long nScrollBarThickness + = Application::GetSettings().GetStyleSettings().GetScrollBarSize(); + + tools::Rectangle aInRect(Point(), Size(MinimumContainerWidth - (x * 2) - leftTextMargin + - nScrollBarThickness - rightTextMargin, + 1)); + + tools::Rectangle aRect; + if (!bPageEntry) + { + aRect = rRenderContext.GetTextRect(aInRect, aEntry, + DrawTextFlags::VCenter | DrawTextFlags::MultiLine + | DrawTextFlags::WordBreak); + } + else + { + aRect = rRenderContext.GetTextRect(aInRect, aEntry, + DrawTextFlags::Center | DrawTextFlags::VCenter); + } + + if (!bPageEntry) + { + aRect.AdjustTop(-3); + aRect.AdjustBottom(+3); + } + + return Size(1, aRect.GetHeight()); } IMPL_LINK(QuickFindPanel, SearchFindsListRender, weld::TreeView::render_args, aPayload, void) @@ -113,16 +161,46 @@ IMPL_LINK(QuickFindPanel, SearchFindsListRender, weld::TreeView::render_args, aP const ::tools::Rectangle& rRect = std::get<1>(aPayload); const OUString& rId = std::get<3>(aPayload); - tools::Rectangle aRect( - rRect.TopLeft(), - Size(rRenderContext.GetOutputSize().Width() - rRect.Left(), rRect.GetHeight())); - - int nIndex = m_xSearchFindsList->find_id(rId); - OUString aEntry(m_xSearchFindsList->get_text(nIndex)); - const bool bPageEntry = rId[0] == '-'; + + OUString aEntry(rId); + if (!bPageEntry) { + int nIndex = m_xSearchFindsList->find_id(rId); + aEntry = m_xSearchFindsList->get_text(nIndex); + } + + if (!bPageEntry) + { + const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings(); + rRenderContext.SetFillColor(rStyleSettings.GetDialogColor()); + rRenderContext.SetTextColor(rStyleSettings.GetDialogTextColor()); + } + + tools::Rectangle aRect(rRect.TopLeft(), + Size(rRenderContext.GetOutputSize().Width(), rRect.GetHeight())); + + if (!bPageEntry) + { + aRect.AdjustTop(+3); + aRect.AdjustBottom(-3); + } + + // adjust for scrollbar when not using gtk + if (m_pWrtShell->GetWin()->GetSystemData()->toolkit != SystemEnvData::Toolkit::Gtk) + { + tools::Long nScrollBarThickness + = Application::GetSettings().GetStyleSettings().GetScrollBarSize(); + aRect.AdjustRight(-nScrollBarThickness); + } + + if (!bPageEntry) + { + aRect.AdjustRight(-3); + rRenderContext.DrawRect(aRect, Rounding, Rounding); + + aRect.AdjustLeft(+6); rRenderContext.DrawText(aRect, aEntry, DrawTextFlags::VCenter | DrawTextFlags::MultiLine | DrawTextFlags::WordBreak); @@ -285,7 +363,7 @@ void QuickFindPanel::FillSearchFindsList() auto nPointIndex = pPointPosition->GetContentIndex(); // determine the text node text subview start index for the list entry text - auto nStartIndex = nMarkIndex - 50; + auto nStartIndex = nMarkIndex - CharactersBeforeAndAfter; if (nStartIndex < 0) { nStartIndex = 0; @@ -306,11 +384,11 @@ void QuickFindPanel::FillSearchFindsList() ch = sNodeText[++nStartIndex]; } if (nStartIndex == nMarkIndex) // no white space found - nStartIndex = nMarkIndex - 50; + nStartIndex = nMarkIndex - CharactersBeforeAndAfter; } // determine the text node text subview end index for the list entry text - auto nEndIndex = nPointIndex + 50; + auto nEndIndex = nPointIndex + CharactersBeforeAndAfter; if (nEndIndex >= sNodeText.getLength()) { nEndIndex = sNodeText.getLength() - 1; @@ -332,7 +410,7 @@ void QuickFindPanel::FillSearchFindsList() } if (nEndIndex == nPointIndex) // no white space found { - nEndIndex = nPointIndex + 50; + nEndIndex = nPointIndex + CharactersBeforeAndAfter; if (nEndIndex >= sNodeText.getLength()) nEndIndex = sNodeText.getLength() - 1; } diff --git a/sw/source/uibase/sidebar/QuickFindPanel.hxx b/sw/source/uibase/sidebar/QuickFindPanel.hxx index 1cf241554662..2f9cf4bad143 100644 --- a/sw/source/uibase/sidebar/QuickFindPanel.hxx +++ b/sw/source/uibase/sidebar/QuickFindPanel.hxx @@ -26,7 +26,6 @@ private: std::unique_ptr m_xSearchFindEntry; std::unique_ptr m_xSearchFindsList; std::vector> m_vPaMs; - int m_nRowHeight; SwWrtShell* m_pWrtShell; From 601cf05456073c082ac6bbe43b501eb81256711b Mon Sep 17 00:00:00 2001 From: Jim Raykowski Date: Wed, 12 Jun 2024 18:16:06 -0800 Subject: [PATCH 022/194] tdf#160543 Quickfind sidebar enhancements * Makes the search independent of find and replace options. * Adds a button to launch a dialog for match case, whole words only, and similarity search options. * Adds a button to launch the find and replace dialog. * Makes the find entry control have visual feedback when there are no matches. * Adds a label at the bottom of panel that shows the number of matches. Change-Id: I2cffcf86978773471bb86c5e5cf8b967c24efa7b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/168834 Reviewed-by: Jim Raykowski Tested-by: Jenkins --- sw/UIConfig_swriter.mk | 1 + sw/inc/strings.hrc | 2 +- sw/source/uibase/sidebar/QuickFindPanel.cxx | 463 ++++++++++++------ sw/source/uibase/sidebar/QuickFindPanel.hxx | 58 ++- sw/source/uibase/sidebar/SwPanelFactory.cxx | 3 +- sw/source/uibase/uiview/viewsrch.cxx | 2 +- sw/uiconfig/swriter/ui/sidebarquickfind.ui | 116 ++++- .../ui/sidebarquickfindoptionsdialog.ui | 175 +++++++ 8 files changed, 629 insertions(+), 191 deletions(-) create mode 100644 sw/uiconfig/swriter/ui/sidebarquickfindoptionsdialog.ui diff --git a/sw/UIConfig_swriter.mk b/sw/UIConfig_swriter.mk index 27b7248d74e5..262123969dae 100644 --- a/sw/UIConfig_swriter.mk +++ b/sw/UIConfig_swriter.mk @@ -292,6 +292,7 @@ $(eval $(call gb_UIConfig_add_uifiles,modules/swriter,\ sw/uiconfig/swriter/ui/sidebartableedit \ sw/uiconfig/swriter/ui/sidebartheme \ sw/uiconfig/swriter/ui/sidebarquickfind \ + sw/uiconfig/swriter/ui/sidebarquickfindoptionsdialog \ sw/uiconfig/swriter/ui/sortdialog \ sw/uiconfig/swriter/ui/spellmenu \ sw/uiconfig/swriter/ui/splittable \ diff --git a/sw/inc/strings.hrc b/sw/inc/strings.hrc index 298b861eecf6..b9e46f13d0c6 100644 --- a/sw/inc/strings.hrc +++ b/sw/inc/strings.hrc @@ -1396,7 +1396,7 @@ #define STR_NUM_OUTLINE NC_("STR_NUM_OUTLINE", "Outline ") #define STR_EDIT_FOOTNOTE NC_("STR_EDIT_FOOTNOTE", "Edit Footnote/Endnote") #define STR_NB_REPLACED NC_("STR_NB_REPLACED", "Search key replaced XX times.") -#define STR_SEARCH_KEY_FOUND_TIMES NC_("STR_SEARCH_KEY_FOUND_TIMES", "Search key found %1 times.") +#define STR_SEARCH_KEY_FOUND_TIMES NNC_("STR_SEARCH_KEY_FOUND_TIMES", "One match found.", "%1 matches found.") #define STR_SRCVIEW_ROW NC_("STR_SRCVIEW_ROW", "Row ") #define STR_SRCVIEW_COL NC_("STR_SRCVIEW_COL", "Column ") #define STR_SAVEAS_SRC NC_("STR_SAVEAS_SRC", "~Export source...") diff --git a/sw/source/uibase/sidebar/QuickFindPanel.cxx b/sw/source/uibase/sidebar/QuickFindPanel.cxx index da6e016ac394..0f620fd09985 100644 --- a/sw/source/uibase/sidebar/QuickFindPanel.cxx +++ b/sw/source/uibase/sidebar/QuickFindPanel.cxx @@ -12,8 +12,6 @@ #include #include #include -#include -#include #include #include #include @@ -25,9 +23,8 @@ #include #include #include +#include -const int MinimumContainerWidth = 250; -const int Rounding = 6; const int CharactersBeforeAndAfter = 40; namespace @@ -52,25 +49,85 @@ void getAnchorPos(SwPosition& rPos) namespace sw::sidebar { -std::unique_ptr QuickFindPanel::Create(weld::Widget* pParent) +QuickFindPanel::SearchOptionsDialog::SearchOptionsDialog(weld::Window* pParent) + : GenericDialogController(pParent, u"modules/swriter/ui/sidebarquickfindoptionsdialog.ui"_ustr, + u"SearchOptionsDialog"_ustr) + , m_xMatchCaseCheckButton(m_xBuilder->weld_check_button(u"matchcase"_ustr)) + , m_xWholeWordsOnlyCheckButton(m_xBuilder->weld_check_button(u"wholewordsonly"_ustr)) + , m_xSimilarityCheckButton(m_xBuilder->weld_check_button(u"similarity"_ustr)) + , m_xSimilaritySettingsDialogButton(m_xBuilder->weld_button(u"similaritysettingsdialog"_ustr)) { - if (pParent == nullptr) - throw css::lang::IllegalArgumentException( - u"no parent Window given to QuickFindPanel::Create"_ustr, nullptr, 0); - return std::make_unique(pParent); + m_xSimilarityCheckButton->connect_toggled( + LINK(this, SearchOptionsDialog, SimilarityCheckButtonToggledHandler)); + m_xSimilaritySettingsDialogButton->connect_clicked( + LINK(this, SearchOptionsDialog, SimilaritySettingsDialogButtonClickedHandler)); } -QuickFindPanel::QuickFindPanel(weld::Widget* pParent) +short QuickFindPanel::SearchOptionsDialog::executeSubDialog(VclAbstractDialog* dialog) +{ + assert(!m_executingSubDialog); + comphelper::ScopeGuard g([this] { m_executingSubDialog = false; }); + m_executingSubDialog = true; + return dialog->Execute(); +} + +IMPL_LINK_NOARG(QuickFindPanel::SearchOptionsDialog, SimilarityCheckButtonToggledHandler, + weld::Toggleable&, void) +{ + m_xSimilaritySettingsDialogButton->set_sensitive(m_xSimilarityCheckButton->get_active()); +} + +IMPL_LINK_NOARG(QuickFindPanel::SearchOptionsDialog, SimilaritySettingsDialogButtonClickedHandler, + weld::Button&, void) +{ + SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); + ScopedVclPtr pDlg(pFact->CreateSvxSearchSimilarityDialog( + m_xDialog.get(), m_bIsLEVRelaxed, m_nLEVOther, m_nLEVShorter, m_nLEVLonger)); + + if (executeSubDialog(pDlg.get()) == RET_OK) + { + m_bIsLEVRelaxed = pDlg->IsRelaxed(); + m_nLEVOther = pDlg->GetOther(); + m_nLEVShorter = pDlg->GetShorter(); + m_nLEVLonger = pDlg->GetLonger(); + } +} + +std::unique_ptr +QuickFindPanel::Create(weld::Widget* pParent, + const css::uno::Reference& rxFrame) +{ + if (pParent == nullptr) + throw lang::IllegalArgumentException("no parent Window given to QuickFindPanel::Create", + nullptr, 0); + if (!rxFrame.is()) + throw lang::IllegalArgumentException("no XFrame given to QuickFindPanel::Create", nullptr, + 0); + return std::make_unique(pParent, rxFrame); +} + +QuickFindPanel::QuickFindPanel(weld::Widget* pParent, const uno::Reference& rxFrame) : PanelLayout(pParent, u"QuickFindPanel"_ustr, u"modules/swriter/ui/sidebarquickfind.ui"_ustr) , m_xSearchFindEntry(m_xBuilder->weld_entry(u"Find"_ustr)) + , m_xSearchOptionsToolbar(m_xBuilder->weld_toolbar(u"searchoptionstoolbar"_ustr)) + , m_xFindAndReplaceToolbar(m_xBuilder->weld_toolbar(u"findandreplacetoolbar"_ustr)) + , m_xFindAndReplaceToolbarDispatch( + new ToolbarUnoDispatcher(*m_xFindAndReplaceToolbar, *m_xBuilder, rxFrame)) , m_xSearchFindsList(m_xBuilder->weld_tree_view(u"searchfinds"_ustr)) + , m_xSearchFindFoundTimesLabel(m_xBuilder->weld_label("numberofsearchfinds")) , m_pWrtShell(::GetActiveWrtShell()) { - m_xContainer->set_size_request(MinimumContainerWidth, 1); + m_nMinimumPanelWidth + = m_xBuilder->weld_widget(u"box"_ustr)->get_preferred_size().getWidth() + (6 * 2) + 6; + m_xContainer->set_size_request(m_nMinimumPanelWidth, 1); m_xSearchFindEntry->connect_activate( LINK(this, QuickFindPanel, SearchFindEntryActivateHandler)); m_xSearchFindEntry->connect_changed(LINK(this, QuickFindPanel, SearchFindEntryChangedHandler)); + + m_xSearchOptionsToolbar->connect_clicked( + LINK(this, QuickFindPanel, SearchOptionsToolbarClickedHandler)); + m_xSearchFindsList->connect_custom_get_size( LINK(this, QuickFindPanel, SearchFindsListCustomGetSizeHandler)); m_xSearchFindsList->connect_custom_render(LINK(this, QuickFindPanel, SearchFindsListRender)); @@ -79,7 +136,40 @@ QuickFindPanel::QuickFindPanel(weld::Widget* pParent) LINK(this, QuickFindPanel, SearchFindsListSelectionChangedHandler)); m_xSearchFindsList->connect_row_activated( LINK(this, QuickFindPanel, SearchFindsListRowActivatedHandler)); - m_xSearchFindsList->connect_mouse_press(LINK(this, QuickFindPanel, MousePressHandler)); + m_xSearchFindsList->connect_mouse_press( + LINK(this, QuickFindPanel, SearchFindsListMousePressHandler)); +} + +IMPL_LINK_NOARG(QuickFindPanel, SearchOptionsToolbarClickedHandler, const OUString&, void) +{ + SearchOptionsDialog aDlg(GetFrameWeld()); + + aDlg.m_xMatchCaseCheckButton->set_active(m_bMatchCase); + aDlg.m_xWholeWordsOnlyCheckButton->set_active(m_bWholeWordsOnly); + aDlg.m_xSimilarityCheckButton->set_active(m_bSimilarity); + aDlg.m_xSimilaritySettingsDialogButton->set_sensitive(m_bSimilarity); + if (m_bSimilarity) + { + aDlg.m_bIsLEVRelaxed = m_bIsLEVRelaxed; + aDlg.m_nLEVOther = m_nLEVOther; + aDlg.m_nLEVShorter = m_nLEVShorter; + aDlg.m_nLEVLonger = m_nLEVLonger; + } + + if (aDlg.run() == RET_OK) + { + m_bMatchCase = aDlg.m_xMatchCaseCheckButton->get_active(); + m_bWholeWordsOnly = aDlg.m_xWholeWordsOnlyCheckButton->get_active(); + m_bSimilarity = aDlg.m_xSimilarityCheckButton->get_active(); + if (m_bSimilarity) + { + m_bIsLEVRelaxed = aDlg.m_bIsLEVRelaxed; + m_nLEVOther = aDlg.m_nLEVOther; + m_nLEVShorter = aDlg.m_nLEVShorter; + m_nLEVLonger = aDlg.m_nLEVLonger; + } + FillSearchFindsList(); + } } QuickFindPanel::~QuickFindPanel() @@ -88,7 +178,20 @@ QuickFindPanel::~QuickFindPanel() m_xSearchFindsList.reset(); } -IMPL_LINK(QuickFindPanel, MousePressHandler, const MouseEvent&, rMEvt, bool) +IMPL_LINK_NOARG(QuickFindPanel, SearchFindEntryChangedHandler, weld::Entry&, void) +{ + m_xSearchFindEntry->set_message_type(weld::EntryMessageType::Normal); + m_xSearchFindsList->clear(); + m_xSearchFindFoundTimesLabel->set_label(OUString()); +} + +IMPL_LINK_NOARG(QuickFindPanel, SearchFindEntryActivateHandler, weld::Entry&, bool) +{ + FillSearchFindsList(); + return true; +} + +IMPL_LINK(QuickFindPanel, SearchFindsListMousePressHandler, const MouseEvent&, rMEvt, bool) { if (std::unique_ptr xEntry(m_xSearchFindsList->make_iterator()); m_xSearchFindsList->get_dest_row_at_pos(rMEvt.GetPosPixel(), xEntry.get(), false, false)) @@ -98,12 +201,6 @@ IMPL_LINK(QuickFindPanel, MousePressHandler, const MouseEvent&, rMEvt, bool) return false; } -IMPL_LINK_NOARG(QuickFindPanel, SearchFindEntryActivateHandler, weld::Entry&, bool) -{ - FillSearchFindsList(); - return true; -} - IMPL_LINK(QuickFindPanel, SearchFindsListCustomGetSizeHandler, weld::TreeView::get_size_args, aPayload, Size) { @@ -129,7 +226,7 @@ IMPL_LINK(QuickFindPanel, SearchFindsListCustomGetSizeHandler, weld::TreeView::g tools::Long nScrollBarThickness = Application::GetSettings().GetStyleSettings().GetScrollBarSize(); - tools::Rectangle aInRect(Point(), Size(MinimumContainerWidth - (x * 2) - leftTextMargin + tools::Rectangle aInRect(Point(), Size(m_nMinimumPanelWidth - (x * 2) - leftTextMargin - nScrollBarThickness - rightTextMargin, 1)); @@ -198,7 +295,7 @@ IMPL_LINK(QuickFindPanel, SearchFindsListRender, weld::TreeView::render_args, aP if (!bPageEntry) { aRect.AdjustRight(-3); - rRenderContext.DrawRect(aRect, Rounding, Rounding); + rRenderContext.DrawRect(aRect, 6, 6); aRect.AdjustLeft(+6); rRenderContext.DrawText(aRect, aEntry, @@ -282,161 +379,201 @@ IMPL_LINK_NOARG(QuickFindPanel, SearchFindsListRowActivatedHandler, weld::TreeVi return true; } -IMPL_LINK_NOARG(QuickFindPanel, SearchFindEntryChangedHandler, weld::Entry&, void) -{ - m_xSearchFindsList->clear(); -} - void QuickFindPanel::FillSearchFindsList() { m_vPaMs.clear(); m_xSearchFindsList->clear(); - const OUString& sText = m_xSearchFindEntry->get_text(); - css::uno::Sequence aPropertyValues(comphelper::InitPropertySequence({ - { "SearchItem.SearchString", css::uno::Any(sText) }, - { "SearchItem.Backward", css::uno::Any(false) }, - { "SearchItem.Command", css::uno::Any(sal_uInt16(SvxSearchCmd::FIND_ALL)) }, - })); + m_xSearchFindFoundTimesLabel->set_label(OUString()); - comphelper::dispatchCommand(u".uno:ExecuteSearch"_ustr, aPropertyValues); - - if (!m_pWrtShell->HasMark()) + const OUString& rsFindEntry = m_xSearchFindEntry->get_text(); + if (rsFindEntry.isEmpty()) return; - for (SwPaM& rPaM : m_pWrtShell->GetCursor()->GetRingContainer()) + SwWait aWait(*m_pWrtShell->GetDoc()->GetDocShell(), true); + + m_pWrtShell->AssureStdMode(); + + i18nutil::SearchOptions2 aSearchOptions; + aSearchOptions.Locale = GetAppLanguageTag().getLocale(); + aSearchOptions.searchString = rsFindEntry; + aSearchOptions.replaceString.clear(); + if (m_bWholeWordsOnly) + aSearchOptions.searchFlag |= css::util::SearchFlags::NORM_WORD_ONLY; + if (m_bSimilarity) { - SwPosition* pMarkPosition = rPaM.GetMark(); - SwPosition* pPointPosition = rPaM.GetPoint(); - std::unique_ptr xPaM(std::make_unique(*pMarkPosition, *pPointPosition)); - m_vPaMs.push_back(std::move(xPaM)); + aSearchOptions.AlgorithmType2 = css::util::SearchAlgorithms2::APPROXIMATE; + if (m_bIsLEVRelaxed) + aSearchOptions.searchFlag |= css::util::SearchFlags::LEV_RELAXED; + aSearchOptions.changedChars = m_nLEVOther; + aSearchOptions.insertedChars = m_nLEVShorter; + aSearchOptions.deletedChars = m_nLEVLonger; + } + else + aSearchOptions.AlgorithmType2 = css::util::SearchAlgorithms2::ABSOLUTE; + TransliterationFlags nTransliterationFlags = TransliterationFlags::IGNORE_WIDTH; + if (!m_bMatchCase) + nTransliterationFlags |= TransliterationFlags::IGNORE_CASE; + aSearchOptions.transliterateFlags = nTransliterationFlags; + + m_pWrtShell->SttSelect(); + /*sal_Int32 nFound =*/m_pWrtShell->SearchPattern( + aSearchOptions, false, SwDocPositions::Start, SwDocPositions::End, + FindRanges::InBody | FindRanges::InSelAll, false); + m_pWrtShell->EndSelect(); + + if (m_pWrtShell->HasMark()) + { + for (SwPaM& rPaM : m_pWrtShell->GetCursor()->GetRingContainer()) + { + SwPosition* pMarkPosition = rPaM.GetMark(); + SwPosition* pPointPosition = rPaM.GetPoint(); + std::unique_ptr xPaM(std::make_unique(*pMarkPosition, *pPointPosition)); + m_vPaMs.push_back(std::move(xPaM)); + } + + // tdf#160538 sort finds in frames and footnotes in the order they occur in the document + const SwNodeOffset nEndOfInsertsIndex + = m_pWrtShell->GetNodes().GetEndOfInserts().GetIndex(); + const SwNodeOffset nEndOfExtrasIndex = m_pWrtShell->GetNodes().GetEndOfExtras().GetIndex(); + std::stable_sort(m_vPaMs.begin(), m_vPaMs.end(), + [&nEndOfInsertsIndex, &nEndOfExtrasIndex, + this](const std::unique_ptr& a, const std::unique_ptr& b) { + SwPosition aPos(*a->Start()); + SwPosition bPos(*b->Start()); + // use page number for footnotes and endnotes + if (aPos.GetNodeIndex() >= nEndOfInsertsIndex + && bPos.GetNodeIndex() < nEndOfInsertsIndex) + return b->GetPageNum() >= a->GetPageNum(); + // use anchor position for finds that are located in flys + if (nEndOfExtrasIndex >= aPos.GetNodeIndex()) + getAnchorPos(aPos); + if (nEndOfExtrasIndex >= bPos.GetNodeIndex()) + getAnchorPos(bPos); + if (aPos == bPos) + { + // probably in same or nested fly frame + // sort using layout position + SwRect aCharRect, bCharRect; + if (SwContentFrame* pFrame + = a->GetMarkContentNode()->GetTextNode()->getLayoutFrame( + m_pWrtShell->GetLayout())) + { + pFrame->GetCharRect(aCharRect, *a->GetMark()); + } + if (SwContentFrame* pFrame + = b->GetMarkContentNode()->GetTextNode()->getLayoutFrame( + m_pWrtShell->GetLayout())) + { + pFrame->GetCharRect(bCharRect, *b->GetMark()); + } + return aCharRect.Top() < bCharRect.Top(); + } + return aPos < bPos; + }); + + // fill list + for (sal_uInt16 nPage = 0, i = 0; std::unique_ptr & xPaM : m_vPaMs) + { + SwPosition* pMarkPosition = xPaM->GetMark(); + SwPosition* pPointPosition = xPaM->GetPoint(); + + const SwContentNode* pContentNode = pMarkPosition->GetContentNode(); + const SwTextNode* pTextNode = pContentNode->GetTextNode(); + const OUString& sNodeText = pTextNode->GetText(); + + auto nMarkIndex = pMarkPosition->GetContentIndex(); + auto nPointIndex = pPointPosition->GetContentIndex(); + + // determine the text node text subview start index for the list entry text + auto nStartIndex = nMarkIndex - CharactersBeforeAndAfter; + if (nStartIndex < 0) + { + nStartIndex = 0; + } + else + { + // tdf#160539 format search finds results also to word boundaries + sal_Unicode ch; + do + { + ch = sNodeText[nStartIndex]; + } while (++nStartIndex < nMarkIndex && ch != ' ' && ch != '\t'); + if (nStartIndex < nMarkIndex) + { + // move past neighboring space and tab characters + ch = sNodeText[nStartIndex]; + while (nStartIndex < nMarkIndex && (ch == ' ' || ch == '\t')) + ch = sNodeText[++nStartIndex]; + } + if (nStartIndex == nMarkIndex) // no white space found + nStartIndex = nMarkIndex - CharactersBeforeAndAfter; + } + + // determine the text node text subview end index for the list entry text + auto nEndIndex = nPointIndex + CharactersBeforeAndAfter; + if (nEndIndex >= sNodeText.getLength()) + { + nEndIndex = sNodeText.getLength() - 1; + } + else + { + // tdf#160539 format search finds results also to word boundaries + sal_Unicode ch; + do + { + ch = sNodeText[nEndIndex]; + } while (--nEndIndex > nPointIndex && ch != ' ' && ch != '\t'); + if (nEndIndex > nPointIndex) + { + // move past neighboring space and tab characters + ch = sNodeText[nEndIndex]; + while (nEndIndex > nPointIndex && (ch == ' ' || ch == '\t')) + ch = sNodeText[--nEndIndex]; + } + if (nEndIndex == nPointIndex) // no white space found + { + nEndIndex = nPointIndex + CharactersBeforeAndAfter; + if (nEndIndex >= sNodeText.getLength()) + nEndIndex = sNodeText.getLength() - 1; + } + } + + // tdf#161291 indicate page of search finds + if (xPaM->GetPageNum() != nPage) + { + nPage = xPaM->GetPageNum(); + OUString sPageEntry(u"-"_ustr + SwResId(ST_PGE) + u" "_ustr + + OUString::number(nPage)); + m_xSearchFindsList->append(sPageEntry, sPageEntry); + } + + auto nCount = nMarkIndex - nStartIndex; + OUString sTextBeforeFind = OUString::Concat(sNodeText.subView(nStartIndex, nCount)); + auto nCount1 = nPointIndex - nMarkIndex; + OUString sFind = OUString::Concat(sNodeText.subView(nMarkIndex, nCount1)); + auto nCount2 = nEndIndex - nPointIndex + 1; + OUString sTextAfterFind = OUString::Concat(sNodeText.subView(nPointIndex, nCount2)); + OUString sStr = sTextBeforeFind + "[" + sFind + "]" + sTextAfterFind; + + OUString sId = OUString::number(i++); + m_xSearchFindsList->append(sId, sStr); + } } - // tdf#160538 sort finds in frames and footnotes in the order they occur in the document - const SwNodeOffset nEndOfInsertsIndex = m_pWrtShell->GetNodes().GetEndOfInserts().GetIndex(); - const SwNodeOffset nEndOfExtrasIndex = m_pWrtShell->GetNodes().GetEndOfExtras().GetIndex(); - std::stable_sort( - m_vPaMs.begin(), m_vPaMs.end(), - [&nEndOfInsertsIndex, &nEndOfExtrasIndex, this](const std::unique_ptr& a, - const std::unique_ptr& b) { - SwPosition aPos(*a->Start()); - SwPosition bPos(*b->Start()); - // use page number for footnotes and endnotes - if (aPos.GetNodeIndex() >= nEndOfInsertsIndex - && bPos.GetNodeIndex() < nEndOfInsertsIndex) - return b->GetPageNum() >= a->GetPageNum(); - // use anchor position for finds that are located in flys - if (nEndOfExtrasIndex >= aPos.GetNodeIndex()) - getAnchorPos(aPos); - if (nEndOfExtrasIndex >= bPos.GetNodeIndex()) - getAnchorPos(bPos); - if (aPos == bPos) - { - // probably in same or nested fly frame - // sort using layout position - SwRect aCharRect, bCharRect; - if (SwContentFrame* pFrame = a->GetMarkContentNode()->GetTextNode()->getLayoutFrame( - m_pWrtShell->GetLayout())) - { - pFrame->GetCharRect(aCharRect, *a->GetMark()); - } - if (SwContentFrame* pFrame = b->GetMarkContentNode()->GetTextNode()->getLayoutFrame( - m_pWrtShell->GetLayout())) - { - pFrame->GetCharRect(bCharRect, *b->GetMark()); - } - return aCharRect.Top() < bCharRect.Top(); - } - return aPos < bPos; - }); + // Any finds? + auto nSearchFindFoundTimes = m_vPaMs.size(); - // fill list - for (sal_uInt16 nPage = 0, i = 0; std::unique_ptr & xPaM : m_vPaMs) - { - SwPosition* pMarkPosition = xPaM->GetMark(); - SwPosition* pPointPosition = xPaM->GetPoint(); + // set the search term entry background + m_xSearchFindEntry->set_message_type(nSearchFindFoundTimes ? weld::EntryMessageType::Normal + : weld::EntryMessageType::Error); + // make the search finds list focusable or not + m_xSearchFindsList->set_sensitive(bool(nSearchFindFoundTimes)); - const SwContentNode* pContentNode = pMarkPosition->GetContentNode(); - const SwTextNode* pTextNode = pContentNode->GetTextNode(); - const OUString& sNodeText = pTextNode->GetText(); - - auto nMarkIndex = pMarkPosition->GetContentIndex(); - auto nPointIndex = pPointPosition->GetContentIndex(); - - // determine the text node text subview start index for the list entry text - auto nStartIndex = nMarkIndex - CharactersBeforeAndAfter; - if (nStartIndex < 0) - { - nStartIndex = 0; - } - else - { - // tdf#160539 format search finds results also to word boundaries - sal_Unicode ch; - do - { - ch = sNodeText[nStartIndex]; - } while (++nStartIndex < nMarkIndex && ch != ' ' && ch != '\t'); - if (nStartIndex < nMarkIndex) - { - // move past neighboring space and tab characters - ch = sNodeText[nStartIndex]; - while (nStartIndex < nMarkIndex && (ch == ' ' || ch == '\t')) - ch = sNodeText[++nStartIndex]; - } - if (nStartIndex == nMarkIndex) // no white space found - nStartIndex = nMarkIndex - CharactersBeforeAndAfter; - } - - // determine the text node text subview end index for the list entry text - auto nEndIndex = nPointIndex + CharactersBeforeAndAfter; - if (nEndIndex >= sNodeText.getLength()) - { - nEndIndex = sNodeText.getLength() - 1; - } - else - { - // tdf#160539 format search finds results also to word boundaries - sal_Unicode ch; - do - { - ch = sNodeText[nEndIndex]; - } while (--nEndIndex > nPointIndex && ch != ' ' && ch != '\t'); - if (nEndIndex > nPointIndex) - { - // move past neighboring space and tab characters - ch = sNodeText[nEndIndex]; - while (nEndIndex > nPointIndex && (ch == ' ' || ch == '\t')) - ch = sNodeText[--nEndIndex]; - } - if (nEndIndex == nPointIndex) // no white space found - { - nEndIndex = nPointIndex + CharactersBeforeAndAfter; - if (nEndIndex >= sNodeText.getLength()) - nEndIndex = sNodeText.getLength() - 1; - } - } - - // tdf#161291 indicate page of search finds - if (xPaM->GetPageNum() != nPage) - { - nPage = xPaM->GetPageNum(); - OUString sPageEntry(u"-"_ustr + SwResId(ST_PGE) + u" "_ustr + OUString::number(nPage)); - m_xSearchFindsList->append(sPageEntry, sPageEntry); - } - - auto nCount = nMarkIndex - nStartIndex; - OUString sTextBeforeFind = OUString::Concat(sNodeText.subView(nStartIndex, nCount)); - auto nCount1 = nPointIndex - nMarkIndex; - OUString sFind = OUString::Concat(sNodeText.subView(nMarkIndex, nCount1)); - auto nCount2 = nEndIndex - nPointIndex + 1; - OUString sTextAfterFind = OUString::Concat(sNodeText.subView(nPointIndex, nCount2)); - OUString sStr = sTextBeforeFind + "[" + sFind + "]" + sTextAfterFind; - - OUString sId = OUString::number(i++); - m_xSearchFindsList->append(sId, sStr); - } + // set the search term found label number of times found + OUString sText(SwResId(STR_SEARCH_KEY_FOUND_TIMES, nSearchFindFoundTimes)); + sText = sText.replaceFirst("%1", OUString::number(nSearchFindFoundTimes)); + m_xSearchFindFoundTimesLabel->set_label(sText); } } - // end of namespace ::sw::sidebar /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/uibase/sidebar/QuickFindPanel.hxx b/sw/source/uibase/sidebar/QuickFindPanel.hxx index 2f9cf4bad143..10d3664832cb 100644 --- a/sw/source/uibase/sidebar/QuickFindPanel.hxx +++ b/sw/source/uibase/sidebar/QuickFindPanel.hxx @@ -10,32 +10,76 @@ #pragma once #include +#include #include +#include namespace sw::sidebar { class QuickFindPanel : public PanelLayout { -public: - static std::unique_ptr Create(weld::Widget* pParent); + class SearchOptionsDialog final : public weld::GenericDialogController + { + friend class QuickFindPanel; - QuickFindPanel(weld::Widget* pParent); + std::unique_ptr m_xMatchCaseCheckButton; + std::unique_ptr m_xWholeWordsOnlyCheckButton; + std::unique_ptr m_xSimilarityCheckButton; + std::unique_ptr m_xSimilaritySettingsDialogButton; + + DECL_LINK(SimilarityCheckButtonToggledHandler, weld::Toggleable&, void); + DECL_LINK(SimilaritySettingsDialogButtonClickedHandler, weld::Button&, void); + + short executeSubDialog(VclAbstractDialog* pVclAbstractDialog); + + bool m_executingSubDialog = false; + + bool m_bIsLEVRelaxed = true; + sal_uInt16 m_nLEVOther = 2; + sal_uInt16 m_nLEVShorter = 2; + sal_uInt16 m_nLEVLonger = 2; + + public: + SearchOptionsDialog(weld::Window* pParent); + }; + +public: + static std::unique_ptr Create(weld::Widget* pParent, + const uno::Reference& rxFrame); + + QuickFindPanel(weld::Widget* pParent, const uno::Reference& rxFrame); virtual ~QuickFindPanel() override; private: - std::unique_ptr m_xSearchFindEntry; - std::unique_ptr m_xSearchFindsList; std::vector> m_vPaMs; + std::unique_ptr m_xSearchFindEntry; + std::unique_ptr m_xSearchOptionsToolbar; + std::unique_ptr m_xFindAndReplaceToolbar; + std::unique_ptr m_xFindAndReplaceToolbarDispatch; + std::unique_ptr m_xSearchFindsList; + std::unique_ptr m_xSearchFindFoundTimesLabel; + SwWrtShell* m_pWrtShell; + int m_nMinimumPanelWidth; + + bool m_bMatchCase = false; + bool m_bWholeWordsOnly = false; + bool m_bSimilarity = false; + bool m_bIsLEVRelaxed = true; + sal_uInt16 m_nLEVOther = 2; + sal_uInt16 m_nLEVShorter = 2; + sal_uInt16 m_nLEVLonger = 2; + DECL_LINK(SearchFindEntryActivateHandler, weld::Entry&, bool); + DECL_LINK(SearchFindEntryChangedHandler, weld::Entry&, void); DECL_LINK(SearchFindsListCustomGetSizeHandler, weld::TreeView::get_size_args, Size); DECL_LINK(SearchFindsListRender, weld::TreeView::render_args, void); DECL_LINK(SearchFindsListSelectionChangedHandler, weld::TreeView&, void); - DECL_LINK(SearchFindEntryChangedHandler, weld::Entry&, void); DECL_LINK(SearchFindsListRowActivatedHandler, weld::TreeView&, bool); - DECL_LINK(MousePressHandler, const MouseEvent&, bool); + DECL_LINK(SearchFindsListMousePressHandler, const MouseEvent&, bool); + DECL_LINK(SearchOptionsToolbarClickedHandler, const OUString&, void); void FillSearchFindsList(); }; diff --git a/sw/source/uibase/sidebar/SwPanelFactory.cxx b/sw/source/uibase/sidebar/SwPanelFactory.cxx index ee378d8e6461..4e5cd83d4116 100644 --- a/sw/source/uibase/sidebar/SwPanelFactory.cxx +++ b/sw/source/uibase/sidebar/SwPanelFactory.cxx @@ -206,7 +206,8 @@ Reference SAL_CALL SwPanelFactory::createUIElement ( } else if (rsResourceURL.endsWith("/QuickFindPanel")) { - std::unique_ptr xPanel = sw::sidebar::QuickFindPanel::Create(pParent); + std::unique_ptr xPanel + = sw::sidebar::QuickFindPanel::Create(pParent, xFrame); xElement = sfx2::sidebar::SidebarPanelBase::Create(rsResourceURL, xFrame, std::move(xPanel), ui::LayoutSize(-1, -1, -1)); } diff --git a/sw/source/uibase/uiview/viewsrch.cxx b/sw/source/uibase/uiview/viewsrch.cxx index d005899f8229..9f7c9cabe130 100644 --- a/sw/source/uibase/uiview/viewsrch.cxx +++ b/sw/source/uibase/uiview/viewsrch.cxx @@ -278,7 +278,7 @@ void SwView::ExecSearch(SfxRequest& rReq) lcl_emitSearchResultCallbacks(s_pSrchItem, m_pWrtShell.get(), /* bHighlightAll = */ true); if (!bQuiet) { - OUString sText(SwResId(STR_SEARCH_KEY_FOUND_TIMES)); + OUString sText(SwResId(STR_SEARCH_KEY_FOUND_TIMES, nFound)); sText = sText.replaceFirst("%1", OUString::number(nFound)); SvxSearchDialogWrapper::SetSearchLabel(sText); } diff --git a/sw/uiconfig/swriter/ui/sidebarquickfind.ui b/sw/uiconfig/swriter/ui/sidebarquickfind.ui index e2dfdb085fe2..cc9c1226e9c0 100644 --- a/sw/uiconfig/swriter/ui/sidebarquickfind.ui +++ b/sw/uiconfig/swriter/ui/sidebarquickfind.ui @@ -2,11 +2,9 @@ - + - - - + @@ -18,22 +16,89 @@ False True True - 6 - 6 True True - + True False + True + True 6 vertical - 2 + 6 - + True - True - Find + False + 2 + + + True + True + True + Find + + + True + True + 0 + + + + + True + False + icons + False + + + True + False + Search Options + sw/res/sr20006.png + + + More Search Options + Click here to open a dialog to set more search options. + + + + + False + False + + + + + False + False + 1 + + + + + True + False + icons + False + + + True + False + + + False + False + + + + + False + False + 2 + + False @@ -47,19 +112,18 @@ True True True + always in - -1 True True True True - 0 - liststore1 + liststore False - False - 1 + False + 0 False @@ -70,22 +134,38 @@ - + 0 + + + Lists the positions in the document that the searched term is found. + + - False + True True 1 + + + True + False + + + False + True + 3 + + 0 diff --git a/sw/uiconfig/swriter/ui/sidebarquickfindoptionsdialog.ui b/sw/uiconfig/swriter/ui/sidebarquickfindoptionsdialog.ui new file mode 100644 index 000000000000..d80bafa2629c --- /dev/null +++ b/sw/uiconfig/swriter/ui/sidebarquickfindoptionsdialog.ui @@ -0,0 +1,175 @@ + + + + + + False + 6 + Search Options + False + True + 0 + 0 + dialog + + + False + vertical + 2 + + + False + end + + + _OK + True + True + True + True + True + True + + + False + True + 0 + + + + + _Cancel + True + True + True + True + + + False + True + 1 + + + + + False + False + 1 + + + + + + True + False + True + 6 + + + True + False + 12 + + + Similarity + True + True + False + True + True + True + + + Find terms that are similar to the Find text. Select this checkbox, and then click the Similarities button to define the similarity options. + + + + + False + True + 0 + + + + + Similarities... + True + True + True + True + end + True + True + + + Set the options for the similarity search. + + + + + False + True + 1 + + + + + 0 + 2 + + + + + Match case + True + True + False + True + True + True + + + Finds only exact case matches. + + + + + 0 + 0 + + + + + Whole words only + True + True + False + True + True + True + + + Finds only whole words. + + + + + 0 + 1 + + + + + False + True + 0 + + + + + + ok + cancel + + + From 6c724c2456eba6198c9c7c8f0cbf04e759083097 Mon Sep 17 00:00:00 2001 From: Bogdan Buzea Date: Sun, 23 Jun 2024 17:46:20 +0200 Subject: [PATCH 023/194] Resave with newer Glade version Change-Id: I6720f2d2435b53c3cead37c1d2cd68e957e9066b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169400 Tested-by: Jenkins Reviewed-by: Taichi Haradaguchi <20001722@ymail.ne.jp> --- sfx2/uiconfig/ui/addtargetdialog.ui | 123 ++++++++++++++-------------- 1 file changed, 60 insertions(+), 63 deletions(-) diff --git a/sfx2/uiconfig/ui/addtargetdialog.ui b/sfx2/uiconfig/ui/addtargetdialog.ui index 09c704779d17..c883fa9d90d7 100644 --- a/sfx2/uiconfig/ui/addtargetdialog.ui +++ b/sfx2/uiconfig/ui/addtargetdialog.ui @@ -1,35 +1,32 @@ - + - False - 6 + False + 6 Add Target True - 0 - 0 - dialog - - - + 0 + 0 + dialog - False + False True True vertical 12 - False - end + False + end _OK True - True - True + True + True True @@ -42,8 +39,8 @@ _Cancel True - True - True + True + True True @@ -56,8 +53,8 @@ _Help True - True - True + True + True True @@ -71,98 +68,98 @@ False True - end + end 0 - + True - False - 6 - 12 + False + 6 + 12 True - False + False Name: - True + True - 0 - 0 + 0 + 0 True - True + True True - True + True True - 1 - 0 + 1 + 0 True - False + False Type: - True + True - 0 - 1 + 0 + 1 True - False + False Content: - True + True - 0 - 2 + 0 + 2 True - True + True True - True + True True - 1 - 2 + 1 + 2 True - False + False True 0 @@ -175,29 +172,29 @@ - 1 - 1 + 1 + 1 False - False + False Content: - True + True - 0 - 3 + 0 + 3 False - False + False True 0 @@ -213,8 +210,8 @@ - 1 - 3 + 1 + 3 @@ -227,16 +224,16 @@ True - False + False 12 Match case True - True - False - True - True + True + False + True + True False @@ -248,15 +245,15 @@ Whole words only True - True - False - True - True + True + False + True + True False True - end + end 1 From 4220b8be72b6d168dc9d11d35fd400d0b15e6f7d Mon Sep 17 00:00:00 2001 From: Taichi Haradaguchi <20001722@ymail.ne.jp> Date: Sun, 23 Jun 2024 11:44:56 +0200 Subject: [PATCH 024/194] Add newline at end of file Change-Id: I731d8d80e075c8df8a104ec963b89337a91d536c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169376 Reviewed-by: Taichi Haradaguchi <20001722@ymail.ne.jp> Tested-by: Jenkins --- basctl/uiconfig/basicide/ui/deletelangdialog.ui | 2 +- basctl/uiconfig/basicide/ui/dialogpage.ui | 2 +- basctl/uiconfig/basicide/ui/sortmenu.ui | 2 +- chart2/uiconfig/ui/3dviewdialog.ui | 2 +- chart2/uiconfig/ui/chardialog.ui | 2 +- cui/uiconfig/ui/asiantypography.ui | 2 +- cui/uiconfig/ui/borderareatransparencydialog.ui | 2 +- dbaccess/uiconfig/ui/admindialog.ui | 2 +- dbaccess/uiconfig/ui/deleteallrowsdialog.ui | 2 +- dbaccess/uiconfig/ui/generalpagedialog.ui | 2 +- extensions/uiconfig/spropctrlr/ui/browserline.ui | 2 +- filter/uiconfig/ui/xmlfiltersettings.ui | 2 +- fpicker/uiconfig/ui/breadcrumb.ui | 2 +- sd/uiconfig/sdraw/ui/breakdialog.ui | 2 +- sfx2/uiconfig/ui/bookmarkdialog.ui | 2 +- sfx2/uiconfig/ui/bookmarkmenu.ui | 2 +- sfx2/uiconfig/ui/errorfindemaildialog.ui | 2 +- svx/uiconfig/ui/addnamespacedialog.ui | 2 +- svx/uiconfig/ui/xmlsecstatmenu.ui | 2 +- sw/uiconfig/swriter/ui/bibliofragment.ui | 2 +- sw/uiconfig/swriter/ui/bulletsandnumbering.ui | 2 +- sw/uiconfig/swriter/ui/cannotsavelabeldialog.ui | 2 +- sw/uiconfig/swriter/ui/zoombox.ui | 2 +- 23 files changed, 23 insertions(+), 23 deletions(-) diff --git a/basctl/uiconfig/basicide/ui/deletelangdialog.ui b/basctl/uiconfig/basicide/ui/deletelangdialog.ui index c403c0270e55..4bc232a8f60a 100644 --- a/basctl/uiconfig/basicide/ui/deletelangdialog.ui +++ b/basctl/uiconfig/basicide/ui/deletelangdialog.ui @@ -32,4 +32,4 @@ - \ No newline at end of file + diff --git a/basctl/uiconfig/basicide/ui/dialogpage.ui b/basctl/uiconfig/basicide/ui/dialogpage.ui index d4e66ea56396..5957ae76b587 100644 --- a/basctl/uiconfig/basicide/ui/dialogpage.ui +++ b/basctl/uiconfig/basicide/ui/dialogpage.ui @@ -271,4 +271,4 @@ - \ No newline at end of file + diff --git a/basctl/uiconfig/basicide/ui/sortmenu.ui b/basctl/uiconfig/basicide/ui/sortmenu.ui index dc0d23ca7413..bd40fcb8f123 100644 --- a/basctl/uiconfig/basicide/ui/sortmenu.ui +++ b/basctl/uiconfig/basicide/ui/sortmenu.ui @@ -39,4 +39,4 @@ - \ No newline at end of file + diff --git a/chart2/uiconfig/ui/3dviewdialog.ui b/chart2/uiconfig/ui/3dviewdialog.ui index 2f09169344a6..4f414bb7f996 100644 --- a/chart2/uiconfig/ui/3dviewdialog.ui +++ b/chart2/uiconfig/ui/3dviewdialog.ui @@ -95,4 +95,4 @@ help - \ No newline at end of file + diff --git a/chart2/uiconfig/ui/chardialog.ui b/chart2/uiconfig/ui/chardialog.ui index 44492c12e44f..171c171e2dc3 100644 --- a/chart2/uiconfig/ui/chardialog.ui +++ b/chart2/uiconfig/ui/chardialog.ui @@ -175,4 +175,4 @@ help - \ No newline at end of file + diff --git a/cui/uiconfig/ui/asiantypography.ui b/cui/uiconfig/ui/asiantypography.ui index 3e926f1d647e..317301518115 100644 --- a/cui/uiconfig/ui/asiantypography.ui +++ b/cui/uiconfig/ui/asiantypography.ui @@ -77,4 +77,4 @@ - \ No newline at end of file + diff --git a/cui/uiconfig/ui/borderareatransparencydialog.ui b/cui/uiconfig/ui/borderareatransparencydialog.ui index 62f746348451..03d493c8631c 100644 --- a/cui/uiconfig/ui/borderareatransparencydialog.ui +++ b/cui/uiconfig/ui/borderareatransparencydialog.ui @@ -177,4 +177,4 @@ reset - \ No newline at end of file + diff --git a/dbaccess/uiconfig/ui/admindialog.ui b/dbaccess/uiconfig/ui/admindialog.ui index 73ea4ef05248..ecbb0525f5a2 100644 --- a/dbaccess/uiconfig/ui/admindialog.ui +++ b/dbaccess/uiconfig/ui/admindialog.ui @@ -132,4 +132,4 @@ help - \ No newline at end of file + diff --git a/dbaccess/uiconfig/ui/deleteallrowsdialog.ui b/dbaccess/uiconfig/ui/deleteallrowsdialog.ui index 027200020003..10183f8cefc3 100644 --- a/dbaccess/uiconfig/ui/deleteallrowsdialog.ui +++ b/dbaccess/uiconfig/ui/deleteallrowsdialog.ui @@ -78,4 +78,4 @@ cancel - \ No newline at end of file + diff --git a/dbaccess/uiconfig/ui/generalpagedialog.ui b/dbaccess/uiconfig/ui/generalpagedialog.ui index 04fd637bfbcd..8e785fad89aa 100644 --- a/dbaccess/uiconfig/ui/generalpagedialog.ui +++ b/dbaccess/uiconfig/ui/generalpagedialog.ui @@ -83,4 +83,4 @@ The new settings you make will overwrite your existing settings. - \ No newline at end of file + diff --git a/extensions/uiconfig/spropctrlr/ui/browserline.ui b/extensions/uiconfig/spropctrlr/ui/browserline.ui index 096bce45563e..31df14938c4b 100644 --- a/extensions/uiconfig/spropctrlr/ui/browserline.ui +++ b/extensions/uiconfig/spropctrlr/ui/browserline.ui @@ -48,4 +48,4 @@ - \ No newline at end of file + diff --git a/filter/uiconfig/ui/xmlfiltersettings.ui b/filter/uiconfig/ui/xmlfiltersettings.ui index 0a769078ee6d..42341d55cf9a 100644 --- a/filter/uiconfig/ui/xmlfiltersettings.ui +++ b/filter/uiconfig/ui/xmlfiltersettings.ui @@ -291,4 +291,4 @@ - \ No newline at end of file + diff --git a/fpicker/uiconfig/ui/breadcrumb.ui b/fpicker/uiconfig/ui/breadcrumb.ui index c3c6af46eb1a..4d6198f54645 100644 --- a/fpicker/uiconfig/ui/breadcrumb.ui +++ b/fpicker/uiconfig/ui/breadcrumb.ui @@ -30,4 +30,4 @@ - \ No newline at end of file + diff --git a/sd/uiconfig/sdraw/ui/breakdialog.ui b/sd/uiconfig/sdraw/ui/breakdialog.ui index a42d710039f8..ad3f6c92030e 100644 --- a/sd/uiconfig/sdraw/ui/breakdialog.ui +++ b/sd/uiconfig/sdraw/ui/breakdialog.ui @@ -134,4 +134,4 @@ cancel - \ No newline at end of file + diff --git a/sfx2/uiconfig/ui/bookmarkdialog.ui b/sfx2/uiconfig/ui/bookmarkdialog.ui index e449a4726e45..f480b1f52ffa 100644 --- a/sfx2/uiconfig/ui/bookmarkdialog.ui +++ b/sfx2/uiconfig/ui/bookmarkdialog.ui @@ -135,4 +135,4 @@ help - \ No newline at end of file + diff --git a/sfx2/uiconfig/ui/bookmarkmenu.ui b/sfx2/uiconfig/ui/bookmarkmenu.ui index 529b134b0ee4..aab95a893d70 100644 --- a/sfx2/uiconfig/ui/bookmarkmenu.ui +++ b/sfx2/uiconfig/ui/bookmarkmenu.ui @@ -36,4 +36,4 @@ - \ No newline at end of file + diff --git a/sfx2/uiconfig/ui/errorfindemaildialog.ui b/sfx2/uiconfig/ui/errorfindemaildialog.ui index fb7b20c4d2d7..a4bc7fb674ca 100644 --- a/sfx2/uiconfig/ui/errorfindemaildialog.ui +++ b/sfx2/uiconfig/ui/errorfindemaildialog.ui @@ -32,4 +32,4 @@ - \ No newline at end of file + diff --git a/svx/uiconfig/ui/addnamespacedialog.ui b/svx/uiconfig/ui/addnamespacedialog.ui index 4ac8da6a2767..8220683d99a9 100644 --- a/svx/uiconfig/ui/addnamespacedialog.ui +++ b/svx/uiconfig/ui/addnamespacedialog.ui @@ -163,4 +163,4 @@ help - \ No newline at end of file + diff --git a/svx/uiconfig/ui/xmlsecstatmenu.ui b/svx/uiconfig/ui/xmlsecstatmenu.ui index 11695ccaf46b..cdc26ae2c864 100644 --- a/svx/uiconfig/ui/xmlsecstatmenu.ui +++ b/svx/uiconfig/ui/xmlsecstatmenu.ui @@ -14,4 +14,4 @@ - \ No newline at end of file + diff --git a/sw/uiconfig/swriter/ui/bibliofragment.ui b/sw/uiconfig/swriter/ui/bibliofragment.ui index 5ad84876f4e7..d3ea6b2b4426 100644 --- a/sw/uiconfig/swriter/ui/bibliofragment.ui +++ b/sw/uiconfig/swriter/ui/bibliofragment.ui @@ -166,4 +166,4 @@ - \ No newline at end of file + diff --git a/sw/uiconfig/swriter/ui/bulletsandnumbering.ui b/sw/uiconfig/swriter/ui/bulletsandnumbering.ui index 938aee878355..2d96992cc5fd 100644 --- a/sw/uiconfig/swriter/ui/bulletsandnumbering.ui +++ b/sw/uiconfig/swriter/ui/bulletsandnumbering.ui @@ -281,4 +281,4 @@ help - \ No newline at end of file + diff --git a/sw/uiconfig/swriter/ui/cannotsavelabeldialog.ui b/sw/uiconfig/swriter/ui/cannotsavelabeldialog.ui index 4a0173d6ea34..0cbea2f23a19 100644 --- a/sw/uiconfig/swriter/ui/cannotsavelabeldialog.ui +++ b/sw/uiconfig/swriter/ui/cannotsavelabeldialog.ui @@ -32,4 +32,4 @@ - \ No newline at end of file + diff --git a/sw/uiconfig/swriter/ui/zoombox.ui b/sw/uiconfig/swriter/ui/zoombox.ui index a44fffe0d421..c32c926482da 100644 --- a/sw/uiconfig/swriter/ui/zoombox.ui +++ b/sw/uiconfig/swriter/ui/zoombox.ui @@ -27,4 +27,4 @@ - \ No newline at end of file + From 0bd78576cabee83b7e3e617c271d67bc54a78f7f Mon Sep 17 00:00:00 2001 From: Bogdan Buzea Date: Sun, 23 Jun 2024 17:44:34 +0200 Subject: [PATCH 025/194] Resave with newer Glade version Change-Id: Ifbf7623bb1478f47c28b292049506ba6854d68b8 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169399 Tested-by: Jenkins Reviewed-by: Taichi Haradaguchi <20001722@ymail.ne.jp> --- svx/uiconfig/ui/addsubmissiondialog.ui | 165 ++++++++++++------------- 1 file changed, 81 insertions(+), 84 deletions(-) diff --git a/svx/uiconfig/ui/addsubmissiondialog.ui b/svx/uiconfig/ui/addsubmissiondialog.ui index ed708a477c81..ea603f26617e 100644 --- a/svx/uiconfig/ui/addsubmissiondialog.ui +++ b/svx/uiconfig/ui/addsubmissiondialog.ui @@ -1,35 +1,32 @@ - + - False - 6 + False + 6 Add Submission True - 0 - 0 - dialog - - - + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _OK True - True - True - True - True + True + True + True + True True @@ -42,8 +39,8 @@ _Cancel True - True - True + True + True True @@ -56,8 +53,8 @@ _Help True - True - True + True + True True @@ -71,193 +68,193 @@ False True - end + end 0 - + True - False + False True - 6 - 12 + 6 + 12 True - True + True center - True + True + 46 True - 46 - 1 - 0 + 1 + 0 2 True - False + False _Name: - True - name + True + name 1 - 0 - 0 + 0 + 0 True - False + False Binding e_xpression: - True - expression + True + expression 1 - 0 - 3 + 0 + 3 _Add... True - True - True + True + True center - True + True - 2 - 3 + 2 + 3 True - False + False _Action: - True - action + True + action 1 - 0 - 1 + 0 + 1 True - True + True center - True + True + 46 True - 46 - 1 - 1 + 1 + 1 2 True - False + False _Method: - True - method + True + method 1 - 0 - 2 + 0 + 2 True - False + False center - 1 - 2 + 1 + 2 2 True - True + True center - True + True + 46 True - 46 - 1 - 3 + 1 + 3 True - False + False _Binding: - True - binding + True + binding 1 - 0 - 4 + 0 + 4 True - False + False _Replace: - True - replace + True + replace 1 - 0 - 5 + 0 + 5 True - False + False center - 1 - 4 + 1 + 4 2 True - False + False center - 1 - 5 + 1 + 5 2 From 70b3e128aef631e18e6451362c2e6315c28b857e Mon Sep 17 00:00:00 2001 From: Bogdan Buzea Date: Sun, 23 Jun 2024 16:53:43 +0200 Subject: [PATCH 026/194] Resave with newer Glade version Change-Id: I5e97ebd5cb357673d7bfda563e83c2e75934b88d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169391 Reviewed-by: Taichi Haradaguchi <20001722@ymail.ne.jp> Tested-by: Jenkins --- .../ui/tabledesignsavemodifieddialog.ui | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/dbaccess/uiconfig/ui/tabledesignsavemodifieddialog.ui b/dbaccess/uiconfig/ui/tabledesignsavemodifieddialog.ui index ea0fdd5b01d5..240189bea5ba 100644 --- a/dbaccess/uiconfig/ui/tabledesignsavemodifieddialog.ui +++ b/dbaccess/uiconfig/ui/tabledesignsavemodifieddialog.ui @@ -1,30 +1,30 @@ - + - False + False False True - dialog - True - question + dialog + True + question Do you want to save the changes? - The table has been changed. + The table has been changed. - False + False vertical 12 - False + False _No True - True - True + True + True True @@ -37,10 +37,10 @@ _Yes True - True - True - True - True + True + True + True + True True @@ -53,8 +53,8 @@ _Cancel True - True - True + True + True True @@ -67,7 +67,7 @@ False True - end + end 0 From 96ffaadbcd3010515b2465f7f87b599909db5913 Mon Sep 17 00:00:00 2001 From: Leonard Sasse Date: Fri, 29 Mar 2024 06:19:45 +0100 Subject: [PATCH 027/194] tdf#158803 F821: xrange undefined, should be range in py3; remove some unused variables changing range(len()) to enumerate as suggested by Arkadiy Illarionov Change-Id: I5000204281a5f6ded9c411525e612bf84b552f80 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/165505 Reviewed-by: Ilmari Lauhakangas Tested-by: Ilmari Lauhakangas --- bin/convwatch.py | 2 +- bin/find-german-comments | 10 ++++------ bin/refcount_leak.py | 2 +- bin/update_pch_bisect | 38 +++++++++++++++++--------------------- 4 files changed, 23 insertions(+), 29 deletions(-) diff --git a/bin/convwatch.py b/bin/convwatch.py index 93082186f319..25920b7343c8 100644 --- a/bin/convwatch.py +++ b/bin/convwatch.py @@ -355,7 +355,7 @@ def runLoadPrintFileTests(opts, dirs, suffix, reference): def mkImages(file, resolution): argv = [ "gs", "-r" + resolution, "-sOutputFile=" + file + ".%04d.jpeg", "-dNOPROMPT", "-dNOPAUSE", "-dBATCH", "-sDEVICE=jpeg", file ] - ret = subprocess.check_call(argv) + subprocess.check_call(argv) def mkAllImages(dirs, suffix, resolution, reference, failed): if reference: diff --git a/bin/find-german-comments b/bin/find-german-comments index 251f4f77f270..de1ed9481fca 100755 --- a/bin/find-german-comments +++ b/bin/find-german-comments @@ -61,7 +61,6 @@ class Parser: """ Extracts the source code comments. """ - linenum = 0 if self.args.verbose: print("processing file '%s'...\n" % filename) sock = open(filename) @@ -95,7 +94,6 @@ class Parser: elif "/*" in i and "*/" not in i and not in_comment: # start of a real multiline comment in_comment = True - linenum = count s = re.sub(r".*/\*+", "", i.strip(self.strip)) if len(s): buf.append(s.strip(self.strip)) @@ -156,7 +154,7 @@ class Parser: if len(path) >= START: return 1 diff = START - len(path) - if diff % 4 is not 0: + if (diff % 4) != 0: padding = 1 else: padding = 0 @@ -216,7 +214,7 @@ class Parser: done = False while not done: nextElem = os.path.split(lastElem)[0] - if nextElem is not '': + if nextElem != '': lastElem = nextElem else: done = True @@ -378,10 +376,10 @@ class Parser: if not baseDir in directory_allowlist: sys.stderr.write("\n - Error: Missing path %s -\n\n" % baseDir) sys.exit(1) - elif directory_allowlist[baseDir] is 0: + elif directory_allowlist[baseDir] == 0: self.check_file(path.strip()) num_checked = num_checked + 1 - elif directory_allowlist[baseDir] is 1: + elif directory_allowlist[baseDir] == 1: sys.stderr.write("Skipping excluded directory %s\n" % baseDir) directory_allowlist[baseDir] = 2 elif not globalscan: diff --git a/bin/refcount_leak.py b/bin/refcount_leak.py index de98d065a2ac..d0b8cd502f7c 100755 --- a/bin/refcount_leak.py +++ b/bin/refcount_leak.py @@ -95,7 +95,7 @@ def getFunction(frame): start = frame.index(" in ") + len(" in ") try: end = frame.index(" at ", start) - except ValueError as e: + except ValueError: # argh... stack frames may be split across multiple lines if # a parameter has a fancy pretty printer return frame[start:] diff --git a/bin/update_pch_bisect b/bin/update_pch_bisect index 271cbc88ff1b..71072303efdc 100755 --- a/bin/update_pch_bisect +++ b/bin/update_pch_bisect @@ -54,8 +54,7 @@ def run(command): def update_pch(filename, lines, marks): with open(filename, 'w') as f: - for i in xrange(len(marks)): - mark = marks[i] + for i, mark in enumerate(marks): if mark <= TEST_ON: f.write(lines[i]) else: @@ -132,8 +131,7 @@ def get_marks(lines): marks = [] min = -1 max = -1 - for i in xrange(len(lines)): - line = lines[i] + for i, line in enumerate(lines): if line.startswith('#include'): marks.append(TEST_ON) min = i if min < 0 else min @@ -205,8 +203,8 @@ def main(): # Simplify further, as sometimes we can have # false positives due to the benign nature # of includes that are not absolutely required. - for i in xrange(len(marks)): - if marks[i] == GOOD: + for i, mark in enumerate(marks): + if mark == GOOD: marks[i] = TEST_OFF update_pch(filename, lines, marks) if not run(command): @@ -214,14 +212,14 @@ def main(): marks[i] = GOOD else: marks[i] = BAD - elif marks[i] == TEST_OFF: + elif mark == TEST_OFF: marks[i] = TEST_ON update_pch(filename, lines, marks) log('') - for i in xrange(len(marks)): - if marks[i] == (BAD if FIND_CONFLICTS else GOOD): + for i, mark in enumerate(marks): + if mark == (BAD if FIND_CONFLICTS else GOOD): print("'{}',".format(get_filename(lines[i].strip('\n')))) return 0 @@ -258,8 +256,7 @@ class TestBisectConflict(unittest.TestCase): def _update_func(self, lines, marks): self.lines = [] - for i in xrange(len(marks)): - mark = marks[i] + for i, mark in enumerate(marks): if mark <= TEST_ON: self.lines.append(lines[i]) else: @@ -282,7 +279,7 @@ class TestBisectConflict(unittest.TestCase): def test_conflict(self): lines = self.TEST.split('\n') - for pos in xrange(len(lines) + 1): + for pos in range(len(lines) + 1): lines = self.TEST.split('\n') lines.insert(pos, self.BAD_LINE) (marks, min, max) = get_marks(lines) @@ -290,11 +287,11 @@ class TestBisectConflict(unittest.TestCase): marks = bisect(lines, marks, min, max, lambda l, m: self._update_func(l, m), lambda: self._test_func()) - for i in xrange(len(marks)): + for i, mark in enumerate(marks): if i == pos: - self.assertEqual(BAD, marks[i]) + self.assertEqual(BAD, mark) else: - self.assertNotEqual(BAD, marks[i]) + self.assertNotEqual(BAD, mark) class TestBisectRequired(unittest.TestCase): TEST = """#include @@ -310,8 +307,7 @@ class TestBisectRequired(unittest.TestCase): def _update_func(self, lines, marks): self.lines = [] - for i in xrange(len(marks)): - mark = marks[i] + for i, mark in enumerate(marks): if mark <= TEST_ON: self.lines.append(lines[i]) else: @@ -335,7 +331,7 @@ class TestBisectRequired(unittest.TestCase): def test_required(self): lines = self.TEST.split('\n') - for pos in xrange(len(lines) + 1): + for pos in range(len(lines) + 1): lines = self.TEST.split('\n') lines.insert(pos, self.REQ_LINE) (marks, min, max) = get_marks(lines) @@ -343,11 +339,11 @@ class TestBisectRequired(unittest.TestCase): marks = bisect(lines, marks, min, max, lambda l, m: self._update_func(l, m), lambda: self._test_func()) - for i in xrange(len(marks)): + for i, mark in enumerate(marks): if i == pos: - self.assertEqual(GOOD, marks[i]) + self.assertEqual(GOOD, mark) else: - self.assertNotEqual(GOOD, marks[i]) + self.assertNotEqual(GOOD, mark) unittest.main() From e005d2165794cb16efe79adf967271c6e0ee4047 Mon Sep 17 00:00:00 2001 From: Miklos Vajna Date: Fri, 21 Jun 2024 08:26:52 +0200 Subject: [PATCH 028/194] sw: fix assertion failure in SwView::ExecTabWin() Crashreport signature: > /opt/rh/devtoolset-12/root/usr/include/c++/12/bits/stl_algo.h:3623: constexpr const _Tp& std::clamp(const _Tp&, const _Tp&, const _Tp&) [with _Tp = long int]: Assertion '!(__hi < __lo)' failed. > program/libswlo.so > long const& std::clamp(long const&, long const&, long const&) > ??:? > program/libswlo.so > SwView::ExecTabWin(SfxRequest const&) > sw/source/uibase/uiview/viewtab.cxx:1139 > program/libmergedlo.so > SfxDispatcher::Call_Impl(SfxShell&, SfxSlot const&, SfxRequest&, bool) > sfx2/source/control/dispatch.cxx:257 Change-Id: I659fce002e5672c1c8c75fd130c7aae5b6a44460 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169447 Tested-by: Jenkins Reviewed-by: Miklos Vajna --- sw/source/uibase/uiview/viewtab.cxx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sw/source/uibase/uiview/viewtab.cxx b/sw/source/uibase/uiview/viewtab.cxx index 24d5585137fa..a454b7fd87a6 100644 --- a/sw/source/uibase/uiview/viewtab.cxx +++ b/sw/source/uibase/uiview/viewtab.cxx @@ -1136,7 +1136,10 @@ void SwView::ExecTabWin( SfxRequest const & rReq ) { auto & rEntry = aTabCols.GetEntry(nIndex); tools::Long nNewPosition = rEntry.nPos + nOffset; - nNewPosition = std::clamp(nNewPosition, rEntry.nMin, rEntry.nMax - constDistanceOffset); + tools::Long nMax = rEntry.nMax - constDistanceOffset; + if (nMax < rEntry.nMin) + nMax = rEntry.nMin; + nNewPosition = std::clamp(nNewPosition, rEntry.nMin, nMax); rEntry.nPos = nNewPosition; } From 3cb32bf100a0f50390ae3390fa84f2b8bba6e6ff Mon Sep 17 00:00:00 2001 From: Pierre F Date: Tue, 25 Jun 2024 08:41:13 +0200 Subject: [PATCH 029/194] Update git submodules * Update helpcontent2 from branch 'master' to c796230a7363073c9763dff5d157fd5711ba590d - fix typo Change-Id: I353e1a52697f5d7ac055ad870d1415885a3b5a5a Reviewed-on: https://gerrit.libreoffice.org/c/help/+/169439 Reviewed-by: Olivier Hallot Tested-by: Jenkins --- helpcontent2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helpcontent2 b/helpcontent2 index 47eaabaeb6b9..c796230a7363 160000 --- a/helpcontent2 +++ b/helpcontent2 @@ -1 +1 @@ -Subproject commit 47eaabaeb6b90551dccb72ad5ba9f241ad7608cf +Subproject commit c796230a7363073c9763dff5d157fd5711ba590d From e932e2ab943a9941fcfc7073c9b6c11b982c2c4c Mon Sep 17 00:00:00 2001 From: Heiko Tietze Date: Thu, 20 Jun 2024 15:12:05 +0200 Subject: [PATCH 030/194] Resolves tdf#161641 - Select data area before select all Advanced option SelectRangeBeforeAll to restore original behavior Change-Id: Iab4b4e61dffc1ecf2ffed01a994c9894c84ab74d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169276 Tested-by: Jenkins Reviewed-by: Mike Kaganski Reviewed-by: Heiko Tietze --- .../schema/org/openoffice/Office/Calc.xcs | 7 +++++ sc/qa/unit/uicalc/uicalc.cxx | 2 ++ sc/source/ui/view/cellsh3.cxx | 27 ++++++++++++++++++- 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/officecfg/registry/schema/org/openoffice/Office/Calc.xcs b/officecfg/registry/schema/org/openoffice/Office/Calc.xcs index 7303d1bacd00..b9f74d9724fa 100644 --- a/officecfg/registry/schema/org/openoffice/Office/Calc.xcs +++ b/officecfg/registry/schema/org/openoffice/Office/Calc.xcs @@ -763,6 +763,13 @@ true + + + Disable to always select all + + + true + diff --git a/sc/qa/unit/uicalc/uicalc.cxx b/sc/qa/unit/uicalc/uicalc.cxx index 08a1eeb3848b..ae1edf38147e 100644 --- a/sc/qa/unit/uicalc/uicalc.cxx +++ b/sc/qa/unit/uicalc/uicalc.cxx @@ -2120,6 +2120,8 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf108654) createScDoc("tdf108654.ods"); ScDocument* pDoc = getScDoc(); + dispatchCommand(mxComponent, u".uno:SelectAll"_ustr, {}); + // first .uno:SelectAll selects the range, second all (tdf#161641) dispatchCommand(mxComponent, u".uno:SelectAll"_ustr, {}); dispatchCommand(mxComponent, u".uno:Copy"_ustr, {}); diff --git a/sc/source/ui/view/cellsh3.cxx b/sc/source/ui/view/cellsh3.cxx index c62500c7e124..dfb7b4d5e92b 100644 --- a/sc/source/ui/view/cellsh3.cxx +++ b/sc/source/ui/view/cellsh3.cxx @@ -49,6 +49,7 @@ #include #include #include +#include #include @@ -657,7 +658,31 @@ void ScCellShell::Execute( SfxRequest& rReq ) case SID_SELECTALL: { - pTabViewShell->SelectAll(); + SCTAB nTab = GetViewData().GetTabNo(); + SCCOL nStartCol = GetViewData().GetCurX(); + SCROW nStartRow = GetViewData().GetCurY(); + SCCOL nEndCol = nStartCol; + SCROW nEndRow = nStartRow; + bool bCanMark = false; + + ScMarkData& rMarkdata = GetViewData().GetMarkData(); + const bool bSelectFirst(officecfg::Office::Calc::Input::SelectRangeBeforeAll::get()); + + if (bSelectFirst && !rMarkdata.IsMarked()) + { + const ScDocument& rDoc = GetViewData().GetDocument(); + rDoc.GetDataArea( nTab, nStartCol, nStartRow, nEndCol, nEndRow, true, false ); + bCanMark = nStartCol != nEndCol || nStartRow != nEndRow; + } + + if (bCanMark) + { + const ScRange aRange(nStartCol, nStartRow, nTab, nEndCol, nEndRow, nTab); + pTabViewShell->MarkRange(aRange, false); + } + else + pTabViewShell->SelectAll(); + rReq.Done(); } break; From cc1f1e0e6dcabee2b6ca28f4f1341f0099814966 Mon Sep 17 00:00:00 2001 From: Andrea Gelmini Date: Tue, 25 Jun 2024 00:43:51 +0200 Subject: [PATCH 031/194] Fix typo Change-Id: I4f82345a558a991d4297dabdfd6b80041bda47a7 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169478 Tested-by: Julien Nabet Reviewed-by: Julien Nabet --- sw/source/uibase/sidebar/QuickFindPanel.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sw/source/uibase/sidebar/QuickFindPanel.cxx b/sw/source/uibase/sidebar/QuickFindPanel.cxx index 0f620fd09985..cdf7afa68947 100644 --- a/sw/source/uibase/sidebar/QuickFindPanel.cxx +++ b/sw/source/uibase/sidebar/QuickFindPanel.cxx @@ -217,7 +217,7 @@ IMPL_LINK(QuickFindPanel, SearchFindsListCustomGetSizeHandler, weld::TreeView::g } // To not have top and bottom clipping when the sidebar width is made smaller by the user - // calculate the text rectangle using the mimimum width the rectangle can become. + // calculate the text rectangle using the minimum width the rectangle can become. int x, y, width, height; m_xSearchFindsList->get_extents_relative_to(*m_xContainer, x, y, width, height); From bdc8d3dec0beb167c40e6d0eea02c3b401e5117d Mon Sep 17 00:00:00 2001 From: Noel Grandin Date: Mon, 24 Jun 2024 16:27:17 +0200 Subject: [PATCH 032/194] tdf#161210 speed up XLS load flatten XclImpXFRangeColumn a litte, no need to allocate this separately Change-Id: Ic33131626b41ca19b964387b3d7f6e74cefdd91c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169505 Tested-by: Jenkins Reviewed-by: Noel Grandin --- sc/source/filter/excel/xistyle.cxx | 6 +++--- sc/source/filter/inc/xistyle.hxx | 7 ++----- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/sc/source/filter/excel/xistyle.cxx b/sc/source/filter/excel/xistyle.cxx index 8c29ece09885..5eeff7e19a91 100644 --- a/sc/source/filter/excel/xistyle.cxx +++ b/sc/source/filter/excel/xistyle.cxx @@ -1904,7 +1904,7 @@ void XclImpXFRangeBuffer::SetXF( const ScAddress& rScPos, sal_uInt16 nXFIndex, X if( maColumns.size() <= nIndex ) maColumns.resize( nIndex + 1 ); if( !maColumns[ nIndex ] ) - maColumns[ nIndex ] = std::make_shared(); + maColumns[ nIndex ].emplace(); // remember all Boolean cells, they will get 'Standard' number format maColumns[ nIndex ]->SetXF( nScRow, XclImpXFIndex( nXFIndex, eMode == xlXFModeBoolCell ) ); @@ -1953,7 +1953,7 @@ void XclImpXFRangeBuffer::SetColumnDefXF( SCCOL nScCol, sal_uInt16 nXFIndex ) if( maColumns.size() <= nIndex ) maColumns.resize( nIndex + 1 ); OSL_ENSURE( !maColumns[ nIndex ], "XclImpXFRangeBuffer::SetColumnDefXF - default column of XFs already has values" ); - maColumns[ nIndex ] = std::make_shared(); + maColumns[ nIndex ].emplace(); maColumns[ nIndex ]->SetDefaultXF( XclImpXFIndex( nXFIndex ), GetRoot()); } @@ -1996,7 +1996,7 @@ void XclImpXFRangeBuffer::Finalize() SCCOL pendingColStart = -1; SCCOL pendingColEnd = -1; SCCOL nScCol = 0; - for( const auto& rxColumn : maColumns ) + for( auto& rxColumn : maColumns ) { // apply all cell styles of an existing column if( rxColumn ) diff --git a/sc/source/filter/inc/xistyle.hxx b/sc/source/filter/inc/xistyle.hxx index 963beb2ab609..ff56c5d1d370 100644 --- a/sc/source/filter/inc/xistyle.hxx +++ b/sc/source/filter/inc/xistyle.hxx @@ -22,6 +22,7 @@ #include #include #include +#include #include #include "xlstyle.hxx" #include "xiroot.hxx" @@ -565,10 +566,6 @@ inline bool XclImpXFRange::Contains( SCROW nScRow ) const class XclImpXFRangeColumn { public: - /** make noncopyable */ - XclImpXFRangeColumn(const XclImpXFRangeColumn&) = delete; - const XclImpXFRangeColumn& operator=(const XclImpXFRangeColumn&) = delete; - typedef std::vector< XclImpXFRange > IndexList; explicit XclImpXFRangeColumn() {} @@ -660,7 +657,7 @@ private: private: - std::vector< std::shared_ptr< XclImpXFRangeColumn > > + std::vector< std::optional > maColumns; /// Array of column XF index buffers. std::vector< std::pair< XclRange, OUString > > maHyperlinks; /// Maps URLs to hyperlink cells. From 87c81bb409cb5cd826eb21366a8e3222cb924ca1 Mon Sep 17 00:00:00 2001 From: Noel Grandin Date: Mon, 24 Jun 2024 09:38:06 +0200 Subject: [PATCH 033/194] remove commented out code I accidentally left behind in commit 168eb2e64b7ad08645f62b45e15af2ee7260100c Author: Noel Grandin Date: Sun Jun 23 19:44:06 2024 +0200 tdf#144208 speedup doc with lots of redline(15) Change-Id: I6fa4765db48d158a12c6ea547ede0d0e13f0e61f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169448 Reviewed-by: Noel Grandin Tested-by: Jenkins --- sw/source/core/unocore/unotext.cxx | 45 ------------------------------ 1 file changed, 45 deletions(-) diff --git a/sw/source/core/unocore/unotext.cxx b/sw/source/core/unocore/unotext.cxx index edfeaf1e98c1..41653997fd47 100644 --- a/sw/source/core/unocore/unotext.cxx +++ b/sw/source/core/unocore/unotext.cxx @@ -77,51 +77,6 @@ using namespace ::com::sun::star; constexpr OUString cInvalidObject = u"this object is invalid"_ustr; -//class SwXText::Impl -//{ -// -//public: -// SwXText & m_rThis; -// SfxItemPropertySet const& m_rPropSet; -// const CursorType m_eType; -// SwDoc * m_pDoc; -// bool m_bIsValid; -// -// Impl( SwXText & rThis, -// SwDoc *const pDoc, const CursorType eType) -// : m_rThis(rThis) -// , m_rPropSet(*aSwMapProvider.GetPropertySet(PROPERTY_MAP_TEXT)) -// , m_eType(eType) -// , m_pDoc(pDoc) -// , m_bIsValid(nullptr != pDoc) -// { -// } -// -// /// @throws lang::IllegalArgumentException -// /// @throws uno::RuntimeException -// rtl::Reference -// finishOrAppendParagraph( -// const uno::Sequence< beans::PropertyValue >& -// rCharacterAndParagraphProperties, -// const uno::Reference< text::XTextRange >& xInsertPosition); -// -// /// @throws lang::IllegalArgumentException -// /// @throws uno::RuntimeException -// sal_Int16 ComparePositions( -// const uno::Reference& xPos1, -// const uno::Reference& xPos2); -// -// /// @throws lang::IllegalArgumentException -// /// @throws uno::RuntimeException -// bool CheckForOwnMember(const SwPaM & rPaM); -// -// void ConvertCell( -// const uno::Sequence< uno::Reference< text::XTextRange > > & rCell, -// std::vector & rRowNodes, -// SwNodeRange *const pLastCell); -// -//}; - SwXText::SwXText(SwDoc *const pDoc, const CursorType eType) : m_rPropSet(*aSwMapProvider.GetPropertySet(PROPERTY_MAP_TEXT)) , m_eType(eType) From 2d208c4e42595bb85fd0ef726a89e10dd32b48b1 Mon Sep 17 00:00:00 2001 From: Noel Grandin Date: Tue, 25 Jun 2024 09:03:49 +0200 Subject: [PATCH 034/194] tdf#161210 speed xls load instead of applying row styles to all 16384 columns, only apply them to columns that have data. That takes the load time for this file from 19s to 1s for me. Change-Id: Ifec56995e0053938dc5a7ed0d15ae3a173614dd4 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169506 Tested-by: Jenkins Reviewed-by: Noel Grandin --- sc/source/filter/excel/xistyle.cxx | 18 ++++++++++++++++-- sc/source/filter/inc/xistyle.hxx | 2 ++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/sc/source/filter/excel/xistyle.cxx b/sc/source/filter/excel/xistyle.cxx index 5eeff7e19a91..dddf509b0944 100644 --- a/sc/source/filter/excel/xistyle.cxx +++ b/sc/source/filter/excel/xistyle.cxx @@ -1890,6 +1890,7 @@ XclImpXFRangeBuffer::~XclImpXFRangeBuffer() void XclImpXFRangeBuffer::Initialize() { maColumns.clear(); + maRows.clear(); maHyperlinks.clear(); maMergeList.RemoveAll(); } @@ -1942,8 +1943,10 @@ void XclImpXFRangeBuffer::SetBoolXF( const ScAddress& rScPos, sal_uInt16 nXFInde void XclImpXFRangeBuffer::SetRowDefXF( SCROW nScRow, sal_uInt16 nXFIndex ) { - for( SCCOL nScCol = 0; nScCol <= GetDoc().MaxCol(); ++nScCol ) - SetXF( ScAddress( nScCol, nScRow, 0 ), nXFIndex, xlXFModeRow ); + size_t nIndex = static_cast< size_t >( nScRow ); + if( maRows.size() <= nIndex ) + maRows.resize( nIndex + 1 ); + maRows[ nIndex ].emplace(nXFIndex); } void XclImpXFRangeBuffer::SetColumnDefXF( SCCOL nScCol, sal_uInt16 nXFIndex ) @@ -1990,6 +1993,17 @@ void XclImpXFRangeBuffer::Finalize() ScDocument& rDoc = rDocImport.getDoc(); SCTAB nScTab = GetCurrScTab(); + // apply row styles + for( SCROW nScRow = 0; nScRow < static_cast(maRows.size()); ++nScRow ) + { + if (!maRows[nScRow]) + continue; + sal_uInt16 nXFIndex = *maRows[nScRow]; + for( SCCOL nScCol = 0; nScCol < static_cast(maColumns.size()); ++nScCol ) + if (maColumns[nScCol]) + SetXF( ScAddress( nScCol, nScRow, 0 ), nXFIndex, xlXFModeRow ); + } + // apply patterns XclImpXFBuffer& rXFBuffer = GetXFBuffer(); ScDocumentImport::Attrs aPendingAttrParam; diff --git a/sc/source/filter/inc/xistyle.hxx b/sc/source/filter/inc/xistyle.hxx index ff56c5d1d370..450719832042 100644 --- a/sc/source/filter/inc/xistyle.hxx +++ b/sc/source/filter/inc/xistyle.hxx @@ -659,6 +659,8 @@ private: std::vector< std::optional > maColumns; /// Array of column XF index buffers. + std::vector< std::optional > + maRows; /// Array of row XF index. std::vector< std::pair< XclRange, OUString > > maHyperlinks; /// Maps URLs to hyperlink cells. ScRangeList maMergeList; /// List of merged cell ranges. From 2c2d84fefc5b3cc35c1db0d8244902362dc0531c Mon Sep 17 00:00:00 2001 From: Mike Kaganski Date: Mon, 24 Jun 2024 16:17:54 +0500 Subject: [PATCH 035/194] Revert "LOK: Introduce LOK_CALLBACK_STATUS_UPDATE" This reverts commit bbd32b39eae24e99d135ed5c48586db8c9b0fb23. A following commit will implement an alternative method without a new enum member. Change-Id: Id00a4a0abe68fc69b1a3a81c731c8085e3dbca2d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169467 Reviewed-by: Mike Kaganski Tested-by: Jenkins --- include/LibreOfficeKit/LibreOfficeKitEnums.h | 9 +-------- libreofficekit/source/gtk/lokdocview.cxx | 1 - sd/source/ui/view/drviews1.cxx | 6 +++--- sd/source/ui/view/drviewse.cxx | 9 +++++++++ sfx2/source/control/unoctitm.cxx | 1 - 5 files changed, 13 insertions(+), 13 deletions(-) diff --git a/include/LibreOfficeKit/LibreOfficeKitEnums.h b/include/LibreOfficeKit/LibreOfficeKitEnums.h index dff64a584fdc..516622722bb9 100644 --- a/include/LibreOfficeKit/LibreOfficeKitEnums.h +++ b/include/LibreOfficeKit/LibreOfficeKitEnums.h @@ -1067,12 +1067,7 @@ typedef enum * * Here all aproperties are same as described in svxruler. */ - LOK_CALLBACK_VERTICAL_RULER_UPDATE = 73, - - /** - * Status of the document has changed notification - */ - LOK_CALLBACK_STATUS_UPDATE = 74, + LOK_CALLBACK_VERTICAL_RULER_UPDATE = 73 } LibreOfficeKitCallbackType; @@ -1250,8 +1245,6 @@ static inline const char* lokCallbackTypeToString(int nType) return "LOK_CALLBACK_TOOLTIP"; case LOK_CALLBACK_SHAPE_INNER_TEXT: return "LOK_CALLBACK_SHAPE_INNER_TEXT"; - case LOK_CALLBACK_STATUS_UPDATE: - return "LOK_CALLBACK_STATUS_UPDATE"; } assert(!"Unknown LibreOfficeKitCallbackType type."); diff --git a/libreofficekit/source/gtk/lokdocview.cxx b/libreofficekit/source/gtk/lokdocview.cxx index 3eddb009c242..5dddaa2d0e37 100644 --- a/libreofficekit/source/gtk/lokdocview.cxx +++ b/libreofficekit/source/gtk/lokdocview.cxx @@ -1502,7 +1502,6 @@ callback (gpointer pData) case LOK_CALLBACK_CORE_LOG: case LOK_CALLBACK_TOOLTIP: case LOK_CALLBACK_SHAPE_INNER_TEXT: - case LOK_CALLBACK_STATUS_UPDATE: { // TODO: Implement me break; diff --git a/sd/source/ui/view/drviews1.cxx b/sd/source/ui/view/drviews1.cxx index 00560836cb7f..df004aa0610e 100644 --- a/sd/source/ui/view/drviews1.cxx +++ b/sd/source/ui/view/drviews1.cxx @@ -405,9 +405,6 @@ void DrawViewShell::ChangeEditMode(EditMode eEMode, bool bIsLayerModeActive) pTitledDockingWindow->SetTitle(SdResId(aId)); }; - if (comphelper::LibreOfficeKit::isActive()) - GetViewShell()->libreOfficeKitViewCallback(LOK_CALLBACK_STATUS_UPDATE, {}); - if (meEditMode == EditMode::Page) { /****************************************************************** @@ -454,6 +451,9 @@ void DrawViewShell::ChangeEditMode(EditMode eEMode, bool bIsLayerModeActive) setLeftPaneTitleIfPaneExists(SID_LEFT_PANE_DRAW, STR_LEFT_PANE_DRAW_TITLE_MASTER); setLeftPaneTitleIfPaneExists(SID_LEFT_PANE_IMPRESS, STR_LEFT_PANE_IMPRESS_TITLE_MASTER); + if (comphelper::LibreOfficeKit::isActive()) + GetViewShell()->libreOfficeKitViewCallback(LOK_CALLBACK_STATE_CHANGED, + ".uno:SlideMasterPage=true"_ostr); if (!mpActualPage) { // as long as there is no mpActualPage, take first diff --git a/sd/source/ui/view/drviewse.cxx b/sd/source/ui/view/drviewse.cxx index 622dd2cad93c..f594fb1f7fcf 100644 --- a/sd/source/ui/view/drviewse.cxx +++ b/sd/source/ui/view/drviewse.cxx @@ -1036,6 +1036,10 @@ void DrawViewShell::FuSupport(SfxRequest& rReq) case SID_MASTERPAGE: // BASIC { + if (comphelper::LibreOfficeKit::isActive()) + GetViewShell()->libreOfficeKitViewCallback(LOK_CALLBACK_STATE_CHANGED, + ".uno:SlideMasterPage=true"_ostr); + // AutoLayouts needs to be finished GetDoc()->StopWorkStartupDelay(); @@ -1070,6 +1074,11 @@ void DrawViewShell::FuSupport(SfxRequest& rReq) case SID_CLOSE_MASTER_VIEW: { + // Notify of disabling master view, which is enabled in DrawViewShell::ChangeEditMode. + if (comphelper::LibreOfficeKit::isActive()) + GetViewShell()->libreOfficeKitViewCallback(LOK_CALLBACK_STATE_CHANGED, + ".uno:SlideMasterPage=false"_ostr); + Broadcast ( ViewShellHint(ViewShellHint::HINT_CHANGE_EDIT_MODE_START)); diff --git a/sfx2/source/control/unoctitm.cxx b/sfx2/source/control/unoctitm.cxx index 2cc5bbb422b3..a64f297aaf0c 100644 --- a/sfx2/source/control/unoctitm.cxx +++ b/sfx2/source/control/unoctitm.cxx @@ -1151,7 +1151,6 @@ constexpr auto handlers = frozen::make_unordered_map Date: Mon, 24 Jun 2024 18:54:53 +0500 Subject: [PATCH 036/194] LOK: Do a ".uno:DocumentStatus" "state changed" callback ... along with proper state changed callbacks for .uno:SlideMasterPage, .uno:NormalMultiPaneGUI, .uno:NotesMode, and others. The ".uno:DocumentStatus" payload is a notification for the callback that it may need to collect the document status. This allows to avoid the bond between the mentioned true UNO command names, and the status collection: since we now send the status updates for all of them, the document status collection would be performed for each of them in the absence of a dedicated signal. This re-implements commit bbd32b39eae24e99d135ed5c48586db8c9b0fb23, without introducing a new callback enum value. Change-Id: I942e17298196ff39ef8817a4cd59ad0fb8fa0da1 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169468 Reviewed-by: Mike Kaganski Tested-by: Mike Kaganski --- sd/source/ui/view/drviews1.cxx | 7 ++++--- sd/source/ui/view/drviewse.cxx | 9 --------- sfx2/source/control/unoctitm.cxx | 1 + 3 files changed, 5 insertions(+), 12 deletions(-) diff --git a/sd/source/ui/view/drviews1.cxx b/sd/source/ui/view/drviews1.cxx index df004aa0610e..8f2a2190cc73 100644 --- a/sd/source/ui/view/drviews1.cxx +++ b/sd/source/ui/view/drviews1.cxx @@ -405,6 +405,10 @@ void DrawViewShell::ChangeEditMode(EditMode eEMode, bool bIsLayerModeActive) pTitledDockingWindow->SetTitle(SdResId(aId)); }; + if (comphelper::LibreOfficeKit::isActive()) + GetViewShell()->libreOfficeKitViewCallback(LOK_CALLBACK_STATE_CHANGED, + ".uno:DocumentStatus"_ostr); // pseudo-command + if (meEditMode == EditMode::Page) { /****************************************************************** @@ -451,9 +455,6 @@ void DrawViewShell::ChangeEditMode(EditMode eEMode, bool bIsLayerModeActive) setLeftPaneTitleIfPaneExists(SID_LEFT_PANE_DRAW, STR_LEFT_PANE_DRAW_TITLE_MASTER); setLeftPaneTitleIfPaneExists(SID_LEFT_PANE_IMPRESS, STR_LEFT_PANE_IMPRESS_TITLE_MASTER); - if (comphelper::LibreOfficeKit::isActive()) - GetViewShell()->libreOfficeKitViewCallback(LOK_CALLBACK_STATE_CHANGED, - ".uno:SlideMasterPage=true"_ostr); if (!mpActualPage) { // as long as there is no mpActualPage, take first diff --git a/sd/source/ui/view/drviewse.cxx b/sd/source/ui/view/drviewse.cxx index f594fb1f7fcf..622dd2cad93c 100644 --- a/sd/source/ui/view/drviewse.cxx +++ b/sd/source/ui/view/drviewse.cxx @@ -1036,10 +1036,6 @@ void DrawViewShell::FuSupport(SfxRequest& rReq) case SID_MASTERPAGE: // BASIC { - if (comphelper::LibreOfficeKit::isActive()) - GetViewShell()->libreOfficeKitViewCallback(LOK_CALLBACK_STATE_CHANGED, - ".uno:SlideMasterPage=true"_ostr); - // AutoLayouts needs to be finished GetDoc()->StopWorkStartupDelay(); @@ -1074,11 +1070,6 @@ void DrawViewShell::FuSupport(SfxRequest& rReq) case SID_CLOSE_MASTER_VIEW: { - // Notify of disabling master view, which is enabled in DrawViewShell::ChangeEditMode. - if (comphelper::LibreOfficeKit::isActive()) - GetViewShell()->libreOfficeKitViewCallback(LOK_CALLBACK_STATE_CHANGED, - ".uno:SlideMasterPage=false"_ostr); - Broadcast ( ViewShellHint(ViewShellHint::HINT_CHANGE_EDIT_MODE_START)); diff --git a/sfx2/source/control/unoctitm.cxx b/sfx2/source/control/unoctitm.cxx index a64f297aaf0c..2cc5bbb422b3 100644 --- a/sfx2/source/control/unoctitm.cxx +++ b/sfx2/source/control/unoctitm.cxx @@ -1151,6 +1151,7 @@ constexpr auto handlers = frozen::make_unordered_map Date: Tue, 25 Jun 2024 13:22:27 +0200 Subject: [PATCH 037/194] Fix typo Change-Id: Ic7b080780a924e0d824b3163487c21b6515844b1 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169513 Tested-by: Julien Nabet Reviewed-by: Julien Nabet --- oox/source/core/filterdetect.cxx | 2 +- sw/source/writerfilter/ooxml/OOXMLStreamImpl.cxx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/oox/source/core/filterdetect.cxx b/oox/source/core/filterdetect.cxx index c62ddfedd749..33c95c7e2ca3 100644 --- a/oox/source/core/filterdetect.cxx +++ b/oox/source/core/filterdetect.cxx @@ -161,7 +161,7 @@ void FilterDetectDocHandler::parseRelationship( const AttributeList& rAttribs ) Reference xFactory = UriReferenceFactory::create( mxContext ); try { - // use '/' to representent the root of the zip package ( and provide a 'file' scheme to + // use '/' to represent the root of the zip package ( and provide a 'file' scheme to // keep the XUriReference implementation happy ) Reference< XUriReference > xBase = xFactory->parse( u"file:///"_ustr ); diff --git a/sw/source/writerfilter/ooxml/OOXMLStreamImpl.cxx b/sw/source/writerfilter/ooxml/OOXMLStreamImpl.cxx index aa2567ad53b2..6ca6bb85a10b 100644 --- a/sw/source/writerfilter/ooxml/OOXMLStreamImpl.cxx +++ b/sw/source/writerfilter/ooxml/OOXMLStreamImpl.cxx @@ -122,7 +122,7 @@ bool OOXMLStreamImpl::lcl_getTarget(const uno::Reference xFac = uri::UriReferenceFactory::create(mxContext); - // use '/' to representent the root of the zip package ( and provide a 'file' scheme to + // use '/' to represent the root of the zip package ( and provide a 'file' scheme to // keep the XUriReference implementation happy ) // add mspath to represent the 'source' of this stream uno::Reference xBase = xFac->parse("file:///" + msPath); From ef0e2c9f970ac59c8b27f79fb0cda6106f2f3013 Mon Sep 17 00:00:00 2001 From: Andrea Gelmini Date: Tue, 25 Jun 2024 13:23:58 +0200 Subject: [PATCH 038/194] Fix typo Change-Id: I696c8d2a1f18704c5907136e5acc5b9723fdd983 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169516 Tested-by: Julien Nabet Reviewed-by: Julien Nabet --- wizards/com/sun/star/wizards/agenda/TopicsControl.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wizards/com/sun/star/wizards/agenda/TopicsControl.py b/wizards/com/sun/star/wizards/agenda/TopicsControl.py index bb8d8b81ae01..6f13ce21363f 100644 --- a/wizards/com/sun/star/wizards/agenda/TopicsControl.py +++ b/wizards/com/sun/star/wizards/agenda/TopicsControl.py @@ -721,7 +721,7 @@ class TopicsControl(ControlScroller): traceback.print_exc() ''' -A class represting a single GUI row. +A class representing a single GUI row. Note that the instance methods of this class are being called and handle controls of a single row. From 34669af1ce80e4f8ea5c582736155a79338ffd12 Mon Sep 17 00:00:00 2001 From: Andrea Gelmini Date: Tue, 25 Jun 2024 13:22:54 +0200 Subject: [PATCH 039/194] Fix typo Change-Id: I6d1130f6d59439420dccbdf94a4df43504e7cd36 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169514 Tested-by: Julien Nabet Reviewed-by: Julien Nabet --- sc/qa/unit/subsequent_export_test.cxx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sc/qa/unit/subsequent_export_test.cxx b/sc/qa/unit/subsequent_export_test.cxx index 67e7cd013119..e3cad1881415 100644 --- a/sc/qa/unit/subsequent_export_test.cxx +++ b/sc/qa/unit/subsequent_export_test.cxx @@ -1140,10 +1140,10 @@ CPPUNIT_TEST_FIXTURE(ScExportTest, testMiscRowHeightExport) // Checks that some distributed ( non-empty ) heights remain set after export (to xls) { u"xlsx/miscrowheights.xlsx", u"MS Excel 97"_ustr, SAL_N_ELEMENTS(DfltRowData), DfltRowData }, - // Checks that repreated rows ( of various heights ) remain set after export ( to xlsx ) + // Checks that repeated rows ( of various heights ) remain set after export ( to xlsx ) { u"ods/miscemptyrepeatedrowheights.ods", u"Calc Office Open XML"_ustr, SAL_N_ELEMENTS(EmptyRepeatRowData), EmptyRepeatRowData }, - // Checks that repreated rows ( of various heights ) remain set after export ( to xls ) + // Checks that repeated rows ( of various heights ) remain set after export ( to xls ) { u"ods/miscemptyrepeatedrowheights.ods", u"MS Excel 97"_ustr, SAL_N_ELEMENTS(EmptyRepeatRowData), EmptyRepeatRowData }, }; From 2a69521271092968fc53afdf346026700e04fc50 Mon Sep 17 00:00:00 2001 From: Andrea Gelmini Date: Tue, 25 Jun 2024 13:23:53 +0200 Subject: [PATCH 040/194] Fix typo Change-Id: I1835209f48896e01af2cb3fad10a758b704087dc Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169515 Tested-by: Julien Nabet Reviewed-by: Julien Nabet --- extensions/source/ole/oleobjw.hxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/source/ole/oleobjw.hxx b/extensions/source/ole/oleobjw.hxx index d1a1d0ed81fc..4455aced456b 100644 --- a/extensions/source/ole/oleobjw.hxx +++ b/extensions/source/ole/oleobjw.hxx @@ -210,7 +210,7 @@ protected: // the IDispatch* are wrapped by objects of this class. Assuming that the functions // implemented by the IDispatch object returns another UNO interface then // it has to be wrapped to this type. But this is only possible if an object of this - // wrapper class knows what type it is represting. The member m_TypeDescription holds this + // wrapper class knows what type it is representing. The member m_TypeDescription holds this // information. // m_TypeDescription is only useful when an object wraps an IDispatch object that implements // a UNO interface. The value is set during a call to XInitialization::initialize. From c13528abd69ea256cfde5ef1933c4e7f51219d33 Mon Sep 17 00:00:00 2001 From: Heiko Tietze Date: Mon, 24 Jun 2024 08:07:28 +0200 Subject: [PATCH 041/194] Fixes copy/paste error follow-up to Iff407da8907b761236ebc2aa8877b9d6b8294e10 Change-Id: Icb5b3703809e5df80df5e269e6160c1c78dc186d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169364 Tested-by: Jenkins Reviewed-by: Heiko Tietze Reviewed-by: Justin Luth --- sw/inc/strings.hrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sw/inc/strings.hrc b/sw/inc/strings.hrc index b9e46f13d0c6..3a70a42cd0bd 100644 --- a/sw/inc/strings.hrc +++ b/sw/inc/strings.hrc @@ -134,7 +134,7 @@ #define STR_POOLCOLL_BULLET_LEVEL5 NC_("STR_POOLCOLL_BULLET_LEVEL5", "List 5") #define STR_POOLCOLL_BULLET_LEVEL5E NC_("STR_POOLCOLL_BULLET_LEVEL5E", "List 5 End") #define STR_POOLCOLL_BULLET_NONUM5 NC_("STR_POOLCOLL_BULLET_NONUM5", "List 5 Cont.") -#define STR_POOLCOLL_HEADERFOOTER NC_("STR_POOLCOLL_HEADER", "Header and Footer") +#define STR_POOLCOLL_HEADERFOOTER NC_("STR_POOLCOLL_HEADERFOOTER", "Header and Footer") #define STR_POOLCOLL_HEADER NC_("STR_POOLCOLL_HEADER", "Header") #define STR_POOLCOLL_HEADERL NC_("STR_POOLCOLL_HEADERL", "Header Left") #define STR_POOLCOLL_HEADERR NC_("STR_POOLCOLL_HEADERR", "Header Right") From af0042ba6518ab07059992d25aadd932b1e2aa8b Mon Sep 17 00:00:00 2001 From: Christian Lohmaier Date: Tue, 25 Jun 2024 13:05:34 +0200 Subject: [PATCH 042/194] align conditional re dotnet/netmaker - only use in --enable-odk case that's what the check for creating the tool used already (Module_codemaker.mk), while the targets using the tool only was behind a ENABLE_DOTNET check. fixes the android CI builds Change-Id: Ie859a6409bb523926a619e87b693ec4c17a875cb Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169512 Reviewed-by: Christian Lohmaier Tested-by: Jenkins --- net_ure/Module_net_ure.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net_ure/Module_net_ure.mk b/net_ure/Module_net_ure.mk index 6693a5ad58ee..982a030e8aae 100644 --- a/net_ure/Module_net_ure.mk +++ b/net_ure/Module_net_ure.mk @@ -8,7 +8,7 @@ $(eval $(call gb_Module_Module,net_ure)) -ifeq ($(ENABLE_DOTNET),TRUE) +ifeq ($(ENABLE_DOTNET)_$(filter ODK,$(BUILD_TYPE)),TRUE_ODK) $(eval $(call gb_Module_add_targets,net_ure,\ CustomTarget_net_uretypes \ CustomTarget_net_oootypes \ From 78705c3b977aaeb0608538e63df3b78ec67bcae6 Mon Sep 17 00:00:00 2001 From: Michael Stahl Date: Tue, 25 Jun 2024 13:28:12 +0200 Subject: [PATCH 043/194] tdf#161721 sw: text formatting: TabOverMargin not crazy enough Word will use a center or right tab position in the margin without limiting it, and even put text after it. Change-Id: Ibae5758467620f355544963acb7941689fae2602 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169517 Reviewed-by: Michael Stahl Tested-by: Jenkins --- sw/qa/extras/layout/layout3.cxx | 7 +++++-- sw/source/core/text/txttab.cxx | 7 ++++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/sw/qa/extras/layout/layout3.cxx b/sw/qa/extras/layout/layout3.cxx index c5885be4c6ca..a07e7e6cd037 100644 --- a/sw/qa/extras/layout/layout3.cxx +++ b/sw/qa/extras/layout/layout3.cxx @@ -567,8 +567,7 @@ CPPUNIT_TEST_FIXTURE(SwLayoutWriter3, testTdf158658b) xmlDocUniquePtr pXmlDoc = parseLayoutDump(); // Word 2013 puts all tabs and the field following into one line - // but also puts the field off the page, while in Writer it's - // aligned to the right margin; should be good enough for now... + // and also puts the field off the page assertXPath(pXmlDoc, "/root/page[1]/footer/txt[1]/SwParaPortion/SwLineLayout"_ostr, 1); assertXPath( pXmlDoc, @@ -578,6 +577,10 @@ CPPUNIT_TEST_FIXTURE(SwLayoutWriter3, testTdf158658b) pXmlDoc, "/root/page[1]/footer/txt[1]/SwParaPortion/SwLineLayout/child::*[@type='PortionType::TabRight']"_ostr, 1); + assertXPath( + pXmlDoc, + "/root/page[1]/footer/txt[1]/SwParaPortion/SwLineLayout/child::*[@type='PortionType::TabRight']"_ostr, + "width"_ostr, u"4446"_ustr); // was very small: 24 assertXPath( pXmlDoc, "/root/page[1]/footer/txt[1]/SwParaPortion/SwLineLayout/child::*[@type='PortionType::TabLeft']"_ostr, diff --git a/sw/source/core/text/txttab.cxx b/sw/source/core/text/txttab.cxx index 19ec92c6425b..14d8b9072693 100644 --- a/sw/source/core/text/txttab.cxx +++ b/sw/source/core/text/txttab.cxx @@ -175,7 +175,12 @@ SwTabPortion *SwTextFormatter::NewTabPortion( SwTextFormatInfo &rInf, bool bAuto // since up till now these were just treated as automatic tabstops. eAdj = SvxTabAdjust::Right; bAbsoluteNextPos = true; - nNextPos = rInf.Width(); + // TODO: unclear if old Word has an upper limit for center/right + // tabs, UI allows setting 55.87cm max which is still one line + if (!bTabOverMargin || o3tl::toTwips(558, o3tl::Length::mm) < nNextPos) + { + nNextPos = rInf.Width(); + } } bAutoTabStop = false; } From 7a13e4a9edca15a8f3410417ef15c6b002f3de64 Mon Sep 17 00:00:00 2001 From: Chris Mayo Date: Mon, 24 Jun 2024 19:20:31 +0100 Subject: [PATCH 044/194] Remove duplicate vnd.stardivision.writer-global MimeType Change-Id: Iec722f05ff2770311f36c38c7dd7e69adbbd6daf Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169474 Reviewed-by: Christian Lohmaier Tested-by: Christian Lohmaier --- sysui/desktop/menus/writer.desktop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sysui/desktop/menus/writer.desktop b/sysui/desktop/menus/writer.desktop index 6d4ff815f956..200decb40918 100644 --- a/sysui/desktop/menus/writer.desktop +++ b/sysui/desktop/menus/writer.desktop @@ -22,7 +22,7 @@ Icon=writer Type=Application Categories=Office;WordProcessor;X-Red-Hat-Base; Exec=${UNIXBASISROOTNAME} --writer %%FILE%% -MimeType=application/clarisworks;application/docbook+xml;application/macwriteii;application/msword;application/prs.plucker;application/rtf;application/vnd.apple.pages;application/vnd.lotus-wordpro;application/vnd.ms-word;application/vnd.ms-word.document.macroEnabled.12;application/vnd.ms-word.template.macroEnabled.12;application/vnd.ms-works;application/vnd.oasis.opendocument.text;application/vnd.oasis.opendocument.text-flat-xml;application/vnd.oasis.opendocument.text-master;application/vnd.oasis.opendocument.text-master-template;application/vnd.oasis.opendocument.text-template;application/vnd.oasis.opendocument.text-web;application/vnd.openxmlformats-officedocument.wordprocessingml.document;application/vnd.openxmlformats-officedocument.wordprocessingml.template;application/vnd.palm;application/vnd.stardivision.writer-global;application/vnd.stardivision.writer-global;application/vnd.sun.xml.writer;application/vnd.sun.xml.writer.global;application/vnd.sun.xml.writer.template;application/vnd.wordperfect;application/wordperfect;application/x-abiword;application/x-aportisdoc;application/x-doc;application/x-extension-txt;application/x-fictionbook+xml;application/x-hwp;application/x-iwork-pages-sffpages;application/x-mswrite;application/x-pocket-word;application/x-sony-bbeb;application/x-starwriter;application/x-starwriter-global;application/x-t602;text/plain;text/rtf; +MimeType=application/clarisworks;application/docbook+xml;application/macwriteii;application/msword;application/prs.plucker;application/rtf;application/vnd.apple.pages;application/vnd.lotus-wordpro;application/vnd.ms-word;application/vnd.ms-word.document.macroEnabled.12;application/vnd.ms-word.template.macroEnabled.12;application/vnd.ms-works;application/vnd.oasis.opendocument.text;application/vnd.oasis.opendocument.text-flat-xml;application/vnd.oasis.opendocument.text-master;application/vnd.oasis.opendocument.text-master-template;application/vnd.oasis.opendocument.text-template;application/vnd.oasis.opendocument.text-web;application/vnd.openxmlformats-officedocument.wordprocessingml.document;application/vnd.openxmlformats-officedocument.wordprocessingml.template;application/vnd.palm;application/vnd.stardivision.writer-global;application/vnd.sun.xml.writer;application/vnd.sun.xml.writer.global;application/vnd.sun.xml.writer.template;application/vnd.wordperfect;application/wordperfect;application/x-abiword;application/x-aportisdoc;application/x-doc;application/x-extension-txt;application/x-fictionbook+xml;application/x-hwp;application/x-iwork-pages-sffpages;application/x-mswrite;application/x-pocket-word;application/x-sony-bbeb;application/x-starwriter;application/x-starwriter-global;application/x-t602;text/plain;text/rtf; Name=%PRODUCTNAME Writer GenericName=Word Processor Comment=Create and edit text and graphics in letters, reports, documents and Web pages. From 9f62c7a0f2333d1b7d179a43b3b0341dba7554a1 Mon Sep 17 00:00:00 2001 From: Regina Henschel Date: Sun, 23 Jun 2024 20:24:44 +0200 Subject: [PATCH 045/194] tdf#161483 enable LO to read ODF angle units ODF uses in several places data type 'angle' (18.3.1, ODF 1.3). That is a double followed by unit identifier 'deg', 'grad' or 'rad' or a unit less value in degrees. LO uses in the API angles in degrees, 1/10 of degrees and 1/100 of degrees in data types 'double', 'short' and 'long'. Without the fix LO does not interpret the units, but takes only the number part. Change-Id: Ib3f2a518a25199e3cf7a7a8572e169785f75c427 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169360 Reviewed-by: Michael Stahl Tested-by: Jenkins Reviewed-by: Regina Henschel --- include/sax/tools/converter.hxx | 8 + sax/Library_sax.mk | 1 + sax/source/tools/converter.cxx | 50 +++ .../data/tdf161483_CircleStartEndAngle.fodg | 397 +++++++++++++++++ .../qa/unit/data/tdf161483_ShadowSlant.fodg | 419 ++++++++++++++++++ xmloff/qa/unit/draw.cxx | 52 +++ xmloff/source/draw/ximp3dscene.cxx | 6 +- xmloff/source/draw/ximpshap.cxx | 8 +- 8 files changed, 936 insertions(+), 5 deletions(-) create mode 100644 xmloff/qa/unit/data/tdf161483_CircleStartEndAngle.fodg create mode 100644 xmloff/qa/unit/data/tdf161483_ShadowSlant.fodg diff --git a/include/sax/tools/converter.hxx b/include/sax/tools/converter.hxx index bb97acc595ac..e6568faffbd6 100644 --- a/include/sax/tools/converter.hxx +++ b/include/sax/tools/converter.hxx @@ -210,6 +210,14 @@ public: static bool convert10thDegAngle(sal_Int16& rAngle, std::string_view rString, bool isWrongOOo10thDegAngle); + /** convert SVG angle to number, in 1/nFactor of degrees, range [0..nFactor*360[ */ + static bool convertAngle(double& rAngle, std::u16string_view rString, + const sal_uInt16& nFactor = 1); + + /** convert SVG angle to number, in 1/nFactor of degrees, range [0..nFactor*360[ */ + static bool convertAngle(double& rAngle, std::string_view rString, + const sal_uInt16& nFactor = 1); + /** convert double to XMLSchema-2 "duration" string; negative durations allowed */ static void convertDuration(OUStringBuffer& rBuffer, const double fTime); diff --git a/sax/Library_sax.mk b/sax/Library_sax.mk index f65fcf05b669..7188041f1bf4 100644 --- a/sax/Library_sax.mk +++ b/sax/Library_sax.mk @@ -26,6 +26,7 @@ $(eval $(call gb_Library_use_externals,sax,\ )) $(eval $(call gb_Library_use_libraries,sax,\ + basegfx \ comphelper \ cppu \ cppuhelper \ diff --git a/sax/source/tools/converter.cxx b/sax/source/tools/converter.cxx index bc2342d5b508..204033a7e64a 100644 --- a/sax/source/tools/converter.cxx +++ b/sax/source/tools/converter.cxx @@ -802,6 +802,56 @@ bool Converter::convert10thDegAngle(sal_Int16& rAngle, std::string_view rString, return bRet; } +/** convert SVG angle to number, in 1/nFactor of degrees, range [0..nFactor*360[ */ +bool Converter::convertAngle(double& rAngle, std::u16string_view rString, const sal_uInt16& nFactor) +{ + // ODF uses in several places angles in data type 'angle' (18.3.1, ODF 1.3). That is a double + // followed by unit identifier deg, grad or rad or a unitless value in degrees. LO uses angles + // in degrees, 1/10 of degrees and 1/100 of degrees in various data types. + // This method converts ODF 'angle' to double considering nFactor and normalizes it to range + // [0..nFactor*360[. Further type converting and range restriction are done by the caller. + bool bRet = ::sax::Converter::convertDouble(rAngle, rString); + if (bRet) + { + //degrees + if (std::u16string_view::npos != rString.find(u"grad")) + rAngle *= 0.9; // 360deg = 400grad + else if (std::u16string_view::npos != rString.find(u"rad")) + rAngle = basegfx::rad2deg(rAngle); + // 1/nFactor of degrees in range [0..nFactor*360] + if (nFactor > 0) + rAngle = basegfx::snapToZeroRange(rAngle * nFactor, nFactor * 360.0); + else + return false; + } + return bRet; +} + +/** convert SVG angle to number, in 1/nFactor of degrees, range [0..nFactor*360[ */ +bool Converter::convertAngle(double& rAngle, std::string_view rString, const sal_uInt16& nFactor) +{ + // ODF uses in several places angles in data type 'angle' (18.3.1, ODF 1.3). That is a double + // followed by unit identifier deg, grad or rad or a unitless value in degrees. LO uses angles + // in degrees, 1/10 of degrees and 1/100 of degrees in various data types. + // This method converts ODF 'angle' to double considering nFactor and normalizes it to range + // [0..nFactor*360[. Further type converting and range restriction are done by the caller. + bool bRet = ::sax::Converter::convertDouble(rAngle, rString); + if (bRet) + { + // degrees + if (std::u16string_view::npos != rString.find("grad")) + rAngle *= 0.9; // 360deg = 400grad + else if (std::u16string_view::npos != rString.find("rad")) + rAngle = basegfx::rad2deg(rAngle); + // 1/nFactor of degrees in range [0..nFactor*360] + if (nFactor > 0) + rAngle = basegfx::snapToZeroRange(rAngle * nFactor, nFactor * 360.0); + else + return false; + } + return bRet; +} + /** convert double to ISO "duration" string; negative durations allowed */ void Converter::convertDuration(OUStringBuffer& rBuffer, const double fTime) diff --git a/xmloff/qa/unit/data/tdf161483_CircleStartEndAngle.fodg b/xmloff/qa/unit/data/tdf161483_CircleStartEndAngle.fodg new file mode 100644 index 000000000000..66b815322be4 --- /dev/null +++ b/xmloff/qa/unit/data/tdf161483_CircleStartEndAngle.fodg @@ -0,0 +1,397 @@ + + + + + LOmyBuild/25.2.0.0.alpha0$Windows_X86_64 LibreOffice_project/5a7283a0eb880c5273ea48b0d1a6f881c4297b1a + + 24x16 + Regina Henschel + 2024-06-23T16:09:12 + Regina Henschel + 2024-06-23T16:11:32 + + + + + -1494 + -349 + 24728 + 19000 + + + view1 + true + false + false + false + true + false + true + true + true + 1500 + false + Hw== + Hw== + + false + true + true + 0 + 0 + true + true + true + 4 + 0 + -244 + -2551 + 29363 + 16609 + 500 + 500 + 100 + 100 + 500 + 5 + 500 + 5 + false + 1500 + true + false + false + false + false + + + + + 1251 + 0 + false + false + false + false + false + true + false + true + false + true + true + true + 0 + $(inst)/share/palette%3B$(user)/config/standard.sod + $(inst)/share/palette%3B$(user)/config/html.soc + false + $(inst)/share/palette%3B$(user)/config/standard.soe + $(inst)/share/palette%3B$(user)/config/standard.soh + true + $(inst)/share/palette%3B$(user)/config/standard.sog + $(inst)/share/palette%3B$(user)/config/standard.sob + true + true + 4 + 0 + false + low-resolution + false + false + false + false + true + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/xmloff/qa/unit/data/tdf161483_ShadowSlant.fodg b/xmloff/qa/unit/data/tdf161483_ShadowSlant.fodg new file mode 100644 index 000000000000..c012e03fc6b3 --- /dev/null +++ b/xmloff/qa/unit/data/tdf161483_ShadowSlant.fodg @@ -0,0 +1,419 @@ + + + + + LibreOffice_7.6.7/7.6.7.2$Windows_X86_64 LibreOffice_project/dd47e4b30cb7dab30588d6c79c651f218165e3c5 + 32x24 + Regina Henschel + 2024-06-21T21:28:57 + Regina Henschel + 2024-06-22T18:18:28.827000000 + + PT9M8S3 + + + -3960 + -2799 + 36561 + 24977 + + + view1 + true + false + false + true + true + false + false + true + true + 1500 + false + Hw== + Hw== + + false + true + true + 0 + 0 + true + true + true + 4 + 0 + -3960 + -2799 + 37760 + 24821 + 500 + 500 + 100 + 100 + 500 + 5 + 500 + 5 + false + 1500 + true + false + false + false + false + + + + + 1250 + 0 + EPSON6FC99C (WP-4025 Series) + false + false + false + false + false + true + false + true + false + true + true + true + 0 + $(inst)/share/palette%3B$(user)/config/standard.sod + $(inst)/share/palette/html.soc + false + $(inst)/share/palette%3B$(user)/config/standard.soe + $(inst)/share/palette%3B$(user)/config/standard.soh + true + $(inst)/share/palette%3B$(user)/config/standard.sog + $(inst)/share/palette%3B$(user)/config/standard.sob + true + true + 4 + 0 + false + low-resolution + false + false + false + false + true + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/xmloff/qa/unit/draw.cxx b/xmloff/qa/unit/draw.cxx index bfa279ca120f..f81df002c4ae 100644 --- a/xmloff/qa/unit/draw.cxx +++ b/xmloff/qa/unit/draw.cxx @@ -879,6 +879,58 @@ CPPUNIT_TEST_FIXTURE(XmloffDrawTest, testTdf161327_HatchAngle) } } +CPPUNIT_TEST_FIXTURE(XmloffDrawTest, testTdf161483_ShadowSlant) +{ + // Load document with four 3D-scenes, that differ in the draw:shadow-slant value + loadFromFile(u"tdf161483_ShadowSlant.fodg"); + + // The shadow-slant angle is given in file as + // [0] 36 unitless + // [1] 36deg, + // [2] 40grad, + // [3] 1.628318530717959rad + // The resulting angle should be 36 in all cases. + // Cases [1], [2] and [3] had angle 0 without fix. + + constexpr sal_Int16 nExpectedAngle = 36; // D3DSceneShadowSlant has data type 'short' + for (size_t i = 0; i < 4; ++i) + { + uno::Reference xShape(getShape(i)); + uno::Reference xShapeProps(xShape, uno::UNO_QUERY); + sal_Int16 nActualAngle; + xShapeProps->getPropertyValue(u"D3DSceneShadowSlant"_ustr) >>= nActualAngle; + CPPUNIT_ASSERT_EQUAL(nExpectedAngle, nActualAngle); + } +} + +CPPUNIT_TEST_FIXTURE(XmloffDrawTest, testTdf161483_CircleStartEndAngle) +{ + // Load document with four 'Arc' shapes, which differ in the type of start and end angles + loadFromFile(u"tdf161483_CircleStartEndAngle.fodg"); + + // The start and end angles are given in file as + // [0] unitless: start 337.5 end 306 + // [1] deg: start 337.5deg end 306deg + // [2] grad: start 375grad end 340grad + // [3] rad: start 5.89048622548086rad end 5.34070751110265rad + // The resulting angle should be 33750 and 30600 in all cases. + + // CircleStartAngle and CircleEndAngle have data type 'long', meaning Degree100 + constexpr sal_Int32 nExpectedStartAngle = 33750; + constexpr sal_Int32 nExpectedEndAngle = 30600; + for (size_t i = 0; i < 4; ++i) + { + uno::Reference xShape(getShape(i)); + uno::Reference xShapeProps(xShape, uno::UNO_QUERY); + sal_Int32 nActualStartAngle; + xShapeProps->getPropertyValue(u"CircleStartAngle"_ustr) >>= nActualStartAngle; + CPPUNIT_ASSERT_EQUAL(nExpectedStartAngle, nActualStartAngle); + sal_Int32 nActualEndAngle; + xShapeProps->getPropertyValue(u"CircleEndAngle"_ustr) >>= nActualEndAngle; + CPPUNIT_ASSERT_EQUAL(nExpectedEndAngle, nActualEndAngle); + } +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/xmloff/source/draw/ximp3dscene.cxx b/xmloff/source/draw/ximp3dscene.cxx index a137cc247f4e..8c1648be4490 100644 --- a/xmloff/source/draw/ximp3dscene.cxx +++ b/xmloff/source/draw/ximp3dscene.cxx @@ -284,7 +284,11 @@ void SdXML3DSceneAttributesHelper::processSceneAttribute( const sax_fastparser:: } case XML_SHADOW_SLANT: { - ::sax::Converter::convertNumber(mnShadowSlant, aIter.toView()); + double fAngle = 0.0; + if (::sax::Converter::convertAngle(fAngle, aIter.toView())) + mnShadowSlant = static_cast(basegfx::fround(fAngle)); + else + mnShadowSlant = 0; return; } case XML_SHADE_MODE: diff --git a/xmloff/source/draw/ximpshap.cxx b/xmloff/source/draw/ximpshap.cxx index 27e98821f19b..89bb474f928e 100644 --- a/xmloff/source/draw/ximpshap.cxx +++ b/xmloff/source/draw/ximpshap.cxx @@ -1157,15 +1157,15 @@ bool SdXMLEllipseShapeContext::processAttribute( const sax_fastparser::FastAttri case XML_ELEMENT(DRAW, XML_START_ANGLE): { double dStartAngle; - if (::sax::Converter::convertDouble( dStartAngle, aIter.toView() )) - mnStartAngle = static_cast(dStartAngle * 100.0); + if (::sax::Converter::convertAngle( dStartAngle, aIter.toView(), 100)) + mnStartAngle = static_cast(basegfx::fround(dStartAngle)); break; } case XML_ELEMENT(DRAW, XML_END_ANGLE): { double dEndAngle; - if (::sax::Converter::convertDouble( dEndAngle, aIter.toView() )) - mnEndAngle = static_cast(dEndAngle * 100.0); + if (::sax::Converter::convertAngle( dEndAngle, aIter.toView(), 100)) + mnEndAngle = static_cast(basegfx::fround(dEndAngle)); break; } default: From ef2c71d3a78904a917b3001f6ec043d00fc3f71f Mon Sep 17 00:00:00 2001 From: Patrick Luby Date: Mon, 24 Jun 2024 15:34:47 -0400 Subject: [PATCH 046/194] Related tdf#148569: do not apply macOS fix to non-macOS platforms Setting the stroke width and cap has a noticeable performance penalty when running on GTK3. Since tdf#148569 only appears to occur on macOS Retina displays, revert commit a4488013ee6c87a97501b620dbbf56622fb70246 for non-macOS platforms. Change-Id: I2435434c6f66b84483046ea558bac3d47b8803ce Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169475 Tested-by: Jenkins Reviewed-by: Patrick Luby --- vcl/skia/gdiimpl.cxx | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/vcl/skia/gdiimpl.cxx b/vcl/skia/gdiimpl.cxx index e6fdff986eae..2fdccc772253 100644 --- a/vcl/skia/gdiimpl.cxx +++ b/vcl/skia/gdiimpl.cxx @@ -730,11 +730,20 @@ void SkiaSalGraphicsImpl::drawPixel(tools::Long nX, tools::Long nY, Color nColor // Apparently drawPixel() is actually expected to set the pixel and not draw it. paint.setBlendMode(SkBlendMode::kSrc); // set as is, including alpha +#ifdef MACOSX // tdf#148569 set extra drawing constraints when scaling // Previously, setting stroke width and cap was only done when running // unit tests. But the same drawing constraints are necessary when running // with a Retina display on macOS. if (mScaling != 1) +#else + // Related tdf#148569: do not apply macOS fix to non-macOS platforms + // Setting the stroke width and cap has a noticeable performance penalty + // when running on GTK3. Since tdf#148569 only appears to occur on macOS + // Retina displays, revert commit a4488013ee6c87a97501b620dbbf56622fb70246 + // for non-macOS platforms. + if (mScaling != 1 && isUnitTestRunning()) +#endif { // On HiDPI displays, draw a square on the entire non-hidpi "pixel" when running unittests, // since tests often require precise pixel drawing. From 4acedb794c1ba0de24f2c8703e07d7f2d5143bdb Mon Sep 17 00:00:00 2001 From: Michael Stahl Date: Tue, 25 Jun 2024 15:22:56 +0200 Subject: [PATCH 047/194] tdf#161721 sw: text formatting: TabOverMargin allow 55cm of crazy Also remove the limitation to a single text portion after tab, seems it was overly cautious. Change-Id: I07da5fdc97d84a056db87c8b74cdfc5bca85cf1d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169521 Reviewed-by: Michael Stahl Tested-by: Jenkins --- sw/source/core/text/inftxt.cxx | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/sw/source/core/text/inftxt.cxx b/sw/source/core/text/inftxt.cxx index e27af27ac5eb..a8222328e1ae 100644 --- a/sw/source/core/text/inftxt.cxx +++ b/sw/source/core/text/inftxt.cxx @@ -2005,11 +2005,10 @@ SwTwips SwTextFormatInfo::GetLineWidth() if (pLastTab->GetWhichPor() == PortionType::TabLeft) nLineWidth = nTextFrameWidth - pLastTab->GetTabPos(); } - else if (GetLast() == pLastTab) + else { // tdf#158658 Put content after tab into margin like Word. - // FIXME using Width() is entirely arbitrary here, Word adds even more - // width but not infinitely much. - nLineWidth = std::max(Width(), nLineWidth); + // Try to limit the paragraph to 55.87cm, it's max tab pos in Word UI. + nLineWidth = o3tl::toTwips(558, o3tl::Length::mm) - X(); } return nLineWidth; } From 12dbf0e6b6b485a1d73c7e33bd0ecfb13e6efdac Mon Sep 17 00:00:00 2001 From: Patrick Luby Date: Wed, 19 Jun 2024 16:03:06 -0400 Subject: [PATCH 048/194] tdf#159175 Do not allocate a CGLayer for each NSWindow when using Skia Skia surfaces can be copied directly to an NSWindow's CGContextRef so disable allocation of a CGLayer for each NSWindow to significantly reduce memory usage when Skia is enabled. Change-Id: I8e3001e4f2ae8dd36156c06db68447c6b1bc67df Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169242 Tested-by: Jenkins Reviewed-by: Patrick Luby --- vcl/inc/skia/osx/gdiimpl.hxx | 4 +- vcl/osx/salgdiutils.cxx | 98 ++++++++++++++++------- vcl/osx/salmacos.cxx | 7 ++ vcl/skia/osx/gdiimpl.cxx | 146 +++++++++++++++++++++-------------- 4 files changed, 169 insertions(+), 86 deletions(-) diff --git a/vcl/inc/skia/osx/gdiimpl.hxx b/vcl/inc/skia/osx/gdiimpl.hxx index b97245e86e11..b60280a09e6b 100644 --- a/vcl/inc/skia/osx/gdiimpl.hxx +++ b/vcl/inc/skia/osx/gdiimpl.hxx @@ -44,11 +44,13 @@ public: virtual void Flush(const tools::Rectangle&) override; virtual void WindowBackingPropertiesChanged() override; + CGImageRef createCGImageFromRasterSurface(const NSRect& rDirtyRect, CGPoint& rImageOrigin, + bool& rImageFlipped); + private: virtual int getWindowScaling() const override; virtual void createWindowSurfaceInternal(bool forceRaster = false) override; virtual void flushSurfaceToWindowContext() override; - void flushSurfaceToScreenCG(); static inline sk_sp fontManager; }; diff --git a/vcl/osx/salgdiutils.cxx b/vcl/osx/salgdiutils.cxx index a9445293211c..d7f8ec48eaf0 100644 --- a/vcl/osx/salgdiutils.cxx +++ b/vcl/osx/salgdiutils.cxx @@ -29,6 +29,7 @@ #include #include #include +#include #include #include @@ -37,7 +38,7 @@ #if HAVE_FEATURE_SKIA #include -#include +#include #endif static bool bTotalScreenBounds = false; @@ -233,6 +234,10 @@ bool AquaSharedAttributes::checkContext() maLayer.set(nullptr); } + // tdf#159175 no CGLayer is needed for an NSWindow when using Skia + if (SkiaHelper::isVCLSkiaEnabled() && mpFrame->getNSWindow()) + return true; + if (!maContextHolder.isSet()) { const int nBitmapDepth = 32; @@ -297,7 +302,7 @@ bool AquaSharedAttributes::checkContext() * associated window, if any; cf. drawRect event handling * on the frame. */ -void AquaSalGraphics::UpdateWindow( NSRect& ) +void AquaSalGraphics::UpdateWindow( NSRect& rRect ) { if (!maShared.mpFrame) { @@ -305,26 +310,65 @@ void AquaSalGraphics::UpdateWindow( NSRect& ) } NSGraphicsContext* pContext = [NSGraphicsContext currentContext]; - if (maShared.maLayer.isSet() && pContext != nullptr) + if (!pContext) { + SAL_WARN_IF(!maShared.mpFrame->mbInitShow, "vcl", "UpdateWindow called with no NSGraphicsContext"); + return; + } + + CGImageRef img = nullptr; + CGPoint aImageOrigin = CGPointMake(0, 0); + bool bImageFlipped = false; +#if HAVE_FEATURE_SKIA + if (SkiaHelper::isVCLSkiaEnabled()) + { + // tdf#159175 no CGLayer is needed for an NSWindow when using Skia + // Get a CGImageRef directly from the Skia/Raster surface and draw + // that directly to the NSWindow. + // Note: Skia/Metal will always return a null CGImageRef since it + // draws directly to the NSWindow using the surface's CAMetalLayer. + AquaSkiaSalGraphicsImpl *pBackend = static_cast(mpBackend.get()); + if (pBackend) + img = pBackend->createCGImageFromRasterSurface(rRect, aImageOrigin, bImageFlipped); + } + else +#else + (void)rRect; +#endif + if (maShared.maLayer.isSet()) + { + maShared.applyXorContext(); + + const CGRect aRectPoints = { CGPointZero, maShared.maLayer.getSizePixels() }; + CGContextSetBlendMode(maShared.maCSContextHolder.get(), kCGBlendModeCopy); + CGContextDrawLayerInRect(maShared.maCSContextHolder.get(), aRectPoints, maShared.maLayer.get()); + + img = CGBitmapContextCreateImage(maShared.maCSContextHolder.get()); + } + + if (img) + { + const float fScale = sal::aqua::getWindowScaling(); CGContextHolder rCGContextHolder([pContext CGContext]); rCGContextHolder.saveState(); - // Related: tdf#155092 translate Y coordinate for height differences - // When in live resize, the NSView's height may have changed before - // the CGLayer has been resized. This causes the CGLayer's content - // to be drawn just above or below the top left corner of the view - // so translate the Y coordinate by any difference between the - // NSView's height and the CGLayer's height. - NSView *pView = maShared.mpFrame->mpNSView; - if (pView) + CGRect aRect = CGRectMake(aImageOrigin.x / fScale, aImageOrigin.y / fScale, CGImageGetWidth(img) / fScale, CGImageGetHeight(img) / fScale); + if (bImageFlipped) { + // Related: tdf#155092 translate Y coordinate of flipped images + // When in live resize, the NSView's height may have changed before + // the surface has been resized. This causes flipped content + // to be drawn just above or below the top left corner of the view + // so translate the Y coordinate using the NSView's height. // Use the NSView's bounds, not its frame, to properly handle // any rotation and/or scaling that might have been already - // applied to the view - CGFloat fTranslateY = [pView bounds].size.height - maShared.maLayer.getSizePoints().height; - CGContextTranslateCTM(rCGContextHolder.get(), 0, fTranslateY); + // applied to the view. + NSView *pView = maShared.mpFrame->mpNSView; + if (pView) + aRect.origin.y = [pView bounds].size.height - aRect.origin.y - aRect.size.height; + else if (maShared.maLayer.isSet()) + aRect.origin.y = maShared.maLayer.getSizePoints().height - aRect.origin.y - aRect.size.height; } CGMutablePathRef rClip = maShared.mpFrame->getClipPath(); @@ -335,23 +379,23 @@ void AquaSalGraphics::UpdateWindow( NSRect& ) CGContextClip(rCGContextHolder.get()); } - maShared.applyXorContext(); - - const CGSize aSize = maShared.maLayer.getSizePoints(); - const CGRect aRect = CGRectMake(0, 0, aSize.width, aSize.height); - const CGRect aRectPoints = { CGPointZero, maShared.maLayer.getSizePixels() }; - CGContextSetBlendMode(maShared.maCSContextHolder.get(), kCGBlendModeCopy); - CGContextDrawLayerInRect(maShared.maCSContextHolder.get(), aRectPoints, maShared.maLayer.get()); - - CGImageRef img = CGBitmapContextCreateImage(maShared.maCSContextHolder.get()); - CGImageRef displayColorSpaceImage = CGImageCreateCopyWithColorSpace(img, [[maShared.mpFrame->getNSWindow() colorSpace] CGColorSpace]); CGContextSetBlendMode(rCGContextHolder.get(), kCGBlendModeCopy); - CGContextDrawImage(rCGContextHolder.get(), aRect, displayColorSpaceImage); - CGImageRelease(img); - CGImageRelease(displayColorSpaceImage); + NSWindow *pWindow = maShared.mpFrame->getNSWindow(); + if (pWindow) + { + CGImageRef displayColorSpaceImage = CGImageCreateCopyWithColorSpace(img, [[maShared.mpFrame->getNSWindow() colorSpace] CGColorSpace]); + CGContextDrawImage(rCGContextHolder.get(), aRect, displayColorSpaceImage); + CGImageRelease(displayColorSpaceImage); + } + else + { + CGContextDrawImage(rCGContextHolder.get(), aRect, img); + } rCGContextHolder.restoreState(); + + CGImageRelease(img); } else { diff --git a/vcl/osx/salmacos.cxx b/vcl/osx/salmacos.cxx index 700b252cf4f3..14e2a80695d9 100644 --- a/vcl/osx/salmacos.cxx +++ b/vcl/osx/salmacos.cxx @@ -26,6 +26,7 @@ #include #include +#include #include #include @@ -506,6 +507,12 @@ bool AquaSalVirtualDevice::SetSize(tools::Long nDX, tools::Long nDY) nFlags = uint32_t(kCGImageAlphaNoneSkipFirst) | uint32_t(kCGBitmapByteOrder32Host); } + if (SkiaHelper::isVCLSkiaEnabled()) + { + mpGraphics->SetVirDevGraphics(this, maLayer, nullptr, mnBitmapDepth); + return true; + } + // Allocate buffer for virtual device graphics as bitmap context to store graphics with highest required (scaled) resolution size_t nScaledWidth = mnWidth * fScale; diff --git a/vcl/skia/osx/gdiimpl.cxx b/vcl/skia/osx/gdiimpl.cxx index 9b511ad4469b..ffe1ebc42d65 100644 --- a/vcl/skia/osx/gdiimpl.cxx +++ b/vcl/skia/osx/gdiimpl.cxx @@ -37,6 +37,24 @@ using namespace SkiaHelper; +namespace +{ +struct SnapshotImageData +{ + sk_sp image; + SkPixmap pixmap; +}; +} + +static void SnapshotImageDataCallback(void* pInfo, const void* pData, size_t nSize) +{ + (void)pData; + (void)nSize; + + if (pInfo) + delete static_cast(pInfo); +} + AquaSkiaSalGraphicsImpl::AquaSkiaSalGraphicsImpl(AquaSalGraphics& rParent, AquaSharedAttributes& rShared) : SkiaSalGraphicsImpl(rParent, rShared.mpFrame) @@ -101,117 +119,129 @@ void AquaSkiaSalGraphicsImpl::WindowBackingPropertiesChanged() { windowBackingPr void AquaSkiaSalGraphicsImpl::flushSurfaceToWindowContext() { if (!isGPU()) - flushSurfaceToScreenCG(); + { + // tdf159175 mark dirty area in NSWindow for redrawing + // This will cause -[SalFrameView drawRect:] to be called. That, + // in turn, will draw a CGImageRef of the surface fetched from + // AquaSkiaSalGraphicsImpl::createCGImageFromRasterSurface(). + mrShared.refreshRect(mDirtyRect.x(), mDirtyRect.y(), mDirtyRect.width(), + mDirtyRect.height()); + } else + { SkiaSalGraphicsImpl::flushSurfaceToWindowContext(); + } } // For Raster we use our own screen blitting (see above). -void AquaSkiaSalGraphicsImpl::flushSurfaceToScreenCG() +CGImageRef AquaSkiaSalGraphicsImpl::createCGImageFromRasterSurface(const NSRect& rDirtyRect, + CGPoint& rImageOrigin, + bool& rImageFlipped) { + if (isGPU() || !mSurface) + return nullptr; + // Based on AquaGraphicsBackend::drawBitmap(). if (!mrShared.checkContext()) - return; + return nullptr; + + NSRect aIntegralRect = NSIntegralRect(rDirtyRect); + if (NSIsEmptyRect(aIntegralRect)) + return nullptr; - assert(mSurface.get()); // Do not use sub-rect, it creates copies of the data. - sk_sp image = makeCheckedImageSnapshot(mSurface); - SkPixmap pixmap; - if (!image->peekPixels(&pixmap)) + SnapshotImageData* pInfo = new SnapshotImageData; + pInfo->image = makeCheckedImageSnapshot(mSurface); + if (!pInfo->image->peekPixels(&pInfo->pixmap)) abort(); - // If window scaling, then mDirtyRect is in VCL coordinates, mSurface has screen size (=points,HiDPI), - // maContextHolder has screen size but a scale matrix set so its inputs are in VCL coordinates (see - // its setup in AquaSharedAttributes::checkContext()). - // This creates the bitmap context from the cropped part, writable_addr32() will get - // the first pixel of mDirtyRect.topLeft(), and using pixmap.rowBytes() ensures the following - // pixel lines will be read from correct positions. - if (pixmap.bounds() != mDirtyRect && pixmap.bounds().bottom() == mDirtyRect.bottom()) + + SkIRect aDirtyRect = SkIRect::MakeXYWH( + aIntegralRect.origin.x * mScaling, aIntegralRect.origin.y * mScaling, + aIntegralRect.size.width * mScaling, aIntegralRect.size.height * mScaling); + if (mrShared.isFlipped()) + aDirtyRect = SkIRect::MakeXYWH( + aDirtyRect.x(), pInfo->pixmap.bounds().height() - aDirtyRect.y() - aDirtyRect.height(), + aDirtyRect.width(), aDirtyRect.height()); + if (!aDirtyRect.intersect(pInfo->pixmap.bounds())) { - // HACK for tdf#145843: If mDirtyRect includes the last line but not the first pixel of it, + delete pInfo; + return nullptr; + } + + // If window scaling, then aDirtyRect is in scaled VCL coordinates and mSurface has + // screen size (=points,HiDPI). + // This creates the bitmap context from the cropped part, writable_addr32() will get + // the first pixel of aDirtyRect.topLeft(), and using pixmap.rowBytes() ensures the following + // pixel lines will be read from correct positions. + if (pInfo->pixmap.bounds() != aDirtyRect + && pInfo->pixmap.bounds().bottom() == aDirtyRect.bottom()) + { + // HACK for tdf#145843: If aDirtyRect includes the last line but not the first pixel of it, // then the rowBytes() trick would lead to the CG* functions thinking that even pixels after // the pixmap data belong to the area (since the shifted x()+rowBytes() points there) and // at least on Intel Mac they would actually read those data, even though I see no good reason // to do that, as that's beyond the x()+width() for the last line. That could be handled // by creating a subset SkImage (which as is said above copies data), or set the x coordinate // to 0, which will then make rowBytes() match the actual data. - mDirtyRect.fLeft = 0; + aDirtyRect.fLeft = 0; // Related tdf#156630 pixmaps can be wider than the dirty rectangle // This seems to most commonly occur when SAL_FORCE_HIDPI_SCALING=1 // and the native window scale is 2. - assert(mDirtyRect.width() <= pixmap.bounds().width()); + assert(aDirtyRect.width() <= pInfo->pixmap.bounds().width()); } // tdf#145843 Do not use CGBitmapContextCreate() to create a bitmap context // As described in the comment in the above code, CGBitmapContextCreate() // and CGBitmapContextCreateWithData() will try to access pixels up to - // mDirtyRect.x() + pixmap.bounds.width() for each row. When reading the + // aDirtyRect.x() + pixmap.bounds.width() for each row. When reading the // last line in the SkPixmap, the buffer allocated for the SkPixmap ends at - // mDirtyRect.x() + mDirtyRect.width() and mDirtyRect.width() is clamped to - // pixmap.bounds.width() - mDirtyRect.x(). + // aDirtyRect.x() + aDirtyRect.width() and aDirtyRect.width() is clamped to + // pixmap.bounds.width() - aDirtyRect.x(). // This behavior looks like an optimization within CGBitmapContextCreate() // to draw with a single memcpy() so fix this bug by chaining the // CGDataProvider(), CGImageCreate(), and CGImageCreateWithImageInRect() // functions to create the screen image. - CGDataProviderRef dataProvider = CGDataProviderCreateWithData( - nullptr, pixmap.writable_addr32(0, 0), pixmap.computeByteSize(), nullptr); + CGDataProviderRef dataProvider + = CGDataProviderCreateWithData(pInfo, pInfo->pixmap.writable_addr32(0, 0), + pInfo->pixmap.computeByteSize(), SnapshotImageDataCallback); if (!dataProvider) { + delete pInfo; SAL_WARN("vcl.skia", "flushSurfaceToScreenGC(): Failed to allocate data provider"); - return; + return nullptr; } - CGImageRef fullImage = CGImageCreate(pixmap.bounds().width(), pixmap.bounds().height(), 8, - 8 * image->imageInfo().bytesPerPixel(), pixmap.rowBytes(), - GetSalData()->mxRGBSpace, - SkiaToCGBitmapType(image->colorType(), image->alphaType()), - dataProvider, nullptr, false, kCGRenderingIntentDefault); + CGImageRef fullImage + = CGImageCreate(pInfo->pixmap.bounds().width(), pInfo->pixmap.bounds().height(), 8, + 8 * pInfo->image->imageInfo().bytesPerPixel(), pInfo->pixmap.rowBytes(), + GetSalData()->mxRGBSpace, + SkiaToCGBitmapType(pInfo->image->colorType(), pInfo->image->alphaType()), + dataProvider, nullptr, false, kCGRenderingIntentDefault); if (!fullImage) { CGDataProviderRelease(dataProvider); SAL_WARN("vcl.skia", "flushSurfaceToScreenGC(): Failed to allocate full image"); - return; + return nullptr; } CGImageRef screenImage = CGImageCreateWithImageInRect( - fullImage, CGRectMake(mDirtyRect.x() * mScaling, mDirtyRect.y() * mScaling, - mDirtyRect.width() * mScaling, mDirtyRect.height() * mScaling)); + fullImage, + CGRectMake(aDirtyRect.x(), aDirtyRect.y(), aDirtyRect.width(), aDirtyRect.height())); if (!screenImage) { CGImageRelease(fullImage); CGDataProviderRelease(dataProvider); - SAL_WARN("vcl.skia", "flushSurfaceToScreenGC(): Failed to allocate screen image"); - return; + SAL_WARN("vcl.skia", "createCGImageFromRasterSurface(): Failed to allocate screen image"); + return nullptr; } - mrShared.maContextHolder.saveState(); - // Drawing to the actual window has scaling active, so use unscaled coordinates, the scaling matrix will scale them - // to the proper screen coordinates. Unless the scaling is fake for debugging, in which case scale them to draw - // at the scaled size. - int windowScaling = 1; - static const char* env = getenv("SAL_FORCE_HIDPI_SCALING"); - if (env != nullptr) - windowScaling = atoi(env); - CGRect drawRect - = CGRectMake(mDirtyRect.x() * windowScaling, mDirtyRect.y() * windowScaling, - mDirtyRect.width() * windowScaling, mDirtyRect.height() * windowScaling); - if (mrShared.isFlipped()) - { - // I don't understand why, but apparently it's needed to explicitly to flip the drawing, even though maContextHelper - // has this set up, so this unsets the flipping. - CGFloat invertedY = drawRect.origin.y + drawRect.size.height; - CGContextTranslateCTM(mrShared.maContextHolder.get(), 0, invertedY); - CGContextScaleCTM(mrShared.maContextHolder.get(), 1, -1); - drawRect.origin.y = 0; - } - CGContextDrawImage(mrShared.maContextHolder.get(), drawRect, screenImage); - mrShared.maContextHolder.restoreState(); + rImageOrigin = CGPointMake(aDirtyRect.x(), aDirtyRect.y()); + rImageFlipped = mrShared.isFlipped(); - CGImageRelease(screenImage); CGImageRelease(fullImage); CGDataProviderRelease(dataProvider); - // This is also in VCL coordinates. - mrShared.refreshRect(mDirtyRect.x(), mDirtyRect.y(), mDirtyRect.width(), mDirtyRect.height()); + return screenImage; } bool AquaSkiaSalGraphicsImpl::drawNativeControl(ControlType nType, ControlPart nPart, From d9fee55c634b500f1d7d0edaa25cecfc276b0869 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Toma=C5=BE=20Vajngerl?= Date: Tue, 25 Jun 2024 00:08:50 +0900 Subject: [PATCH 049/194] vcl: remove partial GIF image loading MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This removes the code that handles the IO_PENDING and the graphic "context" handling from GIF image format. Partial loading of images complicates the image filter life cycle a lot (many exceptions) and is not really needed so much today as this was needed in the past. In most cases we load the whole image in one pass anyway. Even loading from the network should be fast enough to not cause issues for the user. Most image filters don't even implement this like PNG and nobody noticed for many years that this is not supported. To handle IO_PENDING case it is probably better to load the bitstream into memory and then load the whole image after that in one pass. This can also be implemented all inside (Imp)Graphic in a very straight forward way. In addition some broken GIF files for testCVEs now fail to load completely and those need to be moved from pass/ to fail/. Change-Id: I5fb7004a4aff957da872bb3f5c66b61bf95f18d7 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/165212 Reviewed-by: Tomaž Vajngerl Tested-by: Jenkins --- .../afl-sample-short-read-1.gif | Bin .../afl-sample-short-read-2.gif | Bin .../data/gif/{pass => fail}/crash-1.gif | Bin .../data/gif/{pass => fail}/crash-2.gif | Bin vcl/source/filter/igif/gifread.cxx | 148 ++++++------------ 5 files changed, 45 insertions(+), 103 deletions(-) rename vcl/qa/cppunit/graphicfilter/data/gif/{pass => fail}/afl-sample-short-read-1.gif (100%) rename vcl/qa/cppunit/graphicfilter/data/gif/{pass => fail}/afl-sample-short-read-2.gif (100%) rename vcl/qa/cppunit/graphicfilter/data/gif/{pass => fail}/crash-1.gif (100%) rename vcl/qa/cppunit/graphicfilter/data/gif/{pass => fail}/crash-2.gif (100%) diff --git a/vcl/qa/cppunit/graphicfilter/data/gif/pass/afl-sample-short-read-1.gif b/vcl/qa/cppunit/graphicfilter/data/gif/fail/afl-sample-short-read-1.gif similarity index 100% rename from vcl/qa/cppunit/graphicfilter/data/gif/pass/afl-sample-short-read-1.gif rename to vcl/qa/cppunit/graphicfilter/data/gif/fail/afl-sample-short-read-1.gif diff --git a/vcl/qa/cppunit/graphicfilter/data/gif/pass/afl-sample-short-read-2.gif b/vcl/qa/cppunit/graphicfilter/data/gif/fail/afl-sample-short-read-2.gif similarity index 100% rename from vcl/qa/cppunit/graphicfilter/data/gif/pass/afl-sample-short-read-2.gif rename to vcl/qa/cppunit/graphicfilter/data/gif/fail/afl-sample-short-read-2.gif diff --git a/vcl/qa/cppunit/graphicfilter/data/gif/pass/crash-1.gif b/vcl/qa/cppunit/graphicfilter/data/gif/fail/crash-1.gif similarity index 100% rename from vcl/qa/cppunit/graphicfilter/data/gif/pass/crash-1.gif rename to vcl/qa/cppunit/graphicfilter/data/gif/fail/crash-1.gif diff --git a/vcl/qa/cppunit/graphicfilter/data/gif/pass/crash-2.gif b/vcl/qa/cppunit/graphicfilter/data/gif/fail/crash-2.gif similarity index 100% rename from vcl/qa/cppunit/graphicfilter/data/gif/pass/crash-2.gif rename to vcl/qa/cppunit/graphicfilter/data/gif/fail/crash-2.gif diff --git a/vcl/source/filter/igif/gifread.cxx b/vcl/source/filter/igif/gifread.cxx index 443eb05c045a..67af603218d4 100644 --- a/vcl/source/filter/igif/gifread.cxx +++ b/vcl/source/filter/igif/gifread.cxx @@ -42,8 +42,7 @@ enum GIFAction enum ReadState { GIFREAD_OK, - GIFREAD_ERROR, - GIFREAD_NEED_MORE + GIFREAD_ERROR }; } @@ -115,7 +114,6 @@ public: ReadState ReadGIF( Graphic& rGraphic ); bool ReadIsAnimated(); void GetLogicSize(Size& rLogicSize); - Graphic GetIntermediateGraphic(); explicit GIFReader( SvStream& rStm ); }; @@ -261,13 +259,13 @@ bool GIFReader::ReadGlobalHeader() bool bRet = false; auto nRead = rIStm.ReadBytes(pBuf, 6); - if (nRead == 6 && (rIStm.GetError() != ERRCODE_IO_PENDING)) + if (nRead == 6 && rIStm.good()) { pBuf[ 6 ] = 0; if( !strcmp( pBuf, "GIF87a" ) || !strcmp( pBuf, "GIF89a" ) ) { nRead = rIStm.ReadBytes(pBuf, 7); - if (nRead == 7 && (rIStm.GetError() != ERRCODE_IO_PENDING)) + if (nRead == 7 && rIStm.good()) { sal_uInt8 nAspect; sal_uInt8 nRF; @@ -287,7 +285,7 @@ bool GIFReader::ReadGlobalHeader() else nBackgroundColor = 0; - if (rIStm.GetError() != ERRCODE_IO_PENDING) + if (rIStm.good()) bRet = true; } } @@ -307,7 +305,7 @@ void GIFReader::ReadPaletteEntries( BitmapPalette* pPal, sal_uLong nCount ) std::unique_ptr pBuf(new sal_uInt8[ nLen ]); std::size_t nRead = rIStm.ReadBytes(pBuf.get(), nLen); nCount = nRead/3UL; - if (rIStm.GetError() == ERRCODE_IO_PENDING) + if (!rIStm.good()) return; sal_uInt8* pTmp = pBuf.get(); @@ -340,7 +338,7 @@ bool GIFReader::ReadExtension() // Extension-Label sal_uInt8 cFunction(0); rIStm.ReadUChar( cFunction ); - if (rIStm.GetError() != ERRCODE_IO_PENDING) + if (rIStm.good()) { bool bOverreadDataBlocks = false; sal_uInt8 cSize(0); @@ -358,7 +356,7 @@ bool GIFReader::ReadExtension() sal_uInt8 cByte(0); rIStm.ReadUChar(cByte); - if (rIStm.GetError() != ERRCODE_IO_PENDING) + if (rIStm.good()) { nGCDisposalMethod = ( cFlags >> 2) & 7; bGCTransparent = ( cFlags & 1 ); @@ -371,7 +369,7 @@ bool GIFReader::ReadExtension() // Application extension case 0xff : { - if (rIStm.GetError() != ERRCODE_IO_PENDING) + if (rIStm.good()) { // by default overread this extension bOverreadDataBlocks = true; @@ -399,7 +397,7 @@ bool GIFReader::ReadExtension() rIStm.ReadUChar( cByte ); bStatus = ( cByte == 0 ); - bRet = rIStm.GetError() != ERRCODE_IO_PENDING; + bRet = rIStm.good(); bOverreadDataBlocks = false; // Netscape interprets the loop count @@ -422,7 +420,7 @@ bool GIFReader::ReadExtension() rIStm.ReadUInt32( nLogWidth100 ).ReadUInt32( nLogHeight100 ); rIStm.ReadUChar( cByte ); bStatus = ( cByte == 0 ); - bRet = rIStm.GetError() != ERRCODE_IO_PENDING; + bRet = rIStm.good(); bOverreadDataBlocks = false; } else @@ -456,7 +454,7 @@ bool GIFReader::ReadExtension() bRet = false; std::size_t nRead = rIStm.ReadBytes(&cSize, 1); - if (rIStm.GetError() != ERRCODE_IO_PENDING && nRead == 1) + if (rIStm.good() && nRead == 1) { bRet = true; } @@ -475,7 +473,7 @@ bool GIFReader::ReadLocalHeader() bool bRet = false; std::size_t nRead = rIStm.ReadBytes(pBuf, 9); - if (rIStm.GetError() != ERRCODE_IO_PENDING && nRead == 9) + if (rIStm.good() && nRead == 9) { SvMemoryStream aMemStm; BitmapPalette* pPal; @@ -504,7 +502,7 @@ bool GIFReader::ReadLocalHeader() // if we could read everything, we will create the local image; // if the global colour table is valid for the image, we will // consider the BackGroundColorIndex. - if (rIStm.GetError() != ERRCODE_IO_PENDING) + if (rIStm.good()) { CreateBitmaps( nImageWidth, nImageHeight, pPal, bGlobalPalette && ( pPal == &aGPalette ) ); bRet = true; @@ -523,7 +521,7 @@ sal_uLong GIFReader::ReadNextBlock() if ( rIStm.eof() ) nRet = 4; - else if (rIStm.GetError() != ERRCODE_IO_PENDING) + else if (rIStm.good()) { if ( cBlockSize == 0 ) nRet = 2; @@ -531,7 +529,7 @@ sal_uLong GIFReader::ReadNextBlock() { rIStm.ReadBytes( aSrcBuf.data(), cBlockSize ); - if (rIStm.GetError() != ERRCODE_IO_PENDING) + if (rIStm.good()) { if( bOverreadBlock ) nRet = 3; @@ -721,34 +719,6 @@ void GIFReader::CreateNewBitmaps() } } -Graphic GIFReader::GetIntermediateGraphic() -{ - Graphic aImGraphic; - - // only create intermediate graphic, if data is available - // but graphic still not completely read - if ( bImGraphicReady && !aAnimation.Count() ) - { - pAcc8.reset(); - - if ( bGCTransparent ) - { - pAcc1.reset(); - aImGraphic = BitmapEx( aBmp8, aBmp1 ); - - pAcc1 = aBmp1; - bStatus = bStatus && pAcc1; - } - else - aImGraphic = BitmapEx(aBmp8); - - pAcc8 = aBmp8; - bStatus = bStatus && pAcc8; - } - - return aImGraphic; -} - bool GIFReader::ProcessGIF() { bool bRead = false; @@ -771,7 +741,7 @@ bool GIFReader::ProcessGIF() if( rIStm.eof() ) eActAction = END_READING; - else if (rIStm.GetError() != ERRCODE_IO_PENDING) + else if (rIStm.good()) { bRead = true; @@ -831,7 +801,7 @@ bool GIFReader::ProcessGIF() eActAction = ABORT_READING; else if( cDataSize > 12 ) bStatus = false; - else if (rIStm.GetError() != ERRCODE_IO_PENDING) + else if (rIStm.good()) { bRead = true; pDecomp = std::make_unique( cDataSize ); @@ -915,23 +885,16 @@ bool GIFReader::ProcessGIF() bool GIFReader::ReadIsAnimated() { - ReadState eReadState; - bStatus = true; + while (ProcessGIF() && eActAction != END_READING) + {} - while( ProcessGIF() && ( eActAction != END_READING ) ) {} + ReadState eReadState = GIFREAD_ERROR; - if( !bStatus ) + if (!bStatus) eReadState = GIFREAD_ERROR; - else if( eActAction == END_READING ) + else if (eActAction == END_READING) eReadState = GIFREAD_OK; - else - { - if ( rIStm.GetError() == ERRCODE_IO_PENDING ) - rIStm.ResetError(); - - eReadState = GIFREAD_NEED_MORE; - } if (eReadState == GIFREAD_OK) return aAnimation.Count() > 1; @@ -944,27 +907,21 @@ void GIFReader::GetLogicSize(Size& rLogicSize) rLogicSize.setHeight(nLogHeight100); } -ReadState GIFReader::ReadGIF( Graphic& rGraphic ) +ReadState GIFReader::ReadGIF(Graphic& rGraphic) { - ReadState eReadState; - bStatus = true; - while( ProcessGIF() && ( eActAction != END_READING ) ) {} + while (ProcessGIF() && eActAction != END_READING) + {} - if( !bStatus ) + ReadState eReadState = GIFREAD_ERROR; + + if (!bStatus) eReadState = GIFREAD_ERROR; - else if( eActAction == END_READING ) + else if (eActAction == END_READING) eReadState = GIFREAD_OK; - else - { - if ( rIStm.GetError() == ERRCODE_IO_PENDING ) - rIStm.ResetError(); - eReadState = GIFREAD_NEED_MORE; - } - - if( aAnimation.Count() == 1 ) + if (aAnimation.Count() == 1) { rGraphic = aAnimation.Get(0).maBitmapEx; @@ -980,50 +937,35 @@ ReadState GIFReader::ReadGIF( Graphic& rGraphic ) return eReadState; } -bool IsGIFAnimated(SvStream & rStm, Size& rLogicSize) +bool IsGIFAnimated(SvStream& rStream, Size& rLogicSize) { - GIFReader aReader(rStm); + GIFReader aReader(rStream); - SvStreamEndian nOldFormat = rStm.GetEndian(); - rStm.SetEndian(SvStreamEndian::LITTLE); + SvStreamEndian nOldFormat = rStream.GetEndian(); + rStream.SetEndian(SvStreamEndian::LITTLE); bool bResult = aReader.ReadIsAnimated(); aReader.GetLogicSize(rLogicSize); - rStm.SetEndian(nOldFormat); + rStream.SetEndian(nOldFormat); return bResult; } -VCL_DLLPUBLIC bool ImportGIF( SvStream & rStm, Graphic& rGraphic ) +VCL_DLLPUBLIC bool ImportGIF(SvStream & rStream, Graphic& rGraphic) { - std::shared_ptr pContext = rGraphic.GetReaderContext(); - rGraphic.SetReaderContext(nullptr); - GIFReader* pGIFReader = dynamic_cast( pContext.get() ); - if (!pGIFReader) - { - pContext = std::make_shared( rStm ); - pGIFReader = static_cast( pContext.get() ); - } + bool bReturn = false; + GIFReader aGIFReader(rStream); - SvStreamEndian nOldFormat = rStm.GetEndian(); - rStm.SetEndian( SvStreamEndian::LITTLE ); + SvStreamEndian nOldFormat = rStream.GetEndian(); + rStream.SetEndian(SvStreamEndian::LITTLE); - bool bRet = true; + ReadState eReadState = aGIFReader.ReadGIF(rGraphic); - ReadState eReadState = pGIFReader->ReadGIF(rGraphic); + if (eReadState == GIFREAD_OK) + bReturn = true; - if (eReadState == GIFREAD_ERROR) - { - bRet = false; - } - else if (eReadState == GIFREAD_NEED_MORE) - { - rGraphic = pGIFReader->GetIntermediateGraphic(); - rGraphic.SetReaderContext(pContext); - } + rStream.SetEndian(nOldFormat); - rStm.SetEndian(nOldFormat); - - return bRet; + return bReturn; } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ From 9c1a48f844eaefc505a5914338b6f444011bf315 Mon Sep 17 00:00:00 2001 From: Justin Luth Date: Mon, 24 Jun 2024 16:50:48 -0400 Subject: [PATCH 050/194] NFC edundo.cxx: remove unused bRet Orphaned with commit 20e5f64215853bdd32c5f16394ba7f2f36745904 Author: Noel Grandin on Fri Jan 19 14:40:12 2018 +0200 loplugin:unused-returns in sw Reviewed-on: https://gerrit.libreoffice.org/48189 Interestingly, Noel removed bRet from ::Repeat(), but not from these identical situations. Change-Id: I3544bac6b5c087bb10c8f94005d3bc89bd2727d6 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169526 Tested-by: Jenkins Reviewed-by: Justin Luth --- sw/source/core/edit/edundo.cxx | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/sw/source/core/edit/edundo.cxx b/sw/source/core/edit/edundo.cxx index 1e7f93dfc141..9fa5342f08d7 100644 --- a/sw/source/core/edit/edundo.cxx +++ b/sw/source/core/edit/edundo.cxx @@ -110,7 +110,6 @@ void SwEditShell::Undo(sal_uInt16 const nCount, sal_uInt16 nOffset) // current undo state was not saved ::sw::UndoGuard const undoGuard(GetDoc()->GetIDocumentUndoRedo()); - bool bRet = false; StartAllAction(); { @@ -138,7 +137,7 @@ void SwEditShell::Undo(sal_uInt16 const nCount, sal_uInt16 nOffset) try { for (sal_uInt16 i = 0; i < nCount; ++i) { - bRet = GetDoc()->GetIDocumentUndoRedo().UndoWithOffset(nOffset) || bRet; + GetDoc()->GetIDocumentUndoRedo().UndoWithOffset(nOffset); } } catch (const css::uno::Exception &) { TOOLS_WARN_EXCEPTION("sw.core", "SwEditShell::Undo()"); @@ -165,8 +164,6 @@ void SwEditShell::Redo(sal_uInt16 const nCount) CurrShell aCurr( this ); - bool bRet = false; - // undo state was not saved ::sw::UndoGuard const undoGuard(GetDoc()->GetIDocumentUndoRedo()); @@ -192,8 +189,7 @@ void SwEditShell::Redo(sal_uInt16 const nCount) try { for (sal_uInt16 i = 0; i < nCount; ++i) { - bRet = GetDoc()->GetIDocumentUndoRedo().Redo() - || bRet; + GetDoc()->GetIDocumentUndoRedo().Redo(); } } catch (const css::uno::Exception &) { TOOLS_WARN_EXCEPTION("sw.core", "SwEditShell::Redo()"); From baf3d52f7d9fd72345ce7c0b7aaaa8ecf9c7120c Mon Sep 17 00:00:00 2001 From: Bogdan Buzea Date: Sun, 23 Jun 2024 16:35:44 +0200 Subject: [PATCH 051/194] Resave with newer Glade version Change-Id: Id58e4f779ed2ee3559cba744056e2e0be8cedd91 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169388 Reviewed-by: Taichi Haradaguchi <20001722@ymail.ne.jp> Tested-by: Jenkins --- sfx2/uiconfig/ui/notebookbar.ui | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/sfx2/uiconfig/ui/notebookbar.ui b/sfx2/uiconfig/ui/notebookbar.ui index cc8656720b06..8809cf58ed89 100644 --- a/sfx2/uiconfig/ui/notebookbar.ui +++ b/sfx2/uiconfig/ui/notebookbar.ui @@ -1,16 +1,16 @@ - + True - False + False True - False + False vertical @@ -87,8 +87,8 @@ - 0 - 0 + 0 + 0 From 8edd336e92f1599032aa49ad6aeba098ab84a587 Mon Sep 17 00:00:00 2001 From: Bogdan Buzea Date: Sun, 23 Jun 2024 16:17:04 +0200 Subject: [PATCH 052/194] Resave with newer Glade version Change-Id: I143d715d8b5b8630f5153af525b83521555cabb8 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169378 Reviewed-by: Taichi Haradaguchi <20001722@ymail.ne.jp> Tested-by: Jenkins --- dbaccess/uiconfig/ui/autocharsetpage.ui | 28 ++++++++++++------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/dbaccess/uiconfig/ui/autocharsetpage.ui b/dbaccess/uiconfig/ui/autocharsetpage.ui index 85a00baff32b..c52a83366590 100644 --- a/dbaccess/uiconfig/ui/autocharsetpage.ui +++ b/dbaccess/uiconfig/ui/autocharsetpage.ui @@ -1,37 +1,37 @@ - + True - False + False True True - 6 + 6 vertical 12 True - False + False True - 0 - none + 0 + none True - False - True - 12 + False 12 6 + True + 12 True - False + False _Character set: - True - charset + True + charset False @@ -42,7 +42,7 @@ True - True + True True @@ -56,7 +56,7 @@ True - False + False Data Conversion From 656e0de5a0313d4e2ab90508fd7c00f31d005212 Mon Sep 17 00:00:00 2001 From: Bogdan Buzea Date: Sun, 23 Jun 2024 17:39:04 +0200 Subject: [PATCH 053/194] Resave with newer Glade version Change-Id: If14a6b528b1dc75ccb2ee6db81088426128c3d87 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169395 Tested-by: Jenkins Reviewed-by: Taichi Haradaguchi <20001722@ymail.ne.jp> --- sw/uiconfig/swriter/ui/addentrydialog.ui | 53 +++++++++++------------- 1 file changed, 25 insertions(+), 28 deletions(-) diff --git a/sw/uiconfig/swriter/ui/addentrydialog.ui b/sw/uiconfig/swriter/ui/addentrydialog.ui index 28d99dc2adb1..0e7b7b46e4ca 100644 --- a/sw/uiconfig/swriter/ui/addentrydialog.ui +++ b/sw/uiconfig/swriter/ui/addentrydialog.ui @@ -1,35 +1,32 @@ - + - False - 6 + False + 6 Add Element True - 0 - 0 - dialog - - - + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _OK True - True - True - True - True + True + True + True + True True @@ -42,8 +39,8 @@ _Cancel True - True - True + True + True True @@ -56,8 +53,8 @@ _Help True - True - True + True + True True @@ -70,33 +67,33 @@ False True - end + end 0 True - False + False True True - 0 - none + 0 + none True - True + True start - True 12 - True 6 + True + True True - False + False Element Name From 2a553c08102d7f0eba665b6686124898ac72135d Mon Sep 17 00:00:00 2001 From: Bogdan Buzea Date: Sun, 23 Jun 2024 16:57:45 +0200 Subject: [PATCH 054/194] Resave with newer Glade version Change-Id: I8c955f20b4976178ac25d7590ff6cc0f37a10f99 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169393 Tested-by: Jenkins Reviewed-by: Taichi Haradaguchi <20001722@ymail.ne.jp> --- svx/uiconfig/ui/savemodifieddialog.ui | 38 +++++++++++++-------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/svx/uiconfig/ui/savemodifieddialog.ui b/svx/uiconfig/ui/savemodifieddialog.ui index 51877e552163..c9038761ef57 100644 --- a/svx/uiconfig/ui/savemodifieddialog.ui +++ b/svx/uiconfig/ui/savemodifieddialog.ui @@ -1,31 +1,31 @@ - + - False + False False True - dialog - True - question + dialog + True + question Do you want to save your changes? - The content of the current form has been modified. + The content of the current form has been modified. - False + False vertical 12 - False + False _No True - True - True - True + True + True + True False @@ -37,11 +37,11 @@ _Yes True - True - True - True - True - True + True + True + True + True + True False @@ -53,8 +53,8 @@ _Cancel True - True - True + True + True True @@ -67,7 +67,7 @@ False True - end + end 0 From 6ee000dad6ee476b12dc9745f10b11c05b417967 Mon Sep 17 00:00:00 2001 From: Bogdan Buzea Date: Sun, 23 Jun 2024 17:40:44 +0200 Subject: [PATCH 055/194] Resave with newer Glade version Change-Id: I011102a87a3d8abce96a64d4be822377018f5df7 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169396 Tested-by: Jenkins Reviewed-by: Taichi Haradaguchi <20001722@ymail.ne.jp> --- svx/uiconfig/ui/addinstancedialog.ui | 117 +++++++++++++-------------- 1 file changed, 57 insertions(+), 60 deletions(-) diff --git a/svx/uiconfig/ui/addinstancedialog.ui b/svx/uiconfig/ui/addinstancedialog.ui index ebde1185103f..c76f217bba08 100644 --- a/svx/uiconfig/ui/addinstancedialog.ui +++ b/svx/uiconfig/ui/addinstancedialog.ui @@ -1,35 +1,32 @@ - + - False - 6 + False + 6 Add Instance True - 0 - 0 - dialog - - - + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _OK True - True - True - True - True + True + True + True + True True @@ -42,8 +39,8 @@ _Cancel True - True - True + True + True True @@ -56,8 +53,8 @@ _Help True - True - True + True + True True @@ -71,115 +68,115 @@ False True - end + end 0 - + True - False + False True - 6 - 12 + 6 + 12 True - True - True + True + True + 46 True - 46 - 1 - 0 + 1 + 0 2 True - False + False _Name: - True - name + True + name 1 - 0 - 0 + 0 + 0 - False - True + False + True Edit Instance - 0 - 3 + 0 + 3 3 True - False + False _URL: - True - url + True + url 1 - 0 - 1 + 0 + 1 True - False + False True - True + True + True True - True - 1 - 1 + 1 + 1 _Browse... True - True - True - True + True + True + True - 2 - 1 + 2 + 1 _Link instance True - True - False - True - True + True + False + True + True - 0 - 2 + 0 + 2 3 From 2d5eafef0824ece762c460022f4a9dd7dccc3afb Mon Sep 17 00:00:00 2001 From: Bogdan Buzea Date: Sun, 23 Jun 2024 16:59:34 +0200 Subject: [PATCH 056/194] Resave with newer Glade version Change-Id: I79863a21c54986c24ba437f4ce3c0d9ce7f8708c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169394 Tested-by: Jenkins Reviewed-by: Taichi Haradaguchi <20001722@ymail.ne.jp> --- dbaccess/uiconfig/ui/savemodifieddialog.ui | 34 +++++++++++----------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/dbaccess/uiconfig/ui/savemodifieddialog.ui b/dbaccess/uiconfig/ui/savemodifieddialog.ui index b90b4dd9a2d9..6152b8eb6f47 100644 --- a/dbaccess/uiconfig/ui/savemodifieddialog.ui +++ b/dbaccess/uiconfig/ui/savemodifieddialog.ui @@ -1,30 +1,30 @@ - + - False + False False True - dialog - True - question + dialog + True + question Do you want to save the changes? - The current record has been changed. + The current record has been changed. - False + False vertical 12 - False + False _No True - True - True + True + True True @@ -37,10 +37,10 @@ _Yes True - True - True - True - True + True + True + True + True True @@ -53,8 +53,8 @@ _Cancel True - True - True + True + True True @@ -67,7 +67,7 @@ False True - end + end 0 From 31267f0b04729a41619850f8eceb7232be8a4c7b Mon Sep 17 00:00:00 2001 From: Bogdan Buzea Date: Sun, 23 Jun 2024 17:43:38 +0200 Subject: [PATCH 057/194] Resave with newer Glade version Change-Id: I39d580296f845460b7bef6f66fa97b99b36787a3 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169398 Tested-by: Jenkins Reviewed-by: Taichi Haradaguchi <20001722@ymail.ne.jp> --- sw/uiconfig/swriter/ui/addressfragment.ui | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/sw/uiconfig/swriter/ui/addressfragment.ui b/sw/uiconfig/swriter/ui/addressfragment.ui index 48496cc02625..ae7d1013b9a3 100644 --- a/sw/uiconfig/swriter/ui/addressfragment.ui +++ b/sw/uiconfig/swriter/ui/addressfragment.ui @@ -1,22 +1,22 @@ - + True - True + True True False - True + True + 14 True - 14 True - False + False end - True - entry + True + entry 0 From 00ba5eba45c8334170668621852c0b2b10b7661e Mon Sep 17 00:00:00 2001 From: Bogdan Buzea Date: Sun, 23 Jun 2024 19:34:44 +0200 Subject: [PATCH 058/194] Resave with newer Glade version Change-Id: I2294ec1df9924d1406b2a9e5b1833dfb8471b154 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169415 Tested-by: Jenkins Reviewed-by: Taichi Haradaguchi <20001722@ymail.ne.jp> --- sw/uiconfig/swriter/ui/warnemaildialog.ui | 39 +++++++++++------------ 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/sw/uiconfig/swriter/ui/warnemaildialog.ui b/sw/uiconfig/swriter/ui/warnemaildialog.ui index e8a0c149b895..fe1dd4c0ac8f 100644 --- a/sw/uiconfig/swriter/ui/warnemaildialog.ui +++ b/sw/uiconfig/swriter/ui/warnemaildialog.ui @@ -1,33 +1,33 @@ - + - False + False Emails could not be sent False True - 0 - 0 - dialog - True - warning + 0 + 0 + dialog + True + warning ok Emails could not be sent - The following error occurred: + The following error occurred: - False + False vertical 12 - False + False False True - end + end 0 @@ -35,28 +35,28 @@ True - False + False True True True - True + True True True - in + in True - True + True False - False + False - 0 - 0 + 0 + 0 @@ -68,8 +68,5 @@ - - - From 2f3f1170a7ae8bb06c6cd66a8ba3eb85cc63c2ac Mon Sep 17 00:00:00 2001 From: Bogdan Buzea Date: Sun, 23 Jun 2024 19:37:03 +0200 Subject: [PATCH 059/194] Resave with newer Glade version Change-Id: I8acca3d2c035fea8caf41b5d5072f5b27604568a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169417 Reviewed-by: Taichi Haradaguchi <20001722@ymail.ne.jp> Tested-by: Jenkins --- vcl/uiconfig/ui/wizard.ui | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/vcl/uiconfig/ui/wizard.ui b/vcl/uiconfig/ui/wizard.ui index e1f68da9e66a..6a3b45f41cc4 100644 --- a/vcl/uiconfig/ui/wizard.ui +++ b/vcl/uiconfig/ui/wizard.ui @@ -1,17 +1,24 @@ - + - True - 6 + True + 6 True - 0 - 0 - dialog - 0 + 0 + 0 + dialog + + + False + + + False + + From 72aa32b3c5ed7bc739d7567bf607d767f195b651 Mon Sep 17 00:00:00 2001 From: Taichi Haradaguchi <20001722@ymail.ne.jp> Date: Mon, 24 Jun 2024 01:54:01 +0200 Subject: [PATCH 060/194] licence: add zxing-cpp Change-Id: Ia347ea638cb1ccdc4f0a351509f010c3444a4c62 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169432 Tested-by: Jenkins Reviewed-by: Taichi Haradaguchi <20001722@ymail.ne.jp> --- readlicense_oo/license/license.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/readlicense_oo/license/license.xml b/readlicense_oo/license/license.xml index 89ebe058b3d1..61e2df247c2f 100644 --- a/readlicense_oo/license/license.xml +++ b/readlicense_oo/license/license.xml @@ -2232,6 +2232,12 @@ CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+
+

ZXing-C++

+

The following software may be included in this product: ZXing-C++. Use of any of this software is governed + by the terms of the license below:

+

Jump to Apache License Version 2.0

+

zlib

The following software may be included in this product: zlib. Use of any of this software is governed by the From 085510962a4455f07d7be713adbb6084302c121e Mon Sep 17 00:00:00 2001 From: Michael Weghorn Date: Mon, 24 Jun 2024 10:12:57 +0200 Subject: [PATCH 061/194] gtk4 a11y: Handle when there's no a11y context Handle the case where `XAccessible::getAccessibleContext` returns an empty reference, as e.g. `VCLXWindow::getAccessibleContext` does when already disposed. Fixes an assert/crash seen with the gtk4 VCL plugin when experimenting with missing menu item handling in Writer's "Tools" -> "Bibliography Database", expanding the search filter menu, then closing the dialog and LO altogether. Backtrace: Thread 1 received signal SIGABRT, Aborted. __pthread_kill_implementation (threadid=, signo=signo@entry=6, no_tid=no_tid@entry=0) at ./nptl/pthread_kill.c:44 44 ./nptl/pthread_kill.c: No such file or directory. (rr) bt #0 __pthread_kill_implementation (threadid=, signo=signo@entry=6, no_tid=no_tid@entry=0) at ./nptl/pthread_kill.c:44 #1 0x00007fe8f96a6b6f in __pthread_kill_internal (signo=6, threadid=) at ./nptl/pthread_kill.c:78 #2 0x00007fe8f96584e2 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26 #3 0x00007fe8f96414ed in __GI_abort () at ./stdlib/abort.c:79 #4 0x00007fe8f9641415 in __assert_fail_base (fmt=0x7fe8f97b7ba8 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", assertion=assertion@entry=0x7fe8e5f1ba3a "_pInterface != NULL", file=file@entry=0x7fe8e5f46536 ".../libreoffice/include/com/sun/star/uno/Reference.h", line=line@entry=387, function=function@entry=0x7fe8e5f41e71 "interface_type *com::sun::star::uno::Reference::operator->() const [interface_type = com::sun::star::accessibility::XAccessibleContext]") at ./assert/assert.c:92 #5 0x00007fe8f9651002 in __assert_fail (assertion=0x7fe8e5f1ba3a "_pInterface != NULL", file=0x7fe8e5f46536 ".../libreoffice/include/com/sun/star/uno/Reference.h", line=387, function=0x7fe8e5f41e71 "interface_type *com::sun::star::uno::Reference::operator->() const [interface_type = com::sun::star::accessibility::XAccessibleContext]") at ./assert/assert.c:101 #6 0x00007fe8e6034e42 in com::sun::star::uno::Reference::operator->() const (this=0x7ffe3fddc640) at include/com/sun/star/uno/Reference.h:387 #7 0x00007fe8e6038c14 in map_accessible_role(com::sun::star::uno::Reference const&) (rAccessible=uno::Reference to (VCLXWindow *) 0x5603d155bba8) at .../libreoffice/vcl/unx/gtk4/a11y.cxx:56 #8 0x00007fe8e6038a16 in lo_accessible_get_property(_GObject*, unsigned int, _GValue*, _GParamSpec*) (object=0x5603e5e9fde0, property_id=2, value=0x7ffe3fddca00, pspec=0x5603bfdc1820) at .../libreoffice/vcl/unx/gtk4/a11y.cxx:559 #9 0x00007fe8f47be345 in g_object_get_valist () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0 #10 0x00007fe8f47be8b7 in g_object_get () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0 #11 0x00007fe8e54d81f8 in gtk_accessible_get_accessible_role (self=self@entry=0x5603e5e9fde0) at ../gtk/gtkaccessible.c:296 #12 0x00007fe8e54d9447 in gtk_accessible_should_present (self=self@entry=0x5603e5e9fde0) at ../gtk/gtkaccessible.c:1304 #13 0x00007fe8e575dab8 in get_index_in (parent=parent@entry=0x5603e4203030, child=child@entry=0x5603e5ea13a0) at ../gtk/a11y/gtkatspicontext.c:398 #14 0x00007fe8e5760213 in gtk_at_spi_context_child_change (ctx=0x5603e41f8670, change=GTK_ACCESSIBLE_CHILD_CHANGE_REMOVED, child=0x5603e5ea13a0) at ../gtk/a11y/gtkatspicontext.c:1260 #15 0x00007fe8e575ed8f in gtk_at_spi_context_state_change (ctx=0x5603e5ea15a0, changed_states=GTK_ACCESSIBLE_STATE_CHANGE_HIDDEN, changed_properties=0, changed_relations=, states=0x5603e5ea1770, properties=0x5603e5ea16b0, relations=0x5603e5ea1710) at ../gtk/a11y/gtkatspicontext.c:979 #16 0x00007fe8e54e2bdf in gtk_at_context_update (self=0x5603e5ea15a0) at ../gtk/gtkatcontext.c:831 #17 0x00007fe8e54d839a in gtk_accessible_update_state (self=self@entry=0x5603e5ea13a0, first_state=first_state@entry=GTK_ACCESSIBLE_STATE_HIDDEN) at ../gtk/gtkaccessible.c:364 #18 0x00007fe8e5684d4b in gtk_widget_unmap (widget=0x5603e5ea13a0) at ../gtk/gtkwidget.c:2895 #19 gtk_widget_unmap (widget=0x5603e5ea13a0) at ../gtk/gtkwidget.c:2879 #20 0x00007fe8e5684e25 in gtk_widget_real_hide (widget=0x5603e5ea13a0) at ../gtk/gtkwidget.c:2811 #21 0x00007fe8f47b4939 in () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0 #22 0x00007fe8f47ca33f in () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0 #23 0x00007fe8f47cff06 in g_signal_emit_valist () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0 #24 0x00007fe8f47cffc3 in g_signal_emit () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0 #25 0x00007fe8e56872cd in gtk_widget_hide (widget=0x5603e5ea13a0) at ../gtk/gtkwidget.c:2787 #26 0x00007fe8e61de10e in GtkSalObjectWidgetClip::Show(bool) (this=0x5603dafec8f0, bVisible=false) at vcl/unx/gtk4/../gtk3/gtkobject.cxx:534 #27 0x00007fe8efc96b3d in vcl::Window::ImplSysObjClip(vcl::Region const*) (this=0x5603e5ebb940, pOldRegion=0x0) at .../libreoffice/vcl/source/window/clipping.cxx:352 #28 0x00007fe8efc96fa0 in vcl::Window::ImplSetClipFlagChildren(bool) (this=0x5603e5ebb940, bSysObjOnlySmaller=false) at .../libreoffice/vcl/source/window/clipping.cxx:424 #29 0x00007fe8efc97227 in vcl::Window::ImplSetClipFlag(bool) (this=0x5603e5ebb940, bSysObjOnlySmaller=false) at .../libreoffice/vcl/source/window/clipping.cxx:466 #30 0x00007fe8eff2307b in vcl::Window::Show(bool, ShowFlags) (this=0x5603e5ebb940, bVisible=false, nFlags=ShowFlags::NONE) at .../libreoffice/vcl/source/window/window.cxx:2238 #31 0x00007fe8efc6a189 in vcl::Window::Hide() (this=0x5603e5ebb940) at include/vcl/window.hxx:881 #32 0x00007fe8efeac189 in SystemChildWindow::dispose() (this=0x5603e5ebb940) at .../libreoffice/vcl/source/window/syschild.cxx:121 #33 0x00007fe8f01cd7ca in VclReferenceBase::disposeOnce() (this=0x5603e5ebb950) at .../libreoffice/vcl/source/outdev/vclreferencebase.cxx:38 #34 0x00007fe8e61ad349 in VclPtr::disposeAndClear() (this=0x5603e5ea49f0) at include/vcl/vclptr.hxx:207 #35 0x00007fe8e60a30ca in (anonymous namespace)::GtkInstanceBuilder::~GtkInstanceBuilder() (this=0x5603e5ea4900) at vcl/unx/gtk4/../gtk3/gtkinst.cxx:24349 #36 0x00007fe8e60a3169 in (anonymous namespace)::GtkInstanceBuilder::~GtkInstanceBuilder() (this=0x5603e5ea4900) at vcl/unx/gtk4/../gtk3/gtkinst.cxx:24342 #37 0x00007fe8efe748cf in std::default_delete::operator()(weld::Builder*) const (this=0x5603e41d6730, __ptr=0x5603e5ea4900) at /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/unique_ptr.h:99 #38 0x00007fe8efe747fc in std::__uniq_ptr_impl >::reset(weld::Builder*) (this=0x5603e41d6730, __p=0x0) at /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/unique_ptr.h:211 #39 0x00007fe8efff1ffd in std::unique_ptr >::reset(weld::Builder*) (this=0x5603e41d6730, __p=0x0) at /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/unique_ptr.h:509 #40 0x00007fe8efff16b3 in InterimItemWindow::dispose() (this=0x5603e41d6660) at .../libreoffice/vcl/source/control/InterimItemWindow.cxx:49 #41 0x00007fe8a6f57e51 in EditControl::dispose() (this=0x5603e41d6660) at .../libreoffice/extensions/source/bibliography/toolbar.cxx:209 #42 0x00007fe8f01cd7ca in VclReferenceBase::disposeOnce() (this=0x5603e41d67b8) at .../libreoffice/vcl/source/outdev/vclreferencebase.cxx:38 #43 0x00007fe8a6f5d5f6 in VclPtr::disposeAndClear() (this=0x5603e5e8e9f0) at include/vcl/vclptr.hxx:207 #44 0x00007fe8a6f5a13c in BibToolBar::dispose() (this=0x5603e5e8e580) at .../libreoffice/extensions/source/bibliography/toolbar.cxx:272 #45 0x00007fe8f01cd7ca in VclReferenceBase::disposeOnce() (this=0x5603e5e8ea68) at .../libreoffice/vcl/source/outdev/vclreferencebase.cxx:38 #46 0x00007fe8a6edbf09 in VclPtr::disposeAndClear() (this=0x5603e06c1578) at include/vcl/vclptr.hxx:207 #47 0x00007fe8a6edab2e in bib::BibBeamer::dispose() (this=0x5603e06c1340) at .../libreoffice/extensions/source/bibliography/bibbeam.cxx:205 #48 0x00007fe8f01cd7ca in VclReferenceBase::disposeOnce() (this=0x5603e06c1588) at .../libreoffice/vcl/source/outdev/vclreferencebase.cxx:38 #49 0x00007fe8a6ef2b49 in VclPtr::disposeAndClear() (this=0x7ffe3fdddcb0) at include/vcl/vclptr.hxx:207 #50 0x00007fe8a6ef173a in BibWindowContainer::dispose() (this=0x5603e70e5ed0) at .../libreoffice/extensions/source/bibliography/bibcont.cxx:81 #51 0x00007fe8f01cd7ca in VclReferenceBase::disposeOnce() (this=0x5603e70e5ef8) at .../libreoffice/vcl/source/outdev/vclreferencebase.cxx:38 #52 0x00007fe8a6ef2b49 in VclPtr::disposeAndClear() (this=0x7ffe3fdddd90) at include/vcl/vclptr.hxx:207 #53 0x00007fe8a6ef2043 in BibBookContainer::dispose() (this=0x5603de460610) at .../libreoffice/extensions/source/bibliography/bibcont.cxx:126 #54 0x00007fe8f01cd7ca in VclReferenceBase::disposeOnce() (this=0x5603de460878) at .../libreoffice/vcl/source/outdev/vclreferencebase.cxx:38 #55 0x00007fe8f1d624a9 in VclPtr::disposeAndClear() (this=0x7ffe3fddded8) at include/vcl/vclptr.hxx:207 #56 0x00007fe8f1d52fe4 in VCLXWindow::dispose() (this=0x5603d155bb40) at .../libreoffice/toolkit/source/awt/vclxwindow.cxx:926 #57 0x00007fe8f6c28644 in (anonymous namespace)::XFrameImpl::setComponent(com::sun::star::uno::Reference const&, com::sun::star::uno::Reference const&) (this=0x5603e4174370, xComponentWindow=empty uno::Reference, xController=empty uno::Reference) at .../libreoffice/framework/source/services/frame.cxx:1525 #58 0x00007fe8f6c2abc8 in (anonymous namespace)::XFrameImpl::close(unsigned char) (this=0x5603e4174370, bDeliverOwnership=0 '\000') at .../libreoffice/framework/source/services/frame.cxx:1707 #59 0x00007fe8f6a3a23a in framework::pattern::frame::closeIt(com::sun::star::uno::Reference const&) (xResource=uno::Reference to ((anonymous namespace)::XFrameImpl *) 0x5603e41743e0) at framework/source/inc/pattern/frame.hxx:57 #60 0x00007fe8f6a38445 in framework::CloseDispatcher::implts_closeFrame() (this=0x5603e93410a0) at .../libreoffice/framework/source/dispatch/closedispatcher.cxx:500 #61 0x00007fe8f6a37ab1 in framework::CloseDispatcher::impl_asyncCallback(LinkParamNone*) (this=0x5603e93410a0) at .../libreoffice/framework/source/dispatch/closedispatcher.cxx:379 #62 0x00007fe8f6a35fed in framework::CloseDispatcher::LinkStubimpl_asyncCallback(void*, LinkParamNone*) (instance=0x5603e93410a0, data=0x0) at .../libreoffice/framework/source/dispatch/closedispatcher.cxx:246 #63 0x00007fe8efc40828 in Link::Call(LinkParamNone*) const (this=0x5603eb162878, data=0x0) at include/tools/link.hxx:111 #64 0x00007fe8f06cff25 in vcl::EventPoster::DoEvent_Impl(void*) (this=0x5603eb162870) at .../libreoffice/vcl/source/helper/evntpost.cxx:52 #65 0x00007fe8f06cfedd in vcl::EventPoster::LinkStubDoEvent_Impl(void*, void*) (instance=0x5603eb162870, data=0x0) at .../libreoffice/vcl/source/helper/evntpost.cxx:48 #66 0x00007fe8eff4ca78 in Link::Call(void*) const (this=0x5603dfaf31a8, data=0x0) at include/tools/link.hxx:111 #67 0x00007fe8eff48759 in ImplHandleUserEvent(ImplSVEvent*) (pSVEvent=0x5603dfaf31a0) at .../libreoffice/vcl/source/window/winproc.cxx:2287 #68 0x00007fe8eff45110 in ImplWindowFrameProc(vcl::Window*, SalEvent, void const*) (_pWindow=0x5603c9d5cf10, nEvent=SalEvent::UserEvent, pEvent=0x5603dfaf31a0) at .../libreoffice/vcl/source/window/winproc.cxx:2851 #69 0x00007fe8f0bd5ba0 in SalFrame::CallCallback(SalEvent, void const*) const (this=0x5603cb949f00, nEvent=SalEvent::UserEvent, pEvent=0x5603dfaf31a0) at vcl/inc/salframe.hxx:312 #70 0x00007fe8f0c0072f in SalGenericDisplay::ProcessEvent(SalUserEventList::SalUserEvent) (this=0x5603bec36aa0, aEvent=...) at .../libreoffice/vcl/unx/generic/app/gendisp.cxx:66 #71 0x00007fe8f06e433d in SalUserEventList::DispatchUserEvents(bool)::$_0::operator()() const (this=0x7ffe3fddefd0) at .../libreoffice/vcl/source/app/salusereventlist.cxx:119 #72 0x00007fe8f06e41e4 in SalUserEventList::DispatchUserEvents(bool) (this=0x5603bec36aa0, bHandleAllCurrentEvents=false) at .../libreoffice/vcl/source/app/salusereventlist.cxx:120 #73 0x00007fe8f0c00685 in SalGenericDisplay::DispatchInternalEvent(bool) (this=0x5603bec36aa0, bHandleAllCurrentEvent=false) at .../libreoffice/vcl/unx/generic/app/gendisp.cxx:51 #74 0x00007fe8e607b706 in call_userEventFn(void*) (data=0x5603beaa55d0) at vcl/unx/gtk4/../gtk3/gtkdata.cxx:824 #75 0x00007fe8ead1ce3f in () at /lib/x86_64-linux-gnu/libglib-2.0.so.0 #76 0x00007fe8ead1eec7 in () at /lib/x86_64-linux-gnu/libglib-2.0.so.0 #77 0x00007fe8ead1f4e0 in g_main_context_iteration () at /lib/x86_64-linux-gnu/libglib-2.0.so.0 #78 0x00007fe8e607a2bf in GtkSalData::Yield(bool, bool) (this=0x5603beaa55d0, bWait=true, bHandleAllCurrentEvents=false) at vcl/unx/gtk4/../gtk3/gtkdata.cxx:405 #79 0x00007fe8e6080123 in GtkInstance::DoYield(bool, bool) (this=0x5603beaa5480, bWait=true, bHandleAllCurrentEvents=false) at vcl/unx/gtk4/../gtk3/gtkinst.cxx:429 #80 0x00007fe8f07c4d5c in ImplYield(bool, bool) (i_bWait=true, i_bAllEvents=false) at .../libreoffice/vcl/source/app/svapp.cxx:384 #81 0x00007fe8f07c466b in Application::Yield() () at .../libreoffice/vcl/source/app/svapp.cxx:472 #82 0x00007fe8f07c4402 in Application::Execute() () at .../libreoffice/vcl/source/app/svapp.cxx:359 #83 0x00007fe8f9926be0 in desktop::Desktop::Main() (this=0x7ffe3fde1018) at .../libreoffice/desktop/source/app/app.cxx:1652 #84 0x00007fe8f07e796e in ImplSVMain() () at .../libreoffice/vcl/source/app/svmain.cxx:229 #85 0x00007fe8f07e9999 in SVMain() () at .../libreoffice/vcl/source/app/svmain.cxx:261 #86 0x00007fe8f99a9b2c in soffice_main() () at .../libreoffice/desktop/source/app/sofficemain.cxx:99 #87 0x00005603bca36a5d in sal_main () at .../libreoffice/desktop/source/app/main.c:51 #88 0x00005603bca36a37 in main (argc=2, argv=0x7ffe3fde1228) at .../libreoffice/desktop/source/app/main.c:49 Change-Id: Ia3f19d700de66c72f2896595a0e387bd3c42d7ac Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169451 Reviewed-by: Michael Weghorn Tested-by: Jenkins --- vcl/unx/gtk4/a11y.cxx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/vcl/unx/gtk4/a11y.cxx b/vcl/unx/gtk4/a11y.cxx index 4860c7cff33d..1beba84ed67a 100644 --- a/vcl/unx/gtk4/a11y.cxx +++ b/vcl/unx/gtk4/a11y.cxx @@ -50,6 +50,10 @@ map_accessible_role(const css::uno::Reference& { css::uno::Reference xContext( rAccessible->getAccessibleContext()); + + if (!xContext.is()) + return GTK_ACCESSIBLE_ROLE_NONE; + // https://w3c.github.io/core-aam/#mapping_role // https://hg.mozilla.org/mozilla-central/file/tip/accessible/base/RoleMap.h // https://gitlab.gnome.org/GNOME/gtk/-/blob/main/gtk/a11y/gtkatspiutils.c From 32b295b7392c4a14def87e4fa0b9fa74f9441ffd Mon Sep 17 00:00:00 2001 From: Noel Grandin Date: Tue, 25 Jun 2024 14:22:25 +0200 Subject: [PATCH 062/194] speed up DefaultItemInstanceManager we can store the registered items in a map indexed by which-id, and avoid most of the search cost Change-Id: Ib3fbed436bc034e603819cfef8223dcc77eb7f06 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169528 Tested-by: Jenkins Reviewed-by: Noel Grandin --- include/svl/poolitem.hxx | 3 ++- svl/source/items/poolitem.cxx | 17 +++++++++++++---- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/include/svl/poolitem.hxx b/include/svl/poolitem.hxx index 4f71bc871a58..bdfb814e3c0a 100644 --- a/include/svl/poolitem.hxx +++ b/include/svl/poolitem.hxx @@ -33,6 +33,7 @@ #include #include #include +#include class IntlWrapper; @@ -638,7 +639,7 @@ private: // that specific Item (see other derivations) class SVL_DLLPUBLIC DefaultItemInstanceManager : public ItemInstanceManager { - std::unordered_set maRegistered; + std::unordered_map> maRegistered; public: DefaultItemInstanceManager(const std::size_t aClassHash) diff --git a/svl/source/items/poolitem.cxx b/svl/source/items/poolitem.cxx index 491c30a7f50a..a9db94057d8a 100644 --- a/svl/source/items/poolitem.cxx +++ b/svl/source/items/poolitem.cxx @@ -503,16 +503,25 @@ void listAllocatedSfxPoolItems() const SfxPoolItem* DefaultItemInstanceManager::find(const SfxPoolItem& rItem) const { - for (const auto& rCandidate : maRegistered) - if (rCandidate->Which() == rItem.Which() && *rCandidate == rItem) + auto it = maRegistered.find(rItem.Which()); + if (it == maRegistered.end()) + return nullptr; + for (const auto& rCandidate : it->second) + if (*rCandidate == rItem) return rCandidate; return nullptr; } -void DefaultItemInstanceManager::add(const SfxPoolItem& rItem) { maRegistered.insert(&rItem); } +void DefaultItemInstanceManager::add(const SfxPoolItem& rItem) +{ + maRegistered[rItem.Which()].insert(&rItem); +} -void DefaultItemInstanceManager::remove(const SfxPoolItem& rItem) { maRegistered.erase(&rItem); } +void DefaultItemInstanceManager::remove(const SfxPoolItem& rItem) +{ + maRegistered[rItem.Which()].erase(&rItem); +} ItemInstanceManager* SfxPoolItem::getItemInstanceManager() const { return nullptr; } From e8a241d1cb1abb30d6b1b76520f742f16311318b Mon Sep 17 00:00:00 2001 From: Andrea Gelmini Date: Tue, 25 Jun 2024 20:53:35 +0200 Subject: [PATCH 063/194] Fix typo Change-Id: Id4ff56962a9a02dbd7d6a449cc26805b30ec271e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169531 Tested-by: Jenkins Reviewed-by: Julien Nabet --- xmloff/source/draw/ximpshap.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xmloff/source/draw/ximpshap.cxx b/xmloff/source/draw/ximpshap.cxx index 89bb474f928e..f433107d4eb9 100644 --- a/xmloff/source/draw/ximpshap.cxx +++ b/xmloff/source/draw/ximpshap.cxx @@ -226,7 +226,7 @@ css::uno::Reference< css::xml::sax::XFastContextHandler > SdXMLShapeContext::cre } } - // if we have a text cursor, lets try to import some text + // if we have a text cursor, let's try to import some text if( mxCursor.is() ) { xContext = GetImport().GetTextImport()->CreateTextChildContext( From f07af61f6bc8c3e0a2d7be4afa0d1e3c0882d9f6 Mon Sep 17 00:00:00 2001 From: Andrea Gelmini Date: Tue, 25 Jun 2024 16:26:43 +0200 Subject: [PATCH 064/194] Fix translation Change-Id: Iedd595952eca24083068c33a5ec7391c125d2934 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169524 Reviewed-by: Julien Nabet Tested-by: Julien Nabet --- svtools/source/svrtf/svparser.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/svtools/source/svrtf/svparser.cxx b/svtools/source/svrtf/svparser.cxx index a7c9c411caf2..419de30e9d0a 100644 --- a/svtools/source/svrtf/svparser.cxx +++ b/svtools/source/svrtf/svparser.cxx @@ -34,7 +34,7 @@ template struct SvParser_Impl { - OUString aToken; // gescanntes Token + OUString aToken; // parsed token sal_uInt64 nFilePos; // actual position in stream sal_uInt32 nlLineNr; // actual line number sal_uInt32 nlLinePos; // actual column number From ccb557636ea87a40d5fcc370b7434029c0153588 Mon Sep 17 00:00:00 2001 From: Noel Grandin Date: Tue, 25 Jun 2024 20:01:47 +0200 Subject: [PATCH 065/194] speed up complex doc with lots of footers/headers setting the header/footer property values is extremely expensive, so check before setting them. Shaves 30% off the load time of a large DOCX Change-Id: I7ac61434b8b4f59e199620dfcc11680164efe203 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169532 Reviewed-by: Noel Grandin Tested-by: Jenkins --- .../writerfilter/dmapper/DomainMapper_Impl.cxx | 18 +++++++++++++++--- sw/source/writerfilter/dmapper/PropertyMap.cxx | 18 +++++++++++++++--- 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/sw/source/writerfilter/dmapper/DomainMapper_Impl.cxx b/sw/source/writerfilter/dmapper/DomainMapper_Impl.cxx index 8bb8da5b1db1..4053baee1164 100644 --- a/sw/source/writerfilter/dmapper/DomainMapper_Impl.cxx +++ b/sw/source/writerfilter/dmapper/DomainMapper_Impl.cxx @@ -3830,13 +3830,25 @@ void DomainMapper_Impl::PushPageHeaderFooter(PagePartType ePagePartType, PageTyp try { + // Note that the header property calls are very expensive, hence the need to check if the property needs + // setting before calling setPropertyValue. + // Turn on the headers - xPageStyle->setPropertyValue(getPropertyName(ePropIsOn), uno::Any(true)); + bool bPropIsOn = false; + xPageStyle->getPropertyValue(getPropertyName(ePropIsOn)) >>= bPropIsOn; + if (!bPropIsOn) + xPageStyle->setPropertyValue(getPropertyName(ePropIsOn), uno::Any(true)); // Set both sharing left and first to off so we can import the content regardless of what value // the "titlePage" or "evenAndOdd" flags are set (which decide what the sharing is set to in the document). - xPageStyle->setPropertyValue(getPropertyName(ePropShared), uno::Any(false)); - xPageStyle->setPropertyValue(getPropertyName(PROP_FIRST_IS_SHARED), uno::Any(false)); + bool bPropShared = false; + xPageStyle->getPropertyValue(getPropertyName(ePropShared)) >>= bPropShared; + if (bPropShared) + xPageStyle->setPropertyValue(getPropertyName(ePropShared), uno::Any(false)); + bool bFirstShared = false; + xPageStyle->getPropertyValue(getPropertyName(PROP_FIRST_IS_SHARED)) >>= bFirstShared; + if (bFirstShared) + xPageStyle->setPropertyValue(getPropertyName(PROP_FIRST_IS_SHARED), uno::Any(false)); if (eType == PageType::LEFT) { diff --git a/sw/source/writerfilter/dmapper/PropertyMap.cxx b/sw/source/writerfilter/dmapper/PropertyMap.cxx index 3d071ff427bd..91d7acc7f4ca 100644 --- a/sw/source/writerfilter/dmapper/PropertyMap.cxx +++ b/sw/source/writerfilter/dmapper/PropertyMap.cxx @@ -535,12 +535,21 @@ void SectionPropertyMap::setHeaderFooterProperties(DomainMapper_Impl& rDM_Impl) bool bHasHeader = false; bool bHasFooter = false; + bool bHeaderIsShared = false; + bool bFooterIsShared = false; + bool bFirstIsShared = false; const OUString& sHeaderIsOn = getPropertyName(PROP_HEADER_IS_ON); const OUString& sFooterIsOn = getPropertyName(PROP_FOOTER_IS_ON); + const OUString& sHeaderIsShared = getPropertyName(PROP_HEADER_IS_SHARED); + const OUString& sFooterIsShared = getPropertyName(PROP_FOOTER_IS_SHARED); + const OUString& sFirstIsShared = getPropertyName(PROP_FIRST_IS_SHARED); m_aPageStyle->getPropertyValue(sHeaderIsOn) >>= bHasHeader; m_aPageStyle->getPropertyValue(sFooterIsOn) >>= bHasFooter; + m_aPageStyle->getPropertyValue(sHeaderIsShared) >>= bHeaderIsShared; + m_aPageStyle->getPropertyValue(sFooterIsShared) >>= bFooterIsShared; + m_aPageStyle->getPropertyValue(sFirstIsShared) >>= bFirstIsShared; bool bEvenAndOdd = rDM_Impl.GetSettingsTable()->GetEvenAndOddHeaders(); @@ -576,9 +585,12 @@ void SectionPropertyMap::setHeaderFooterProperties(DomainMapper_Impl& rDM_Impl) SectionPropertyMap::removeXTextContent(xText); } - m_aPageStyle->setPropertyValue(getPropertyName(PROP_HEADER_IS_SHARED), uno::Any(!bEvenAndOdd)); - m_aPageStyle->setPropertyValue(getPropertyName(PROP_FOOTER_IS_SHARED), uno::Any(!bEvenAndOdd)); - m_aPageStyle->setPropertyValue(getPropertyName(PROP_FIRST_IS_SHARED), uno::Any(!m_bTitlePage)); + if ( bHeaderIsShared != !bEvenAndOdd ) + m_aPageStyle->setPropertyValue(sHeaderIsShared, uno::Any(!bEvenAndOdd)); + if ( bFooterIsShared != !bEvenAndOdd ) + m_aPageStyle->setPropertyValue(sFooterIsShared, uno::Any(!bEvenAndOdd)); + if ( bFirstIsShared != !m_bTitlePage ) + m_aPageStyle->setPropertyValue(sFirstIsShared, uno::Any(!m_bTitlePage)); bool bHadFirstHeader = m_bHadFirstHeader && m_bTitlePage; if (bHasHeader && !bHadFirstHeader && !m_bHadLeftHeader && !m_bHadRightHeader && rDM_Impl.IsNewDoc()) From 6c09c85ec384e88c89bff0817e7fe9889d7ed68e Mon Sep 17 00:00:00 2001 From: Miklos Vajna Date: Wed, 26 Jun 2024 09:21:17 +0200 Subject: [PATCH 066/194] tdf#161779 DOCX import, drawingML: fix handling of translation for lines Open the bugdoc, it has a line with a non-zero horizontal offset from the anchor paragraph, it shows up as a horizontal line, while it should be vertical. Checking how the ODT import and the DOCX import works for lines, one obvious difference is that the ODT import at SdXMLLineShapeContext::startFastElement() only considers the size / scaling for the individual points, everything else goes to the transform matrix of the containing shape, set in SdXMLShapeContext::SetTransformation(). The drawingML import is way more complex, but it effectively tries to not set any transformation on the shape and just transorms the points of the line instead. Fix the problem by changing Shape::createAndInsert() to also not put any scaling to the transform matrix, to not transform the points of the line and finally to apply the transform matrix to lines as well. Do this only for toplevel Writer lines, that's enough to fix the bugdoc and group shapes / Calc shapes need more investigation, so leave those unchanged for now. Tests which were failing while working on this change: - CppunitTest_sc_shapetest's testTdf144242_Line_noSwapWH: do this for Writer shapes only, for now - CppunitTest_sw_ooxmlimport's lineRotation: this is already broken partially, now looks perfect - CppunitTest_sw_ooxmlimport's testTdf85232 / group shape: this points out that lines in group shapes are some additional complexity, so leave that case unchanged, for now - CppunitTest_sw_ooxmlexport3's testArrowPosition: manual testing shows this is still OK - CppunitTest_sw_writerfilter_dmapper's testTdf141540GroupLinePosSize: manual testing shows this is still OK Change-Id: I246430148e3b3c927e010f360fa317e8429c82d2 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169533 Reviewed-by: Miklos Vajna Tested-by: Jenkins --- .../unit/data/toplevel-line-hori-offset.docx | Bin 0 -> 12735 bytes oox/qa/unit/drawingml.cxx | 51 ++++++++++++++++++ oox/source/drawingml/shape.cxx | 34 +++++++++--- sw/qa/extras/ooxmlexport/ooxmlexport3.cxx | 2 +- sw/qa/writerfilter/dmapper/GraphicImport.cxx | 4 +- 5 files changed, 82 insertions(+), 9 deletions(-) create mode 100644 oox/qa/unit/data/toplevel-line-hori-offset.docx diff --git a/oox/qa/unit/data/toplevel-line-hori-offset.docx b/oox/qa/unit/data/toplevel-line-hori-offset.docx new file mode 100644 index 0000000000000000000000000000000000000000..9f6ba561d4fe94af31e557e3de07ca709fa90614 GIT binary patch literal 12735 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 literal 0 HcmV?d00001 diff --git a/oox/qa/unit/drawingml.cxx b/oox/qa/unit/drawingml.cxx index 923758ee28a7..35cb7528452e 100644 --- a/oox/qa/unit/drawingml.cxx +++ b/oox/qa/unit/drawingml.cxx @@ -29,6 +29,8 @@ #include #include #include +#include +#include #include #include @@ -698,6 +700,55 @@ CPPUNIT_TEST_FIXTURE(OoxDrawingmlTest, testTdf125085WordArtFontText) CPPUNIT_ASSERT_EQUAL(u"he"_ustr, aLocal.Language); } +CPPUNIT_TEST_FIXTURE(OoxDrawingmlTest, testToplevelLineHorOffsetDOCX) +{ + // Given a toplevel line shape from DOCX: + loadFromFile(u"toplevel-line-hori-offset.docx"); + + // When checking the transform and the points of the shape: + uno::Reference xDrawPagesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xDrawPage(xDrawPagesSupplier->getDrawPages()->getByIndex(0), + uno::UNO_QUERY); + uno::Reference xShape(xDrawPage->getByIndex(0), uno::UNO_QUERY); + drawing::HomogenMatrix3 aTransformation; + xShape->getPropertyValue(u"Transformation"_ustr) >>= aTransformation; + basegfx::B2DHomMatrix aMatrix; + aMatrix.set(0, 0, aTransformation.Line1.Column1); + aMatrix.set(0, 1, aTransformation.Line1.Column2); + aMatrix.set(0, 2, aTransformation.Line1.Column3); + aMatrix.set(1, 0, aTransformation.Line2.Column1); + aMatrix.set(1, 1, aTransformation.Line2.Column2); + aMatrix.set(1, 2, aTransformation.Line2.Column3); + drawing::PointSequenceSequence aPolyPoly; + xShape->getPropertyValue(u"Geometry"_ustr) >>= aPolyPoly; + + // Then make sure we get a vertical line, not a horizontal one: + basegfx::B2DTuple aScale; + basegfx::B2DTuple aTranslate; + double fRotate = 0; + double fShearX = 0; + aMatrix.decompose(aScale, aTranslate, fRotate, fShearX); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 1 + // - Actual : 4094.76362560479 + // i.e. this was a horizontal line, not a vertical one. + CPPUNIT_ASSERT_DOUBLES_EQUAL(1, aScale.getX(), 0.01); + // 1473682 EMUs in mm100 is 4093.56. + CPPUNIT_ASSERT_DOUBLES_EQUAL(4094, aScale.getY(), 0.01); + // 343535 EMUs in mm100 is 954.27. + CPPUNIT_ASSERT_DOUBLES_EQUAL(954, aTranslate.getX(), 2); + CPPUNIT_ASSERT_DOUBLES_EQUAL(0, aTranslate.getY(), 0.01); + CPPUNIT_ASSERT_DOUBLES_EQUAL(0, fRotate, 0); + CPPUNIT_ASSERT_DOUBLES_EQUAL(0, fShearX, 0); + CPPUNIT_ASSERT_EQUAL(static_cast(1), aPolyPoly.getLength()); + drawing::PointSequence aPoly = aPolyPoly[0]; + CPPUNIT_ASSERT_EQUAL(static_cast(2), aPoly.getLength()); + CPPUNIT_ASSERT_EQUAL(static_cast(0), aPoly[0].X); + CPPUNIT_ASSERT_EQUAL(static_cast(0), aPoly[0].Y); + CPPUNIT_ASSERT_EQUAL(static_cast(1), aPoly[1].X); + CPPUNIT_ASSERT_EQUAL(static_cast(4094), aPoly[1].Y); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/oox/source/drawingml/shape.cxx b/oox/source/drawingml/shape.cxx index e2fed9eee281..9727688b25fe 100644 --- a/oox/source/drawingml/shape.cxx +++ b/oox/source/drawingml/shape.cxx @@ -1035,11 +1035,19 @@ Reference< XShape > const & Shape::createAndInsert( aTransformation.translate(0.5, 0.5); } + bool bLineShape = aServiceName == "com.sun.star.drawing.LineShape"; + bool bTopWriterLine = !pParentGroupShape && mbWps && bLineShape; // Build object matrix from shape size and position; corresponds to MSO ext and off // Only LineShape and ConnectorShape may have zero width or height. if (aServiceName == "com.sun.star.drawing.LineShape" || aServiceName == "com.sun.star.drawing.ConnectorShape") - aTransformation.scale(maSize.Width, maSize.Height); + { + // For toplevel Writer lines, size is included in the point coordinates. + if (!bTopWriterLine) + { + aTransformation.scale(maSize.Width, maSize.Height); + } + } else { aTransformation.scale(maSize.Width ? maSize.Width : 1.0, @@ -1147,7 +1155,10 @@ Reference< XShape > const & Shape::createAndInsert( aParentTransformation = aTransformation; constexpr double fEmuToMm100 = o3tl::convert(1.0, o3tl::Length::emu, o3tl::Length::mm100); - aTransformation.scale(fEmuToMm100, fEmuToMm100); + if (!bTopWriterLine) + { + aTransformation.scale(fEmuToMm100, fEmuToMm100); + } // OOXML flips shapes before rotating them, so the rotation needs to be inverted if( bIsCustomShape && mbFlipH != mbFlipV ) @@ -1171,8 +1182,19 @@ Reference< XShape > const & Shape::createAndInsert( { ::basegfx::B2DPolygon aPoly; aPoly.insert( 0, ::basegfx::B2DPoint( 0, 0 ) ); - aPoly.insert( 1, ::basegfx::B2DPoint( maSize.Width ? 1 : 0, maSize.Height ? 1 : 0 ) ); - aPoly.transform( aTransformation ); + if (bTopWriterLine) + { + // No transform of individual points, everything apart from size is part of the + // transform matrix. + sal_Int32 nMM100Width = o3tl::convert(maSize.Width, o3tl::Length::emu, o3tl::Length::mm100); + sal_Int32 nMM100Height = o3tl::convert(maSize.Height, o3tl::Length::emu, o3tl::Length::mm100); + aPoly.insert(1, ::basegfx::B2DPoint(nMM100Width, nMM100Height)); + } + else + { + aPoly.insert( 1, ::basegfx::B2DPoint( maSize.Width ? 1 : 0, maSize.Height ? 1 : 0 ) ); + aPoly.transform( aTransformation ); + } // now creating the corresponding PolyPolygon sal_Int32 i, nNumPoints = aPoly.count(); @@ -1199,7 +1221,7 @@ Reference< XShape > const & Shape::createAndInsert( maShapeProperties.setProperty(PROP_PolyPolygon, aPolyPolySequence); } - else if ( aServiceName == "com.sun.star.drawing.ConnectorShape" ) + if ( aServiceName == "com.sun.star.drawing.ConnectorShape" ) { ::basegfx::B2DPolygon aPoly; aPoly.insert( 0, ::basegfx::B2DPoint( 0, 0 ) ); @@ -1214,7 +1236,7 @@ Reference< XShape > const & Shape::createAndInsert( maShapeProperties.setProperty(PROP_StartPosition, aAWTStartPosition); maShapeProperties.setProperty(PROP_EndPosition, aAWTEndPosition); } - else + else if (!bLineShape || bTopWriterLine) { // now set transformation for this object HomogenMatrix3 aMatrix; diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport3.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport3.cxx index d30d607061d3..14170bf3f23f 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport3.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport3.cxx @@ -1153,7 +1153,7 @@ CPPUNIT_TEST_FIXTURE(Test, testArrowPosition) // This is the correct Y coordinate, the incorrect was 817880. assertXPathContent(pXmlDocument, "/w:document/w:body/w:p/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor" - "/wp:positionV/wp:posOffset"_ostr, u"516255"_ustr); + "/wp:positionV/wp:posOffset"_ostr, u"516890"_ustr); } CPPUNIT_TEST_FIXTURE(Test, testArrowMarker) diff --git a/sw/qa/writerfilter/dmapper/GraphicImport.cxx b/sw/qa/writerfilter/dmapper/GraphicImport.cxx index e7e3998061d3..20048d15b804 100644 --- a/sw/qa/writerfilter/dmapper/GraphicImport.cxx +++ b/sw/qa/writerfilter/dmapper/GraphicImport.cxx @@ -167,9 +167,9 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf141540GroupLinePosSize) // Without fix in place, you had got Position = (19|6498), Size = 5001 x 2 // i.e. the line was nearly horizontal instead of vertical CPPUNIT_ASSERT_EQUAL(static_cast(5022), aPosition.X); - CPPUNIT_ASSERT_EQUAL(static_cast(2963), aPosition.Y); + CPPUNIT_ASSERT_EQUAL(static_cast(2965), aPosition.Y); CPPUNIT_ASSERT_EQUAL(static_cast(0), aSize.Width); - CPPUNIT_ASSERT_EQUAL(static_cast(7073), aSize.Height); + CPPUNIT_ASSERT_EQUAL(static_cast(7071), aSize.Height); // Test group uno::Reference xGroupShape(xDrawPage->getByIndex(1), uno::UNO_QUERY); From fba0193fcfb250d931c54baab2d1b79ce4be2f12 Mon Sep 17 00:00:00 2001 From: Miklos Vajna Date: Tue, 25 Jun 2024 10:17:52 +0200 Subject: [PATCH 067/194] sw: fix crash in SwShellCursor::Show() Crashreport signature: > Fatal signal received: SIGSEGV code: 1 for address: 0x0 > program/libswlo.so > SwShellCursor::Show(SfxViewShell const*) > sw/source/core/crsr/viscrs.cxx:991 > program/libswlo.so > SwCursorShell::ShowCursors(bool) > sw/source/core/crsr/crsrsh.cxx:2769 > program/libswlo.so > SwViewShell::ImplEndAction(bool) > sw/source/core/view/viewsh.cxx:? > program/libswlo.so > SwViewShell::EndAction(bool) > sw/inc/viewsh.hxx:638 (cherry picked from commit cefe556b9198b5dba18256d30ddcfcfda03f18c8) Change-Id: I31e453fae20957b906ff82f967dd97bb571d58d8 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169538 Reviewed-by: Miklos Vajna Tested-by: Jenkins --- sw/source/core/crsr/viscrs.cxx | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/sw/source/core/crsr/viscrs.cxx b/sw/source/core/crsr/viscrs.cxx index cd8c17ff5441..7c30e8f43675 100644 --- a/sw/source/core/crsr/viscrs.cxx +++ b/sw/source/core/crsr/viscrs.cxx @@ -988,7 +988,19 @@ void SwShellCursor::Show(SfxViewShell const * pViewShell) } else { - GetShell()->GetSfxViewShell()->libreOfficeKitViewCallback(LOK_CALLBACK_TEXT_SELECTION, sRect); + const SwCursorShell* pShell = GetShell(); + if (!pShell) + { + return; + } + + SfxViewShell* pSfxViewShell = pShell->GetSfxViewShell(); + if (!pSfxViewShell) + { + return; + } + + pSfxViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_TEXT_SELECTION, sRect); SfxLokHelper::notifyOtherViews(GetShell()->GetSfxViewShell(), LOK_CALLBACK_TEXT_VIEW_SELECTION, "selection", sRect); } } From d44784a24a8ff2a6f92618585b786192ef55a6ab Mon Sep 17 00:00:00 2001 From: Stephan Bergmann Date: Tue, 25 Jun 2024 14:34:14 +0200 Subject: [PATCH 068/194] Missing includes Change-Id: I519cdb9b5a1c475a1d36293b77c85c250baf3c3f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169520 Tested-by: Jenkins Reviewed-by: Stephan Bergmann --- compilerplugins/clang/dbgunhandledexception.cxx | 1 + compilerplugins/clang/elidestringvar.cxx | 1 + 2 files changed, 2 insertions(+) diff --git a/compilerplugins/clang/dbgunhandledexception.cxx b/compilerplugins/clang/dbgunhandledexception.cxx index e6c1f157cc9d..699297b5a248 100644 --- a/compilerplugins/clang/dbgunhandledexception.cxx +++ b/compilerplugins/clang/dbgunhandledexception.cxx @@ -16,6 +16,7 @@ #include #include #include +#include namespace loplugin { diff --git a/compilerplugins/clang/elidestringvar.cxx b/compilerplugins/clang/elidestringvar.cxx index c14eaf027b0f..097120463ea0 100644 --- a/compilerplugins/clang/elidestringvar.cxx +++ b/compilerplugins/clang/elidestringvar.cxx @@ -12,6 +12,7 @@ #include #include #include +#include #include "check.hxx" #include "compat.hxx" From 3e845b10be7ae7f2ac91e37fe6404dd390aaa49d Mon Sep 17 00:00:00 2001 From: Michael Stahl Date: Tue, 25 Jun 2024 18:47:15 +0200 Subject: [PATCH 069/194] tdf#161718 sw: fix background flys blocking footnotes The problem is that the document has an unwanted page break on the paragraph with the footnote. The reason is that lcl_GetFootnoteLower() tries to evade flys, but doesn't take into account that background flys (Wrap Through) should be ignored. (somehow regression from commit c303981cfd95ce1c3881366023d5495ae2edce97) Change-Id: I02578f14644e232fac127142fe12801101f87f86 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169530 Tested-by: Jenkins Reviewed-by: Michael Stahl --- sw/qa/extras/layout/data/tdf161718.docx | Bin 0 -> 18843 bytes sw/qa/extras/layout/layout3.cxx | 17 +++++++++++++++++ sw/source/core/text/txtftn.cxx | 7 +++++++ 3 files changed, 24 insertions(+) create mode 100644 sw/qa/extras/layout/data/tdf161718.docx diff --git a/sw/qa/extras/layout/data/tdf161718.docx b/sw/qa/extras/layout/data/tdf161718.docx new file mode 100644 index 0000000000000000000000000000000000000000..240192e07a718d29491e53823a8c77b266da0929 GIT binary patch literal 18843 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 literal 0 HcmV?d00001 diff --git a/sw/qa/extras/layout/layout3.cxx b/sw/qa/extras/layout/layout3.cxx index a07e7e6cd037..7c36605bb82d 100644 --- a/sw/qa/extras/layout/layout3.cxx +++ b/sw/qa/extras/layout/layout3.cxx @@ -195,6 +195,23 @@ CPPUNIT_TEST_FIXTURE(SwLayoutWriter3, testTdf128966) xmlXPathFreeObject(pXmlObj); } +CPPUNIT_TEST_FIXTURE(SwLayoutWriter3, testTdf161718) +{ + createSwDoc("tdf161718.docx"); + + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + + // everything on one page + assertXPath(pXmlDoc, "/root/page/header"_ostr, 1); + assertXPath(pXmlDoc, "/root/page/header/txt/anchored"_ostr, 1); + assertXPath(pXmlDoc, "/root/page/footer"_ostr, 1); + assertXPath(pXmlDoc, "/root/page/ftncont/ftn"_ostr, 1); + assertXPath(pXmlDoc, "/root/page/ftncont/ftn/txt"_ostr, 1); + assertXPath(pXmlDoc, "/root/page/body/txt"_ostr, 27); + assertXPath(pXmlDoc, "/root/page/body/txt/anchored"_ostr, 1); + assertXPath(pXmlDoc, "/root/page"_ostr, 1); +} + CPPUNIT_TEST_FIXTURE(SwLayoutWriter3, testTdf119908) { createSwDoc("tdf130088.docx"); diff --git a/sw/source/core/text/txtftn.cxx b/sw/source/core/text/txtftn.cxx index 745d40ce23bc..787ea1390e78 100644 --- a/sw/source/core/text/txtftn.cxx +++ b/sw/source/core/text/txtftn.cxx @@ -32,6 +32,7 @@ #include #include #include +#include #include #include #include @@ -246,6 +247,12 @@ static SwTwips lcl_GetFootnoteLower( const SwTextFrame* pFrame, SwTwips nLower ) const SwSortedObjs &rObjs = *pStartFrame->GetDrawObjs(); for (SwAnchoredObject* pAnchoredObj : rObjs) { + if (pAnchoredObj->GetFrameFormat()->GetSurround().GetSurround() + == text::WrapTextMode_THROUGH) + { + continue; // tdf#161718 no effect on text flow, skip + } + SwRect aRect( pAnchoredObj->GetObjRect() ); auto pFlyFrame = pAnchoredObj->DynCastFlyFrame(); From d20cdbf9b6482e2ee8edc1fd7d5e4d79468f77bd Mon Sep 17 00:00:00 2001 From: Xisco Fauli Date: Wed, 26 Jun 2024 12:49:17 +0200 Subject: [PATCH 070/194] svgio: Add missing 'rebeccapurple' color you can find more about the sad story behind this color in the internet Change-Id: I0aa201bdc62aebe96f0ae764a359f1f6286027d4 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169544 Reviewed-by: Xisco Fauli Tested-by: Jenkins --- svgio/source/svgreader/svgtools.cxx | 1 + 1 file changed, 1 insertion(+) diff --git a/svgio/source/svgreader/svgtools.cxx b/svgio/source/svgreader/svgtools.cxx index e3a4e7e9f3c3..3918660fb7bd 100644 --- a/svgio/source/svgreader/svgtools.cxx +++ b/svgio/source/svgreader/svgtools.cxx @@ -153,6 +153,7 @@ namespace svgio::svgreader { u"plum", Color(221, 160, 221) }, { u"powderblue", Color(176, 224, 230) }, { u"purple", Color(128, 0, 128) }, + { u"rebeccapurple", Color(102, 51, 153) }, { u"red", Color(255, 0, 0) }, { u"rosybrown", Color(188, 143, 143) }, { u"royalblue", Color( 65, 105, 225) }, From 750a77bf3df5813c6b7ca7ca38cf4f41474a7395 Mon Sep 17 00:00:00 2001 From: Noel Grandin Date: Tue, 25 Jun 2024 15:23:45 +0200 Subject: [PATCH 071/194] simplify logic in DoTextBoxZOrderCorrection which is doing things in an unnecessarily complex way. The simpler way makes a complex DOCX file load 20% faster Change-Id: I507e2bfd5e315f50e4fa790711286785e0f11445 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169529 Reviewed-by: Noel Grandin Tested-by: Jenkins --- sw/source/core/doc/textboxhelper.cxx | 20 ++++---------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/sw/source/core/doc/textboxhelper.cxx b/sw/source/core/doc/textboxhelper.cxx index a1391fe34a5b..4bc8b08092e6 100644 --- a/sw/source/core/doc/textboxhelper.cxx +++ b/sw/source/core/doc/textboxhelper.cxx @@ -1536,26 +1536,14 @@ bool SwTextBoxHelper::DoTextBoxZOrderCorrection(SwFrameFormat* pShape, const Sdr auto pPage = pDrawModel->GetPage(0); // Recalc all Z-orders pPage->RecalcObjOrdNums(); - // Here is a counter avoiding running to in infinity: - sal_uInt16 nIterator = 0; // If the shape is behind the frame, is good, but if there are some objects // between of them that is wrong so put the frame exactly one level higher // than the shape. - if (pFrmObj->GetOrdNum() > pShpObj->GetOrdNum()) + if (pFrmObj->GetOrdNum() != pShpObj->GetOrdNum() + 1) + { pPage->SetObjectOrdNum(pFrmObj->GetOrdNum(), pShpObj->GetOrdNum() + 1); - else - // Else, if the frame is behind the shape, bring to the front of it. - while (pFrmObj->GetOrdNum() <= pShpObj->GetOrdNum()) - { - pPage->SetObjectOrdNum(pFrmObj->GetOrdNum(), pFrmObj->GetOrdNum() + 1); - // If there is any problem with the indexes, do not run over the infinity - if (pPage->GetObjCount() == pFrmObj->GetOrdNum()) - break; - ++nIterator; - if (nIterator > 300) - break; // Do not run to infinity - } - pPage->RecalcObjOrdNums(); + pPage->RecalcObjOrdNums(); + } return true; // Success } SAL_WARN("sw.core", "SwTextBoxHelper::DoTextBoxZOrderCorrection(): " From 879bcc88759d7dd033e0ee667daee0d2a743cf06 Mon Sep 17 00:00:00 2001 From: Michael Weghorn Date: Wed, 26 Jun 2024 09:12:55 +0200 Subject: [PATCH 072/194] tdf#159835 sfx2: Skip sidebar menu update for gtk4 to work around crash After commit daed96f0818b1baae5de8b74b866009d7d89f853 Author: Michael Weghorn Date: Wed Jun 19 13:08:34 2024 +0200 tdf#159835 sfx2: Keep sidebar menu up to date , starting LO Writer with the gtk4 VCL plugin resulted in a crash (backtrace below) due to the current menu implementation for the gtk4 VCL plugin being incomplete/broken. For now, until the underlying issue has been fixed, at least avoid crashing by skipping the menu update when using gtk4. This effectively reverts back to the old behavior for gtk4, where before the above commit, `mxMenuButton->get_active()` in `TabBar::OnToolboxClicked` would always return false when clicking the menu button in the sidebar, so the code path triggering the crash wouldn't be hit, thus not triggering the pre-existing underlying issue. Backtrace of the crash: Thread 1 "soffice.bin" received signal SIGSEGV, Segmentation fault. 0x00007fffe9d25afe in g_atomic_ref_count_inc () from /lib/x86_64-linux-gnu/libglib-2.0.so.0 #0 0x00007fffe9d25afe in g_atomic_ref_count_inc () at /lib/x86_64-linux-gnu/libglib-2.0.so.0 #1 0x00007fffe9cfb3b6 in g_hash_table_ref () at /lib/x86_64-linux-gnu/libglib-2.0.so.0 #2 0x00007fffe90ff92e in () at /lib/x86_64-linux-gnu/libgio-2.0.so.0 #3 0x00007fffe90feaf4 in () at /lib/x86_64-linux-gnu/libgio-2.0.so.0 #4 0x00007fffe90fef2c in g_menu_model_get_item_attribute () at /lib/x86_64-linux-gnu/libgio-2.0.so.0 #5 0x00007fffe44fd500 in (anonymous namespace)::MenuHelper::get_item_id(int) const (this=0x55555c78dbf0, pos=0) at vcl/unx/gtk4/../gtk3/gtkinst.cxx:5748 #6 0x00007fffe44fc976 in (anonymous namespace)::GtkInstanceMenu::get_id(int) const (this=0x55555c78dbf0, pos=0) at vcl/unx/gtk4/../gtk3/gtkinst.cxx:11711 #7 0x00007fffe44fcd40 in virtual thunk to (anonymous namespace)::GtkInstanceMenu::get_id(int) const () at vcl/unx/gtk4/../gtk3/gtkinst.cxx:11745 #8 0x00007ffff3fae52b in sfx2::sidebar::TabBar::UpdateMenus() (this=0x55555c7ce530) at .../libreoffice/sfx2/source/sidebar/TabBar.cxx:342 #9 0x00007ffff3faf86a in sfx2::sidebar::TabBar::TabBar(vcl::Window*, com::sun::star::uno::Reference const&, std::function, std::function, sfx2::sidebar::SidebarController&) (this=0x55555c7ce530, pParentWindow=0x55555c62cea0, rxFrame=..., aDeckActivationFunctor=..., aPopupMenuSignalConnectFunction=..., rParentSidebarController=...) at .../libreoffice/sfx2/source/sidebar/TabBar.cxx:76 #10 0x00007ffff3f1c84d in VclPtr::Create&, com::sun::star::uno::Reference&, sfx2::sidebar::SidebarController::SidebarController(sfx2::sidebar::SidebarDockingWindow*, SfxViewFrame const*)::$_3, sfx2::sidebar::SidebarController::$_3(sfx2::sidebar::SidebarDockingWindow*, SfxViewFrame const*)::$_4, sfx2::sidebar::SidebarController&>(VclPtr&, com::sun::star::uno::Reference&, sfx2::sidebar::SidebarController::SidebarController(sfx2::sidebar::SidebarDockingWindow*, SfxViewFrame const*)::$_3&&, sfx2::sidebar::SidebarController::$_3(sfx2::sidebar::SidebarDockingWindow*, SfxViewFrame const*)::$_4&&, sfx2::sidebar::SidebarController&) (arg=..., arg=..., arg=..., arg=..., arg=...) at include/vcl/vclptr.hxx:129 #11 0x00007ffff3f1cc86 in sfx2::sidebar::SidebarController::SidebarController(sfx2::sidebar::SidebarDockingWindow*, SfxViewFrame const*) (this=0x55555c6f1fc0, pParentWindow=0x55555c62cea0, pViewFrame=0x55555abb87a0) at .../libreoffice/sfx2/source/sidebar/SidebarController.cxx:119 #12 0x00007ffff3f1d59f in sfx2::sidebar::SidebarController::create(sfx2::sidebar::SidebarDockingWindow*, SfxViewFrame const*) (pParentWindow=0x55555c62cea0, pViewFrame=0x55555abb87a0) at .../libreoffice/sfx2/source/sidebar/SidebarController.cxx:147 #13 0x00007ffff3f1a997 in sfx2::sidebar::SidebarDockingWindow::GetOrCreateSidebarController() (this=0x55555c62cea0) at .../libreoffice/sfx2/source/sidebar/SidebarDockingWindow.cxx:64 #14 0x00007ffff3f1ac24 in sfx2::sidebar::SidebarDockingWindow::SidebarDockingWindow(SfxBindings*, sfx2::sidebar::SidebarChildWindow&, vcl::Window*, long) (this=0x55555c62cea0, pSfxBindings=0x55555abdafe0, rChildWindow=..., pParentWindow=0x55555abdb6a0, nBits=137975825761) at .../libreoffice/sfx2/source/sidebar/SidebarDockingWindow.cxx:55 #15 0x00007ffff3f19e79 in VclPtr::Create(SfxBindings*&, sfx2::sidebar::SidebarChildWindow&, vcl::Window*&, long&&) (arg=@0x7fffffff45f8: 0x55555abdafe0, arg=..., arg=@0x7fffffff4600: 0x55555abdb6a0, arg=@0x7fffffff45e8: 137975825761) at include/vcl/vclptr.hxx:129 #16 0x00007ffff3f1960e in sfx2::sidebar::SidebarChildWindow::SidebarChildWindow(vcl::Window*, unsigned short, SfxBindings*, SfxChildWinInfo*) (this=0x55555c7d3130, pParentWindow=0x55555abdb6a0, nId=10336, pBindings=0x55555abdafe0, pInfo=0x7fffffff4878) at .../libreoffice/sfx2/source/sidebar/SidebarChildWindow.cxx:36 #17 0x00007ffff3f19d0c in std::make_unique(vcl::Window*&, unsigned short&, SfxBindings*&, SfxChildWinInfo*&) (__args=@0x7fffffff46c0: 0x55555abdb6a0, __args=@0x7fffffff46be: 10336, __args=@0x7fffffff46b0: 0x55555abdafe0, __args=@0x7fffffff46a8: 0x7fffffff4878) at /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/unique_ptr.h:1070 #18 0x00007ffff3f19344 in sfx2::sidebar::SidebarChildWindow::CreateImpl(vcl::Window*, unsigned short, SfxBindings*, SfxChildWinInfo*) (pParent=0x55555abdb6a0, nId=10336, pBindings=0x55555abdafe0, pInfo=0x7fffffff4878) at .../libreoffice/sfx2/source/sidebar/SidebarChildWindow.cxx:30 #19 0x00007ffff38b2b4b in SfxChildWindow::CreateChildWindow(unsigned short, vcl::Window*, SfxBindings*, SfxChildWinInfo&) (nId=10336, pParent=0x55555abdb6a0, pBindings=0x55555abdafe0, rInfo=...) at .../libreoffice/sfx2/source/appl/childwin.cxx:241 #20 0x00007ffff39592dd in SfxWorkWindow::CreateChildWin_Impl(SfxChildWin_Impl*, bool) (this=0x555556828e50, pCW=0x55555c4e3a00, bSetFocus=false) at .../libreoffice/sfx2/source/appl/workwin.cxx:1351 #21 0x00007ffff3958fdc in SfxWorkWindow::UpdateChildWindows_Impl() (this=0x555556828e50) at .../libreoffice/sfx2/source/appl/workwin.cxx:1300 #22 0x00007ffff39584da in SfxWorkWindow::UpdateObjectBars_Impl2() (this=0x555556828e50) at .../libreoffice/sfx2/source/appl/workwin.cxx:1248 #23 0x00007ffff3957a0b in SfxWorkWindow::UpdateObjectBars_Impl() (this=0x555556828e50) at .../libreoffice/sfx2/source/appl/workwin.cxx:1096 #24 0x00007ffff39cbeb5 in SfxDispatcher::Update_Impl(bool) (this=0x55555abd9fc0, bForce=false) at .../libreoffice/sfx2/source/control/dispatch.cxx:1122 #25 0x00007ffff4059a69 in SfxBaseController::ConnectSfxFrame_Impl(SfxBaseController::ConnectSfxFrame) (this=0x55555ac3f8b0, i_eConnect=SfxBaseController::E_CONNECT) at .../libreoffice/sfx2/source/view/sfxbasecontroller.cxx:1206 #26 0x00007ffff4058aac in SfxBaseController::attachFrame(com::sun::star::uno::Reference const&) (this=0x55555ac3f8b0, xFrame=...) at .../libreoffice/sfx2/source/view/sfxbasecontroller.cxx:530 Change-Id: I9c04b4faff4da084bfa8f932d9f95a233bc1f528 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169534 Tested-by: Jenkins Reviewed-by: Michael Weghorn --- sfx2/source/sidebar/TabBar.cxx | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sfx2/source/sidebar/TabBar.cxx b/sfx2/source/sidebar/TabBar.cxx index 76669adc5798..184f42877667 100644 --- a/sfx2/source/sidebar/TabBar.cxx +++ b/sfx2/source/sidebar/TabBar.cxx @@ -337,6 +337,12 @@ void TabBar::UpdateFocusManager(FocusManager& rFocusManager) void TabBar::UpdateMenus() { + if (Application::GetToolkitName() == u"gtk4"_ustr) + { + SAL_WARN("sfx", "Skipping update of sidebar menus to avoid crash due to gtk4 menu brokenness."); + return; + } + for (int i = mxMainMenu->n_children() - 1; i >= 0; --i) { OUString sIdent = mxMainMenu->get_id(i); From 68e7413b5f9ce4abd2a4e23bf27cfc335e52f03f Mon Sep 17 00:00:00 2001 From: Michael Stahl Date: Wed, 26 Jun 2024 15:44:44 +0200 Subject: [PATCH 073/194] tdf#156724 sw: layout: ignore footnotes when splitting float table row (regression from commit 534d3818aedfa95ad73935235462f5ec2817f5da) Change-Id: I169d88375a93c288604a89ef89f7e895830446c8 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169570 Tested-by: Jenkins Reviewed-by: Michael Stahl --- sw/qa/extras/layout/data/fdo48718-1.docx | Bin 0 -> 25400 bytes sw/qa/extras/layout/layout3.cxx | 12 ++++++++++++ sw/source/core/layout/tabfrm.cxx | 3 ++- 3 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 sw/qa/extras/layout/data/fdo48718-1.docx diff --git a/sw/qa/extras/layout/data/fdo48718-1.docx b/sw/qa/extras/layout/data/fdo48718-1.docx new file mode 100644 index 0000000000000000000000000000000000000000..373aa357fd5ce1132b7174a875e4d9cba0fad662 GIT binary patch literal 25400 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%0AN`OJELWS0%M$%2_2<^U%efcI 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 literal 0 HcmV?d00001 diff --git a/sw/qa/extras/layout/layout3.cxx b/sw/qa/extras/layout/layout3.cxx index 7c36605bb82d..3ee4953e52cc 100644 --- a/sw/qa/extras/layout/layout3.cxx +++ b/sw/qa/extras/layout/layout3.cxx @@ -2290,6 +2290,18 @@ CPPUNIT_TEST_FIXTURE(SwLayoutWriter3, testTdf138124) 1); } +CPPUNIT_TEST_FIXTURE(SwLayoutWriter3, TestTdf161348) +{ + createSwDoc("fdo48718-1.docx"); + + xmlDocUniquePtr pXml = parseLayoutDump(); + + // the floating table is on page 1 + // apparently both parts of the split table are on this text frame + assertXPath(pXml, "/root/page[1]/body/txt[2]/anchored/fly"_ostr, 2); + assertXPath(pXml, "/root/page[1]/body/txt[2]/anchored/fly/tab"_ostr, 2); +} + CPPUNIT_TEST_FIXTURE(SwLayoutWriter3, testTdf154113) { createSwDoc("three_sections.fodt"); diff --git a/sw/source/core/layout/tabfrm.cxx b/sw/source/core/layout/tabfrm.cxx index efc716052fe0..42116672708f 100644 --- a/sw/source/core/layout/tabfrm.cxx +++ b/sw/source/core/layout/tabfrm.cxx @@ -807,7 +807,8 @@ static bool lcl_RecalcSplitLine( SwRowFrame& rLastLine, SwRowFrame& rFollowLine, bRet = false; // apparently checking nFootnoteHeight here does *not* guarantee that it fits into the body - if (bRet && nDistanceToFootnoteBodyPrtBottom + nFollowFootnotes < 0) + if (bRet && rTab.IsInDocBody() + && nDistanceToFootnoteBodyPrtBottom + nFollowFootnotes < 0) { assert(rTab.GetUpper() != rTab.FindFootnoteBossFrame()->FindBodyCont()); SAL_INFO("sw.layout", "SwTabFrame Split failed because of footnote growth"); From 4d0ba0badeb5a83d8eb5373ba5d7ef931dcf62c9 Mon Sep 17 00:00:00 2001 From: Noel Grandin Date: Wed, 26 Jun 2024 11:18:47 +0200 Subject: [PATCH 074/194] reduce number of SvxTextEditSourceImpl listeners on SdrModel when we have a lot of shapes, the number of listeners attached to SdrModel becomes a serious bottleneck because of the number of broadcast/notify function calls. But SvxTextEditSourceImpl can just as well listen to the SdrObject, which achieves the same end, and reduces the bottleneck on the SdrModel. We do have to adjust some of the broadcast sites to broadcast the event to the SdrObject listeners as well as the SdrModel listeners. Possibly as another change we can remove the broadcasting to the SdrModel listeners. This shaves 10% off the load time of a large DOCX with lots of shapes. Noting that we do no need to listen to SdrHintKind::ModelCleared because we will get called via SvxTextEditSourceImpl::ObjectInDestruction when the model is destroyed. Change-Id: I3f7f6aa2a2146e4c4f59c974aa3fed92becf5eca Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169565 Tested-by: Jenkins Reviewed-by: Noel Grandin --- include/svx/svdobj.hxx | 2 +- svx/source/svdraw/svdedxv.cxx | 6 +++++- svx/source/svdraw/svdobj.cxx | 2 +- svx/source/svdraw/svdoedge.cxx | 4 ++-- svx/source/unodraw/unoshtxt.cxx | 12 +++++------- 5 files changed, 14 insertions(+), 12 deletions(-) diff --git a/include/svx/svdobj.hxx b/include/svx/svdobj.hxx index 8dd17bdc00f5..f1bee52e87ec 100644 --- a/include/svx/svdobj.hxx +++ b/include/svx/svdobj.hxx @@ -409,7 +409,7 @@ public: void BroadcastObjectChange() const; - const SfxBroadcaster* GetBroadcaster() const; + SfxBroadcaster* GetBroadcaster() const; // set modified-flag in the model virtual void SetChanged(); diff --git a/svx/source/svdraw/svdedxv.cxx b/svx/source/svdraw/svdedxv.cxx index 6071fbc042bd..fe647da817a1 100644 --- a/svx/source/svdraw/svdedxv.cxx +++ b/svx/source/svdraw/svdedxv.cxx @@ -1577,6 +1577,8 @@ bool SdrObjEditView::SdrBeginTextEdit(SdrObject* pObj_, SdrPageView* pPV, vcl::W SdrHint aHint(SdrHintKind::BeginEdit, *pTextObj); GetModel().Broadcast(aHint); + if (auto pBroadcaster = pTextObj->GetBroadcaster()) + pBroadcaster->Broadcast(aHint); mpTextEditOutliner->setVisualizedPage(nullptr); @@ -1715,6 +1717,8 @@ SdrEndTextEditKind SdrObjEditView::SdrEndTextEdit(bool bDontDeleteReally) { SdrHint aHint(SdrHintKind::EndEdit, *pTextEditObj); GetModel().Broadcast(aHint); + if (auto pBroadcaster = pTextEditObj->GetBroadcaster()) + pBroadcaster->Broadcast(aHint); } // if new mechanism was used, clean it up. At cleanup no need to check @@ -1895,7 +1899,7 @@ SdrEndTextEditKind SdrObjEditView::SdrEndTextEdit(bool bDontDeleteReally) if (pTEObj && !pTEObj->getSdrModelFromSdrObject().isLocked() && pTEObj->GetBroadcaster()) { SdrHint aHint(SdrHintKind::EndEdit, *pTEObj); - const_cast(pTEObj->GetBroadcaster())->Broadcast(aHint); + pTEObj->GetBroadcaster()->Broadcast(aHint); } if (pUndoEditUndoManager) diff --git a/svx/source/svdraw/svdobj.cxx b/svx/source/svdraw/svdobj.cxx index a598517d6893..6c8330185f0a 100644 --- a/svx/source/svdraw/svdobj.cxx +++ b/svx/source/svdraw/svdobj.cxx @@ -684,7 +684,7 @@ void SdrObject::RemoveListener(SfxListener& rListener) } } -const SfxBroadcaster* SdrObject::GetBroadcaster() const +SfxBroadcaster* SdrObject::GetBroadcaster() const { return m_pPlusData!=nullptr ? m_pPlusData->pBroadcast.get() : nullptr; } diff --git a/svx/source/svdraw/svdoedge.cxx b/svx/source/svdraw/svdoedge.cxx index 948b39a1d3b5..b37385a93c73 100644 --- a/svx/source/svdraw/svdoedge.cxx +++ b/svx/source/svdraw/svdoedge.cxx @@ -1708,13 +1708,13 @@ void SdrEdgeObj::Reformat() if( nullptr != m_aCon1.m_pSdrObj ) { SfxHint aHint( SfxHintId::DataChanged ); - Notify( *const_cast(m_aCon1.m_pSdrObj->GetBroadcaster()), aHint ); + Notify( *m_aCon1.m_pSdrObj->GetBroadcaster(), aHint ); } if( nullptr != m_aCon2.m_pSdrObj ) { SfxHint aHint( SfxHintId::DataChanged ); - Notify( *const_cast(m_aCon2.m_pSdrObj->GetBroadcaster()), aHint ); + Notify( *m_aCon2.m_pSdrObj->GetBroadcaster(), aHint ); } } diff --git a/svx/source/unodraw/unoshtxt.cxx b/svx/source/unodraw/unoshtxt.cxx index 37314e6f1bb6..33c5a5dc0c29 100644 --- a/svx/source/unodraw/unoshtxt.cxx +++ b/svx/source/unodraw/unoshtxt.cxx @@ -175,11 +175,11 @@ SvxTextEditSourceImpl::SvxTextEditSourceImpl( SdrObject* pObject, SdrText* pText mpText = pTextObj->getText( 0 ); } - if( mpModel ) - StartListening( *mpModel ); - if( mpObject ) + { + mpObject->AddListener( *this ); mpObject->AddObjectUser( *this ); + } } @@ -206,7 +206,7 @@ SvxTextEditSourceImpl::SvxTextEditSourceImpl( SdrObject& rObject, SdrText* pText mpText = pTextObj->getText( 0 ); } - StartListening( *mpModel ); + rObject.AddListener( *this ); StartListening( *mpView ); mpObject->AddObjectUser( *this ); @@ -366,9 +366,6 @@ void SvxTextEditSourceImpl::Notify(SfxBroadcaster& rBC, const SfxHint& rHint) } break; - case SdrHintKind::ModelCleared: - dispose(); - break; default: break; } @@ -426,6 +423,7 @@ void SvxTextEditSourceImpl::dispose() if( mpObject ) { + mpObject->RemoveListener( *this ); mpObject->RemoveObjectUser( *this ); mpObject = nullptr; } From 3c91fb758a429f51b89dfe9cea088691ced6d0c1 Mon Sep 17 00:00:00 2001 From: Julien Nabet Date: Wed, 26 Jun 2024 10:55:25 +0200 Subject: [PATCH 075/194] tdf#161786: fix Math crash when typing "oper" Change-Id: I8332e87e703f9138b8d13985b8697ad4b9f2191e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169539 Reviewed-by: Julien Nabet Tested-by: Jenkins --- starmath/source/node.cxx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/starmath/source/node.cxx b/starmath/source/node.cxx index 7be9effe4175..49ef500c2059 100644 --- a/starmath/source/node.cxx +++ b/starmath/source/node.cxx @@ -2189,7 +2189,9 @@ void SmSpecialNode::Prepare(const SmFormat &rFormat, const SmDocShell &rDocShell bool bIsSpecialSymbol = false; bool bIsArabic = false; - if (nullptr != (pSym = pp->GetSymbolManager().GetSymbolByName(GetToken().aText.subView(1)))) + if ((!GetToken().aText.isEmpty()) + && (nullptr + != (pSym = pp->GetSymbolManager().GetSymbolByName(GetToken().aText.subView(1))))) { sal_UCS4 cChar = pSym->GetCharacter(); OUString aTmp( &cChar, 1 ); From ccf633ea0ae00afa1f2dad3eaf1f9049a5603513 Mon Sep 17 00:00:00 2001 From: Bogdan Buzea Date: Tue, 25 Jun 2024 21:37:55 +0200 Subject: [PATCH 076/194] Resave with newer Glade version Change-Id: Ia53a3474107874d5b97156e8bc9a971db7a1e21a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169545 Tested-by: Jenkins Reviewed-by: Taichi Haradaguchi <20001722@ymail.ne.jp> --- sc/uiconfig/scalc/ui/allheaderfooterdialog.ui | 167 ++-------- sc/uiconfig/scalc/ui/autosum.ui | 48 +-- sc/uiconfig/scalc/ui/changesourcedialog.ui | 77 +++-- sc/uiconfig/scalc/ui/chardialog.ui | 163 ++------- sc/uiconfig/scalc/ui/conditionaliconset.ui | 56 ++-- sc/uiconfig/scalc/ui/conflictsdialog.ui | 76 ++--- sc/uiconfig/scalc/ui/dapiservicedialog.ui | 133 ++++---- sc/uiconfig/scalc/ui/databaroptions.ui | 312 +++++++++--------- sc/uiconfig/scalc/ui/dataformfragment.ui | 14 +- sc/uiconfig/scalc/ui/deleterowentry.ui | 59 ++-- sc/uiconfig/scalc/ui/findreplaceentry.ui | 73 ++-- sc/uiconfig/scalc/ui/floatingborderstyle.ui | 112 ++++--- sc/uiconfig/scalc/ui/floatinglinestyle.ui | 44 +-- sc/uiconfig/scalc/ui/gotosheetdialog.ui | 89 +++-- sc/uiconfig/scalc/ui/groupdialog.ui | 69 ++-- sc/uiconfig/scalc/ui/headerfooterdialog.ui | 107 ++---- sc/uiconfig/scalc/ui/leftfooterdialog.ui | 77 ++--- sc/uiconfig/scalc/ui/leftheaderdialog.ui | 77 ++--- sc/uiconfig/scalc/ui/listmenu.ui | 4 +- sc/uiconfig/scalc/ui/navigatorpanel.ui | 217 ++++++------ sc/uiconfig/scalc/ui/nosolutiondialog.ui | 51 ++- 21 files changed, 867 insertions(+), 1158 deletions(-) diff --git a/sc/uiconfig/scalc/ui/allheaderfooterdialog.ui b/sc/uiconfig/scalc/ui/allheaderfooterdialog.ui index 48cdc347875e..f80bae61bacd 100644 --- a/sc/uiconfig/scalc/ui/allheaderfooterdialog.ui +++ b/sc/uiconfig/scalc/ui/allheaderfooterdialog.ui @@ -1,34 +1,31 @@ - + - False - 6 + False + 6 Headers/Footers False True - 0 - 0 - dialog - - - + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _Reset True - True - True + True + True True @@ -41,10 +38,10 @@ _OK True - True - True - True - True + True + True + True + True True @@ -57,8 +54,8 @@ _Cancel True - True - True + True + True True @@ -71,8 +68,8 @@ _Help True - True - True + True + True True @@ -86,47 +83,23 @@ False True - end + end 0 True - True + True True True True - True + True True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -135,42 +108,18 @@ True - False + False Header (right) - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -182,43 +131,19 @@ True - False + False Header (left) 1 - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -230,43 +155,19 @@ True - False + False Footer (right) 2 - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -278,12 +179,12 @@ True - False + False Footer (left) 3 - False + False diff --git a/sc/uiconfig/scalc/ui/autosum.ui b/sc/uiconfig/scalc/ui/autosum.ui index 60d27f57c5d2..24440d32d2db 100644 --- a/sc/uiconfig/scalc/ui/autosum.ui +++ b/sc/uiconfig/scalc/ui/autosum.ui @@ -1,96 +1,96 @@ - + True - False + False True - False + False Sum - True + True True - False + False Average - True + True True - False + False Min - True + True True - False + False Max - True + True True - False + False Count - True + True True - False + False CountA - True + True True - False + False Product - True + True True - False + False Stdev - True + True True - False + False StdevP - True + True True - False + False Var - True + True True - False + False VarP - True + True diff --git a/sc/uiconfig/scalc/ui/changesourcedialog.ui b/sc/uiconfig/scalc/ui/changesourcedialog.ui index 49f4bf08a885..b0d36f1984c1 100644 --- a/sc/uiconfig/scalc/ui/changesourcedialog.ui +++ b/sc/uiconfig/scalc/ui/changesourcedialog.ui @@ -1,36 +1,33 @@ - + - False - 6 + False + 6 Change Source Data Range False True - 0 - 0 - normal - - - + 0 + 0 + normal - False + False vertical 12 - False - end + False + end _OK True - True - True - True - True + True + True + True + True True @@ -43,8 +40,8 @@ _Cancel True - True - True + True + True True @@ -57,8 +54,8 @@ _Help True - True - True + True + True True @@ -72,50 +69,50 @@ False True - end + end 0 True - False - 0 - none + False + 0 + none - + True - False - 6 + False 12 6 + 6 First _column as label True - True - False - True - True + True + False + True + True - 0 - 0 + 0 + 0 First _row as label True - True - False - True - True + True + False + True + True - 0 - 1 + 0 + 1 @@ -123,7 +120,7 @@ True - False + False Labels diff --git a/sc/uiconfig/scalc/ui/chardialog.ui b/sc/uiconfig/scalc/ui/chardialog.ui index 6cc8b6b01974..9dd487ad335f 100644 --- a/sc/uiconfig/scalc/ui/chardialog.ui +++ b/sc/uiconfig/scalc/ui/chardialog.ui @@ -1,31 +1,28 @@ - + - False - 6 + False + 6 Character False - dialog - - - + dialog - False + False vertical 12 - False - end + False + end _Reset True - True - True + True + True True @@ -38,10 +35,10 @@ _OK True - True - True - True - True + True + True + True + True True @@ -54,8 +51,8 @@ _Cancel True - True - True + True + True True @@ -68,8 +65,8 @@ _Help True - True - True + True + True True @@ -83,47 +80,23 @@ False True - end + end 0 True - True + True True True True - True + True True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -132,42 +105,18 @@ True - False + False Font - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -179,43 +128,19 @@ True - False + False Font Effects 1 - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -227,43 +152,19 @@ True - False + False Position 2 - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -275,12 +176,12 @@ True - False + False Highlighting 3 - False + False diff --git a/sc/uiconfig/scalc/ui/conditionaliconset.ui b/sc/uiconfig/scalc/ui/conditionaliconset.ui index 342a4747c012..27c0bf9cdb96 100644 --- a/sc/uiconfig/scalc/ui/conditionaliconset.ui +++ b/sc/uiconfig/scalc/ui/conditionaliconset.ui @@ -1,54 +1,54 @@ - + True - False + False start - 6 + 6 - + True - False - 6 - 12 + False + 6 + 12 True - False + False - = - < - > - <= - >= - <> + = + < + > + <= + >= + <> - 1 - 0 + 1 + 0 True - True - True + True True + True - 2 - 0 + 2 + 0 True - False + False Value Percent @@ -57,27 +57,27 @@ - 3 - 0 + 3 + 0 True - False + False center center missing-image - 0 - 0 + 0 + 0 - 0 - 0 + 0 + 0 diff --git a/sc/uiconfig/scalc/ui/conflictsdialog.ui b/sc/uiconfig/scalc/ui/conflictsdialog.ui index b12b5ad5c6dc..ae346f4269a0 100644 --- a/sc/uiconfig/scalc/ui/conflictsdialog.ui +++ b/sc/uiconfig/scalc/ui/conflictsdialog.ui @@ -1,5 +1,5 @@ - + @@ -15,30 +15,27 @@ - False - 6 + False + 6 Resolve Conflicts False - dialog - - - + dialog - False + False vertical 12 - False - end + False + end _Keep All Mine True - True - True - True + True + True + True False @@ -50,9 +47,9 @@ Keep _All Others True - True - True - True + True + True + True False @@ -64,8 +61,8 @@ _Cancel True - True - True + True + True True @@ -78,8 +75,8 @@ _Help True - True - True + True + True True @@ -87,31 +84,31 @@ True 3 True - True + True False True - end + end 0 True - False + False vertical 6 True - False + False start There are conflicting changes in this shared spreadsheet. Conflicts must be resolved before saving the spreadsheet. Keep either own or other changes. True - 120 + 120 0 @@ -123,20 +120,19 @@ True - True + True True True - in + in True - True - True + True + True True True liststore1 - 0 - True + 0 @@ -185,7 +181,7 @@ - + Changes @@ -199,16 +195,16 @@ True - False + False 6 - center + center Keep _Mine True - True - True - True + True + True + True False @@ -220,9 +216,9 @@ Keep _Other True - True - True - True + True + True + True False diff --git a/sc/uiconfig/scalc/ui/dapiservicedialog.ui b/sc/uiconfig/scalc/ui/dapiservicedialog.ui index b7ed4a32df4d..a03b0b143dd7 100644 --- a/sc/uiconfig/scalc/ui/dapiservicedialog.ui +++ b/sc/uiconfig/scalc/ui/dapiservicedialog.ui @@ -1,37 +1,34 @@ - + - False + False True True - 6 + 6 External Source True - 0 - 0 - dialog - - - + 0 + 0 + dialog - False + False True True vertical 12 - False - end + False + end _OK True - True - True + True + True True @@ -44,8 +41,8 @@ _Cancel True - True - True + True + True True @@ -58,8 +55,8 @@ _Help True - True - True + True + True True @@ -73,160 +70,160 @@ False True - end + end 0 True - False + False True True - 0 - none + 0 + none - + True - False - True - True - 6 - 6 + False 12 6 + True + True + 6 + 6 True - False + False start _Service - True + True 0 - 0 - 0 + 0 + 0 True - False + False start So_urce - True + True 0 - 0 - 1 + 0 + 1 True - False + False start _Name - True + True 0 - 0 - 2 + 0 + 2 True - False + False start Us_er - True + True 0 - 0 - 3 + 0 + 3 True - False + False start _Password - True + True 0 - 0 - 4 + 0 + 4 True - True + True True + True True - True - 1 - 4 + 1 + 4 True - True + True True + True True - True - 1 - 3 + 1 + 3 True - True + True True + True True - True - 1 - 2 + 1 + 2 True - True + True True + True True - True - 1 - 1 + 1 + 1 True - False + False True - 1 - 0 + 1 + 0 @@ -234,7 +231,7 @@ True - False + False Selection diff --git a/sc/uiconfig/scalc/ui/databaroptions.ui b/sc/uiconfig/scalc/ui/databaroptions.ui index 0fe698e5d7ab..6932d95d9bdb 100644 --- a/sc/uiconfig/scalc/ui/databaroptions.ui +++ b/sc/uiconfig/scalc/ui/databaroptions.ui @@ -1,27 +1,24 @@ - + - False - 6 + False + 6 Data Bar True - 0 - 0 - dialog - - - + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _Help @@ -41,10 +38,10 @@ _OK True - True - True - True - True + True + True + True + True True @@ -57,8 +54,8 @@ _Cancel True - True - True + True + True True @@ -71,65 +68,65 @@ False True - end + end 0 True - False + False vertical 12 True - False - 0 - none + False + 0 + none - + True - False - True - True - 6 - 6 + False 12 6 + True + True + 6 + 6 True - False + False end Minimum: - True - min + True + min - 0 - 0 + 0 + 0 True - False + False end Maximum: - True - max + True + max - 0 - 1 + 0 + 1 True - False + False True Automatic @@ -147,14 +144,14 @@ - 1 - 0 + 1 + 0 True - False + False True Automatic @@ -172,15 +169,15 @@ - 1 - 1 + 1 + 1 True - True - True + True + True True @@ -189,15 +186,15 @@ - 2 - 0 + 2 + 0 True - True - True + True + True True @@ -206,8 +203,8 @@ - 2 - 1 + 2 + 1 @@ -215,7 +212,7 @@ True - False + False Entry Values @@ -232,56 +229,59 @@ True - False - 0 - none + False + 0 + none - + True - False - True - True - 6 - 6 + False 12 6 + True + True + 6 + 6 True - False + False end Positive: - True - positive_colour + True + positive_colour - 0 - 0 + 0 + 0 True - False + False end Negative: - True - negative_colour + True + negative_colour - 0 - 1 + 0 + 1 True - False + False + False True 0 - True - + True + + + Select the color for the positive values @@ -289,18 +289,21 @@ - 1 - 0 + 1 + 0 True - False + False + False True 0 - True - + True + + + Select the color for the negative values @@ -308,28 +311,28 @@ - 1 - 1 + 1 + 1 True - False + False end Fill: - True - fill_type + True + fill_type - 0 - 2 + 0 + 2 True - False + False Color Gradient @@ -341,8 +344,8 @@ - 1 - 2 + 1 + 2 @@ -350,7 +353,7 @@ True - False + False Bar Colors @@ -367,52 +370,52 @@ True - False - 0 - none + False + 0 + none - + True - False - True - True - 6 - 6 + False 12 6 + True + True + 6 + 6 True - False + False end Position of vertical axis: - True - axis_pos + True + axis_pos - 0 - 0 + 0 + 0 True - False + False end Color of vertical axis: - True - axis_colour + True + axis_colour - 0 - 1 + 0 + 1 True - False + False True Automatic @@ -426,18 +429,21 @@ - 1 - 0 + 1 + 0 True - False + False + False True 0 - True - + True + + + Set the color of the vertical axis @@ -445,8 +451,8 @@ - 1 - 1 + 1 + 1 @@ -454,7 +460,7 @@ True - False + False Axis @@ -471,53 +477,53 @@ True - False - 0 - none + False + 0 + none - + True - False - True - True - 6 - 6 + False 12 6 + True + True + 6 + 6 True - False + False end Minimum bar length (%): - True - min_length + True + min_length - 0 - 0 + 0 + 0 True - False + False end Maximum bar length (%): - True - max_length + True + max_length - 0 - 1 + 0 + 1 True - True - True + True + True True @@ -526,15 +532,15 @@ - 1 - 0 + 1 + 0 True - True - True + True + True True @@ -543,8 +549,8 @@ - 1 - 1 + 1 + 1 @@ -552,7 +558,7 @@ True - False + False Bar Lengths @@ -570,10 +576,10 @@ Display bar only True - True - False - True - True + True + False + True + True Select to have only the bar visible and have value invisible @@ -588,7 +594,7 @@ - False + False The minimum value must be less than the maximum value. 0 diff --git a/sc/uiconfig/scalc/ui/dataformfragment.ui b/sc/uiconfig/scalc/ui/dataformfragment.ui index 96c7d30a9180..7f2fbe7d6bd3 100644 --- a/sc/uiconfig/scalc/ui/dataformfragment.ui +++ b/sc/uiconfig/scalc/ui/dataformfragment.ui @@ -1,22 +1,22 @@ - + True - True + True True False - True + True + 32 True - 32 True - False + False end - True - entry + True + entry 0 diff --git a/sc/uiconfig/scalc/ui/deleterowentry.ui b/sc/uiconfig/scalc/ui/deleterowentry.ui index b0004f8db83a..e51c57232329 100644 --- a/sc/uiconfig/scalc/ui/deleterowentry.ui +++ b/sc/uiconfig/scalc/ui/deleterowentry.ui @@ -1,79 +1,80 @@ - + + True - False + False 6 - 6 - 6 - 12 + 6 + 6 + 12 True - False + False - 0 - 0 + 0 + 0 3 True - False + False start Delete Row Action - True - ed_find + True + ed_find - 0 - 1 + 0 + 1 3 True - True + True True - 10 - True - Enter Value + 10 + True + Enter Value - 0 - 2 + 0 + 2 True - True + True True - 10 - True - Column + 10 + True + Column - 1 - 2 + 1 + 2 Delete True - True - False + True + False end - 2 - 2 + 2 + 2 diff --git a/sc/uiconfig/scalc/ui/findreplaceentry.ui b/sc/uiconfig/scalc/ui/findreplaceentry.ui index 1171b789dfbc..03582cefa5e7 100644 --- a/sc/uiconfig/scalc/ui/findreplaceentry.ui +++ b/sc/uiconfig/scalc/ui/findreplaceentry.ui @@ -1,93 +1,94 @@ - + + True - False - 6 - 6 - 6 - 12 + False + 6 + 6 + 6 + 12 True - False + False - 0 - 0 + 0 + 0 4 True - False + False start Find Replace Action - True - ed_find + True + ed_find - 0 - 1 + 0 + 1 4 True - True + True True - 7 - True - Find + 7 + True + Find - 0 - 2 + 0 + 2 True - True + True True - 7 - True - Replace With + 7 + True + Replace With - 1 - 2 + 1 + 2 True - True + True True - 6 - True - Column + 6 + True + Column - 2 - 2 + 2 + 2 Delete True - True - False + True + False end - 3 - 2 + 3 + 2 diff --git a/sc/uiconfig/scalc/ui/floatingborderstyle.ui b/sc/uiconfig/scalc/ui/floatingborderstyle.ui index 2640d06d051f..294185940224 100644 --- a/sc/uiconfig/scalc/ui/floatingborderstyle.ui +++ b/sc/uiconfig/scalc/ui/floatingborderstyle.ui @@ -1,37 +1,38 @@ - + - False - True - 4 + False + True + 4 none True - False + False vertical 6 - + True - False + False True True vertical - 6 + 6 True - True - icons - False + True + icons + False True - sc/res/sidebar/CellBorder_Empty_18x18.png + False + sc/res/sidebar/CellBorder_Empty_18x18.png False @@ -41,7 +42,8 @@ True - sc/res/sidebar/CellBorder_All_18x18.png + False + sc/res/sidebar/CellBorder_All_18x18.png False @@ -51,7 +53,8 @@ True - sc/res/sidebar/CellBorder_FourBorders_18x18.png + False + sc/res/sidebar/CellBorder_FourBorders_18x18.png False @@ -61,7 +64,8 @@ True - sc/res/sidebar/CellBorder_FourBorders_Thick_18x18.png + False + sc/res/sidebar/CellBorder_FourBorders_Thick_18x18.png False @@ -70,20 +74,21 @@ - 0 - 0 + 0 + 0 True - True - icons - False + True + icons + False True - sc/res/sidebar/CellBorder_Bottom_Thick_18x18.png + False + sc/res/sidebar/CellBorder_Bottom_Thick_18x18.png False @@ -93,7 +98,8 @@ True - sc/res/sidebar/CellBorder_Bottom_Double_18x18.png + False + sc/res/sidebar/CellBorder_Bottom_Double_18x18.png False @@ -103,7 +109,8 @@ True - sc/res/sidebar/CellBorder_TopThin_BottomThick_18x18.png + False + sc/res/sidebar/CellBorder_TopThin_BottomThick_18x18.png False @@ -113,7 +120,8 @@ True - sc/res/sidebar/CellBorder_TopSingle_BottomDouble_18x18.png + False + sc/res/sidebar/CellBorder_TopSingle_BottomDouble_18x18.png False @@ -122,20 +130,21 @@ - 0 - 3 + 0 + 3 True - True - icons - False + True + icons + False True - sc/res/sidebar/CellBorder_Left_18x18.png + False + sc/res/sidebar/CellBorder_Left_18x18.png False @@ -145,7 +154,8 @@ True - sc/res/sidebar/CellBorder_Right_18x18.png + False + sc/res/sidebar/CellBorder_Right_18x18.png False @@ -155,7 +165,8 @@ True - sc/res/sidebar/CellBorder_Top_18x18.png + False + sc/res/sidebar/CellBorder_Top_18x18.png False @@ -165,7 +176,8 @@ True - sc/res/sidebar/CellBorder_Bottom_18x18.png + False + sc/res/sidebar/CellBorder_Bottom_18x18.png False @@ -174,21 +186,22 @@ - 0 - 1 + 0 + 1 True - True - icons - False + True + icons + False True - True - sc/res/sidebar/CellBorder_RightDiagonal_18x18.png + False + True + sc/res/sidebar/CellBorder_RightDiagonal_18x18.png False @@ -198,8 +211,9 @@ True - True - sc/res/sidebar/CellBorder_LeftDiagonal_18x18.png + False + True + sc/res/sidebar/CellBorder_LeftDiagonal_18x18.png False @@ -209,8 +223,9 @@ True - True - sc/res/sidebar/CellBorder_TopAndBottom_18x18.png + False + True + sc/res/sidebar/CellBorder_TopAndBottom_18x18.png False @@ -220,8 +235,9 @@ True - True - sc/res/sidebar/CellBorder_LeftAndRight_18x18.png + False + True + sc/res/sidebar/CellBorder_LeftAndRight_18x18.png False @@ -230,8 +246,8 @@ - 0 - 2 + 0 + 2 diff --git a/sc/uiconfig/scalc/ui/floatinglinestyle.ui b/sc/uiconfig/scalc/ui/floatinglinestyle.ui index 0f8c4d016afe..7ec51add0056 100644 --- a/sc/uiconfig/scalc/ui/floatinglinestyle.ui +++ b/sc/uiconfig/scalc/ui/floatinglinestyle.ui @@ -1,58 +1,58 @@ - + - False - True - 4 + False + True + 4 none True - False + False vertical 6 - + True - False + False True True vertical - 6 + 6 _More Options... True - True - True - True + True + True + True - 0 - 1 + 0 + 1 True - True + True True True - never - never - in + never + never + in True - False + False True - True - True + True + True GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_STRUCTURE_MASK True True @@ -62,8 +62,8 @@ - 0 - 0 + 0 + 0 diff --git a/sc/uiconfig/scalc/ui/gotosheetdialog.ui b/sc/uiconfig/scalc/ui/gotosheetdialog.ui index 93c2e72a0e10..e0f87dc5d293 100644 --- a/sc/uiconfig/scalc/ui/gotosheetdialog.ui +++ b/sc/uiconfig/scalc/ui/gotosheetdialog.ui @@ -1,5 +1,5 @@ - + @@ -11,35 +11,32 @@ - False - 6 + False + 6 Go to Sheet False True - 0 - 0 - dialog - - - + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _OK True - True - True - True - True - True + True + True + True + True + True False @@ -51,9 +48,9 @@ _Cancel True - True - True - True + True + True + True False @@ -65,9 +62,9 @@ _Help True - True - True - True + True + True + True False @@ -80,26 +77,26 @@ False True - end + end 0 True - False + False True True - 0 - none + 0 + none True - True + True + True True - True - + Type some letters of sheet name to find it. @@ -108,9 +105,9 @@ True - False + False _Type a sheet name - True + True @@ -126,30 +123,30 @@ True - False + False True True - 0 - none + 0 + none True - True - 12 - 6 + True + 12 + 6 True True - in + in True - True + True True liststore1 - False - False - 0 - False + False + False + 0 + False @@ -170,9 +167,9 @@ True - False + False _Sheets - True + True diff --git a/sc/uiconfig/scalc/ui/groupdialog.ui b/sc/uiconfig/scalc/ui/groupdialog.ui index 1924034bb9a5..f39b775a7388 100644 --- a/sc/uiconfig/scalc/ui/groupdialog.ui +++ b/sc/uiconfig/scalc/ui/groupdialog.ui @@ -1,33 +1,33 @@ - + - False - 6 + False + 6 Group False True - 0 - 0 - dialog + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _OK True - True - True - True - True + True + True + True + True True @@ -40,8 +40,8 @@ _Cancel True - True - True + True + True True @@ -54,8 +54,8 @@ _Help True - True - True + True + True True @@ -69,36 +69,36 @@ False True - end + end 0 True - False + False True True - 0 - none + 0 + none True - False + False + 12 + 6 True vertical 6 - 12 - 6 _Rows True - True - False - True + True + False + True True - True + True False @@ -110,10 +110,10 @@ _Columns True - True - False - True - True + True + False + True + True rows @@ -127,7 +127,7 @@ True - False + False True Include 0 @@ -150,8 +150,5 @@ cancel help - - - diff --git a/sc/uiconfig/scalc/ui/headerfooterdialog.ui b/sc/uiconfig/scalc/ui/headerfooterdialog.ui index 40a4aa7c49c6..f928d7e598bd 100644 --- a/sc/uiconfig/scalc/ui/headerfooterdialog.ui +++ b/sc/uiconfig/scalc/ui/headerfooterdialog.ui @@ -1,34 +1,31 @@ - + - False - 6 + False + 6 Headers/Footers False True - 0 - 0 - dialog - - - + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _Reset True - True - True + True + True True @@ -41,10 +38,10 @@ _OK True - True - True - True - True + True + True + True + True True @@ -57,8 +54,8 @@ _Cancel True - True - True + True + True True @@ -71,8 +68,8 @@ _Help True - True - True + True + True True @@ -86,47 +83,23 @@ False True - end + end 0 True - True + True True True True - True + True True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -135,42 +108,18 @@ True - False + False Header - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -182,12 +131,12 @@ True - False + False Footer 1 - False + False diff --git a/sc/uiconfig/scalc/ui/leftfooterdialog.ui b/sc/uiconfig/scalc/ui/leftfooterdialog.ui index 24e881ce4ace..b48ce782f30c 100644 --- a/sc/uiconfig/scalc/ui/leftfooterdialog.ui +++ b/sc/uiconfig/scalc/ui/leftfooterdialog.ui @@ -1,34 +1,31 @@ - + - False - 6 + False + 6 Footer (left) False True - 0 - 0 - dialog - - - + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _Reset True - True - True + True + True True @@ -41,10 +38,10 @@ _OK True - True - True - True - True + True + True + True + True True @@ -57,8 +54,8 @@ _Cancel True - True - True + True + True True @@ -71,8 +68,8 @@ _Help True - True - True + True + True True @@ -86,47 +83,23 @@ False True - end + end 0 True - True + True True True True - True + True True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -135,11 +108,11 @@ True - False + False Footer (left) - False + False diff --git a/sc/uiconfig/scalc/ui/leftheaderdialog.ui b/sc/uiconfig/scalc/ui/leftheaderdialog.ui index 3f0ea34c0839..779f4028a999 100644 --- a/sc/uiconfig/scalc/ui/leftheaderdialog.ui +++ b/sc/uiconfig/scalc/ui/leftheaderdialog.ui @@ -1,34 +1,31 @@ - + - False - 6 + False + 6 Header (left) False True - 0 - 0 - dialog - - - + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _Reset True - True - True + True + True True @@ -41,10 +38,10 @@ _OK True - True - True - True - True + True + True + True + True True @@ -57,8 +54,8 @@ _Cancel True - True - True + True + True True @@ -71,8 +68,8 @@ _Help True - True - True + True + True True @@ -86,47 +83,23 @@ False True - end + end 0 True - True + True True True True - True + True True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -135,11 +108,11 @@ True - False + False Header (left) - False + False diff --git a/sc/uiconfig/scalc/ui/listmenu.ui b/sc/uiconfig/scalc/ui/listmenu.ui index 6a36672621fb..a89a63a03ac7 100644 --- a/sc/uiconfig/scalc/ui/listmenu.ui +++ b/sc/uiconfig/scalc/ui/listmenu.ui @@ -1,9 +1,9 @@ - + True - False + False diff --git a/sc/uiconfig/scalc/ui/navigatorpanel.ui b/sc/uiconfig/scalc/ui/navigatorpanel.ui index a5b9b3038be6..3934bdaac402 100644 --- a/sc/uiconfig/scalc/ui/navigatorpanel.ui +++ b/sc/uiconfig/scalc/ui/navigatorpanel.ui @@ -1,28 +1,28 @@ - + 100 - 1 - 10 + 1 + 10 100 - 1 - 10 + 1 + 10 True - False + False True - False + False Insert as Hyperlink - True + True True - True + True Inserts a hyperlink when you drag-and-drop an object from the Navigator into a document. @@ -33,10 +33,10 @@ True - False + False Insert as Link - True - True + True + True hyperlink @@ -48,10 +48,10 @@ True - False + False Insert as Copy - True - True + True + True hyperlink @@ -86,63 +86,63 @@ True - False + False True True - 6 + 6 - + True - False + False True True - 6 - 12 + 6 + 12 - + True - False + False True - 3 - 6 + 3 + 6 True - False + False start Column: - True - column + True + column - 0 - 0 + 0 + 0 True - False + False start Row: - True - row + True + row - 0 - 1 + 0 + 1 True - True - Column + True + Column True - adjustment1 True + adjustment1 Enter the column letter. Press Enter to reposition the cell cursor to the specified column in the same row. @@ -150,18 +150,18 @@ - 1 - 0 + 1 + 0 True - True - Row + True + Row True - adjustment2 True + adjustment2 Enter a row number. Press Enter to reposition the cell cursor to the specified row in the same column. @@ -169,22 +169,23 @@ - 1 - 1 + 1 + 1 True - True - icons - False + True + icons + False 2 True - Data Range - sc/res/na03.png + False + Data Range + sc/res/na03.png Specifies the current data range denoted by the position of the cell cursor. @@ -199,8 +200,9 @@ True - Start - sc/res/na05.png + False + Start + sc/res/na05.png Moves to the cell at the beginning of the current data range, which you can highlight using the Data Range button. @@ -215,8 +217,9 @@ True - End - sc/res/na06.png + False + End + sc/res/na06.png Moves to the cell at the end of the current data range, which you can highlight using the Data Range button. @@ -231,8 +234,9 @@ True - Contents - sc/res/na011.png + False + Contents + sc/res/na011.png False @@ -241,22 +245,23 @@ - 2 - 0 + 2 + 0 True - True - icons - False + True + icons + False 2 True - Toggle - sc/res/na010.png + False + Toggle + sc/res/na010.png Allows you to hide/show the contents. @@ -271,8 +276,9 @@ True - Scenarios - sc/res/na07.png + False + Scenarios + sc/res/na07.png Displays all available scenarios. Double-click a name to apply that scenario. @@ -287,8 +293,9 @@ True - Drag Mode - sc/res/na09.png + False + Drag Mode + sc/res/na09.png Opens a submenu for selecting the drag mode. You decide which action is performed when dragging and dropping an object from the Navigator into a document. Depending on the mode you select, the icon indicates whether a hyperlink, link or a copy is created. @@ -302,21 +309,21 @@ - 2 - 1 + 2 + 1 - 0 - 0 + 0 + 0 True - True - Document + True + Document Active Window @@ -325,30 +332,30 @@ - 0 - 3 + 0 + 3 True - True + True True True - in + in - -1 + -1 True - True - True - True + True + True + True True True liststore1 - False + False True - 1 + 1 @@ -380,14 +387,14 @@ - 0 - 1 + 0 + 1 - False - True + False + True True True vertical @@ -396,22 +403,22 @@ True - True + True True True - in + in - -1 + -1 True - True - True + True + True True True liststore2 - False - 0 - False + False + 0 + False @@ -438,16 +445,16 @@ True - True - in + True + in True - True + True False - word - False - False + word + False + False @@ -459,14 +466,14 @@ - 0 - 2 + 0 + 2 - 0 - 0 + 0 + 0 diff --git a/sc/uiconfig/scalc/ui/nosolutiondialog.ui b/sc/uiconfig/scalc/ui/nosolutiondialog.ui index cb7c1e264712..359b789cec50 100644 --- a/sc/uiconfig/scalc/ui/nosolutiondialog.ui +++ b/sc/uiconfig/scalc/ui/nosolutiondialog.ui @@ -1,36 +1,33 @@ - + - False - 6 + False + 6 No Solution False True - 0 - 0 - dialog - - - + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _OK True - True - True - True - True + True + True + True + True True @@ -43,40 +40,40 @@ False True - end + end 0 - + True - False + False True - 6 + 6 True - False + False True No solution was found. - 0 - 0 + 0 + 0 True - False + False True True - 56 + 56 - 0 - 1 + 0 + 1 From f8ade4e11d49f6c32146254aa7f8d024c3798321 Mon Sep 17 00:00:00 2001 From: Bogdan Buzea Date: Tue, 25 Jun 2024 20:55:53 +0200 Subject: [PATCH 077/194] Resave with newer Glade version Change-Id: Iee7c65b65d545224fe4518e9c91d97dc3352eef2 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169504 Tested-by: Jenkins Reviewed-by: Taichi Haradaguchi <20001722@ymail.ne.jp> --- sw/uiconfig/swriter/ui/asksearchdialog.ui | 36 +- sw/uiconfig/swriter/ui/assignfragment.ui | 20 +- sw/uiconfig/swriter/ui/captiondialog.ui | 39 +- sw/uiconfig/swriter/ui/checkbox.ui | 12 +- sw/uiconfig/swriter/ui/columndialog.ui | 68 ++-- sw/uiconfig/swriter/ui/combobox.ui | 12 +- sw/uiconfig/swriter/ui/comboboxfragment.ui | 6 +- .../ui/datasourcesunavailabledialog.ui | 18 +- sw/uiconfig/swriter/ui/dateformfielddialog.ui | 71 ++-- .../swriter/ui/dropdownformfielddialog.ui | 143 ++++---- sw/uiconfig/swriter/ui/editbox.ui | 8 +- sw/uiconfig/swriter/ui/envdialog.ui | 153 ++------ sw/uiconfig/swriter/ui/footendnotedialog.ui | 107 ++---- sw/uiconfig/swriter/ui/formatsectiondialog.ui | 169 ++------- sw/uiconfig/swriter/ui/inforeadonlydialog.ui | 16 +- sw/uiconfig/swriter/ui/inputeditbox.ui | 8 +- .../swriter/ui/insertautotextdialog.ui | 67 ++-- sw/uiconfig/swriter/ui/jumpposbox.ui | 8 +- sw/uiconfig/swriter/ui/mailmergedialog.ui | 79 ++-- sw/uiconfig/swriter/ui/mastercontextmenu.ui | 62 ++-- sw/uiconfig/swriter/ui/mergeconnectdialog.ui | 85 +++-- sw/uiconfig/swriter/ui/mmsendmails.ui | 93 +++-- sw/uiconfig/swriter/ui/newuserindexdialog.ui | 77 ++-- sw/uiconfig/swriter/ui/objectdialog.ui | 88 ++--- sw/uiconfig/swriter/ui/pagecolumncontrol.ui | 210 +++++------ sw/uiconfig/swriter/ui/pagemargincontrol.ui | 270 +++++++------- .../swriter/ui/pageorientationcontrol.ui | 46 +-- sw/uiconfig/swriter/ui/pagesizecontrol.ui | 46 +-- sw/uiconfig/swriter/ui/picturedialog.ui | 343 +++--------------- sw/uiconfig/swriter/ui/poseditbox.ui | 10 +- sw/uiconfig/swriter/ui/previewmenu.ui | 24 +- sw/uiconfig/swriter/ui/printmonitordialog.ui | 43 +-- .../swriter/ui/querydefaultcompatdialog.ui | 18 +- sw/uiconfig/swriter/ui/readonlymenu.ui | 110 +++--- sw/uiconfig/swriter/ui/renameentrydialog.ui | 53 ++- sw/uiconfig/swriter/ui/saveashtmldialog.ui | 18 +- sw/uiconfig/swriter/ui/savemonitordialog.ui | 43 +-- .../swriter/ui/selectautotextdialog.ui | 65 ++-- sw/uiconfig/swriter/ui/sidebarstylepresets.ui | 34 +- sw/uiconfig/swriter/ui/subjectdialog.ui | 57 ++- sw/uiconfig/swriter/ui/tablepreviewdialog.ui | 47 ++- sw/uiconfig/swriter/ui/tableproperties.ui | 193 ++-------- sw/uiconfig/swriter/ui/tocdialog.ui | 215 +++-------- sw/uiconfig/swriter/ui/tokenwidget.ui | 60 +-- sw/uiconfig/swriter/ui/toxbuttonwidget.ui | 6 +- sw/uiconfig/swriter/ui/toxentrywidget.ui | 8 +- .../swriter/ui/warnhiddensectiondialog.ui | 18 +- sw/uiconfig/swriter/ui/wordcount-mobile.ui | 243 ++++++------- 48 files changed, 1418 insertions(+), 2207 deletions(-) diff --git a/sw/uiconfig/swriter/ui/asksearchdialog.ui b/sw/uiconfig/swriter/ui/asksearchdialog.ui index 78f1f73c6070..c1aab825b9b6 100644 --- a/sw/uiconfig/swriter/ui/asksearchdialog.ui +++ b/sw/uiconfig/swriter/ui/asksearchdialog.ui @@ -1,30 +1,30 @@ - + - False + False False True - dialog - True - question + dialog + True + question To proceed with this action, you must first turn off the "undo" function. Do you want to turn off the "undo" function? - False + False vertical 24 - False + False _No True - True - True - True + True + True + True False @@ -36,11 +36,11 @@ _Yes True - True - True - True - True - True + True + True + True + True + True False @@ -52,8 +52,8 @@ _Cancel True - True - True + True + True True @@ -66,7 +66,7 @@ False True - end + end 0 diff --git a/sw/uiconfig/swriter/ui/assignfragment.ui b/sw/uiconfig/swriter/ui/assignfragment.ui index 3d3598386f5d..77689bcb00d4 100644 --- a/sw/uiconfig/swriter/ui/assignfragment.ui +++ b/sw/uiconfig/swriter/ui/assignfragment.ui @@ -1,22 +1,22 @@ - + - - True - False - True - combobox - 0 - True - False + False True + + True + False + True + combobox + 0 + True - False + False 0 diff --git a/sw/uiconfig/swriter/ui/captiondialog.ui b/sw/uiconfig/swriter/ui/captiondialog.ui index 9b4a91f7e1a2..bbe450df4a6d 100644 --- a/sw/uiconfig/swriter/ui/captiondialog.ui +++ b/sw/uiconfig/swriter/ui/captiondialog.ui @@ -1,36 +1,33 @@ - + - False - 6 + False + 6 Caption False True - 0 - 0 - dialog - - - + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _OK True - True - True - True - True + True + True + True + True True @@ -43,8 +40,8 @@ _Cancel True - True - True + True + True True @@ -57,8 +54,8 @@ _Help True - True - True + True + True True @@ -72,7 +69,7 @@ False True - end + end 0 diff --git a/sw/uiconfig/swriter/ui/checkbox.ui b/sw/uiconfig/swriter/ui/checkbox.ui index 96621977c296..cc0bdd340161 100644 --- a/sw/uiconfig/swriter/ui/checkbox.ui +++ b/sw/uiconfig/swriter/ui/checkbox.ui @@ -1,21 +1,21 @@ - + True - False + False True 6 True - True - False + True + False True True - True - True + True + True False diff --git a/sw/uiconfig/swriter/ui/columndialog.ui b/sw/uiconfig/swriter/ui/columndialog.ui index 5ac8b4aa17fa..bee23ed3e3d5 100644 --- a/sw/uiconfig/swriter/ui/columndialog.ui +++ b/sw/uiconfig/swriter/ui/columndialog.ui @@ -1,51 +1,31 @@ - + - False - 6 + False + 6 Columns False True - dialog - - - + dialog - False + False vertical 12 - - - True - False - vertical - 12 - - - - - - False - True - start - 0 - - - False - end + False + end _OK True - True - True - True - True + True + True + True + True True @@ -58,8 +38,8 @@ _Cancel True - True - True + True + True True @@ -72,8 +52,8 @@ _Help True - True - True + True + True True @@ -87,7 +67,23 @@ False True - end + end + 0 + + + + + True + False + vertical + 12 + + + + + + False + True 0 diff --git a/sw/uiconfig/swriter/ui/combobox.ui b/sw/uiconfig/swriter/ui/combobox.ui index 1f4134a2cc07..ec73974ed57d 100644 --- a/sw/uiconfig/swriter/ui/combobox.ui +++ b/sw/uiconfig/swriter/ui/combobox.ui @@ -1,5 +1,5 @@ - + @@ -15,20 +15,20 @@ - 150 + 150 True - False + False True 6 True - False + False True True liststore4 - 0 - 1 + 0 + 1 diff --git a/sw/uiconfig/swriter/ui/comboboxfragment.ui b/sw/uiconfig/swriter/ui/comboboxfragment.ui index e2a95e8cfe54..f81bce6480a0 100644 --- a/sw/uiconfig/swriter/ui/comboboxfragment.ui +++ b/sw/uiconfig/swriter/ui/comboboxfragment.ui @@ -1,14 +1,14 @@ - + True - False + False vertical - False + False False diff --git a/sw/uiconfig/swriter/ui/datasourcesunavailabledialog.ui b/sw/uiconfig/swriter/ui/datasourcesunavailabledialog.ui index b3aa206c7fa9..4a1686970767 100644 --- a/sw/uiconfig/swriter/ui/datasourcesunavailabledialog.ui +++ b/sw/uiconfig/swriter/ui/datasourcesunavailabledialog.ui @@ -1,31 +1,31 @@ - + - False + False Create a New Data Source? False True - dialog - True - question + dialog + True + question ok-cancel No data sources are available. Create a new one? - No data source has been set up yet. You need a data source, such as a database, to supply data (for example, names and addresses) for the fields. + No data source has been set up yet. You need a data source, such as a database, to supply data (for example, names and addresses) for the fields. - False + False vertical 12 - False + False False True - end + end 0 diff --git a/sw/uiconfig/swriter/ui/dateformfielddialog.ui b/sw/uiconfig/swriter/ui/dateformfielddialog.ui index b4c79879f722..a9ecbcd166db 100644 --- a/sw/uiconfig/swriter/ui/dateformfielddialog.ui +++ b/sw/uiconfig/swriter/ui/dateformfielddialog.ui @@ -1,5 +1,5 @@ - + @@ -11,27 +11,27 @@ - False - 6 + False + 6 Date Picker Content Control - dialog + dialog - False + False vertical 12 - False - end + False + end _OK True - True - True - True - True + True + True + True + True True @@ -44,8 +44,8 @@ _Cancel True - True - True + True + True True @@ -58,8 +58,8 @@ _Help True - True - True + True + True True @@ -73,48 +73,48 @@ False True - end + end 0 - + True - False - 12 + False + 12 True - False + False Date Format - True - date_formats_treeview + True + date_formats_treeview 0 - 0 - 0 + 0 + 0 True - True + True True True - in + in True - True + True True True liststore1 - False - False - 0 - False + False + False + 0 + False @@ -132,15 +132,15 @@ - 0 - 1 + 0 + 1 False True - end + end 1 @@ -151,8 +151,5 @@ cancel help - - - diff --git a/sw/uiconfig/swriter/ui/dropdownformfielddialog.ui b/sw/uiconfig/swriter/ui/dropdownformfielddialog.ui index ea6711540fc1..eacfe30d14de 100644 --- a/sw/uiconfig/swriter/ui/dropdownformfielddialog.ui +++ b/sw/uiconfig/swriter/ui/dropdownformfielddialog.ui @@ -1,5 +1,5 @@ - + @@ -11,30 +11,27 @@ - False - 6 + False + 6 Drop-down Form Field - dialog - - - + dialog - False + False vertical 12 - False - end + False + end _OK True - True - True - True - True + True + True + True + True True @@ -47,8 +44,8 @@ _Cancel True - True - True + True + True True @@ -61,8 +58,8 @@ _Help True - True - True + True + True True @@ -76,108 +73,108 @@ False True - end + end 0 - + True - False - 12 + False + 12 - + True - False + False True - 6 + 6 True - False + False Item - True - item_entry + True + item_entry 0 - 0 - 0 + 0 + 0 True - True + True True + True True - True - 0 - 1 + 0 + 1 - 0 - 0 + 0 + 0 _Add True - True - True + True + True start True - 0 - 1 + 0 + 1 - + True - False - 6 + False + 6 True - False + False Items on list - True - items_treeview + True + items_treeview 0 - 0 - 0 + 0 + 0 True - True + True True True - in + in True - True + True True True liststore1 - False - False - 0 - False + False + False + 0 + False @@ -195,23 +192,23 @@ - 0 - 1 + 0 + 1 True - False + False 6 - start + start _Remove True - True - True - True + True + True + True False @@ -223,9 +220,9 @@ Move Up True - True - True - True + True + True + True False @@ -237,9 +234,9 @@ Move Down True - True - True - True + True + True + True False @@ -249,21 +246,21 @@ - 0 - 2 + 0 + 2 - 0 - 2 + 0 + 2 False True - end + end 1 diff --git a/sw/uiconfig/swriter/ui/editbox.ui b/sw/uiconfig/swriter/ui/editbox.ui index d36884edc4b0..a91eb62367d9 100644 --- a/sw/uiconfig/swriter/ui/editbox.ui +++ b/sw/uiconfig/swriter/ui/editbox.ui @@ -1,20 +1,20 @@ - + True - False + False True 6 True - True + True True True + 4 True - 4 False diff --git a/sw/uiconfig/swriter/ui/envdialog.ui b/sw/uiconfig/swriter/ui/envdialog.ui index b608653dfbff..a0aa3428c1de 100644 --- a/sw/uiconfig/swriter/ui/envdialog.ui +++ b/sw/uiconfig/swriter/ui/envdialog.ui @@ -1,33 +1,33 @@ - + - False - 6 + False + 6 Envelope True - 0 - 0 - dialog + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _New Document True - True - True - True - True - True + True + True + True + True + True False @@ -39,9 +39,9 @@ _Insert True - True - True - True + True + True + True False @@ -52,10 +52,10 @@ _Modify - True - True - True - True + True + True + True + True False @@ -67,8 +67,8 @@ _Cancel True - True - True + True + True True @@ -81,8 +81,8 @@ _Help True - True - True + True + True True @@ -96,8 +96,8 @@ _Reset True - True - True + True + True True @@ -110,47 +110,23 @@ False True - end + end 0 True - True + True True True True - True + True True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -159,42 +135,18 @@ True - False + False Envelope - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -206,43 +158,19 @@ True - False + False Format 1 - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -254,12 +182,12 @@ True - False + False Printer 2 - False + False @@ -279,8 +207,5 @@ help reset - - - diff --git a/sw/uiconfig/swriter/ui/footendnotedialog.ui b/sw/uiconfig/swriter/ui/footendnotedialog.ui index 832e55a6ac37..0d2b81aa2a33 100644 --- a/sw/uiconfig/swriter/ui/footendnotedialog.ui +++ b/sw/uiconfig/swriter/ui/footendnotedialog.ui @@ -1,30 +1,30 @@ - + - False - 6 + False + 6 Settings of Footnotes and Endnotes False True - 0 - 0 - dialog + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _Reset - True - True + True + True True @@ -37,10 +37,10 @@ _OK True - True - True - True - True + True + True + True + True True @@ -53,8 +53,8 @@ _Cancel True - True - True + True + True True @@ -67,8 +67,8 @@ _Help True - True - True + True + True True @@ -82,47 +82,23 @@ False True - end + end 0 True - True + True True True True - True + True True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -131,42 +107,18 @@ True - False + False Footnotes - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -178,12 +130,12 @@ True - False + False Endnotes 1 - False + False @@ -200,8 +152,5 @@ cancel help - - - diff --git a/sw/uiconfig/swriter/ui/formatsectiondialog.ui b/sw/uiconfig/swriter/ui/formatsectiondialog.ui index c9235b949ccc..19746f70e6de 100644 --- a/sw/uiconfig/swriter/ui/formatsectiondialog.ui +++ b/sw/uiconfig/swriter/ui/formatsectiondialog.ui @@ -1,37 +1,34 @@ - + - False - 6 + False + 6 Options False True - 0 - 0 - dialog - - - + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _OK True - True - True - True - True - True + True + True + True + True + True False @@ -43,8 +40,8 @@ _Cancel True - True - True + True + True True @@ -57,8 +54,8 @@ _Help True - True - True + True + True True @@ -72,8 +69,8 @@ _Reset True - True - True + True + True True @@ -86,47 +83,23 @@ False True - end + end 0 True - True + True True True True - True + True True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -135,42 +108,18 @@ True - False + False Columns - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -182,43 +131,19 @@ True - False + False Indents 1 - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -230,43 +155,19 @@ True - False + False Background 2 - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -278,12 +179,12 @@ True - False + False Footnotes/Endnotes 3 - False + False diff --git a/sw/uiconfig/swriter/ui/inforeadonlydialog.ui b/sw/uiconfig/swriter/ui/inforeadonlydialog.ui index 3714ddab248a..922197289bf5 100644 --- a/sw/uiconfig/swriter/ui/inforeadonlydialog.ui +++ b/sw/uiconfig/swriter/ui/inforeadonlydialog.ui @@ -1,30 +1,30 @@ - + - False + False Read-Only Content False True - dialog - True + dialog + True ok Write-protected content cannot be changed. - No modifications will be accepted. + No modifications will be accepted. - False + False vertical 12 - False + False False True - end + end 0 diff --git a/sw/uiconfig/swriter/ui/inputeditbox.ui b/sw/uiconfig/swriter/ui/inputeditbox.ui index ff3fbf5bb064..39bfb5029da7 100644 --- a/sw/uiconfig/swriter/ui/inputeditbox.ui +++ b/sw/uiconfig/swriter/ui/inputeditbox.ui @@ -1,20 +1,20 @@ - + True - False + False True 6 True - True + True True True + 0 True - 0 False diff --git a/sw/uiconfig/swriter/ui/insertautotextdialog.ui b/sw/uiconfig/swriter/ui/insertautotextdialog.ui index ef13a45b0ce5..f9bd640e62f6 100644 --- a/sw/uiconfig/swriter/ui/insertautotextdialog.ui +++ b/sw/uiconfig/swriter/ui/insertautotextdialog.ui @@ -1,5 +1,5 @@ - + @@ -11,34 +11,31 @@ - False - 6 + False + 6 Insert AutoText False True - 0 - 0 - dialog - - - + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _OK True - True - True - True - True + True + True + True + True True @@ -51,8 +48,8 @@ _Cancel True - True - True + True + True True @@ -65,8 +62,8 @@ _Help True - True - True + True + True True @@ -80,39 +77,39 @@ False True - end + end 0 True - False + False True True - 0 - none + 0 + none True - True - True - True - in + True 12 6 + True + True + in True - True - True + True + True True True liststore1 - False - False - 0 - False + False + False + 0 + False @@ -135,7 +132,7 @@ True - False + False Autotexts for Shortcut diff --git a/sw/uiconfig/swriter/ui/jumpposbox.ui b/sw/uiconfig/swriter/ui/jumpposbox.ui index 3e9838263daf..ec4046680002 100644 --- a/sw/uiconfig/swriter/ui/jumpposbox.ui +++ b/sw/uiconfig/swriter/ui/jumpposbox.ui @@ -1,19 +1,19 @@ - + True - False + False True 6 True - True + True True + 3 True - 3 False diff --git a/sw/uiconfig/swriter/ui/mailmergedialog.ui b/sw/uiconfig/swriter/ui/mailmergedialog.ui index 1ba60f22d1f4..f407b0c9fd2e 100644 --- a/sw/uiconfig/swriter/ui/mailmergedialog.ui +++ b/sw/uiconfig/swriter/ui/mailmergedialog.ui @@ -1,35 +1,32 @@ - + - False - 6 + False + 6 Mail Merge True - 0 - 0 - dialog - - - + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _OK True - True - True - True - True + True + True + True + True True @@ -42,8 +39,8 @@ _Cancel True - True - True + True + True True @@ -56,8 +53,8 @@ _Help True - True - True + True + True True @@ -70,55 +67,55 @@ False True - end + end 0 True - False + False True True - 0 - none + 0 + none - + True - False - True - 6 + False 12 6 + True + 6 From this _document True - True - False - True + True + False + True True - True + True - 0 - 0 + 0 + 0 From a _template True - True - False - True - True + True + False + True + True document - 0 - 1 + 0 + 1 @@ -126,7 +123,7 @@ True - False + False Create diff --git a/sw/uiconfig/swriter/ui/mastercontextmenu.ui b/sw/uiconfig/swriter/ui/mastercontextmenu.ui index a341e4173070..189d0ac43c5e 100644 --- a/sw/uiconfig/swriter/ui/mastercontextmenu.ui +++ b/sw/uiconfig/swriter/ui/mastercontextmenu.ui @@ -1,50 +1,50 @@ - + True - False + False True - False + False _Update - True + True True - False + False True - False + False Selection - True + True True - False + False Indexes - True + True True - False + False Links - True + True True - False + False All - True + True @@ -54,59 +54,59 @@ True - False + False Edit - True + True True - False + False Edit link - True + True True - False + False Insert - True + True True - False + False True - False + False _Index - True + True True - False + False File - True + True True - False + False New Document - True + True True - False + False Text - True + True @@ -116,15 +116,15 @@ True - False + False True - False + False _Delete - True + True diff --git a/sw/uiconfig/swriter/ui/mergeconnectdialog.ui b/sw/uiconfig/swriter/ui/mergeconnectdialog.ui index e8b02fa5328b..d416ece69f20 100644 --- a/sw/uiconfig/swriter/ui/mergeconnectdialog.ui +++ b/sw/uiconfig/swriter/ui/mergeconnectdialog.ui @@ -1,32 +1,29 @@ - + - False - 6 + False + 6 Data Source Connection - dialog - - - + dialog - False + False vertical 12 - False - end + False + end _OK True - True - True - True - True + True + True + True + True True @@ -39,8 +36,8 @@ _Cancel True - True - True + True + True True @@ -53,8 +50,8 @@ _Help True - True - True + True + True True @@ -68,73 +65,73 @@ False True - end + end 0 True - False + False True True - 0 - none + 0 + none - + True - False - True - 6 + False 12 6 + True + 6 _Use existing True - True - False - True + True + False + True True - True + True - 0 - 0 + 0 + 0 _Create new connection True - True - False - True - True + True + False + True + True existing - 0 - 1 + 0 + 1 True - False + False Fields are used to personalize form letters. The fields are placeholders for data from a data source, such as a database. The fields in the form letter must be connected to the data source. True - 52 + 52 0 0 - + - 0 - 2 + 0 + 2 @@ -142,7 +139,7 @@ True - False + False Connect diff --git a/sw/uiconfig/swriter/ui/mmsendmails.ui b/sw/uiconfig/swriter/ui/mmsendmails.ui index 15e97871639c..d403fdb61b88 100644 --- a/sw/uiconfig/swriter/ui/mmsendmails.ui +++ b/sw/uiconfig/swriter/ui/mmsendmails.ui @@ -1,5 +1,5 @@ - + @@ -15,35 +15,32 @@ - False + False True True - 6 + 6 Sending Email messages - 0 - 0 - dock - - - + 0 + 0 + dock - False + False True True vertical 12 - False - end + False + end _Pause True - True - True - True + True + True + True False @@ -55,8 +52,8 @@ _Cancel True - True - True + True + True True @@ -69,14 +66,14 @@ False True - end + end 0 True - False + False True True vertical @@ -84,26 +81,26 @@ True - False + False True - 0 - none + 0 + none True - False + False start + 12 + 6 The connection to the outgoing mail server has been established 0 0 - 12 - 6 True - False + False Connection Status @@ -120,31 +117,31 @@ True - False + False True True - 0 - none + 0 + none True - False + False + 12 + 6 True True vertical 6 - 12 - 6 True - False + False True 6 True - False + False start True %1 of %2 emails processed @@ -160,7 +157,7 @@ True - False + False start True Sending paused @@ -183,7 +180,7 @@ True - False + False True @@ -195,7 +192,7 @@ True - False + False start True Emails not sent: %1 @@ -211,25 +208,25 @@ True - True - True + True + True True - True + True True True - in + in True - True + True True True liststore1 - False - 0 - False + False + 0 + False @@ -272,9 +269,9 @@ True - False + False Details - True + True @@ -289,7 +286,7 @@ True - False + False Transfer Status diff --git a/sw/uiconfig/swriter/ui/newuserindexdialog.ui b/sw/uiconfig/swriter/ui/newuserindexdialog.ui index 269b13d44d07..d8eeedb02650 100644 --- a/sw/uiconfig/swriter/ui/newuserindexdialog.ui +++ b/sw/uiconfig/swriter/ui/newuserindexdialog.ui @@ -1,32 +1,32 @@ - + - False - 6 + False + 6 Create New User-defined Index True - 0 - 0 - dialog + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _OK True - True - True - True - True + True + True + True + True True @@ -39,8 +39,8 @@ _Cancel True - True - True + True + True True @@ -53,8 +53,8 @@ _Help True - True - True + True + True True @@ -68,54 +68,54 @@ False True - end + end 0 True - False + False True True - 0 - none + 0 + none - + True - False - True - True - 6 - 12 + False 12 6 + True + True + 6 + 12 True - False + False _Name: - True - entry + True + entry 0 - 0 - 0 + 0 + 0 True - True + True True + True True - True - 1 - 0 + 1 + 0 @@ -123,7 +123,7 @@ True - False + False New User Index @@ -144,8 +144,5 @@ cancel help - - - diff --git a/sw/uiconfig/swriter/ui/objectdialog.ui b/sw/uiconfig/swriter/ui/objectdialog.ui index bbc2e88a4591..6ed97b84965b 100644 --- a/sw/uiconfig/swriter/ui/objectdialog.ui +++ b/sw/uiconfig/swriter/ui/objectdialog.ui @@ -1,31 +1,31 @@ - + - False - 6 + False + 6 OLE Object False - dialog True + dialog - False + False vertical 12 - False - end + False + end _OK True - True - True - True - True + True + True + True + True True @@ -38,8 +38,8 @@ _Cancel True - True - True + True + True True @@ -52,8 +52,8 @@ _Help True - True - True + True + True True @@ -67,8 +67,8 @@ _Reset True - True - True + True + True True @@ -81,23 +81,23 @@ False True - end + end 0 True - True + True True True True - True + True True - False + False @@ -106,18 +106,18 @@ True - False + False Position and Size - False + False True - False + False @@ -129,19 +129,19 @@ True - False + False Options 1 - False + False True - False + False @@ -153,19 +153,19 @@ True - False + False Wrap 2 - False + False True - False + False @@ -177,19 +177,19 @@ True - False + False Hyperlink 3 - False + False True - False + False @@ -201,19 +201,19 @@ True - False + False Borders 4 - False + False True - False + False @@ -225,19 +225,19 @@ True - False + False Area 5 - False + False True - False + False @@ -249,19 +249,19 @@ True - False + False Transparency 6 - False + False True - False + False @@ -273,12 +273,12 @@ True - False + False Macro 7 - False + False diff --git a/sw/uiconfig/swriter/ui/pagecolumncontrol.ui b/sw/uiconfig/swriter/ui/pagecolumncontrol.ui index 651f5b2540fe..b4cbd10833e7 100644 --- a/sw/uiconfig/swriter/ui/pagecolumncontrol.ui +++ b/sw/uiconfig/swriter/ui/pagecolumncontrol.ui @@ -1,16 +1,71 @@ - + + + True + False + sw/res/sidebar/pageproppanel/column_L_1_24x24.png + + + True + False + sw/res/sidebar/pageproppanel/column1_24x24.png + + + True + False + sw/res/sidebar/pageproppanel/column_L_2_24x24.png + + + True + False + sw/res/sidebar/pageproppanel/column2_24x24.png + + + True + False + sw/res/sidebar/pageproppanel/column_L_3_24x24.png + + + True + False + sw/res/sidebar/pageproppanel/column3_24x24.png + + + True + False + sw/res/sidebar/pageproppanel/column_L_left_24x24.png + + + True + False + sw/res/sidebar/pageproppanel/columnleft_24x24.png + + + True + False + sw/res/sidebar/pageproppanel/column_L_right_24x24.png + + + True + False + sw/res/sidebar/pageproppanel/columnright_24x24.png + + + True + False + cmd/lc_pagecolumntype.png + - False - True - 4 + False + True + 4 none True - False + False True True vertical @@ -18,13 +73,13 @@ 1 Column - True - True + True + True image_column1 none - True + True 0 - True + True False @@ -35,13 +90,13 @@ 2 Columns - True - True + True + True image_column2 none - True + True 0 - True + True False @@ -52,13 +107,13 @@ 3 Columns - True - True + True + True image_column3 none - True + True 0 - True + True False @@ -69,13 +124,13 @@ Left - True - True + True + True image_columnleft none - True + True 0 - True + True False @@ -86,13 +141,13 @@ Right - True - True + True + True image_columnright none - True + True 0 - True + True False @@ -103,13 +158,13 @@ 1 Column - True - True + True + True image_column1L none - True + True 0 - True + True False @@ -120,13 +175,13 @@ 2 Columns - True - True + True + True image_column2L none - True + True 0 - True + True False @@ -137,13 +192,13 @@ 3 Columns - True - True + True + True image_column3L none - True + True 0 - True + True False @@ -154,13 +209,13 @@ Left - True - True + True + True image_columnleftL none - True + True 0 - True + True False @@ -171,13 +226,13 @@ Right - True - True + True + True image_columnrightL none - True + True 0 - True + True False @@ -189,13 +244,13 @@ _More Options True - True - True + True + True + More Options image_pagecolumntype - More Options none - True - True + True + True False @@ -206,59 +261,4 @@ - - True - False - sw/res/sidebar/pageproppanel/column_L_1_24x24.png - - - True - False - sw/res/sidebar/pageproppanel/column1_24x24.png - - - True - False - sw/res/sidebar/pageproppanel/column_L_2_24x24.png - - - True - False - sw/res/sidebar/pageproppanel/column2_24x24.png - - - True - False - sw/res/sidebar/pageproppanel/column_L_3_24x24.png - - - True - False - sw/res/sidebar/pageproppanel/column3_24x24.png - - - True - False - sw/res/sidebar/pageproppanel/column_L_left_24x24.png - - - True - False - sw/res/sidebar/pageproppanel/columnleft_24x24.png - - - True - False - sw/res/sidebar/pageproppanel/column_L_right_24x24.png - - - True - False - sw/res/sidebar/pageproppanel/columnright_24x24.png - - - True - False - cmd/lc_pagecolumntype.png - diff --git a/sw/uiconfig/swriter/ui/pagemargincontrol.ui b/sw/uiconfig/swriter/ui/pagemargincontrol.ui index e83cd135a997..b61c2332dfe3 100644 --- a/sw/uiconfig/swriter/ui/pagemargincontrol.ui +++ b/sw/uiconfig/swriter/ui/pagemargincontrol.ui @@ -1,91 +1,91 @@ - + 9999 - 0.10000000000000001 - 10 + 0.10 + 10 9999 - 0.10000000000000001 - 10 + 0.10 + 10 9999 - 0.10000000000000001 - 10 + 0.10 + 10 9999 - 0.10000000000000001 - 10 + 0.10 + 10 9999 - 0.10000000000000001 - 10 + 0.10 + 10 True - False - sw/res/sidebar/pageproppanel/format_L_copy_24x24.png + False + sw/res/sidebar/pageproppanel/format_L_copy_24x24.png True - False - sw/res/sidebar/pageproppanel/formatcopy_24x24.png + False + sw/res/sidebar/pageproppanel/formatcopy_24x24.png True - False - sw/res/sidebar/pageproppanel/format_L_mirror_24x24.png + False + sw/res/sidebar/pageproppanel/format_L_mirror_24x24.png True - False - sw/res/sidebar/pageproppanel/formatmirror_24x24.png + False + sw/res/sidebar/pageproppanel/formatmirror_24x24.png True - False - sw/res/sidebar/pageproppanel/format_L_narrow_24x24.png + False + sw/res/sidebar/pageproppanel/format_L_narrow_24x24.png True - False - sw/res/sidebar/pageproppanel/formatnarrow_24x24.png + False + sw/res/sidebar/pageproppanel/formatnarrow_24x24.png True - False - sw/res/sidebar/pageproppanel/format_L_nomal_24x24.png + False + sw/res/sidebar/pageproppanel/format_L_nomal_24x24.png True - False - sw/res/sidebar/pageproppanel/formatnormal_24x24.png + False + sw/res/sidebar/pageproppanel/formatnormal_24x24.png True - False - sw/res/sidebar/pageproppanel/format_L_wide_24x24.png + False + sw/res/sidebar/pageproppanel/format_L_wide_24x24.png True - False - sw/res/sidebar/pageproppanel/formatwide_24x24.png + False + sw/res/sidebar/pageproppanel/formatwide_24x24.png - False - True - 4 + False + True + 4 none True - False + False True True vertical @@ -93,13 +93,13 @@ Narrow - True - True + True + True narrowImg none - True + True 0 - True + True False @@ -110,13 +110,13 @@ Normal - True - True + True + True normalImg none - True + True 0 - True + True False @@ -127,13 +127,13 @@ Wide - True - True + True + True wideImg none - True + True 0 - True + True False @@ -144,13 +144,13 @@ Mirrored - True - True + True + True mirrore none - True + True 0 - True + True False @@ -161,13 +161,13 @@ Last Custom Value - True - True + True + True lastImg none - True + True 0 - True + True False @@ -178,13 +178,13 @@ Narrow - True - True + True + True narrowLImg none - True + True 0 - True + True False @@ -195,13 +195,13 @@ Normal - True - True + True + True normalLImg none - True + True 0 - True + True False @@ -212,13 +212,13 @@ Wide - True - True + True + True wideLImg none - True + True 0 - True + True False @@ -229,13 +229,13 @@ Mirrored - True - True + True + True mirroredLImg none - True + True 0 - True + True False @@ -246,13 +246,13 @@ Last Custom Value - True - True + True + True lastLImg none - True + True 0 - True + True False @@ -263,56 +263,56 @@ True - False - 0 - none + False + 0 + none - + True - False - 6 - 6 + False 12 + 6 + 6 True - False + False _Top - True - top + True + top 0 - 0 - 2 + 0 + 2 True - False + False _Bottom - True - bottom + True + bottom 0 - 0 - 3 + 0 + 3 True - False + False True - False + False _Left - True - left + True + left 0 @@ -324,10 +324,10 @@ True - False + False I_nner - True - left + True + left 0 @@ -338,21 +338,21 @@ - 0 - 0 + 0 + 0 True - False + False True - False + False _Right - True - right + True + right 0 @@ -364,10 +364,10 @@ True - False + False O_uter - True - right + True + right 0 @@ -378,64 +378,64 @@ - 0 - 1 + 0 + 1 True - True + True True - adjustment1 True + adjustment1 2 - 1 - 0 + 1 + 0 True - True + True True - adjustment2 True + adjustment2 2 - 1 - 1 + 1 + 1 True - True + True True - adjustment3 True + adjustment3 2 - 1 - 2 + 1 + 2 True - True + True True - adjustment4 True + adjustment4 2 - 1 - 3 + 1 + 3 @@ -443,7 +443,7 @@ True - False + False Custom @@ -456,11 +456,11 @@ - True - True + True + True True - adjustment5 True + adjustment5 2 @@ -473,12 +473,12 @@ _More Options True - True - True - More Options + True + True + More Options none - True - True + True + True False diff --git a/sw/uiconfig/swriter/ui/pageorientationcontrol.ui b/sw/uiconfig/swriter/ui/pageorientationcontrol.ui index afb9c34cab47..36ebc7e5438b 100644 --- a/sw/uiconfig/swriter/ui/pageorientationcontrol.ui +++ b/sw/uiconfig/swriter/ui/pageorientationcontrol.ui @@ -1,16 +1,26 @@ - + + + True + False + sw/res/sidebar/pageproppanel/Landscapecopy_24x24.png + + + True + False + sw/res/sidebar/pageproppanel/portraitcopy_24x24.png + - False - True - 4 + False + True + 4 none True - False + False True True vertical @@ -19,13 +29,13 @@ Portrait True - True - True + True + True image_portrait none - True + True 0 - True + True False @@ -37,13 +47,13 @@ Landscape True - True - True + True + True image_landscape none - True + True 0 - True + True False @@ -54,14 +64,4 @@ - - True - False - sw/res/sidebar/pageproppanel/Landscapecopy_24x24.png - - - True - False - sw/res/sidebar/pageproppanel/portraitcopy_24x24.png - diff --git a/sw/uiconfig/swriter/ui/pagesizecontrol.ui b/sw/uiconfig/swriter/ui/pagesizecontrol.ui index 85c588d97312..3da778c6790f 100644 --- a/sw/uiconfig/swriter/ui/pagesizecontrol.ui +++ b/sw/uiconfig/swriter/ui/pagesizecontrol.ui @@ -1,26 +1,26 @@ - + 100 - 1 - 10 + 1 + 10 True - False - cmd/lc_attributepagesize.png + False + cmd/lc_attributepagesize.png - False - True - 4 + False + True + 4 none True - False + False True True vertical @@ -28,27 +28,27 @@ True - False + False True True vertical True - True + True True True - never - never - in + never + never + in True - False + False True - True + True GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_STRUCTURE_MASK True True @@ -65,8 +65,8 @@ - True - True + True + True True adjustment1 @@ -87,13 +87,13 @@ _More Options True - True - True - More Options + True + True + More Options image_portrait7 none - True - True + True + True False diff --git a/sw/uiconfig/swriter/ui/picturedialog.ui b/sw/uiconfig/swriter/ui/picturedialog.ui index 2a4b6f431056..f64223defb1f 100644 --- a/sw/uiconfig/swriter/ui/picturedialog.ui +++ b/sw/uiconfig/swriter/ui/picturedialog.ui @@ -1,31 +1,28 @@ - + - False - 6 + False + 6 Image True - dialog - - - + dialog - False + False vertical 12 - False - end + False + end _Reset True - True - True + True + True True @@ -38,10 +35,10 @@ _OK True - True - True - True - True + True + True + True + True True @@ -54,8 +51,8 @@ _Cancel True - True - True + True + True True @@ -68,8 +65,8 @@ _Help True - True - True + True + True True @@ -83,47 +80,23 @@ False True - end + end 0 True - True + True True True True - True + True True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -132,42 +105,18 @@ True - False + False Position and Size - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -179,43 +128,19 @@ True - False + False Options 1 - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -227,43 +152,19 @@ True - False + False Wrap 2 - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -275,43 +176,19 @@ True - False + False Hyperlink 3 - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -323,43 +200,19 @@ True - False + False Rotation 4 - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -371,43 +224,19 @@ True - False + False Crop 5 - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -419,43 +248,19 @@ True - False + False Borders 6 - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -467,43 +272,19 @@ True - False + False Area 7 - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -515,43 +296,19 @@ True - False + False Transparency 8 - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -563,12 +320,12 @@ True - False + False Macro 9 - False + False diff --git a/sw/uiconfig/swriter/ui/poseditbox.ui b/sw/uiconfig/swriter/ui/poseditbox.ui index 285531d5b72a..00533548f552 100644 --- a/sw/uiconfig/swriter/ui/poseditbox.ui +++ b/sw/uiconfig/swriter/ui/poseditbox.ui @@ -1,22 +1,22 @@ - + True - False + False True 6 True - True + True True True False - 8 - True + 8 0.5 + True False diff --git a/sw/uiconfig/swriter/ui/previewmenu.ui b/sw/uiconfig/swriter/ui/previewmenu.ui index f6c9a5eae309..e7eefee4e28d 100644 --- a/sw/uiconfig/swriter/ui/previewmenu.ui +++ b/sw/uiconfig/swriter/ui/previewmenu.ui @@ -1,43 +1,43 @@ - + True - False + False True - False - True + False + True True - False - True + False + True True - False - True + False + True True - False - True + False + True True - False - True + False + True diff --git a/sw/uiconfig/swriter/ui/printmonitordialog.ui b/sw/uiconfig/swriter/ui/printmonitordialog.ui index cde7ebd5736e..91d2a438b632 100644 --- a/sw/uiconfig/swriter/ui/printmonitordialog.ui +++ b/sw/uiconfig/swriter/ui/printmonitordialog.ui @@ -1,34 +1,31 @@ - + - False - 6 + False + 6 Print monitor - 0 - 0 - dialog - - - + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _Cancel True - True - True - True - True + True + True + True + True True @@ -41,20 +38,20 @@ False True - end + end 0 True - False + False vertical 6 True - False + False False @@ -65,8 +62,8 @@ True - False - True + False + True is being prepared for printing on @@ -78,7 +75,7 @@ True - False + False False @@ -89,7 +86,7 @@ True - False + False False diff --git a/sw/uiconfig/swriter/ui/querydefaultcompatdialog.ui b/sw/uiconfig/swriter/ui/querydefaultcompatdialog.ui index bc760c2744ba..212ff9ba91d0 100644 --- a/sw/uiconfig/swriter/ui/querydefaultcompatdialog.ui +++ b/sw/uiconfig/swriter/ui/querydefaultcompatdialog.ui @@ -1,31 +1,31 @@ - + - False + False Use as default? False True - dialog - True - question + dialog + True + question yes-no Do you want to change the compatibility options of the default template? - This will affect all new documents based on the default template. + This will affect all new documents based on the default template. - False + False vertical 12 - False + False False True - end + end 0 diff --git a/sw/uiconfig/swriter/ui/readonlymenu.ui b/sw/uiconfig/swriter/ui/readonlymenu.ui index 0c83d8a7616e..96ffe24346c2 100644 --- a/sw/uiconfig/swriter/ui/readonlymenu.ui +++ b/sw/uiconfig/swriter/ui/readonlymenu.ui @@ -1,132 +1,132 @@ - + True - False + False True - False + False _Open - True + True True - False + False Open in New Window - True + True True - False + False _Edit - True + True True - False + False Select Text - True + True True - False + False Re_load - True + True True - False + False Reload Frame - True + True True - False + False HT_ML Source - True + True True - False + False True - False + False Backwards - True + True True - False + False _Forward - True + True True - False + False True - False + False Save Image... - True + True True - False + False Add Image - True + True True - False + False True - False + False As Link - True + True True - False + False Copy - True + True True - False + False @@ -136,39 +136,39 @@ True - False + False Save Background... - True + True True - False + False True - False + False True - False + False As Link - True + True True - False + False Copy - True + True True - False + False @@ -178,65 +178,65 @@ True - False + False True - False + False Copy _Link - True + True True - False + False True - False + False Load Image - True + True True - False + False Image Off - True + True True - False + False True - False + False Leave Full-Screen Mode - True + True True - False + False True - False + False _Copy - True + True diff --git a/sw/uiconfig/swriter/ui/renameentrydialog.ui b/sw/uiconfig/swriter/ui/renameentrydialog.ui index 7f6d79d778ac..379ac52fcc62 100644 --- a/sw/uiconfig/swriter/ui/renameentrydialog.ui +++ b/sw/uiconfig/swriter/ui/renameentrydialog.ui @@ -1,35 +1,32 @@ - + - False - 6 + False + 6 Rename Element True - 0 - 0 - dialog - - - + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _OK True - True - True - True - True + True + True + True + True True @@ -42,8 +39,8 @@ _Cancel True - True - True + True + True True @@ -56,8 +53,8 @@ _Help True - True - True + True + True True @@ -70,33 +67,33 @@ False True - end + end 0 True - False + False True True - 0 - none + 0 + none True - True + True start - True 12 - True 6 + True + True True - False + False Element Name diff --git a/sw/uiconfig/swriter/ui/saveashtmldialog.ui b/sw/uiconfig/swriter/ui/saveashtmldialog.ui index 73ca53c3f0c0..80d887f078be 100644 --- a/sw/uiconfig/swriter/ui/saveashtmldialog.ui +++ b/sw/uiconfig/swriter/ui/saveashtmldialog.ui @@ -1,31 +1,31 @@ - + - False + False Save as HTML? False True - dialog - True - question + dialog + True + question yes-no Would you like to save the document as HTML? - The source code can only be displayed if the document is saved in HTML format. + The source code can only be displayed if the document is saved in HTML format. - False + False vertical 12 - False + False False True - end + end 0 diff --git a/sw/uiconfig/swriter/ui/savemonitordialog.ui b/sw/uiconfig/swriter/ui/savemonitordialog.ui index 72bd2c619978..f69b4114a89a 100644 --- a/sw/uiconfig/swriter/ui/savemonitordialog.ui +++ b/sw/uiconfig/swriter/ui/savemonitordialog.ui @@ -1,35 +1,32 @@ - + - False - 6 + False + 6 Save monitor True - 0 - 0 - dialog - - - + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _Cancel True - True - True - True - True + True + True + True + True True @@ -42,20 +39,20 @@ False True - end + end 0 True - False + False vertical 6 True - False + False False @@ -66,8 +63,8 @@ True - False - True + False + True is being saved to @@ -79,7 +76,7 @@ True - False + False False @@ -90,7 +87,7 @@ True - False + False False diff --git a/sw/uiconfig/swriter/ui/selectautotextdialog.ui b/sw/uiconfig/swriter/ui/selectautotextdialog.ui index ffc20185070c..89637a496db5 100644 --- a/sw/uiconfig/swriter/ui/selectautotextdialog.ui +++ b/sw/uiconfig/swriter/ui/selectautotextdialog.ui @@ -1,5 +1,5 @@ - + @@ -11,30 +11,30 @@ - False - 6 + False + 6 Select AutoText: True - 0 - 0 - dialog + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _OK True - True - True - True - True + True + True + True + True True @@ -47,8 +47,8 @@ _Cancel True - True - True + True + True True @@ -61,8 +61,8 @@ _Help True - True - True + True + True True @@ -76,37 +76,37 @@ False True - end + end 0 True - False + False True True - 0 - none + 0 + none True - True - True - True - in + True 12 6 + True + True + in True - True + True True liststore1 - False - False - 0 - False + False + False + 0 + False @@ -127,7 +127,7 @@ True - False + False AutoText - Group @@ -148,8 +148,5 @@ cancel help - - - diff --git a/sw/uiconfig/swriter/ui/sidebarstylepresets.ui b/sw/uiconfig/swriter/ui/sidebarstylepresets.ui index 7df9c8eabba2..68c834217e2f 100644 --- a/sw/uiconfig/swriter/ui/sidebarstylepresets.ui +++ b/sw/uiconfig/swriter/ui/sidebarstylepresets.ui @@ -1,37 +1,37 @@ - + True - False - True - True + False + True + True True - False - 6 - 6 + False + 6 + 6 True - True + True True True - never - never - in + never + never + in True - False + False True - True + True GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_STRUCTURE_MASK True True @@ -41,14 +41,14 @@ - 0 - 0 + 0 + 0 - 0 - 0 + 0 + 0 diff --git a/sw/uiconfig/swriter/ui/subjectdialog.ui b/sw/uiconfig/swriter/ui/subjectdialog.ui index 30d3400a2e01..55fa1b857329 100644 --- a/sw/uiconfig/swriter/ui/subjectdialog.ui +++ b/sw/uiconfig/swriter/ui/subjectdialog.ui @@ -1,31 +1,31 @@ - + - False + False No Subject - 0 - 0 - dialog - question + 0 + 0 + dialog + question You did not specify a subject for this message. - If you would like to provide one, please type it now. + If you would like to provide one, please type it now. - False + False vertical 24 - False + False True _Cancel True - True - False + True + False True @@ -38,10 +38,10 @@ _OK True - True - True - True - True + True + True + True + True True @@ -58,37 +58,37 @@ - + True - False + False True - 7 + 7 True - True + True True + True True - True - 0 - 1 + 0 + 1 True - False + False Subject: - True - edit + True + edit 0 - 0 - 0 + 0 + 0 @@ -104,8 +104,5 @@ cancel ok - - - diff --git a/sw/uiconfig/swriter/ui/tablepreviewdialog.ui b/sw/uiconfig/swriter/ui/tablepreviewdialog.ui index e171b9d3d7f4..dafe8353d335 100644 --- a/sw/uiconfig/swriter/ui/tablepreviewdialog.ui +++ b/sw/uiconfig/swriter/ui/tablepreviewdialog.ui @@ -1,36 +1,33 @@ - + - False - 6 + False + 6 Mail Merge Recipients False True - 0 - 0 - dialog - - - + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _Close True - True - True - True - True + True + True + True + True True @@ -43,20 +40,20 @@ False True - end + end 0 True - False + False vertical 6 True - False + False start The list below shows the contents of: %1 @@ -69,22 +66,22 @@ True - True + True True True - never - never - in + never + never + in True - False + False True True True - False + False True True diff --git a/sw/uiconfig/swriter/ui/tableproperties.ui b/sw/uiconfig/swriter/ui/tableproperties.ui index fb3b271b9f0b..466782180da2 100644 --- a/sw/uiconfig/swriter/ui/tableproperties.ui +++ b/sw/uiconfig/swriter/ui/tableproperties.ui @@ -1,32 +1,29 @@ - + - False - 6 + False + 6 Table Properties False True - dialog - - - + dialog - False + False vertical 12 - False - end + False + end _Reset True - True - True + True + True True @@ -39,10 +36,10 @@ _OK True - True - True - True - True + True + True + True + True True @@ -55,8 +52,8 @@ _Cancel True - True - True + True + True True @@ -69,8 +66,8 @@ _Help True - True - True + True + True True @@ -84,47 +81,23 @@ False True - end + end 0 True - True + True True True True - True + True True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -133,42 +106,18 @@ True - False + False Table - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -180,43 +129,19 @@ True - False + False Text Flow 1 - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -228,43 +153,19 @@ True - False + False Columns 2 - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -276,43 +177,19 @@ True - False + False Borders 3 - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -324,12 +201,12 @@ True - False + False Background 4 - False + False diff --git a/sw/uiconfig/swriter/ui/tocdialog.ui b/sw/uiconfig/swriter/ui/tocdialog.ui index b3fe4e0ca589..1d6a2d20c5fb 100644 --- a/sw/uiconfig/swriter/ui/tocdialog.ui +++ b/sw/uiconfig/swriter/ui/tocdialog.ui @@ -1,33 +1,30 @@ - + - False - 6 + False + 6 Table of Contents, Index or Bibliography True - 0 - 0 - dialog - - - + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _Reset True - True - True + True + True True @@ -40,11 +37,11 @@ _OK True - True - True - True - True - True + True + True + True + True + True False @@ -56,8 +53,8 @@ _Cancel True - True - True + True + True True @@ -70,8 +67,8 @@ _Help True - True - True + True + True True @@ -85,71 +82,47 @@ Preview True - True - False - True - True + True + False + True + True True True 4 True - True + True False True - end + end 0 True - False + False True True 12 True - True + True True True True - True + True True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -158,42 +131,18 @@ True - False + False Type - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -205,43 +154,19 @@ True - False + False Entries 1 - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -253,43 +178,19 @@ True - False + False Styles 2 - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -301,43 +202,19 @@ True - False + False Columns 3 - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -349,12 +226,12 @@ True - False + False Background 4 - False + False @@ -366,9 +243,9 @@ - False + False GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_STRUCTURE_MASK - True + True Preview diff --git a/sw/uiconfig/swriter/ui/tokenwidget.ui b/sw/uiconfig/swriter/ui/tokenwidget.ui index cbf7bf62be6e..963e689a787d 100644 --- a/sw/uiconfig/swriter/ui/tokenwidget.ui +++ b/sw/uiconfig/swriter/ui/tokenwidget.ui @@ -1,27 +1,27 @@ - + True - False + False go-previous True - False + False go-next True - False + False True 12 True - True - True + True + True image1 True @@ -33,63 +33,39 @@ - 5 + 5 True - True + True True - external - never - in + external + never + in True - False + False True True - False + False True True True - False + False start True - - - - - - - - - - - - - - - - - - - - - - - - - 0 - 0 + 0 + 0 @@ -106,8 +82,8 @@ True - True - True + True + True image2 True diff --git a/sw/uiconfig/swriter/ui/toxbuttonwidget.ui b/sw/uiconfig/swriter/ui/toxbuttonwidget.ui index 3e3d36010db3..7e96ddfa930b 100644 --- a/sw/uiconfig/swriter/ui/toxbuttonwidget.ui +++ b/sw/uiconfig/swriter/ui/toxbuttonwidget.ui @@ -1,10 +1,10 @@ - + True - True - True + True + True diff --git a/sw/uiconfig/swriter/ui/toxentrywidget.ui b/sw/uiconfig/swriter/ui/toxentrywidget.ui index 4dd0378caab2..0ed954c38e6d 100644 --- a/sw/uiconfig/swriter/ui/toxentrywidget.ui +++ b/sw/uiconfig/swriter/ui/toxentrywidget.ui @@ -1,12 +1,12 @@ - + True - True - True + True + True + 1 True - 1 diff --git a/sw/uiconfig/swriter/ui/warnhiddensectiondialog.ui b/sw/uiconfig/swriter/ui/warnhiddensectiondialog.ui index 19aeec830203..722e40bce639 100644 --- a/sw/uiconfig/swriter/ui/warnhiddensectiondialog.ui +++ b/sw/uiconfig/swriter/ui/warnhiddensectiondialog.ui @@ -1,31 +1,31 @@ - + - False + False Delete hidden section(s)? False True - dialog - True - question + dialog + True + question yes-no Would you like to delete the hidden section(s)? - There are hidden sections in the deleted area. + There are hidden sections in the deleted area. - False + False vertical 12 - False + False False True - end + end 0 diff --git a/sw/uiconfig/swriter/ui/wordcount-mobile.ui b/sw/uiconfig/swriter/ui/wordcount-mobile.ui index b5c3578e7edc..a1bb1dfdf70b 100644 --- a/sw/uiconfig/swriter/ui/wordcount-mobile.ui +++ b/sw/uiconfig/swriter/ui/wordcount-mobile.ui @@ -1,33 +1,32 @@ - + - False - 6 + False + 6 Word Count - 0 - 0 - True - dialog + 0 + 0 + True + dialog - False + False vertical 12 - False - end + False + end _Close - False - True - True - True - True - True + True + True + True + True + True True @@ -39,9 +38,8 @@ _Help - False - True - True + True + True True @@ -55,29 +53,29 @@ False True - end + end 0 - + True - False + False 6 6 True - 6 - 12 + 6 + 12 True - False + False vertical True - False + False end Selection @@ -92,19 +90,19 @@ - 1 - 0 + 1 + 0 True - False + False vertical True - False + False end Document @@ -119,19 +117,19 @@ - 1 - 6 + 1 + 6 True - False + False vertical True - False + False Words 1 @@ -143,19 +141,19 @@ - 0 - 1 + 0 + 1 True - False + False vertical True - False + False Characters including spaces 1 @@ -167,19 +165,19 @@ - 0 - 2 + 0 + 2 True - False + False vertical True - False + False Characters excluding spaces 1 @@ -191,19 +189,19 @@ - 0 - 3 + 0 + 3 True - False + False vertical - False - True + False + True Asian characters and Korean syllables 1 @@ -215,19 +213,19 @@ - 0 - 4 + 0 + 4 True - False + False vertical - False - True + False + True Standardized pages 1 @@ -239,19 +237,19 @@ - 0 - 5 + 0 + 5 True - False + False vertical - False - True + False + True Standardized pages 1 @@ -263,19 +261,19 @@ - 0 - 11 + 0 + 11 True - False + False vertical - False - True + False + True Asian characters and Korean syllables 1 @@ -287,19 +285,19 @@ - 0 - 10 + 0 + 10 True - False + False vertical True - False + False Characters excluding spaces 1 @@ -311,19 +309,19 @@ - 0 - 9 + 0 + 9 True - False + False vertical True - False + False Words 1 @@ -335,19 +333,19 @@ - 0 - 7 + 0 + 7 True - False + False vertical - False - True + False + True end True 0 @@ -362,19 +360,19 @@ - 1 - 11 + 1 + 11 True - False + False vertical - False - True + False + True end True 0 @@ -389,19 +387,19 @@ - 1 - 10 + 1 + 10 True - False + False vertical True - False + False end True 0 @@ -416,19 +414,19 @@ - 1 - 9 + 1 + 9 True - False + False vertical True - False + False end True 0 @@ -443,19 +441,19 @@ - 1 - 8 + 1 + 8 True - False + False vertical True - False + False end True 0 @@ -470,19 +468,19 @@ - 1 - 7 + 1 + 7 True - False + False vertical - False - True + False + True end True 0 @@ -497,19 +495,19 @@ - 1 - 5 + 1 + 5 True - False + False vertical - False - True + False + True end True 0 @@ -524,19 +522,19 @@ - 1 - 4 + 1 + 4 True - False + False vertical True - False + False end True 0 @@ -551,19 +549,19 @@ - 1 - 3 + 1 + 3 True - False + False vertical True - False + False end True 0 @@ -578,19 +576,19 @@ - 1 - 2 + 1 + 2 True - False + False vertical True - False + False end True 0 @@ -605,19 +603,19 @@ - 1 - 1 + 1 + 1 True - False + False vertical True - False + False Characters including spaces 1 @@ -629,8 +627,8 @@ - 0 - 8 + 0 + 8 @@ -652,11 +650,8 @@ close help - - - - True + True From 2b27f0eb5858a4fd296170fb7e4533e5fc7aa3e9 Mon Sep 17 00:00:00 2001 From: Xisco Fauli Date: Fri, 21 Jun 2024 11:58:36 +0200 Subject: [PATCH 078/194] libxml2: upgrade to 2.13.1 Building with --without-system-libxml fails with /usr/bin/ld: /home/xisco/libreoffice/workdir/UnpackedTarball/raptor/src/.libs/libraptor2.so: undefined reference to `xmlNanoHTTPScanProxy' /usr/bin/ld: /home/xisco/libreoffice/workdir/UnpackedTarball/raptor/src/.libs/libraptor2.so: undefined reference to `xmlNanoHTTPClose' /usr/bin/ld: /home/xisco/libreoffice/workdir/UnpackedTarball/raptor/src/.libs/libraptor2.so: undefined reference to `xmlNanoHTTPReturnCode' /usr/bin/ld: /home/xisco/libreoffice/workdir/UnpackedTarball/raptor/src/.libs/libraptor2.so: undefined reference to `xmlNanoHTTPRead' /usr/bin/ld: /home/xisco/libreoffice/workdir/UnpackedTarball/raptor/src/.libs/libraptor2.so: undefined reference to `xmlNanoHTTPCleanup' /usr/bin/ld: /home/xisco/libreoffice/workdir/UnpackedTarball/raptor/src/.libs/libraptor2.so: undefined reference to `xmlNanoHTTPMethod' /usr/bin/ld: /home/xisco/libreoffice/workdir/UnpackedTarball/raptor/src/.libs/libraptor2.so: undefined reference to `xmlNanoHTTPInit' collect2: error: ld returned 1 exit status so use --without-www in external/redland/ExternalProject_raptor.mk since it seems no to be used by raptor. Libxml2 disabled http support by default in https://gitlab.gnome.org/GNOME/libxml2/-/commit/3018842c07e9b88d6bb0257f5644e7695cdeb2e2 Downloaded from https://download.gnome.org/sources/libxml2/2.13/libxml2-2.13.1.tar.xz Kudos to Michael Weghorn for helping me with this patch Change-Id: I2e41021e8aea3551eb9eec29cf12f6cd9f6ff89e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169327 Reviewed-by: Taichi Haradaguchi <20001722@ymail.ne.jp> Tested-by: Jenkins --- download.lst | 6 +++--- external/libxml2/ExternalPackage_libxml2.mk | 2 +- external/libxml2/libxml2-XMLCALL-redefine.patch.0 | 8 ++++---- external/libxml2/libxml2-icu-sym.patch.0 | 8 ++++---- external/libxml2/libxml2-icu.patch.0 | 8 ++++---- external/redland/ExternalProject_raptor.mk | 2 +- 6 files changed, 17 insertions(+), 17 deletions(-) diff --git a/download.lst b/download.lst index 5ba08be05897..1b4ebfb4bbe9 100644 --- a/download.lst +++ b/download.lst @@ -424,9 +424,9 @@ XMLSEC_TARBALL := xmlsec1-1.3.4.tar.gz # three static lines # so that git cherry-pick # will not run into conflicts -LIBXML_SHA256SUM := 43ad877b018bc63deb2468d71f95219c2fac196876ef36d1bee51d226173ec93 -LIBXML_VERSION_MICRO := 8 -LIBXML_TARBALL := libxml2-2.12.$(LIBXML_VERSION_MICRO).tar.xz +LIBXML_SHA256SUM := 25239263dc37f5f55a5393eff27b35f0b7d9ea4b2a7653310598ea8299e3b741 +LIBXML_VERSION_MICRO := 1 +LIBXML_TARBALL := libxml2-2.13.$(LIBXML_VERSION_MICRO).tar.xz # three static lines # so that git cherry-pick # will not run into conflicts diff --git a/external/libxml2/ExternalPackage_libxml2.mk b/external/libxml2/ExternalPackage_libxml2.mk index 799044575f9a..17190c77fd18 100644 --- a/external/libxml2/ExternalPackage_libxml2.mk +++ b/external/libxml2/ExternalPackage_libxml2.mk @@ -21,7 +21,7 @@ else # COM=MSC $(eval $(call gb_ExternalPackage_add_file,libxml2,$(LIBO_URE_LIB_FOLDER)/libxml2.dll,win32/bin.msvc/libxml2.dll)) endif else # OS!=WNT -$(eval $(call gb_ExternalPackage_add_file,libxml2,$(LIBO_URE_LIB_FOLDER)/libxml2.so.2,.libs/libxml2.so.2.12.$(LIBXML_VERSION_MICRO))) +$(eval $(call gb_ExternalPackage_add_file,libxml2,$(LIBO_URE_LIB_FOLDER)/libxml2.so.2,.libs/libxml2.so.2.13.$(LIBXML_VERSION_MICRO))) endif endif # DISABLE_DYNLOADING diff --git a/external/libxml2/libxml2-XMLCALL-redefine.patch.0 b/external/libxml2/libxml2-XMLCALL-redefine.patch.0 index d9ca23be7ce4..57d23d885943 100644 --- a/external/libxml2/libxml2-XMLCALL-redefine.patch.0 +++ b/external/libxml2/libxml2-XMLCALL-redefine.patch.0 @@ -1,11 +1,11 @@ --- include/libxml/xmlexports.h 2023-05-24 12:48:46.179570708 +0100 +++ include/libxml/xmlexports.h 2023-05-24 12:48:56.563577488 +0100 -@@ -38,8 +38,6 @@ +@@ -31,8 +31,6 @@ + #define XMLPUBVAR XMLPUBLIC extern - /** DOC_DISABLE */ /* Compatibility */ -#define XMLCALL -#define XMLCDECL - #if !defined(LIBXML_DLL_IMPORT) - #define LIBXML_DLL_IMPORT XMLPUBVAR + #ifndef LIBXML_DLL_IMPORT + #define LIBXML_DLL_IMPORT XMLPUBVAR #endif diff --git a/external/libxml2/libxml2-icu-sym.patch.0 b/external/libxml2/libxml2-icu-sym.patch.0 index 07676228da19..d89a1c4c544b 100644 --- a/external/libxml2/libxml2-icu-sym.patch.0 +++ b/external/libxml2/libxml2-icu-sym.patch.0 @@ -3,14 +3,14 @@ Find bundled ICU in workdir and use debug .libs when needed diff -up win32/Makefile.msvc.dt win32/Makefile.msvc --- win32/Makefile.msvc.dt 2014-07-18 19:00:23.372103963 +0200 +++ win32/Makefile.msvc 2014-07-18 19:01:39.347982929 +0200 -@@ -46,6 +46,7 @@ CPPFLAGS = $(CPPFLAGS) /D "_REENTRANT" +@@ -42,6 +42,7 @@ CC = cl.exe CFLAGS = /nologo /D "_WINDOWS" /D "_MBCS" /D "NOLIBTOOL" /W3 /wd4244 /wd4267 $(CRUNTIME) CFLAGS = $(CFLAGS) /I$(XML_SRCDIR) /I$(XML_SRCDIR)\include /I$(INCPREFIX) +CFLAGS = $(CFLAGS) /I$(WORKDIR)/UnpackedTarball/icu/source/i18n /I$(WORKDIR)/UnpackedTarball/icu/source/common - !if "$(WITH_THREADS)" != "no" - CFLAGS = $(CFLAGS) /D "_REENTRANT" - !endif + !if "$(WITH_THREADS)" == "ctls" + CFLAGS = $(CFLAGS) /D "XML_THREAD_LOCAL=__declspec(thread)" + !else if "$(WITH_THREADS)" == "posix" @@ -62,7 +63,9 @@ # The linker and its options. LD = link.exe diff --git a/external/libxml2/libxml2-icu.patch.0 b/external/libxml2/libxml2-icu.patch.0 index 84197763f878..85ce8b3aba2b 100644 --- a/external/libxml2/libxml2-icu.patch.0 +++ b/external/libxml2/libxml2-icu.patch.0 @@ -3,14 +3,14 @@ Find bundled ICU in workdir and use debug .libs when needed diff -up win32/Makefile.msvc.dt win32/Makefile.msvc --- win32/Makefile.msvc.dt 2014-07-18 19:00:23.372103963 +0200 +++ win32/Makefile.msvc 2014-07-18 19:01:39.347982929 +0200 -@@ -45,6 +45,7 @@ CPPFLAGS = $(CPPFLAGS) /D "_REENTRANT" +@@ -42,6 +42,7 @@ CC = cl.exe CFLAGS = /nologo /D "_WINDOWS" /D "_MBCS" /D "NOLIBTOOL" /W3 /wd4244 /wd4267 $(CRUNTIME) CFLAGS = $(CFLAGS) /I$(XML_SRCDIR) /I$(XML_SRCDIR)\include /I$(INCPREFIX) +CFLAGS = $(CFLAGS) /I$(WORKDIR)/UnpackedTarball/icu/source/i18n /I$(WORKDIR)/UnpackedTarball/icu/source/common - !if "$(WITH_THREADS)" != "no" - CFLAGS = $(CFLAGS) /D "_REENTRANT" - !endif + !if "$(WITH_THREADS)" == "ctls" + CFLAGS = $(CFLAGS) /D "XML_THREAD_LOCAL=__declspec(thread)" + !else if "$(WITH_THREADS)" == "posix" @@ -67,6 +68,7 @@ CFLAGS = $(CFLAGS) $(SOLARINC) # The linker and its options. LD = link.exe diff --git a/external/redland/ExternalProject_raptor.mk b/external/redland/ExternalProject_raptor.mk index 8ac05880766b..5bfab78deba8 100644 --- a/external/redland/ExternalProject_raptor.mk +++ b/external/redland/ExternalProject_raptor.mk @@ -30,7 +30,7 @@ $(call gb_ExternalProject_get_state_target,raptor,build): CPPFLAGS="$(if $(SYSBASE),-I$(SYSBASE)/usr/include) $(gb_EMSCRIPTEN_CPPFLAGS)" \ $(gb_RUN_CONFIGURE) ./configure --disable-gtk-doc \ --enable-parsers="rdfxml ntriples turtle trig guess rss-tag-soup" \ - --with-www=xml \ + --without-www \ --without-xslt-config \ $(gb_CONFIGURE_PLATFORMS) \ $(if $(CROSS_COMPILING),$(if $(filter INTEL ARM,$(CPUNAME)),ac_cv_c_bigendian=no)) \ From 315960e7bb7acd3bdd5fe570de06624120e32f18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Toma=C5=BE=20Vajngerl?= Date: Sun, 24 Mar 2024 20:26:07 +0900 Subject: [PATCH 079/194] vcl: remove partial JPEG image loading MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: Ibacf2c0eac963cdaf233f2af3f2277bc2b79c590 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/165213 Reviewed-by: Tomaž Vajngerl Tested-by: Jenkins --- vcl/source/filter/jpeg/JpegReader.cxx | 78 +++------------------------ vcl/source/filter/jpeg/JpegReader.hxx | 14 ++--- vcl/source/filter/jpeg/jpeg.cxx | 26 ++------- vcl/source/filter/jpeg/jpeg.h | 2 +- vcl/source/filter/jpeg/jpegc.cxx | 10 ++-- 5 files changed, 21 insertions(+), 109 deletions(-) diff --git a/vcl/source/filter/jpeg/JpegReader.cxx b/vcl/source/filter/jpeg/JpegReader.cxx index 186105603904..7e4b3dc25f63 100644 --- a/vcl/source/filter/jpeg/JpegReader.cxx +++ b/vcl/source/filter/jpeg/JpegReader.cxx @@ -172,7 +172,6 @@ void jpeg_svstream_src (j_decompress_ptr cinfo, void* input) JPEGReader::JPEGReader( SvStream& rStream, GraphicFilterImportFlags nImportFlags ) : mrStream ( rStream ), mnLastPos ( rStream.Tell() ), - mnLastLines ( 0 ), mbSetLogSize ( nImportFlags & GraphicFilterImportFlags::SetLogsizeForJpeg ) { maUpperName = "SVIJPEG"; @@ -180,7 +179,6 @@ JPEGReader::JPEGReader( SvStream& rStream, GraphicFilterImportFlags nImportFlags if (!(nImportFlags & GraphicFilterImportFlags::UseExistingBitmap)) { mpBitmap.emplace(); - mpIncompleteAlpha.emplace(); } } @@ -242,90 +240,26 @@ bool JPEGReader::CreateBitmap(JPEGCreateBitmapParam const & rParam) return true; } -Graphic JPEGReader::CreateIntermediateGraphic(tools::Long nLines) +ReadState JPEGReader::Read(Graphic& rGraphic, GraphicFilterImportFlags nImportFlags, BitmapScopedWriteAccess* ppAccess ) { - Graphic aGraphic; - const Size aSizePixel(mpBitmap->GetSizePixel()); - - if (!mnLastLines) - { - mpIncompleteAlpha.emplace(aSizePixel); - mpIncompleteAlpha->Erase(255); - } - - if (nLines && (nLines < aSizePixel.Height())) - { - const tools::Long nNewLines = nLines - mnLastLines; - - if (nNewLines > 0) - { - { - BitmapScopedWriteAccess pAccess(*mpIncompleteAlpha); - pAccess->SetFillColor(COL_ALPHA_OPAQUE); - pAccess->FillRect(tools::Rectangle(Point(0, mnLastLines), Size(pAccess->Width(), nNewLines))); - } - - aGraphic = BitmapEx(*mpBitmap, *mpIncompleteAlpha); - } - else - { - aGraphic = BitmapEx(*mpBitmap); - } - } - else - { - aGraphic = BitmapEx(*mpBitmap); - } - - mnLastLines = nLines; - - return aGraphic; -} - -ReadState JPEGReader::Read( Graphic& rGraphic, GraphicFilterImportFlags nImportFlags, BitmapScopedWriteAccess* ppAccess ) -{ - ReadState eReadState; - bool bRet = false; + bool bRet = false; // seek back to the original position mrStream.Seek( mnLastPos ); // read the (partial) image - tools::Long nLines; - ReadJPEG( this, &mrStream, &nLines, nImportFlags, ppAccess ); + ReadJPEG(this, &mrStream, nImportFlags, ppAccess); auto bUseExistingBitmap = static_cast(nImportFlags & GraphicFilterImportFlags::UseExistingBitmap); if (bUseExistingBitmap || !mpBitmap->IsEmpty()) { - if( mrStream.GetError() == ERRCODE_IO_PENDING ) - { - rGraphic = CreateIntermediateGraphic(nLines); - } - else - { - if (!bUseExistingBitmap) - rGraphic = BitmapEx(*mpBitmap); - } + if (!bUseExistingBitmap) + rGraphic = BitmapEx(*mpBitmap); bRet = true; } - else if( mrStream.GetError() == ERRCODE_IO_PENDING ) - { - bRet = true; - } - // Set status ( Pending has priority ) - if (mrStream.GetError() == ERRCODE_IO_PENDING) - { - eReadState = JPEGREAD_NEED_MORE; - mrStream.ResetError(); - } - else - { - eReadState = bRet ? JPEGREAD_OK : JPEGREAD_ERROR; - } - - return eReadState; + return bRet ? JPEGREAD_OK : JPEGREAD_ERROR; } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/source/filter/jpeg/JpegReader.hxx b/vcl/source/filter/jpeg/JpegReader.hxx index 6282cb4ed069..0e541c75916f 100644 --- a/vcl/source/filter/jpeg/JpegReader.hxx +++ b/vcl/source/filter/jpeg/JpegReader.hxx @@ -30,8 +30,7 @@ enum class GraphicFilterImportFlags; enum ReadState { JPEGREAD_OK, - JPEGREAD_ERROR, - JPEGREAD_NEED_MORE + JPEGREAD_ERROR }; struct JPEGCreateBitmapParam @@ -47,15 +46,10 @@ struct JPEGCreateBitmapParam class JPEGReader : public GraphicReader { - SvStream& mrStream; + SvStream& mrStream; std::optional mpBitmap; - std::optional mpIncompleteAlpha; - - tools::Long mnLastPos; - tools::Long mnLastLines; - bool mbSetLogSize; - - Graphic CreateIntermediateGraphic(tools::Long nLines); + tools::Long mnLastPos; + bool mbSetLogSize; public: JPEGReader( SvStream& rStream, GraphicFilterImportFlags nImportFlags ); diff --git a/vcl/source/filter/jpeg/jpeg.cxx b/vcl/source/filter/jpeg/jpeg.cxx index e7158b858b68..956a1e413def 100644 --- a/vcl/source/filter/jpeg/jpeg.cxx +++ b/vcl/source/filter/jpeg/jpeg.cxx @@ -25,29 +25,13 @@ VCL_DLLPUBLIC bool ImportJPEG( SvStream& rInputStream, Graphic& rGraphic, GraphicFilterImportFlags nImportFlags, BitmapScopedWriteAccess* ppAccess ) { - bool bReturn = true; + JPEGReader aJPEGReader(rInputStream, nImportFlags); - std::shared_ptr pContext = rGraphic.GetReaderContext(); - rGraphic.SetReaderContext(nullptr); - JPEGReader* pJPEGReader = dynamic_cast( pContext.get() ); - if (!pJPEGReader) - { - pContext = std::make_shared( rInputStream, nImportFlags ); - pJPEGReader = static_cast( pContext.get() ); - } + ReadState eReadState = aJPEGReader.Read(rGraphic, nImportFlags, ppAccess); - ReadState eReadState = pJPEGReader->Read( rGraphic, nImportFlags, ppAccess ); - - if( eReadState == JPEGREAD_ERROR ) - { - bReturn = false; - } - else if( eReadState == JPEGREAD_NEED_MORE ) - { - rGraphic.SetReaderContext( pContext ); - } - - return bReturn; + if (eReadState == JPEGREAD_ERROR) + return false; + return true; } bool ExportJPEG(SvStream& rOutputStream, const Graphic& rGraphic, diff --git a/vcl/source/filter/jpeg/jpeg.h b/vcl/source/filter/jpeg/jpeg.h index 0ab27fb2fb9c..495204524121 100644 --- a/vcl/source/filter/jpeg/jpeg.h +++ b/vcl/source/filter/jpeg/jpeg.h @@ -45,7 +45,7 @@ bool WriteJPEG( JPEGWriter* pJPEGWriter, void* pOutputStream, tools::Long nQualityPercent, tools::Long aChromaSubsampling, css::uno::Reference const & status); -void ReadJPEG( JPEGReader* pJPEGReader, void* pInputStream, tools::Long* pLines, +void ReadJPEG( JPEGReader* pJPEGReader, void* pInputStream, GraphicFilterImportFlags nImportFlags, BitmapScopedWriteAccess* ppAccess ); diff --git a/vcl/source/filter/jpeg/jpegc.cxx b/vcl/source/filter/jpeg/jpegc.cxx index 5b50bd3d394e..bac3079df04c 100644 --- a/vcl/source/filter/jpeg/jpegc.cxx +++ b/vcl/source/filter/jpeg/jpegc.cxx @@ -184,7 +184,7 @@ void progress_monitor(j_common_ptr cinfo) } -static void ReadJPEG(JpegStuff& rContext, JPEGReader* pJPEGReader, void* pInputStream, tools::Long* pLines, +static void ReadJPEG(JpegStuff& rContext, JPEGReader* pJPEGReader, void* pInputStream, GraphicFilterImportFlags nImportFlags, BitmapScopedWriteAccess* ppAccess) { @@ -311,9 +311,9 @@ static void ReadJPEG(JpegStuff& rContext, JPEGReader* pJPEGReader, void* pInputS } // tdf#138950 allow up to one short read (no_data_available_failures <= 1) to not trigger cancelling import - for (*pLines = 0; *pLines < nHeight && source->no_data_available_failures <= 1; (*pLines)++) + for (tools::Long nLine = 0; nLine < nHeight && source->no_data_available_failures <= 1; nLine++) { - size_t yIndex = *pLines; + size_t yIndex = nLine; sal_uInt8* p = (rContext.cinfo.out_color_space == JCS_CMYK) ? rContext.pCYMKBuffer.data() : rContext.pScanLineBuffer.data(); jpeg_read_scanlines(&rContext.cinfo, reinterpret_cast(&p), 1); @@ -362,12 +362,12 @@ static void ReadJPEG(JpegStuff& rContext, JPEGReader* pJPEGReader, void* pInputS } } -void ReadJPEG( JPEGReader* pJPEGReader, void* pInputStream, tools::Long* pLines, +void ReadJPEG( JPEGReader* pJPEGReader, void* pInputStream, GraphicFilterImportFlags nImportFlags, BitmapScopedWriteAccess* ppAccess ) { JpegStuff aContext; - ReadJPEG(aContext, pJPEGReader, pInputStream, pLines, nImportFlags, ppAccess); + ReadJPEG(aContext, pJPEGReader, pInputStream, nImportFlags, ppAccess); } bool WriteJPEG( JPEGWriter* pJPEGWriter, void* pOutputStream, From c983881b821f10b081336129ce547435b45d1704 Mon Sep 17 00:00:00 2001 From: Bogdan Buzea Date: Wed, 26 Jun 2024 14:51:46 +0200 Subject: [PATCH 080/194] Resave with newer Glade version Change-Id: Id30a7872e3f0d2689f77ece82d138696e3249882 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169560 Reviewed-by: Taichi Haradaguchi <20001722@ymail.ne.jp> Tested-by: Jenkins --- sc/uiconfig/scalc/ui/numberbox.ui | 6 +- sc/uiconfig/scalc/ui/paradialog.ui | 163 ++---- sc/uiconfig/scalc/ui/passfragment.ui | 32 +- .../scalc/ui/pivottablelayoutdialog.ui | 474 +++++++++--------- sc/uiconfig/scalc/ui/posbox.ui | 10 +- sc/uiconfig/scalc/ui/recalcquerydialog.ui | 23 +- sc/uiconfig/scalc/ui/retypepassdialog.ui | 85 ++-- sc/uiconfig/scalc/ui/retypepassworddialog.ui | 119 +++-- sc/uiconfig/scalc/ui/rightfooterdialog.ui | 77 +-- sc/uiconfig/scalc/ui/rightheaderdialog.ui | 77 +-- sc/uiconfig/scalc/ui/searchresults.ui | 57 +-- sc/uiconfig/scalc/ui/selectsource.ui | 89 ++-- sc/uiconfig/scalc/ui/sharedfooterdialog.ui | 137 ++--- sc/uiconfig/scalc/ui/sharedheaderdialog.ui | 137 ++--- sc/uiconfig/scalc/ui/sharedocumentdlg.ui | 90 ++-- sc/uiconfig/scalc/ui/sharedwarningdialog.ui | 25 +- sc/uiconfig/scalc/ui/solversuccessdialog.ui | 65 ++- .../scalc/ui/sorttransformationentry.ui | 57 +-- sc/uiconfig/scalc/ui/sortwarning.ui | 59 ++- sc/uiconfig/scalc/ui/subtotaldialog.ui | 171 ++----- sc/uiconfig/scalc/ui/swaprowsentry.ui | 61 +-- sc/uiconfig/scalc/ui/tabcolordialog.ui | 57 +-- sc/uiconfig/scalc/ui/textimportoptions.ui | 89 ++-- .../scalc/ui/texttransformationentry.ui | 57 +-- sc/uiconfig/scalc/ui/ungroupdialog.ui | 69 ++- sc/uiconfig/scalc/ui/validationdialog.ui | 141 ++---- 26 files changed, 957 insertions(+), 1470 deletions(-) diff --git a/sc/uiconfig/scalc/ui/numberbox.ui b/sc/uiconfig/scalc/ui/numberbox.ui index 0aa8b1d73dfd..d24931000804 100644 --- a/sc/uiconfig/scalc/ui/numberbox.ui +++ b/sc/uiconfig/scalc/ui/numberbox.ui @@ -1,16 +1,16 @@ - + True - False + False True 6 True - False + False True diff --git a/sc/uiconfig/scalc/ui/paradialog.ui b/sc/uiconfig/scalc/ui/paradialog.ui index e338163ecb03..ae6bbacb4e48 100644 --- a/sc/uiconfig/scalc/ui/paradialog.ui +++ b/sc/uiconfig/scalc/ui/paradialog.ui @@ -1,31 +1,28 @@ - + - False - 6 + False + 6 Paragraph False - dialog - - - + dialog - False + False vertical 12 - False - end + False + end _Reset True - True - True + True + True True @@ -38,10 +35,10 @@ _OK True - True - True - True - True + True + True + True + True True @@ -54,8 +51,8 @@ _Cancel True - True - True + True + True True @@ -68,8 +65,8 @@ _Help True - True - True + True + True True @@ -83,47 +80,23 @@ False True - end + end 0 True - True + True True True True - True + True True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -132,42 +105,18 @@ True - False + False Indents & Spacing - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -179,44 +128,20 @@ True - False + False Alignment 0.5 1 - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -228,43 +153,19 @@ True - False + False Asian Typography 2 - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -276,12 +177,12 @@ True - False + False Tabs 3 - False + False diff --git a/sc/uiconfig/scalc/ui/passfragment.ui b/sc/uiconfig/scalc/ui/passfragment.ui index b9bd6cddce8e..b679a08212e3 100644 --- a/sc/uiconfig/scalc/ui/passfragment.ui +++ b/sc/uiconfig/scalc/ui/passfragment.ui @@ -1,48 +1,48 @@ - + - + True - False - True + False + True start True - 12 + 12 True - False + False 0 - 0 - 0 + 0 + 0 True - False + False 0 - 1 - 0 + 1 + 0 True False - True - True - True + True + True + True - 2 - 0 + 2 + 0 diff --git a/sc/uiconfig/scalc/ui/pivottablelayoutdialog.ui b/sc/uiconfig/scalc/ui/pivottablelayoutdialog.ui index 3f1e626d1b66..293500c868aa 100644 --- a/sc/uiconfig/scalc/ui/pivottablelayoutdialog.ui +++ b/sc/uiconfig/scalc/ui/pivottablelayoutdialog.ui @@ -1,5 +1,5 @@ - + @@ -43,32 +43,29 @@ - False - 6 + False + 6 Pivot Table Layout - 0 - 0 - dialog - - - + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _OK True - True - True - True - True + True + True + True + True True @@ -86,8 +83,8 @@ _Cancel True - True - True + True + True True @@ -105,8 +102,8 @@ _Help True - True - True + True + True True @@ -120,14 +117,14 @@ False True - end + end 0 True - False + False True True vertical @@ -135,23 +132,23 @@ True - False + False True True 6 - + True - False + False True True - 6 - 6 + 6 + 6 True - False + False True True vertical @@ -159,10 +156,10 @@ True - False + False Column Fields: - True - listbox-column + True + listbox-column 0 0 @@ -177,25 +174,25 @@ - 200 - 100 + 200 + 100 True - True + True True True - in + in True - True + True True True liststore3 - False - False + False + False True - 0 - False + 0 + False @@ -225,14 +222,14 @@ - 1 - 0 + 1 + 0 True - False + False True True vertical @@ -240,10 +237,10 @@ True - False + False Data Fields: - True - listbox-data + True + listbox-data 0 0 @@ -258,25 +255,25 @@ - 240 - 120 + 240 + 120 True - True + True True True - in + in True - True + True True True liststore4 - False - False + False + False True - 0 - False + 0 + False @@ -306,14 +303,14 @@ - 1 - 1 + 1 + 1 True - False + False True True vertical @@ -321,10 +318,10 @@ True - False + False Row Fields: - True - listbox-row + True + listbox-row 0 0 @@ -339,23 +336,23 @@ - 180 - 100 + 180 + 100 True - True + True True - in + in True - True + True True liststore5 - False - False + False + False True - 0 - False + 0 + False @@ -385,14 +382,14 @@ - 0 - 1 + 0 + 1 True - False + False True True vertical @@ -400,10 +397,10 @@ True - False + False Filters: - True - listbox-page + True + listbox-page 0 0 @@ -418,25 +415,25 @@ - 200 - 100 + 200 + 100 True - True + True True True - in + in True - True + True True True liststore1 - False - False + False + False True - 0 - False + 0 + False @@ -466,8 +463,8 @@ - 0 - 0 + 0 + 0 @@ -480,14 +477,14 @@ True - False + False True vertical 6 True - False + False vertical @@ -506,17 +503,17 @@ True - False + False True vertical 6 True - False + False Available Fields: - True - listbox-fields + True + listbox-fields 0 @@ -530,25 +527,25 @@ - 180 - 150 + 180 + 150 True - True + True True True - in + in True - True + True True True liststore2 - False - False + False + False True - 0 - False + 0 + False @@ -593,7 +590,7 @@ True - False + False True Drag the Items into the Desired Position @@ -609,26 +606,26 @@ True - True - True + True + True - + True - False + False 12 - 6 - 3 - 12 - True + 6 + 3 + 12 + True Ignore empty rows True - True - False - True - True + True + False + True + True Ignores empty fields in the data source. @@ -636,18 +633,18 @@ - 0 - 0 + 0 + 0 Identify categories True - True - False - True - True + True + False + True + True Automatically assigns rows without labels to the category of the row above. @@ -655,18 +652,18 @@ - 1 - 0 + 1 + 0 Total rows True - True - False - True - True + True + False + True + True Calculates and displays the grand total of the row calculation. @@ -674,18 +671,18 @@ - 1 - 1 + 1 + 1 Total columns True - True - False - True - True + True + False + True + True Calculates and displays the grand total of the column calculation. @@ -693,18 +690,18 @@ - 0 - 1 + 0 + 1 Add filter True - True - False - True - True + True + False + True + True Adds a Filter button to pivot tables that are based on spreadsheet data. @@ -712,18 +709,18 @@ - 0 - 2 + 0 + 2 Enable drill to details True - True - False - True - True + True + False + True + True Select this check box and double-click an item label in the table to show or hide details for the item. Clear this check box and double-click a cell in the table to edit the contents of the cell. @@ -731,18 +728,18 @@ - 1 - 2 + 1 + 2 Show expand/collapse buttons True - True - False - True - True + True + False + True + True Select this check box to show expand/collapse buttons for field members @@ -750,18 +747,21 @@ - 0 - 3 + 0 + 3 + + + True - False + False Options - True + True @@ -777,48 +777,48 @@ True - True - True + True + True - + True - False + False 12 - 6 + 6 True - 6 - 12 + 6 + 12 True - False + False True - 0 - none + 0 + none - + True - False - True - 3 - 6 + False 12 6 + True + 3 + 6 New sheet True - True - False - True + True + False + True True - True + True - 0 - 0 + 0 + 0 3 @@ -826,21 +826,21 @@ Selection True - True - False - True - True + True + False + True + True destination-radio-new-sheet - 0 - 2 + 0 + 2 True - True + True True True @@ -850,15 +850,15 @@ - 1 - 2 + 1 + 2 True - True - True + True + True Click the Shrink icon to reduce the dialog to the size of the input field. It is then easier to mark the required reference in the sheet. The icons then automatically convert to the Maximize icon. Click it to restore the dialog to its original size. @@ -866,14 +866,14 @@ - 2 - 2 + 2 + 2 True - False + False Select the area where you want to display the results of the pivot table. @@ -881,8 +881,8 @@ - 1 - 1 + 1 + 1 2 @@ -890,15 +890,15 @@ Named range True - True - False - True - True + True + False + True + True destination-radio-new-sheet - 0 - 1 + 0 + 1 @@ -906,7 +906,7 @@ True - False + False Destination @@ -915,48 +915,48 @@ - 0 - 1 + 0 + 1 True - False + False True - 0 - none + 0 + none - + True - False - True - 3 - 6 + False 12 6 + True + 3 + 6 Selection True - True - False - True + True + False + True True - True + True - 0 - 1 + 0 + 1 True - True + True True - True + True True @@ -965,15 +965,15 @@ - 1 - 1 + 1 + 1 True - True - True + True + True Select the area that contains the data for the current pivot table. @@ -981,33 +981,33 @@ - 2 - 1 + 2 + 1 Named range True - True - False - True - True + True + False + True + True source-radio-selection - 0 - 0 + 0 + 0 True - False + False - 1 - 0 + 1 + 0 2 @@ -1016,7 +1016,7 @@ True - False + False Source @@ -1025,8 +1025,8 @@ - 0 - 0 + 0 + 0 @@ -1034,9 +1034,9 @@ True - False + False Source and Destination - True + True diff --git a/sc/uiconfig/scalc/ui/posbox.ui b/sc/uiconfig/scalc/ui/posbox.ui index 5527f569ad15..530798251650 100644 --- a/sc/uiconfig/scalc/ui/posbox.ui +++ b/sc/uiconfig/scalc/ui/posbox.ui @@ -1,22 +1,22 @@ - + True - False + False vertical True - False + False True True - True + True + True True - True diff --git a/sc/uiconfig/scalc/ui/recalcquerydialog.ui b/sc/uiconfig/scalc/ui/recalcquerydialog.ui index 49156dde08ba..64429815e797 100644 --- a/sc/uiconfig/scalc/ui/recalcquerydialog.ui +++ b/sc/uiconfig/scalc/ui/recalcquerydialog.ui @@ -1,22 +1,22 @@ - + + False False True - False - dialog - question + dialog + question yes-no - False + False vertical 2 - False + False True @@ -29,11 +29,11 @@ Always perform this without prompt in the future. True - True - False + True + False start - True - True + True + True False @@ -43,8 +43,5 @@ - - - diff --git a/sc/uiconfig/scalc/ui/retypepassdialog.ui b/sc/uiconfig/scalc/ui/retypepassdialog.ui index b33d5d327c93..dcf74691a3a8 100644 --- a/sc/uiconfig/scalc/ui/retypepassdialog.ui +++ b/sc/uiconfig/scalc/ui/retypepassdialog.ui @@ -1,40 +1,37 @@ - + - False + False True True - 6 + 6 Re-type Password False True - 0 - 0 - dialog - - - + 0 + 0 + dialog - False + False True True vertical 12 - False - end + False + end _OK True - True - True - True - True + True + True + True + True True @@ -47,8 +44,8 @@ _Cancel True - True - True + True + True True @@ -61,8 +58,8 @@ _Help True - True - True + True + True True @@ -76,14 +73,14 @@ False True - end + end 0 True - False + False True True vertical @@ -91,11 +88,11 @@ True - False + False start The document you are about to export has one or more protected items with password that cannot be exported. Please re-type your password to be able to export your document. True - 60 + 60 0 @@ -107,20 +104,20 @@ True - False - 0 - none + False + 0 + none True - False - 6 + False 12 6 + 6 True - False + False Status unknown @@ -133,9 +130,9 @@ _Re-type True - True - True - True + True + True + True False @@ -148,7 +145,7 @@ True - False + False Document Protection @@ -165,28 +162,28 @@ True - False + False True True - 0 - none + 0 + none True - False - True - True - in + False 12 6 + True + True + in True - False + False True - False + False True True vertical @@ -203,7 +200,7 @@ True - False + False Sheet Protection diff --git a/sc/uiconfig/scalc/ui/retypepassworddialog.ui b/sc/uiconfig/scalc/ui/retypepassworddialog.ui index 193fb249d0cd..5e4f15918614 100644 --- a/sc/uiconfig/scalc/ui/retypepassworddialog.ui +++ b/sc/uiconfig/scalc/ui/retypepassworddialog.ui @@ -1,35 +1,32 @@ - + - False - 6 + False + 6 Re-type Password True - 0 - 0 - dialog - - - + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _OK True - True - True - True - True + True + True + True + True True @@ -42,8 +39,8 @@ _Cancel True - True - True + True + True True @@ -56,8 +53,8 @@ _Help True - True - True + True + True True @@ -71,14 +68,14 @@ False True - end + end 0 True - False + False True vertical 6 @@ -86,11 +83,11 @@ Re-type password True - True - False - True + True + False + True True - True + True False @@ -99,85 +96,85 @@ - + True - False - True - 6 - 12 + False 12 6 + True + 6 + 12 True - True + True True False - True + True True - password + password - 1 - 0 + 1 + 0 True - True + True True False - True + True True - password + password - 1 - 1 + 1 + 1 True - False + False Pa_ssword: - True - newpassEntry + True + newpassEntry 0 - 0 - 0 + 0 + 0 True - False + False Confi_rm: - True - confirmpassEntry + True + confirmpassEntry 0 - 0 - 1 + 0 + 1 New password must match the original password True - True - False - True - True + True + False + True + True - 0 - 2 + 0 + 2 2 @@ -192,10 +189,10 @@ Remove password from this protected item True - True - False - True - True + True + False + True + True retypepassword diff --git a/sc/uiconfig/scalc/ui/rightfooterdialog.ui b/sc/uiconfig/scalc/ui/rightfooterdialog.ui index 028329db8a67..02502e8cfefd 100644 --- a/sc/uiconfig/scalc/ui/rightfooterdialog.ui +++ b/sc/uiconfig/scalc/ui/rightfooterdialog.ui @@ -1,34 +1,31 @@ - + - False - 6 + False + 6 Footer (right) False True - 0 - 0 - dialog - - - + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _Reset True - True - True + True + True True @@ -41,10 +38,10 @@ _OK True - True - True - True - True + True + True + True + True True @@ -57,8 +54,8 @@ _Cancel True - True - True + True + True True @@ -71,8 +68,8 @@ _Help True - True - True + True + True True @@ -86,47 +83,23 @@ False True - end + end 0 True - True + True True True True - True + True True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -135,11 +108,11 @@ True - False + False Footer (right) - False + False diff --git a/sc/uiconfig/scalc/ui/rightheaderdialog.ui b/sc/uiconfig/scalc/ui/rightheaderdialog.ui index e0823999c2cd..340df22acdc2 100644 --- a/sc/uiconfig/scalc/ui/rightheaderdialog.ui +++ b/sc/uiconfig/scalc/ui/rightheaderdialog.ui @@ -1,34 +1,31 @@ - + - False - 6 + False + 6 Header (right) False True - 0 - 0 - dialog - - - + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _Reset True - True - True + True + True True @@ -41,10 +38,10 @@ _OK True - True - True - True - True + True + True + True + True True @@ -57,8 +54,8 @@ _Cancel True - True - True + True + True True @@ -71,8 +68,8 @@ _Help True - True - True + True + True True @@ -86,47 +83,23 @@ False True - end + end 0 True - True + True True True True - True + True True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -135,11 +108,11 @@ True - False + False Header (right) - False + False diff --git a/sc/uiconfig/scalc/ui/searchresults.ui b/sc/uiconfig/scalc/ui/searchresults.ui index 304a167cd421..0af677ec64e6 100644 --- a/sc/uiconfig/scalc/ui/searchresults.ui +++ b/sc/uiconfig/scalc/ui/searchresults.ui @@ -1,5 +1,5 @@ - + @@ -15,32 +15,32 @@ - False - 6 - 0 - 0 + False + 6 Search Results - dialog + 0 + 0 + dialog - False + False vertical 12 - False + False True - end + end _Show this dialog True - True - False - Enable the dialog again at Tools - Options - %PRODUCTNAME Calc - View - True + True + False + Enable the dialog again at Tools - Options - %PRODUCTNAME Calc - View + True True - True + True True @@ -53,10 +53,10 @@ _Close True - True - True - True - True + True + True + True + True True @@ -69,28 +69,27 @@ False True - end + end 2 True - True + True True True - in + in True - True - True + True + True True True liststore3 - True - 0 - False + 0 + False @@ -148,9 +147,8 @@ True - False + False start - False @@ -163,8 +161,5 @@ close - - - diff --git a/sc/uiconfig/scalc/ui/selectsource.ui b/sc/uiconfig/scalc/ui/selectsource.ui index 1dc349a0502b..0509e1eea3ad 100644 --- a/sc/uiconfig/scalc/ui/selectsource.ui +++ b/sc/uiconfig/scalc/ui/selectsource.ui @@ -1,36 +1,33 @@ - + - False - 6 + False + 6 Select Source False True - 0 - 0 - dialog - - - + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _OK True - True - True - True - True + True + True + True + True True @@ -43,8 +40,8 @@ _Cancel True - True - True + True + True True @@ -57,8 +54,8 @@ _Help True - True - True + True + True True @@ -72,37 +69,37 @@ False True - end + end 0 True - False - 0 - none + False + 0 + none True - False - vertical - 6 + False 12 6 + vertical + 6 True - False + False 12 _Named range: True - True - False - True - True + True + False + True + True selection @@ -117,7 +114,7 @@ True - False + False True @@ -140,11 +137,11 @@ _Current selection True - True - False - True + True + False + True True - True + True Uses the selected cells as the data source for the pivot table. @@ -161,10 +158,10 @@ _Data source registered in Calc True - True - False - True - True + True + False + True + True selection @@ -182,10 +179,10 @@ _External source/interface True - True - False - True - True + True + False + True + True selection @@ -204,7 +201,7 @@ True - False + False Selection diff --git a/sc/uiconfig/scalc/ui/sharedfooterdialog.ui b/sc/uiconfig/scalc/ui/sharedfooterdialog.ui index c129bbfdb865..6ef6701102a2 100644 --- a/sc/uiconfig/scalc/ui/sharedfooterdialog.ui +++ b/sc/uiconfig/scalc/ui/sharedfooterdialog.ui @@ -1,34 +1,31 @@ - + - False - 6 + False + 6 Headers/Footers False True - 0 - 0 - dialog - - - + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _Reset True - True - True + True + True True @@ -41,10 +38,10 @@ _OK True - True - True - True - True + True + True + True + True True @@ -57,8 +54,8 @@ _Cancel True - True - True + True + True True @@ -71,8 +68,8 @@ _Help True - True - True + True + True True @@ -86,47 +83,23 @@ False True - end + end 0 True - True + True True True True - True + True True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -135,42 +108,18 @@ True - False + False Header (right) - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -182,43 +131,19 @@ True - False + False Header (left) 1 - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -230,12 +155,12 @@ True - False + False Footer 2 - False + False diff --git a/sc/uiconfig/scalc/ui/sharedheaderdialog.ui b/sc/uiconfig/scalc/ui/sharedheaderdialog.ui index ccbc1435452d..2a68d9814bb5 100644 --- a/sc/uiconfig/scalc/ui/sharedheaderdialog.ui +++ b/sc/uiconfig/scalc/ui/sharedheaderdialog.ui @@ -1,34 +1,31 @@ - + - False - 6 + False + 6 Headers/Footers False True - 0 - 0 - dialog - - - + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _Reset True - True - True + True + True True @@ -41,10 +38,10 @@ _OK True - True - True - True - True + True + True + True + True True @@ -57,8 +54,8 @@ _Cancel True - True - True + True + True True @@ -71,8 +68,8 @@ _Help True - True - True + True + True True @@ -86,47 +83,23 @@ False True - end + end 0 True - True + True True True True - True + True True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -135,42 +108,18 @@ True - False + False Header - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -182,43 +131,19 @@ True - False + False Footer (right) 1 - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -230,12 +155,12 @@ True - False + False Footer (left) 2 - False + False diff --git a/sc/uiconfig/scalc/ui/sharedocumentdlg.ui b/sc/uiconfig/scalc/ui/sharedocumentdlg.ui index f1dcbd523215..98435f5e4fc5 100644 --- a/sc/uiconfig/scalc/ui/sharedocumentdlg.ui +++ b/sc/uiconfig/scalc/ui/sharedocumentdlg.ui @@ -1,5 +1,5 @@ - + @@ -13,34 +13,31 @@ - False - 6 + False + 6 Share Document False True - 0 - 0 - dialog - - - + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _Help True - True - True + True + True True - right + right False @@ -53,10 +50,10 @@ _OK True - True - True - True - True + True + True + True + True True @@ -69,8 +66,8 @@ _Cancel True - True - True + True + True True @@ -83,14 +80,14 @@ False True - end + end 0 True - False + False True True vertical @@ -98,17 +95,17 @@ True - False + False vertical 6 _Share this spreadsheet with other users True - True - False - True - True + True + False + True + True False @@ -119,16 +116,16 @@ True - False + False + 12 Note: Changes to formatting attributes like fonts, colors, and number formats will not be saved and some functionalities like editing charts and drawing objects are not available in shared mode. Turn off shared mode to get exclusive access needed for those changes and functionalities. True - 72 - 72 + 72 + 72 0 0 - 12 - + @@ -147,39 +144,38 @@ True - False + False True True - 0 - none + 0 + none True - False + False + 12 + 6 True True vertical 6 - 12 - 6 True - True + True True True - in + in True - True - True + True + True True True liststore1 - True - 0 - False + 0 + False @@ -223,7 +219,7 @@ True - False + False Users Currently Accessing This Spreadsheet diff --git a/sc/uiconfig/scalc/ui/sharedwarningdialog.ui b/sc/uiconfig/scalc/ui/sharedwarningdialog.ui index fb9c6b66989f..9282c2e3bb72 100644 --- a/sc/uiconfig/scalc/ui/sharedwarningdialog.ui +++ b/sc/uiconfig/scalc/ui/sharedwarningdialog.ui @@ -1,24 +1,24 @@ - + - False + False False True - dialog - warning + dialog + warning ok The spreadsheet is in shared mode. This allows multiple users to access and edit the spreadsheet at the same time. - Changes to formatting attributes like fonts, colors, and number formats will not be saved and some functionalities like editing charts and drawing objects are not available in shared mode. Turn off shared mode to get exclusive access needed for those changes and functionalities. + Changes to formatting attributes like fonts, colors, and number formats will not be saved and some functionalities like editing charts and drawing objects are not available in shared mode. Turn off shared mode to get exclusive access needed for those changes and functionalities. - False + False vertical 2 - False + False True @@ -31,11 +31,11 @@ Do not show warning again. True - True - False - True + True + False start - True + True + True False @@ -45,8 +45,5 @@ - - - diff --git a/sc/uiconfig/scalc/ui/solversuccessdialog.ui b/sc/uiconfig/scalc/ui/solversuccessdialog.ui index ca44365d0bf3..8bf2a3f6e690 100644 --- a/sc/uiconfig/scalc/ui/solversuccessdialog.ui +++ b/sc/uiconfig/scalc/ui/solversuccessdialog.ui @@ -1,37 +1,34 @@ - + - False - 6 + False + 6 Solving Result False True - 0 - 0 - dialog - - - + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end Keep Result True - True - True - True - True - True + True + True + True + True + True False @@ -43,9 +40,9 @@ Restore Previous True - True - True - True + True + True + True False @@ -57,52 +54,52 @@ False True - end + end 2 - + True - False - 24 + False + 24 True - False + False Do you want to keep the result or do you want to restore previous values? True - 40 + 40 0 - 0 - 2 + 0 + 2 True - False + False Solving successfully finished. 0 - 0 - 0 + 0 + 0 True - False + False Result: 0 - 0 - 1 + 0 + 1 diff --git a/sc/uiconfig/scalc/ui/sorttransformationentry.ui b/sc/uiconfig/scalc/ui/sorttransformationentry.ui index 4a5347677c23..c2c9cc65930a 100644 --- a/sc/uiconfig/scalc/ui/sorttransformationentry.ui +++ b/sc/uiconfig/scalc/ui/sorttransformationentry.ui @@ -1,83 +1,84 @@ - + + True - False - 6 - 6 - 6 - 12 + False + 6 + 6 + 6 + 12 True - False + False - 0 - 0 + 0 + 0 3 True - False + False start Sort Transformation - True - ed_ascending + True + ed_ascending - 0 - 1 + 0 + 1 3 True - True + True True - 10 - True - Column + 10 + True + Column - 1 - 2 + 1 + 2 Delete True - True - False + True + False end - 2 - 2 + 2 + 2 True - False + False start False 0 - 1 + 1 Descending Order Ascending Order - 0 - 2 + 0 + 2 diff --git a/sc/uiconfig/scalc/ui/sortwarning.ui b/sc/uiconfig/scalc/ui/sortwarning.ui index 2d2221cb6c0a..9072accedc52 100644 --- a/sc/uiconfig/scalc/ui/sortwarning.ui +++ b/sc/uiconfig/scalc/ui/sortwarning.ui @@ -1,36 +1,33 @@ - + - False - 6 + False + 6 Sort Range True - 0 - 0 - dialog - - - + 0 + 0 + dialog - False + False vertical 2 - False - end + False + end _Extend selection True - True - True - True - True - True + True + True + True + True + True False @@ -42,8 +39,8 @@ Current selection True - True - True + True + True False @@ -55,8 +52,8 @@ _Cancel True - True - True + True + True True @@ -75,15 +72,15 @@ True - False + False start start - 6 - 6 + 6 + 6 The cells next to the current selection also contain data. Do you want to extend the sort range to %1, or sort the currently selected range, %2? True - word-char - 72 + word-char + 72 0 @@ -95,15 +92,15 @@ True - False + False start start - 6 - 6 + 6 + 6 Tip: The sort range can be detected automatically. Place the cell cursor inside a list and execute sort. The whole range of neighboring non-empty cells will then be sorted. True - word-char - 72 + word-char + 72 0 diff --git a/sc/uiconfig/scalc/ui/subtotaldialog.ui b/sc/uiconfig/scalc/ui/subtotaldialog.ui index 69a1e370bba7..f850bac550b1 100644 --- a/sc/uiconfig/scalc/ui/subtotaldialog.ui +++ b/sc/uiconfig/scalc/ui/subtotaldialog.ui @@ -1,34 +1,31 @@ - + - False - 6 + False + 6 Subtotals False True - 0 - 0 - dialog - - - + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _Help True - True - True + True + True 6 True @@ -43,8 +40,8 @@ _Reset True - True - True + True + True True @@ -57,8 +54,8 @@ _Remove True - True - True + True + True True @@ -71,10 +68,10 @@ _OK True - True - True - True - True + True + True + True + True True @@ -87,8 +84,8 @@ _Cancel True - True - True + True + True True @@ -101,47 +98,23 @@ False True - end + end 0 True - True + True True True True - True + True True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -150,42 +123,18 @@ True - False + False 1st Group - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -197,43 +146,19 @@ True - False + False 2nd Group 1 - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -245,43 +170,19 @@ True - False + False 3rd Group 2 - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -293,12 +194,12 @@ True - False + False Options 3 - False + False diff --git a/sc/uiconfig/scalc/ui/swaprowsentry.ui b/sc/uiconfig/scalc/ui/swaprowsentry.ui index 397d3b30af5c..c5251127a673 100644 --- a/sc/uiconfig/scalc/ui/swaprowsentry.ui +++ b/sc/uiconfig/scalc/ui/swaprowsentry.ui @@ -1,79 +1,80 @@ - + + True - False - 6 - 6 - 6 - 12 + False + 6 + 6 + 6 + 12 True - False + False - 0 - 0 + 0 + 0 3 True - False + False start Swap Rows Action - True - ed_row1 + True + ed_row1 - 0 - 1 + 0 + 1 3 True - True + True True - 10 - True - First Row + 10 + True + First Row - 0 - 2 + 0 + 2 True - True + True True - 10 - True - Second Row + 10 + True + Second Row - 1 - 2 + 1 + 2 Delete True - True - False + True + False end - 2 - 2 + 2 + 2 diff --git a/sc/uiconfig/scalc/ui/tabcolordialog.ui b/sc/uiconfig/scalc/ui/tabcolordialog.ui index 58b717f153ae..d2e1f26c4d09 100644 --- a/sc/uiconfig/scalc/ui/tabcolordialog.ui +++ b/sc/uiconfig/scalc/ui/tabcolordialog.ui @@ -1,34 +1,31 @@ - + - False - 6 + False + 6 True - 0 - 0 - dialog - - - + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _OK True - True - True - True - True + True + True + True + True True @@ -41,8 +38,8 @@ _Cancel True - True - True + True + True True @@ -55,23 +52,23 @@ False True - end + end 2 True - False + False 3 True - False + False center Palette: - True - paletteselector + True + paletteselector 0 0 @@ -84,7 +81,7 @@ True - False + False True @@ -102,20 +99,20 @@ True - True + True True True - never - never - in + never + never + in True - False + False True - True + True GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_STRUCTURE_MASK True True diff --git a/sc/uiconfig/scalc/ui/textimportoptions.ui b/sc/uiconfig/scalc/ui/textimportoptions.ui index 2ba1641d324d..0abfd7f4b6bd 100644 --- a/sc/uiconfig/scalc/ui/textimportoptions.ui +++ b/sc/uiconfig/scalc/ui/textimportoptions.ui @@ -1,35 +1,32 @@ - + - False - 6 + False + 6 Import Options True - 0 - 0 - dialog - - - + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _OK True - True - True - True - True + True + True + True + True True @@ -42,8 +39,8 @@ _Cancel True - True - True + True + True True @@ -72,71 +69,71 @@ False True - end + end 0 True - False + False vertical 12 True - False - 0 - none + False + 0 + none True - False - 6 - 6 + False 12 6 + 6 + 6 Custom: True - True - False - True - True + True + False + True + True automatic - 0 - 1 + 0 + 1 Automatic True - True - False - True + True + False + True True - True + True - 0 - 0 + 0 + 0 2 True - False + False True - 1 - 1 + 1 + 1 @@ -144,7 +141,7 @@ True - False + False Select the Locale to Use for Import @@ -161,9 +158,9 @@ True - False - 0 - none + False + 0 + none @@ -208,7 +205,7 @@ True - False + False Options diff --git a/sc/uiconfig/scalc/ui/texttransformationentry.ui b/sc/uiconfig/scalc/ui/texttransformationentry.ui index 4c9fe473596c..5a6c0f01f479 100644 --- a/sc/uiconfig/scalc/ui/texttransformationentry.ui +++ b/sc/uiconfig/scalc/ui/texttransformationentry.ui @@ -1,48 +1,49 @@ - + + True - False - 6 - 6 - 6 - 12 + False + 6 + 6 + 6 + 12 True - False + False - 0 - 0 + 0 + 0 3 True - False + False start Text Transformation - True - ed_lst + True + ed_lst - 0 - 1 + 0 + 1 3 True - False + False start False 0 - 0 + 0 To Lower To Upper @@ -51,35 +52,35 @@ - 0 - 2 + 0 + 2 True - True + True True - 10 - True - Columns + 10 + True + Columns - 1 - 2 + 1 + 2 Delete True - True - False + True + False end - 2 - 2 + 2 + 2 diff --git a/sc/uiconfig/scalc/ui/ungroupdialog.ui b/sc/uiconfig/scalc/ui/ungroupdialog.ui index e2ebc78b4f4b..1652d31d4406 100644 --- a/sc/uiconfig/scalc/ui/ungroupdialog.ui +++ b/sc/uiconfig/scalc/ui/ungroupdialog.ui @@ -1,33 +1,33 @@ - + - False - 6 + False + 6 Ungroup False True - 0 - 0 - dialog + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _OK True - True - True - True - True + True + True + True + True True @@ -40,8 +40,8 @@ _Cancel True - True - True + True + True True @@ -54,8 +54,8 @@ _Help True - True - True + True + True True @@ -69,36 +69,36 @@ False True - end + end 0 True - False + False True True - 0 - none + 0 + none True - False + False + 12 + 6 True vertical 6 - 12 - 6 _Rows True - True - False - True + True + False + True True - True + True False @@ -110,10 +110,10 @@ _Columns True - True - False - True - True + True + False + True + True rows @@ -127,7 +127,7 @@ True - False + False True Deactivate for 0 @@ -150,8 +150,5 @@ cancel help - - - diff --git a/sc/uiconfig/scalc/ui/validationdialog.ui b/sc/uiconfig/scalc/ui/validationdialog.ui index 1fb18070d4cf..9b91467c1ec8 100644 --- a/sc/uiconfig/scalc/ui/validationdialog.ui +++ b/sc/uiconfig/scalc/ui/validationdialog.ui @@ -1,34 +1,31 @@ - + - False - 6 + False + 6 Validity False True - 0 - 0 - dialog - - - + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _Reset True - True - True + True + True True @@ -41,10 +38,10 @@ _OK True - True - True - True - True + True + True + True + True True @@ -57,8 +54,8 @@ _Cancel True - True - True + True + True True @@ -71,8 +68,8 @@ _Help True - True - True + True + True True @@ -86,52 +83,28 @@ False True - end + end 0 True - False + False vertical True - True + True True True True - True + True True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -140,42 +113,18 @@ True - False + False Criteria - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -187,43 +136,19 @@ True - False + False Input Help 1 - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -235,12 +160,12 @@ True - False + False Error Alert 2 - False + False @@ -253,7 +178,7 @@ True - False + False From c8f72c2a3a7b347c54089d96b0794b4586022688 Mon Sep 17 00:00:00 2001 From: Moritz Duge Date: Mon, 24 Jun 2024 18:34:44 +0200 Subject: [PATCH 081/194] Improve documentation on key and mouse handlers and listeners. Change-Id: I443fd0c53f1fb11df3b4e13806771c2c649cae23 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169473 Reviewed-by: Samuel Mehrbrodt Tested-by: Jenkins --- offapi/com/sun/star/awt/XKeyHandler.idl | 30 +++++++++++++------ offapi/com/sun/star/awt/XKeyListener.idl | 8 +++-- .../com/sun/star/awt/XMouseClickHandler.idl | 9 ++++++ offapi/com/sun/star/awt/XMouseListener.idl | 5 ++++ .../com/sun/star/awt/XMouseMotionHandler.idl | 3 ++ .../com/sun/star/awt/XMouseMotionListener.idl | 6 ++++ 6 files changed, 50 insertions(+), 11 deletions(-) diff --git a/offapi/com/sun/star/awt/XKeyHandler.idl b/offapi/com/sun/star/awt/XKeyHandler.idl index d6455914f640..38b57696e800 100644 --- a/offapi/com/sun/star/awt/XKeyHandler.idl +++ b/offapi/com/sun/star/awt/XKeyHandler.idl @@ -20,15 +20,27 @@ module com { module sun { module star { module awt { -/** This key handler is similar to - ::com::sun::star::awt::XKeyListener but allows the - consumption of key events. If a key event is consumed by one - handler both the following handlers, with respect to the list of key - handlers of the broadcaster, and a following handling by the - broadcaster will not take place. - - @since OOo 1.1.2 -*/ +/** makes it possible to receive keyboard events. + * + * This key handler is similar to com::sun::star::awt::XKeyListener. + * But this handler is easier to use and more flexible for many + * purposes. + * + * This handler is usually added via + * com::sun::star::awt::XUserInputInterception to the controller from + * com::sun::star::frame::XModel. While + * com::sun::star::awt::XKeyListener needs to be added to exactly the + * correct widget. + * + * Also this handler is more flexible then + * com::sun::star::awt::XKeyListener, because it optionally allows the + * consumption of key events. If a key event is consumed by one handler + * both the following handlers, with respect to the list of + * key handlers of the broadcaster, and a following handling by the + * broadcaster will not take place. + * + * @since OOo 1.1.2 + */ published interface XKeyHandler : ::com::sun::star::lang::XEventListener { /** This function is called by the broadcaster, an diff --git a/offapi/com/sun/star/awt/XKeyListener.idl b/offapi/com/sun/star/awt/XKeyListener.idl index bb9375b22fa5..373cc0c43bca 100644 --- a/offapi/com/sun/star/awt/XKeyListener.idl +++ b/offapi/com/sun/star/awt/XKeyListener.idl @@ -24,8 +24,12 @@ /** makes it possible to receive keyboard events. * - * @see com::sun::star::awt::XKeyHandler This interface allows you receive (and consume) key events, - * even on windows which are not at the top. + * @see com::sun::star::awt::XKeyHandler That interface is better suited for many purposes. In + * opposite to this listener, the com::sun::star::awt::XKeyHandler doesn't need to be added on + * exactly the correct widget. Optionally com::sun::star::awt::XKeyHandler can also consume events. + * + * @see com::sun::star::awt::XVclContainer The function getWindows might be helpful to find the + * correct widget to add the this listener to. */ published interface XKeyListener: com::sun::star::lang::XEventListener { diff --git a/offapi/com/sun/star/awt/XMouseClickHandler.idl b/offapi/com/sun/star/awt/XMouseClickHandler.idl index fc63485f91e6..1f070a58850a 100644 --- a/offapi/com/sun/star/awt/XMouseClickHandler.idl +++ b/offapi/com/sun/star/awt/XMouseClickHandler.idl @@ -24,6 +24,15 @@ module com { module sun { module star { module awt { /** makes it possible to receive events from the mouse in a certain window. + This handler is usually added via + com::sun::star::awt::XUserInputInterception to the controller from + com::sun::star::frame::XModel. While + com::sun::star::awt::XMouseListener needs to be added to exactly the + correct widget. + + Also this handler is more flexible, because it optionally allows the + consumption of key events. + @since OOo 1.1.2 */ published interface XMouseClickHandler: ::com::sun::star::lang::XEventListener diff --git a/offapi/com/sun/star/awt/XMouseListener.idl b/offapi/com/sun/star/awt/XMouseListener.idl index a3f003daa0cc..48dd94b16d3f 100644 --- a/offapi/com/sun/star/awt/XMouseListener.idl +++ b/offapi/com/sun/star/awt/XMouseListener.idl @@ -30,6 +30,11 @@ *
  • com::sun::star::awt::XMouseClickHandler
  • *
  • com::sun::star::awt::XMouseMotionHandler
  • * + * These interfaces are better suited for many purposes. In opposite to this listener they don't + * need to be added on exactly the correct widget. Optionally they can also consume events. + * + * @see com::sun::star::awt::XVclContainer The function getWindows might be helpful to find the + * correct widget to add this listener to. */ published interface XMouseListener: com::sun::star::lang::XEventListener { diff --git a/offapi/com/sun/star/awt/XMouseMotionHandler.idl b/offapi/com/sun/star/awt/XMouseMotionHandler.idl index 48cb21178c90..cba0dd0e7d5a 100644 --- a/offapi/com/sun/star/awt/XMouseMotionHandler.idl +++ b/offapi/com/sun/star/awt/XMouseMotionHandler.idl @@ -23,6 +23,9 @@ /** makes it possible to receive mouse motion events on a window. + * + * @see ::com::sun::star::awt::XMouseMotionListener This handler is more + * flexible, because it optionally allows the consumption of key events. */ published interface XMouseMotionHandler: com::sun::star::lang::XEventListener { diff --git a/offapi/com/sun/star/awt/XMouseMotionListener.idl b/offapi/com/sun/star/awt/XMouseMotionListener.idl index b3073ba7a923..7f02f9c37f98 100644 --- a/offapi/com/sun/star/awt/XMouseMotionListener.idl +++ b/offapi/com/sun/star/awt/XMouseMotionListener.idl @@ -23,6 +23,12 @@ /** makes it possible to receive mouse motion events on a window. + * + * @see com::sun::star::awt::XMouseListener + * @see com::sun::star::awt::XMouseMotionHandler This can optionally consume events. + * + * @see com::sun::star::awt::XVclContainer The function getWindows might be helpful to find the + * correct widget to add this listener to. */ published interface XMouseMotionListener: com::sun::star::lang::XEventListener { From 9d9cd7804919c518ed12875a81f520bee878d737 Mon Sep 17 00:00:00 2001 From: AungKhantOo Date: Fri, 12 Apr 2024 21:01:41 +0000 Subject: [PATCH 082/194] tdf#159380 Add an UNO command to close all documents Add an UNO command which closes the documents and also prompts the user to save while closing unsaved documents. This command also open the start center after all the documents are successfully closed. Change-Id: I9c502cfa2e550c6f60fa8867fb42e36aded65999 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/166041 Tested-by: Heiko Tietze Reviewed-by: Andreas Heinisch Tested-by: Jenkins Reviewed-by: Heiko Tietze --- .../openoffice/Office/UI/GenericCommands.xcu | 11 ++ sfx2/sdi/sfx.sdi | 6 +- sfx2/source/appl/appdata.cxx | 1 + sfx2/source/appl/appserv.cxx | 113 ++++++++++++++---- sfx2/source/doc/objserv.cxx | 8 ++ sfx2/source/inc/appdata.hxx | 1 + 6 files changed, 114 insertions(+), 26 deletions(-) diff --git a/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu b/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu index 7880deebb46c..71f3b3ab17a4 100644 --- a/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu +++ b/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu @@ -2451,6 +2451,17 @@ bit 3 (0x8): #define UICOMMANDDESCRIPTION_PROPERTIES_TOGGLEBUTTON 8 1 + + + Close All Documents + + + Close All Documents + + + 1 + + ~Print... diff --git a/sfx2/sdi/sfx.sdi b/sfx2/sdi/sfx.sdi index 8d3298b541b4..9993519b3ebe 100644 --- a/sfx2/sdi/sfx.sdi +++ b/sfx2/sdi/sfx.sdi @@ -631,9 +631,9 @@ SfxVoidItem CloseDocs SID_CLOSEDOCS RecordPerSet; Asynchron; - AccelConfig = FALSE, - MenuConfig = FALSE, - ToolBoxConfig = FALSE, + AccelConfig = TRUE, + MenuConfig = TRUE, + ToolBoxConfig = TRUE, GroupId = SfxGroupId::Application; ] diff --git a/sfx2/source/appl/appdata.cxx b/sfx2/source/appl/appdata.cxx index 06d524c9330b..70be13869689 100644 --- a/sfx2/source/appl/appdata.cxx +++ b/sfx2/source/appl/appdata.cxx @@ -79,6 +79,7 @@ SfxAppData_Impl::SfxAppData_Impl() , pViewFrame( nullptr ) , bDowning( true ) , bInQuit( false ) + , bClosingDocs( false ) { pBasic = new BasicDLL; diff --git a/sfx2/source/appl/appserv.cxx b/sfx2/source/appl/appserv.cxx index a53cbd7ff9e1..737635ddf2c0 100644 --- a/sfx2/source/appl/appserv.cxx +++ b/sfx2/source/appl/appserv.cxx @@ -374,8 +374,8 @@ void SfxApplication::MiscExec_Impl( SfxRequest& rReq ) case SID_QUITAPP: case SID_LOGOUT: { - // protect against reentrant calls - if ( pImpl->bInQuit ) + // protect against reentrant calls and avoid closing the same files in parallel + if (pImpl->bInQuit || pImpl->bClosingDocs) return; if ( rReq.GetSlot() == SID_LOGOUT ) @@ -484,34 +484,94 @@ void SfxApplication::MiscExec_Impl( SfxRequest& rReq ) case SID_CLOSEDOCS: { + // protect against reentrant calls and avoid closing the same files in parallel + if (pImpl->bInQuit || pImpl->bClosingDocs) + return; - Reference < XDesktop2 > xDesktop = Desktop::create( ::comphelper::getProcessComponentContext() ); - Reference< XIndexAccess > xTasks = xDesktop->getFrames(); - if ( !xTasks.is() ) - break; + pImpl->bClosingDocs = true; + // closed all status for all visible frames + bool bClosedAll = true; - sal_Int32 n=0; - do + // Iterate over all documents and close them + for (SfxObjectShell *pObjSh = SfxObjectShell::GetFirst(); pObjSh;) { - if ( xTasks->getCount() <= n ) - break; - - Any aAny = xTasks->getByIndex(n); - Reference < XCloseable > xTask; - aAny >>= xTask; - try + SfxObjectShell* pNxtObjSh = SfxObjectShell::GetNext(*pObjSh); + // can close immediately + if (!pObjSh->IsModified() || pObjSh->isSaveLocked()) { - xTask->close(true); - n++; + // don't close the last remaining frame for close dispatch + if (pNxtObjSh || !bClosedAll) + pObjSh->DoClose(); } - catch( CloseVetoException& ) + else { + // skip invisible frames when asking user to close + SfxViewFrame* pFrame = SfxViewFrame::GetFirst(pObjSh); + if (pFrame && pFrame->GetWindow().IsReallyVisible()) + { + // asks user to close + if (pObjSh->PrepareClose()) + { + pObjSh->SetModified(false); + // get next pointer again after asking user since it can become invalid pointer from being manually closed by user + // don't close the last remaining frame for close dispatch + if ((pNxtObjSh = SfxObjectShell::GetNext(*pObjSh)) || !bClosedAll) + pObjSh->DoClose(); + } + // user disagrees to close + else + { + bClosedAll = false; + // get next pointer again after asking user since it can become invalid pointer from being manually closed by user + pNxtObjSh = SfxObjectShell::GetNext(*pObjSh); + } + } + } + pObjSh = pNxtObjSh; + } + + pImpl->bClosingDocs = false; + + // close dispatch status + bool bDispatchOk = true; + // open backing window + if (bClosedAll) + { + // don't use pViewFrame = SfxViewFrame::Current() as dispatch won't load sometimes + SfxObjectShell* pObjSh = SfxObjectShell::GetFirst(); + SfxViewFrame* pViewFrame = SfxViewFrame::GetFirst(pObjSh); + if (pViewFrame) + { + Reference xCurrentFrame = pViewFrame->GetFrame().GetFrameInterface(); + if (xCurrentFrame.is()) + { + uno::Reference xProvider(xCurrentFrame, uno::UNO_QUERY); + if (xProvider.is()) + { + uno::Reference xDispatcher + = frame::DispatchHelper::create(::comphelper::getProcessComponentContext()); + // use .uno:CloseDoc to be able to close windows of the same document + css::uno::Any aResult = + xDispatcher->executeDispatch(xProvider, + u".uno:CloseDoc"_ustr, + u"_self"_ustr, + 0, + uno::Sequence()); + css::frame::DispatchResultEvent aEvent; + bDispatchOk = (aResult >>= aEvent) && (aEvent.State == frame::DispatchResultState::SUCCESS); + } + } } } - while( true ); + // terminate the application if the dispatch fails or + // if there is no visible frame left after the command is run (e.g user manually closes the document again that was already cancelled for closing) + if (!bDispatchOk || (!bClosedAll && !SfxObjectShell::GetFirst())) + { + SfxRequest aReq(SID_QUITAPP, SfxCallMode::SLOT, GetPool()); + MiscExec_Impl(aReq); + } - bool bOk = ( n == 0); - rReq.SetReturnValue( SfxBoolItem( 0, bOk ) ); + rReq.SetReturnValue(SfxBoolItem(0, bDispatchOk)); bDone = true; break; } @@ -524,7 +584,7 @@ void SfxApplication::MiscExec_Impl( SfxRequest& rReq ) pObjSh = SfxObjectShell::GetNext( *pObjSh ) ) { SfxRequest aReq( SID_SAVEDOC, SfxCallMode::SLOT, pObjSh->GetPool() ); - if ( pObjSh->IsModified() && !pObjSh->isSaveLocked()) + if ( pObjSh->IsModified() && !pObjSh->isSaveLocked() ) { pObjSh->ExecuteSlot( aReq ); const SfxBoolItem* pItem(dynamic_cast(aReq.GetReturnValue().getItem())); @@ -1235,7 +1295,7 @@ void SfxApplication::MiscState_Impl(SfxItemSet &rSet) break; case SID_QUITAPP: { - if ( pImpl->nDocModalMode ) + if (pImpl->nDocModalMode || pImpl->bClosingDocs) rSet.DisableItem(nWhich); else rSet.Put(SfxStringItem(nWhich, SfxResId(STR_QUITAPP))); @@ -1287,8 +1347,15 @@ void SfxApplication::MiscState_Impl(SfxItemSet &rSet) case SID_CLOSEDOCS: { + if ( pImpl->nDocModalMode || pImpl->bInQuit ) + { + rSet.DisableItem(nWhich); + return; + } + Reference < XDesktop2 > xDesktop = Desktop::create( ::comphelper::getProcessComponentContext() ); Reference< XIndexAccess > xTasks = xDesktop->getFrames(); + if ( !xTasks.is() || !xTasks->getCount() ) rSet.DisableItem(nWhich); break; diff --git a/sfx2/source/doc/objserv.cxx b/sfx2/source/doc/objserv.cxx index a7863609e617..f4bcbd1b0496 100644 --- a/sfx2/source/doc/objserv.cxx +++ b/sfx2/source/doc/objserv.cxx @@ -49,6 +49,7 @@ #include #include #include +#include #include #include @@ -1293,6 +1294,13 @@ void SfxObjectShell::ExecFile_Impl(SfxRequest &rReq) case SID_CLOSEDOC: { + // cancel requests during SfxApplication is closing or quiting. + SfxAppData_Impl* pAppData = SfxGetpApp()->Get_Impl(); + if (pAppData && (pAppData->bInQuit || pAppData->bClosingDocs)) + { + return; + } + // Evaluate Parameter const SfxBoolItem* pSaveItem = rReq.GetArg(SID_CLOSEDOC_SAVE); const SfxStringItem* pNameItem = rReq.GetArg(SID_CLOSEDOC_FILENAME); diff --git a/sfx2/source/inc/appdata.hxx b/sfx2/source/inc/appdata.hxx index 6362d05d093d..400dcae776d6 100644 --- a/sfx2/source/inc/appdata.hxx +++ b/sfx2/source/inc/appdata.hxx @@ -114,6 +114,7 @@ public: bool bDowning:1; // sal_True on Exit and afterwards bool bInQuit : 1; + bool bClosingDocs : 1; SfxAppData_Impl(); ~SfxAppData_Impl(); From 5292ef333b0fa935b76f88808485b8dfc8b41a88 Mon Sep 17 00:00:00 2001 From: Bogdan Buzea Date: Sun, 23 Jun 2024 19:13:52 +0200 Subject: [PATCH 083/194] Resave with newer Glade version Change-Id: I258621ed37dd79e1254ebaa98a76964be6a98c38 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169403 Tested-by: Jenkins Reviewed-by: Samuel Mehrbrodt --- .../uiconfig/dbreport/ui/backgrounddialog.ui | 77 ++++++------------- 1 file changed, 25 insertions(+), 52 deletions(-) diff --git a/reportdesign/uiconfig/dbreport/ui/backgrounddialog.ui b/reportdesign/uiconfig/dbreport/ui/backgrounddialog.ui index 4660626a0b64..56035a897a06 100644 --- a/reportdesign/uiconfig/dbreport/ui/backgrounddialog.ui +++ b/reportdesign/uiconfig/dbreport/ui/backgrounddialog.ui @@ -1,33 +1,30 @@ - + - False - 6 + False + 6 Section Setup True - 0 - 0 - dialog - - - + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _Reset True - True - True + True + True True @@ -40,10 +37,10 @@ _OK True - True - True - True - True + True + True + True + True True @@ -56,8 +53,8 @@ _Cancel True - True - True + True + True True @@ -70,8 +67,8 @@ _Help True - True - True + True + True True @@ -85,47 +82,23 @@ False True - end + end 0 True - False + False True True True - True + True True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -134,12 +107,12 @@ True - False + False Background 0.5 - False + False From 8bc8f073e81d125a8e8f1adce966ddb2c7d6bacb Mon Sep 17 00:00:00 2001 From: Miklos Vajna Date: Thu, 27 Jun 2024 08:37:19 +0200 Subject: [PATCH 084/194] Related: tdf#161652 sw, RTF paste: avoid duplicated numbering styles Open the DOCX bugdoc from , select-all, copy, open a second document, paste as RTF, paste as RTF again, the number of char styles in the document change from 27 to 55, then to 73. That is surprising, paragraph styles work by first creating them then a 2nd paste just refers to them. It seems what happens is that paragraph styles are handled in StyleSheetTable::ApplyStyleSheetsImpl(), and we have an explicit "When pasting, don't update existing styles" code there; on the other hand ListDef::GetStyleName() solves the style name collision by appending enough "a" characters at the end of the style name till there is no collision. Fix the inconsistency by adapting the list style behavior to match what paragraph styles do: if we don't open an RTF file but paste into an existing document, then try to use the existing style on collision. Fixing this on the RTF producing side would be less effective, also one could argue that in case a numbering uses e.g. 3 levels, then it still makes sense to emit the definition for all levels to help the editor once numbering levels are increased in the pasted content. Change-Id: Ia211cb4300c3c41dae8c815ddfaf30cc2f0de8b5 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169609 Reviewed-by: Miklos Vajna Tested-by: Jenkins --- sw/CppunitTest_sw_writerfilter_dmapper.mk | 1 + .../writerfilter/dmapper/NumberingManager.cxx | 75 +++++++++++++++++++ .../dmapper/data/clipboard-bullets.rtf | 48 ++++++++++++ .../writerfilter/dmapper/DomainMapper.cxx | 5 ++ .../writerfilter/dmapper/DomainMapper.hxx | 1 + .../writerfilter/dmapper/NumberingManager.cxx | 33 +++++++- .../writerfilter/dmapper/NumberingManager.hxx | 2 +- 7 files changed, 160 insertions(+), 5 deletions(-) create mode 100644 sw/qa/writerfilter/dmapper/NumberingManager.cxx create mode 100644 sw/qa/writerfilter/dmapper/data/clipboard-bullets.rtf diff --git a/sw/CppunitTest_sw_writerfilter_dmapper.mk b/sw/CppunitTest_sw_writerfilter_dmapper.mk index d865706c2b50..a56d02e4b71d 100644 --- a/sw/CppunitTest_sw_writerfilter_dmapper.mk +++ b/sw/CppunitTest_sw_writerfilter_dmapper.mk @@ -23,6 +23,7 @@ $(eval $(call gb_CppunitTest_add_exception_objects,sw_writerfilter_dmapper, \ sw/qa/writerfilter/dmapper/DomainMapper \ sw/qa/writerfilter/dmapper/DomainMapper_Impl \ sw/qa/writerfilter/dmapper/GraphicImport \ + sw/qa/writerfilter/dmapper/NumberingManager \ sw/qa/writerfilter/dmapper/TableManager \ sw/qa/writerfilter/dmapper/TextEffectsHandler \ sw/qa/writerfilter/dmapper/PropertyMap \ diff --git a/sw/qa/writerfilter/dmapper/NumberingManager.cxx b/sw/qa/writerfilter/dmapper/NumberingManager.cxx new file mode 100644 index 000000000000..8c60033a74d7 --- /dev/null +++ b/sw/qa/writerfilter/dmapper/NumberingManager.cxx @@ -0,0 +1,75 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include + +#include +#include + +#include +#include +#include +#include +#include + +using namespace com::sun::star; + +namespace +{ +/// Tests for sw/source/writerfilter/dmapper/NumberingManager.cxx. +class Test : public UnoApiTest +{ +public: + Test() + : UnoApiTest(u"/sw/qa/writerfilter/dmapper/data/"_ustr) + { + } +}; + +CPPUNIT_TEST_FIXTURE(Test, testPasteBulletListStyleName) +{ + // Given a document with a WWNum1 list style: + mxComponent + = loadFromDesktop(u"private:factory/swriter"_ustr, u"com.sun.star.text.TextDocument"_ustr); + uno::Reference xStyleFamiliesSupplier(mxComponent, + uno::UNO_QUERY); + uno::Reference xStyleFamilies + = xStyleFamiliesSupplier->getStyleFamilies(); + uno::Reference xStyles; + xStyleFamilies->getByName(u"NumberingStyles"_ustr) >>= xStyles; + uno::Reference xFactory(mxComponent, uno::UNO_QUERY); + uno::Reference xStyle + = xFactory->createInstance("com.sun.star.style.NumberingStyle"); + xStyles->insertByName(u"WWNum1"_ustr, uno::Any(xStyle)); + + // When pasting bullets to that document: + uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference xText = xTextDocument->getText(); + uno::Reference xBodyEnd = xText->getEnd(); + uno::Reference xFilter( + m_xSFactory->createInstance(u"com.sun.star.comp.Writer.RtfFilter"_ustr), uno::UNO_QUERY); + uno::Reference xImporter(xFilter, uno::UNO_QUERY); + xImporter->setTargetDocument(mxComponent); + std::unique_ptr pStream( + new SvFileStream(createFileURL(u"clipboard-bullets.rtf"), StreamMode::READ)); + uno::Reference xStream(new utl::OStreamWrapper(std::move(pStream))); + uno::Sequence aDescriptor{ comphelper::makePropertyValue(u"InputStream"_ustr, xStream), + comphelper::makePropertyValue(u"InsertMode"_ustr, true), + comphelper::makePropertyValue(u"TextInsertModeRange"_ustr, + xBodyEnd) }; + CPPUNIT_ASSERT(xFilter->filter(aDescriptor)); + + // Then make sure we don't create new list styles, but reuse the existing ones: + // Without the accompanying fix in place, this test would have failed, new character styles were + // created again and again on each paste. + CPPUNIT_ASSERT(!xStyles->hasByName(u"WWNum1a"_ustr)); +} +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/qa/writerfilter/dmapper/data/clipboard-bullets.rtf b/sw/qa/writerfilter/dmapper/data/clipboard-bullets.rtf new file mode 100644 index 000000000000..1e9202125ad8 --- /dev/null +++ b/sw/qa/writerfilter/dmapper/data/clipboard-bullets.rtf @@ -0,0 +1,48 @@ +{\rtf1\ansi\deff4\adeflang1025 +{\fonttbl +{\f0\froman\fprq2\fcharset0 Times New Roman;} +{\f1\froman\fprq2\fcharset2 Symbol;} +{\f2\fswiss\fprq2\fcharset0 Arial;} +{\f3\froman\fprq2\fcharset0 Liberation Serif +{\*\falt Times New Roman} +;} +{\f4\froman\fprq2\fcharset0 Calibri;} +} +{\stylesheet +{\s0\snext0\rtlch\afs22\alang1025 \ltrch\lang1033\langfe1033\hich\af4\loch\sl259\slmult1\ql\widctlpar\sb0\sa160\ltrpar\hyphpar0\cf0\f4\fs22\lang1033\kerning1\dbch\af10\langfe1033 Normal;} +{\*\cs21\snext21 ListLabel 3;} +{\*\cs22\snext22 ListLabel 2;} +{\*\cs23\snext23 ListLabel 1;} +{\s25\sbasedon0\snext25\loch\li720\lin720\sb0\sa160\contextualspace List Paragraph;} +{\s26\sbasedon0\snext26\rtlch\af8 \ltrch\loch\noline Index;} +{\s27\sbasedon0\snext27\rtlch\af8\afs24\ai \ltrch\loch\sb120\sa120\noline\fs24\i caption;} +{\s28\sbasedon29\snext28\rtlch\af8 \ltrch List;} +{\s29\sbasedon0\snext29\loch\sl276\slmult1\sb0\sa140 Body Text;} +} +{\*\listtable +{\list\listtemplateid1 +{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0 +{\leveltext \'01\u61623 ?;} +{\levelnumbers;} +\fi-360\li720} +{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0 +{\leveltext \'01\u111 ?;} +{\levelnumbers;} +\rtlch\af7 \ltrch\loch\fi-360\li1440} +{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0 +{\leveltext \'01\u61607 ?;} +{\levelnumbers;} +\fi-360\li2160} +\listid1} +} +{\listoverridetable +{\listoverride\listid1\listoverridecount0\ls1} +} +\pard\plain before\par +\pard\plain \s25\loch\li720\lin720\sb0\sa160\contextualspace +\ilvl0\ls1 \fi-360\li1440\lin1440 A +\par \pard\plain \s25\loch\li720\lin720\sb0\sa160\contextualspace +\ilvl1\ls1 \fi-360\li2160\lin2160 B +\par \pard\plain \s25\loch\li720\lin720\sb0\sa160\contextualspace +\ilvl2\ls1 \fi-360\li2880\lin2880\sb0\sa160\contextualspace C +} diff --git a/sw/source/writerfilter/dmapper/DomainMapper.cxx b/sw/source/writerfilter/dmapper/DomainMapper.cxx index adb29ba57c23..71760a6e3b56 100644 --- a/sw/source/writerfilter/dmapper/DomainMapper.cxx +++ b/sw/source/writerfilter/dmapper/DomainMapper.cxx @@ -5110,6 +5110,11 @@ OUString DomainMapper::GetUnusedCharacterStyleName() return m_pImpl->GetUnusedCharacterStyleName(); } +bool DomainMapper::IsNewDoc() const +{ + return m_pImpl->IsNewDoc(); +} + } //namespace writerfilter /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/writerfilter/dmapper/DomainMapper.hxx b/sw/source/writerfilter/dmapper/DomainMapper.hxx index ecd5c4459273..fb03a9a9fd8b 100644 --- a/sw/source/writerfilter/dmapper/DomainMapper.hxx +++ b/sw/source/writerfilter/dmapper/DomainMapper.hxx @@ -143,6 +143,7 @@ public: css::uno::Reference const & GetCharacterStyles(); OUString GetUnusedCharacterStyleName(); + bool IsNewDoc() const; private: // Stream diff --git a/sw/source/writerfilter/dmapper/NumberingManager.cxx b/sw/source/writerfilter/dmapper/NumberingManager.cxx index 6147af5e0228..3c4c89f156e5 100644 --- a/sw/source/writerfilter/dmapper/NumberingManager.cxx +++ b/sw/source/writerfilter/dmapper/NumberingManager.cxx @@ -421,7 +421,8 @@ ListDef::~ListDef( ) } const OUString & ListDef::GetStyleName(sal_Int32 const nId, - uno::Reference const& xStyles) + uno::Reference const& xStyles, + DomainMapper& rDMapper) { if (xStyles.is()) { @@ -429,6 +430,12 @@ const OUString & ListDef::GetStyleName(sal_Int32 const nId, while (xStyles->hasByName(sStyleName)) // unique { + if (!rDMapper.IsNewDoc()) + { + // When pasting, don't rename our style, just use the existing one. + break; + } + sStyleName += "a"; } @@ -538,12 +545,24 @@ void ListDef::CreateNumberingRules( DomainMapper& rDMapper, try { // Create the numbering style + bool bUpdate = true; if (GetId() == nOutline) m_StyleName = "Outline"; //SwNumRule.GetOutlineRuleName() else - xStyles->insertByName( - GetStyleName(GetId(), xStyles), - css::uno::Any(uno::Reference(xTextDoc->createNumberingStyle()))); + { + OUString aStyleName = GetStyleName(GetId(), xStyles, rDMapper); + if (xStyles->hasByName(aStyleName) && !rDMapper.IsNewDoc()) + { + // When pasting, don't update existing styles. + bUpdate = false; + } + else + { + xStyles->insertByName( + aStyleName, + css::uno::Any(uno::Reference(xTextDoc->createNumberingStyle()))); + } + } uno::Any oStyle = xStyles->getByName(GetStyleName()); uno::Reference< beans::XPropertySet > xStyle( oStyle, uno::UNO_QUERY_THROW ); @@ -551,6 +570,12 @@ void ListDef::CreateNumberingRules( DomainMapper& rDMapper, // Get the default OOo Numbering style rules uno::Any aRules = xStyle->getPropertyValue( getPropertyName( PROP_NUMBERING_RULES ) ); aRules >>= m_xNumRules; + if (!bUpdate) + { + // If it was requested that we don't update existing styles, we fetched the numbering + // rules, don't modify them. + return; + } uno::Sequence> aProps = GetMergedPropertyValues(); diff --git a/sw/source/writerfilter/dmapper/NumberingManager.hxx b/sw/source/writerfilter/dmapper/NumberingManager.hxx index 36571bc87ec4..767b6b5d60e9 100644 --- a/sw/source/writerfilter/dmapper/NumberingManager.hxx +++ b/sw/source/writerfilter/dmapper/NumberingManager.hxx @@ -189,7 +189,7 @@ public: // Mapping functions const OUString & GetStyleName() const { return m_StyleName; }; - const OUString & GetStyleName(sal_Int32 nId, css::uno::Reference const& xStyles); + const OUString & GetStyleName(sal_Int32 nId, css::uno::Reference const& xStyles, DomainMapper& rDMapper); css::uno::Sequence< css::uno::Sequence > GetMergedPropertyValues(); From 3a02490e1a04c32e18ce5bad5f3c3cb70501a7a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1szl=C3=B3=20N=C3=A9meth?= Date: Wed, 26 Jun 2024 17:53:21 +0200 Subject: [PATCH 085/194] tdf#138258 i18npool: allow ASCII double quote to match typographic quote MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Similar to the straight (typewriter or ASCII) apostrophe, straight double quotation mark (") matches its typographic variants now, like other word processors do. Note: regex search doesn't use this matching, similar to the apostrophe search. Follow-up to commit d40f2d02df26e216f367b5da3f9546b73f250469 "tdf#117643 Writer: fix apostrophe search regression". Change-Id: If6a3ee00750828583cd0cfc4aa7f7b656ea9bd1e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169605 Reviewed-by: László Németh Tested-by: Jenkins --- i18npool/qa/cppunit/test_textsearch.cxx | 88 +++++++++++++++++++++++++ i18npool/source/search/textsearch.cxx | 40 ++++++++--- 2 files changed, 120 insertions(+), 8 deletions(-) diff --git a/i18npool/qa/cppunit/test_textsearch.cxx b/i18npool/qa/cppunit/test_textsearch.cxx index 269380a90910..38cc099b7c95 100644 --- a/i18npool/qa/cppunit/test_textsearch.cxx +++ b/i18npool/qa/cppunit/test_textsearch.cxx @@ -38,6 +38,7 @@ public: void testSearches(); void testWildcardSearch(); void testApostropheSearch(); + void testQuotationMarkSearch(); void testTdf138410(); CPPUNIT_TEST_SUITE(TestTextSearch); @@ -45,6 +46,7 @@ public: CPPUNIT_TEST(testSearches); CPPUNIT_TEST(testWildcardSearch); CPPUNIT_TEST(testApostropheSearch); + CPPUNIT_TEST(testQuotationMarkSearch); CPPUNIT_TEST(testTdf138410); CPPUNIT_TEST_SUITE_END(); private: @@ -404,6 +406,92 @@ void TestTextSearch::testApostropheSearch() CPPUNIT_ASSERT( aRes.subRegExpressions > 0 ); } +void TestTextSearch::testQuotationMarkSearch() +{ + // A) find typographic quotation marks also by using ASCII ones + OUString str( u"“x”, „y‟, ‘z’, ‚a‛"_ustr ); + sal_Int32 startPos = 0, endPos = str.getLength(); + + // set options + util::SearchOptions aOptions; + aOptions.algorithmType = util::SearchAlgorithms_ABSOLUTE; + aOptions.searchFlag = util::SearchFlags::ALL_IGNORE_CASE; + aOptions.searchString = "\"x\""; + aOptions.transliterateFlags = static_cast(TransliterationFlags::IGNORE_CASE + | TransliterationFlags::IGNORE_WIDTH); + m_xSearch->setOptions( aOptions ); + + util::SearchResult aRes; + + // search forward + aRes = m_xSearch->searchForward( str, startPos, endPos ); + // This was 0. + CPPUNIT_ASSERT( aRes.subRegExpressions > 0 ); + CPPUNIT_ASSERT_EQUAL( static_cast(0), aRes.startOffset[0] ); + CPPUNIT_ASSERT_EQUAL( static_cast(3), aRes.endOffset[0] ); + + // search backwards + aRes = m_xSearch->searchBackward( str, endPos, startPos ); + // This was 0. + CPPUNIT_ASSERT( aRes.subRegExpressions > 0 ); + CPPUNIT_ASSERT_EQUAL( static_cast(3), aRes.startOffset[0] ); + CPPUNIT_ASSERT_EQUAL( static_cast(0), aRes.endOffset[0] ); + + // B) + aOptions.searchString = "\"y\""; + m_xSearch->setOptions( aOptions ); + + // search forward + aRes = m_xSearch->searchForward( str, startPos, endPos ); + // This was 0. + CPPUNIT_ASSERT( aRes.subRegExpressions > 0 ); + CPPUNIT_ASSERT_EQUAL( static_cast(5), aRes.startOffset[0] ); + CPPUNIT_ASSERT_EQUAL( static_cast(8), aRes.endOffset[0] ); + + // search backwards + aRes = m_xSearch->searchBackward( str, endPos, startPos ); + // This was 0. + CPPUNIT_ASSERT( aRes.subRegExpressions > 0 ); + CPPUNIT_ASSERT_EQUAL( static_cast(8), aRes.startOffset[0] ); + CPPUNIT_ASSERT_EQUAL( static_cast(5), aRes.endOffset[0] ); + + // C) + aOptions.searchString = "'z'"; + m_xSearch->setOptions( aOptions ); + + // search forward + aRes = m_xSearch->searchForward( str, startPos, endPos ); + // This was 0. + CPPUNIT_ASSERT( aRes.subRegExpressions > 0 ); + CPPUNIT_ASSERT_EQUAL( static_cast(10), aRes.startOffset[0] ); + CPPUNIT_ASSERT_EQUAL( static_cast(13), aRes.endOffset[0] ); + + // search backwards + aRes = m_xSearch->searchBackward( str, endPos, startPos ); + // This was 0. + CPPUNIT_ASSERT( aRes.subRegExpressions > 0 ); + CPPUNIT_ASSERT_EQUAL( static_cast(13), aRes.startOffset[0] ); + CPPUNIT_ASSERT_EQUAL( static_cast(10), aRes.endOffset[0] ); + + // D) + aOptions.searchString = "'a'"; + m_xSearch->setOptions( aOptions ); + + // search forward + aRes = m_xSearch->searchForward( str, startPos, endPos ); + // This was 0. + CPPUNIT_ASSERT( aRes.subRegExpressions > 0 ); + CPPUNIT_ASSERT_EQUAL( static_cast(15), aRes.startOffset[0] ); + CPPUNIT_ASSERT_EQUAL( static_cast(18), aRes.endOffset[0] ); + + // search backwards + aRes = m_xSearch->searchBackward( str, endPos, startPos ); + // This was 0. + CPPUNIT_ASSERT( aRes.subRegExpressions > 0 ); + CPPUNIT_ASSERT_EQUAL( static_cast(18), aRes.startOffset[0] ); + CPPUNIT_ASSERT_EQUAL( static_cast(15), aRes.endOffset[0] ); +} + void TestTextSearch::testTdf138410() { OUString str(u"\u0643\u064f\u062a\u064f\u0628 \u0643\u062a\u0628"_ustr); diff --git a/i18npool/source/search/textsearch.cxx b/i18npool/source/search/textsearch.cxx index 816e162c1e6e..dbb49f494781 100644 --- a/i18npool/source/search/textsearch.cxx +++ b/i18npool/source/search/textsearch.cxx @@ -93,6 +93,30 @@ bool isSimpleRegexTrans( TransliterationFlags n ) { return bool(maskSimpleRegexTrans(n)); } + +bool isReplacePunctuation( OUString &rStr ) +{ + return rStr.indexOf(u'\u2018') > -1 || + rStr.indexOf(u'\u2019') > -1 || + rStr.indexOf(u'\u201A') > -1 || + rStr.indexOf(u'\u201B') > -1 || + rStr.indexOf(u'\u201C') > -1 || + rStr.indexOf(u'\u201D') > -1 || + rStr.indexOf(u'\u201E') > -1 || + rStr.indexOf(u'\u201F') > -1; +} + +OUString replacePunctuation( OUString &rStr ) +{ + return rStr.replace(u'\u2018', '\'') + .replace(u'\u2019', '\'') + .replace(u'\u201A', '\'') + .replace(u'\u201B', '\'') + .replace(u'\u201C', '"') + .replace(u'\u201D', '"') + .replace(u'\u201E', '"') + .replace(u'\u201F', '"'); +} }; TextSearch::TextSearch(const Reference < XComponentContext > & rxContext) @@ -139,10 +163,10 @@ void TextSearch::setOptions2( const SearchOptions2& rOptions ) // match is not case-altered, leave case-(in)sensitive to regex engine. transliterateFlags &= ~TransliterationFlags::IGNORE_CASE; } - else if ( aSrchPara.searchString.indexOf('\'') > - 1 ) + else if ( aSrchPara.searchString.indexOf('\'') > - 1 || aSrchPara.searchString.indexOf('"') > - 1 ) { bSearchApostrophe = true; - bReplaceApostrophe = aSrchPara.searchString.indexOf(u'\u2019') > -1; + bReplaceApostrophe = isReplacePunctuation(aSrchPara.searchString); } // Create Transliteration class @@ -215,7 +239,7 @@ void TextSearch::setOptions2( const SearchOptions2& rOptions ) } if ( bReplaceApostrophe ) - sSrchStr = sSrchStr.replace(u'\u2019', '\''); + sSrchStr = replacePunctuation(sSrchStr); // Take the new SearchOptions2::AlgorithmType2 field and ignore // SearchOptions::algorithmType @@ -308,7 +332,7 @@ SearchResult TextSearch::searchForward( const OUString& searchStr, sal_Int32 sta // in non-regex mode, allow searching typographical apostrophe with the ASCII one // to avoid regression after using automatic conversion to U+2019 during typing in Writer - bool bReplaceApostrophe = bSearchApostrophe && in_str.indexOf(u'\u2019') > -1; + bool bReplaceApostrophe = bSearchApostrophe && isReplacePunctuation(in_str); bUsePrimarySrchStr = true; @@ -340,7 +364,7 @@ SearchResult TextSearch::searchForward( const OUString& searchStr, sal_Int32 sta in_str = xTranslit->transliterate(searchStr, nInStartPos, nInEndPos - nInStartPos, offset); if ( bReplaceApostrophe ) - in_str = in_str.replace(u'\u2019', '\''); + in_str = replacePunctuation(in_str); // JP 20.6.2001: also the start and end positions must be corrected! sal_Int32 newStartPos = @@ -447,7 +471,7 @@ SearchResult TextSearch::searchBackward( const OUString& searchStr, sal_Int32 st // in non-regex mode, allow searching typographical apostrophe with the ASCII one // to avoid regression after using automatic conversion to U+2019 during typing in Writer - bool bReplaceApostrophe = bSearchApostrophe && in_str.indexOf(u'\u2019') > -1; + bool bReplaceApostrophe = bSearchApostrophe && isReplacePunctuation(in_str); bUsePrimarySrchStr = true; @@ -458,7 +482,7 @@ SearchResult TextSearch::searchBackward( const OUString& searchStr, sal_Int32 st in_str = xTranslit->transliterate( searchStr, endPos, startPos - endPos, offset ); if ( bReplaceApostrophe ) - in_str = in_str.replace(u'\u2019', '\''); + in_str = replacePunctuation(in_str); // JP 20.6.2001: also the start and end positions must be corrected! sal_Int32 const newStartPos = (startPos < searchStr.getLength()) @@ -508,7 +532,7 @@ SearchResult TextSearch::searchBackward( const OUString& searchStr, sal_Int32 st else { if ( bReplaceApostrophe ) - in_str = in_str.replace(u'\u2019', '\''); + in_str = replacePunctuation(in_str); sres = (this->*fnBackward)( in_str, startPos, endPos ); } From 534b8f6d8a7cc0bb98c243c8086ed0c81f87901d Mon Sep 17 00:00:00 2001 From: Noel Grandin Date: Wed, 26 Jun 2024 12:31:38 +0200 Subject: [PATCH 086/194] reduce boilerplate code for type-specific ItemInstanceManagers create a template class to reduce repetition Change-Id: I8c9c71fdfdac20a3b34432affac07aa1d46e8373 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169613 Reviewed-by: Noel Grandin Tested-by: Jenkins --- editeng/source/items/textitem.cxx | 221 +++++------------------------- include/svl/poolitem.hxx | 39 ++++++ 2 files changed, 77 insertions(+), 183 deletions(-) diff --git a/editeng/source/items/textitem.cxx b/editeng/source/items/textitem.cxx index f187637866e5..2bdfdd6890d9 100644 --- a/editeng/source/items/textitem.cxx +++ b/editeng/source/items/textitem.cxx @@ -159,61 +159,24 @@ bool SvxFontListItem::GetPresentation // class SvxFontItem ----------------------------------------------------- -typedef std::unordered_map SvxFontItemMap; - namespace { - class SvxFontItemInstanceManager : public ItemInstanceManager + class SvxFontItemInstanceManager : public TypeSpecificItemInstanceManager { - SvxFontItemMap maRegistered; - - public: - SvxFontItemInstanceManager() - : ItemInstanceManager(typeid(SvxFontItem).hash_code()) + protected: + virtual size_t hashCode(const SfxPoolItem& rItem) const override { + const SvxFontItem& rFontItem(static_cast(rItem)); + std::size_t seed(0); + o3tl::hash_combine(seed, rItem.Which()); + o3tl::hash_combine(seed, rFontItem.GetFamilyName().hashCode()); + o3tl::hash_combine(seed, rFontItem.GetStyleName().hashCode()); + o3tl::hash_combine(seed, rFontItem.GetFamily()); + o3tl::hash_combine(seed, rFontItem.GetPitch()); + o3tl::hash_combine(seed, rFontItem.GetCharSet()); + return seed; } - - private: - static size_t hashCode(const SfxPoolItem&); - - // standard interface, accessed exclusively - // by implCreateItemEntry/implCleanupItemEntry - virtual const SfxPoolItem* find(const SfxPoolItem&) const override; - virtual void add(const SfxPoolItem&) override; - virtual void remove(const SfxPoolItem&) override; }; - - size_t SvxFontItemInstanceManager::hashCode(const SfxPoolItem& rItem) - { - const SvxFontItem& rFontItem(static_cast(rItem)); - std::size_t seed(0); - o3tl::hash_combine(seed, rItem.Which()); - o3tl::hash_combine(seed, rFontItem.GetFamilyName().hashCode()); - o3tl::hash_combine(seed, rFontItem.GetStyleName().hashCode()); - o3tl::hash_combine(seed, rFontItem.GetFamily()); - o3tl::hash_combine(seed, rFontItem.GetPitch()); - o3tl::hash_combine(seed, rFontItem.GetCharSet()); - return seed; - } - - const SfxPoolItem* SvxFontItemInstanceManager::find(const SfxPoolItem& rItem) const - { - SvxFontItemMap::const_iterator aHit(maRegistered.find(hashCode(rItem))); - if (aHit != maRegistered.end()) - return aHit->second; - return nullptr; - } - - void SvxFontItemInstanceManager::add(const SfxPoolItem& rItem) - { - maRegistered.insert({hashCode(rItem), &rItem}); - } - - void SvxFontItemInstanceManager::remove(const SfxPoolItem& rItem) - { - maRegistered.erase(hashCode(rItem)); - } - } ItemInstanceManager* SvxFontItem::getItemInstanceManager() const @@ -446,56 +409,20 @@ void SvxFontItem::dumpAsXml(xmlTextWriterPtr pWriter) const // class SvxPostureItem -------------------------------------------------- -typedef std::unordered_map SvxPostureItemMap; - namespace { - class SvxPostureItemInstanceManager : public ItemInstanceManager + class SvxPostureItemInstanceManager : public TypeSpecificItemInstanceManager { - SvxPostureItemMap maRegistered; - - public: - SvxPostureItemInstanceManager() - : ItemInstanceManager(typeid(SvxPostureItem).hash_code()) + protected: + virtual size_t hashCode(const SfxPoolItem& rItem) const override { + auto const & rPostureItem = static_cast(rItem); + std::size_t seed(0); + o3tl::hash_combine(seed, rPostureItem.Which()); + o3tl::hash_combine(seed, rPostureItem. GetEnumValue()); + return seed; } - - private: - static size_t hashCode(const SfxPoolItem&); - - // standard interface, accessed exclusively - // by implCreateItemEntry/implCleanupItemEntry - virtual const SfxPoolItem* find(const SfxPoolItem&) const override; - virtual void add(const SfxPoolItem&) override; - virtual void remove(const SfxPoolItem&) override; }; - - size_t SvxPostureItemInstanceManager::hashCode(const SfxPoolItem& rItem) - { - auto const & rPostureItem = static_cast(rItem); - std::size_t seed(0); - o3tl::hash_combine(seed, rPostureItem.Which()); - o3tl::hash_combine(seed, rPostureItem. GetEnumValue()); - return seed; - } - - const SfxPoolItem* SvxPostureItemInstanceManager::find(const SfxPoolItem& rItem) const - { - auto aHit(maRegistered.find(hashCode(rItem))); - if (aHit != maRegistered.end()) - return aHit->second; - return nullptr; - } - - void SvxPostureItemInstanceManager::add(const SfxPoolItem& rItem) - { - maRegistered.insert({hashCode(rItem), &rItem}); - } - - void SvxPostureItemInstanceManager::remove(const SfxPoolItem& rItem) - { - maRegistered.erase(hashCode(rItem)); - } } ItemInstanceManager* SvxPostureItem::getItemInstanceManager() const @@ -750,58 +677,22 @@ void SvxWeightItem::dumpAsXml(xmlTextWriterPtr pWriter) const // class SvxFontHeightItem ----------------------------------------------- -typedef std::unordered_map SvxFontHeightItemMap; - namespace { - class SvxFontHeightItemInstanceManager : public ItemInstanceManager + class SvxFontHeightItemInstanceManager : public TypeSpecificItemInstanceManager { - SvxFontHeightItemMap maRegistered; - - public: - SvxFontHeightItemInstanceManager() - : ItemInstanceManager(typeid(SvxFontHeightItem).hash_code()) + protected: + virtual size_t hashCode(const SfxPoolItem& rItem) const override { + auto const & rFontHeightItem = static_cast(rItem); + std::size_t seed(0); + o3tl::hash_combine(seed, rFontHeightItem.Which()); + o3tl::hash_combine(seed, rFontHeightItem.GetHeight()); + o3tl::hash_combine(seed, rFontHeightItem.GetProp()); + o3tl::hash_combine(seed, rFontHeightItem.GetPropUnit()); + return seed; } - - private: - static size_t hashCode(const SfxPoolItem&); - - // standard interface, accessed exclusively - // by implCreateItemEntry/implCleanupItemEntry - virtual const SfxPoolItem* find(const SfxPoolItem&) const override; - virtual void add(const SfxPoolItem&) override; - virtual void remove(const SfxPoolItem&) override; }; - - size_t SvxFontHeightItemInstanceManager::hashCode(const SfxPoolItem& rItem) - { - auto const & rFontHeightItem = static_cast(rItem); - std::size_t seed(0); - o3tl::hash_combine(seed, rFontHeightItem.Which()); - o3tl::hash_combine(seed, rFontHeightItem.GetHeight()); - o3tl::hash_combine(seed, rFontHeightItem.GetProp()); - o3tl::hash_combine(seed, rFontHeightItem.GetPropUnit()); - return seed; - } - - const SfxPoolItem* SvxFontHeightItemInstanceManager::find(const SfxPoolItem& rItem) const - { - auto aHit(maRegistered.find(hashCode(rItem))); - if (aHit != maRegistered.end()) - return aHit->second; - return nullptr; - } - - void SvxFontHeightItemInstanceManager::add(const SfxPoolItem& rItem) - { - maRegistered.insert({hashCode(rItem), &rItem}); - } - - void SvxFontHeightItemInstanceManager::remove(const SfxPoolItem& rItem) - { - maRegistered.erase(hashCode(rItem)); - } } ItemInstanceManager* SvxFontHeightItem::getItemInstanceManager() const @@ -3078,56 +2969,20 @@ void GetDefaultFonts( SvxFontItem& rLatin, SvxFontItem& rAsian, SvxFontItem& rCo // class SvxRsidItem ----------------------------------------------------- -typedef std::unordered_map SvxRsidItemMap; - namespace { - class SvxRsidItemInstanceManager : public ItemInstanceManager + class SvxRsidItemInstanceManager : public TypeSpecificItemInstanceManager { - SvxRsidItemMap maRegistered; - - public: - SvxRsidItemInstanceManager() - : ItemInstanceManager(typeid(SvxRsidItem).hash_code()) + protected: + virtual size_t hashCode(const SfxPoolItem& rItem) const override { + auto const & rRsidItem = static_cast(rItem); + std::size_t seed(0); + o3tl::hash_combine(seed, rRsidItem.Which()); + o3tl::hash_combine(seed, rRsidItem.GetValue()); + return seed; } - - private: - static size_t hashCode(const SfxPoolItem&); - - // standard interface, accessed exclusively - // by implCreateItemEntry/implCleanupItemEntry - virtual const SfxPoolItem* find(const SfxPoolItem&) const override; - virtual void add(const SfxPoolItem&) override; - virtual void remove(const SfxPoolItem&) override; }; - - size_t SvxRsidItemInstanceManager::hashCode(const SfxPoolItem& rItem) - { - auto const & rRsidItem = static_cast(rItem); - std::size_t seed(0); - o3tl::hash_combine(seed, rRsidItem.Which()); - o3tl::hash_combine(seed, rRsidItem.GetValue()); - return seed; - } - - const SfxPoolItem* SvxRsidItemInstanceManager::find(const SfxPoolItem& rItem) const - { - auto aHit(maRegistered.find(hashCode(rItem))); - if (aHit != maRegistered.end()) - return aHit->second; - return nullptr; - } - - void SvxRsidItemInstanceManager::add(const SfxPoolItem& rItem) - { - maRegistered.insert({hashCode(rItem), &rItem}); - } - - void SvxRsidItemInstanceManager::remove(const SfxPoolItem& rItem) - { - maRegistered.erase(hashCode(rItem)); - } } ItemInstanceManager* SvxRsidItem::getItemInstanceManager() const diff --git a/include/svl/poolitem.hxx b/include/svl/poolitem.hxx index bdfb814e3c0a..1cb667b5c90c 100644 --- a/include/svl/poolitem.hxx +++ b/include/svl/poolitem.hxx @@ -653,6 +653,45 @@ private: virtual void remove(const SfxPoolItem&) override; }; +/** + Utility template to reduce boilerplate code when creating item instance managers + for specific PoolItem subclasses. +*/ +template +class TypeSpecificItemInstanceManager : public ItemInstanceManager +{ +public: + TypeSpecificItemInstanceManager() + : ItemInstanceManager(typeid(T).hash_code()) + { + } + + // standard interface, accessed exclusively + // by implCreateItemEntry/implCleanupItemEntry + virtual const SfxPoolItem* find(const SfxPoolItem& rItem) const override final + { + auto aHit(maRegistered.find(hashCode(rItem))); + if (aHit != maRegistered.end()) + return aHit->second; + return nullptr; + } + virtual void add(const SfxPoolItem& rItem) override final + { + maRegistered.insert({hashCode(rItem), &rItem}); + } + virtual void remove(const SfxPoolItem& rItem) override final + { + maRegistered.erase(hashCode(rItem)); + } + +protected: + virtual size_t hashCode(const SfxPoolItem&) const = 0; + +private: + std::unordered_map maRegistered; +}; + + inline bool IsStaticDefaultItem(const SfxPoolItem *pItem ) { return pItem && pItem->isStaticDefault(); From 2a9b53bb9f85c2869c779dde36a2d77353fef14b Mon Sep 17 00:00:00 2001 From: Noel Grandin Date: Thu, 27 Jun 2024 10:18:15 +0200 Subject: [PATCH 087/194] tdf#160345 Slow rendering of filled polygon Partial fix of this problem. The tiled image is a single pixel big, so we can do a solid color fill. Ideally vcl needs to pass the operation down to skia/cairo and let those layers do the tiling. Change-Id: Ifcb1d1a71f0b23b772bbacf1b1e2b15ea315f578 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169619 Reviewed-by: Noel Grandin Tested-by: Jenkins --- .../source/processor2d/vclprocessor2d.cxx | 30 +++++++++++++++---- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/drawinglayer/source/processor2d/vclprocessor2d.cxx b/drawinglayer/source/processor2d/vclprocessor2d.cxx index 45825a2a477b..7c21e4ea1f1c 100644 --- a/drawinglayer/source/processor2d/vclprocessor2d.cxx +++ b/drawinglayer/source/processor2d/vclprocessor2d.cxx @@ -701,8 +701,31 @@ bool VclProcessor2D::RenderFillGraphicPrimitive2DImpl( // check if offset is used const sal_Int32 nOffsetX(basegfx::fround(rFillGraphicAttribute.getOffsetX() * nBWidth)); + const sal_Int32 nOffsetY(basegfx::fround(rFillGraphicAttribute.getOffsetY() * nBHeight)); - if (nOffsetX) + if (nOffsetX == 0 && nOffsetY == 0) + { + if (!bPreScaled) + aBitmapEx.Scale(aNeededBitmapSizePixel); + + // if the tile is a single pixel big, just flood fill with that pixel color + if (aNeededBitmapSizePixel.getWidth() == 1 && aNeededBitmapSizePixel.getHeight() == 1) + { + Color col = aBitmapEx.GetPixelColor(0, 0); + mpOutputDevice->SetLineColor(col); + mpOutputDevice->SetFillColor(col); + mpOutputDevice->DrawRect(aVisiblePixel); + } + else + { + // TODO vcl does not have an optimised path here, it should be passing some kind of fill/tile + // operation down to the cairo/skia layers + Wallpaper aWallpaper(aBitmapEx); + aWallpaper.SetColor(COL_TRANSPARENT); + mpOutputDevice->DrawWallpaper(aVisiblePixel, aWallpaper); + } + } + else if (nOffsetX) { // offset in X, so iterate over Y first and draw lines for (sal_Int32 nYPos(nBTop); nYPos < nOTop + nOHeight; nYPos += nBHeight, nPosY++) @@ -727,11 +750,8 @@ bool VclProcessor2D::RenderFillGraphicPrimitive2DImpl( } } } - else + else // nOffsetY is used { - // check if offset is used - const sal_Int32 nOffsetY(basegfx::fround(rFillGraphicAttribute.getOffsetY() * nBHeight)); - // possible offset in Y, so iterate over X first and draw columns for (sal_Int32 nXPos(nBLeft); nXPos < nOLeft + nOWidth; nXPos += nBWidth, nPosX++) { From 9d0d9d8aa0ba4bb465e376621b426fb9ff00507e Mon Sep 17 00:00:00 2001 From: Samuel Mehrbrodt Date: Mon, 24 Jun 2024 11:11:15 +0200 Subject: [PATCH 088/194] xlsx: Don't export changes author/date when in privacy mode Change-Id: I1b1ef4dd75f02cc545721d5458617cfa92b26615 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169453 Reviewed-by: Samuel Mehrbrodt Tested-by: Jenkins --- sc/qa/unit/data/xlsx/change-tracking.xlsx | Bin 0 -> 7159 bytes sc/qa/unit/subsequent_export_test4.cxx | 26 +++++++++++++++++++ sc/source/filter/inc/XclExpChangeTrack.hxx | 5 ++++ sc/source/filter/xcl97/XclExpChangeTrack.cxx | 13 +++++++++- 4 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 sc/qa/unit/data/xlsx/change-tracking.xlsx diff --git a/sc/qa/unit/data/xlsx/change-tracking.xlsx b/sc/qa/unit/data/xlsx/change-tracking.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..cba56b971d64cfcd5b667dc7d9bdc8d7448e8713 GIT binary patch literal 7159 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 literal 0 HcmV?d00001 diff --git a/sc/qa/unit/subsequent_export_test4.cxx b/sc/qa/unit/subsequent_export_test4.cxx index 0814c915d81b..a6e5802cf98f 100644 --- a/sc/qa/unit/subsequent_export_test4.cxx +++ b/sc/qa/unit/subsequent_export_test4.cxx @@ -1889,6 +1889,32 @@ CPPUNIT_TEST_FIXTURE(ScExportTest4, testChangesAuthorDate) pXmlDoc, "/office:document-content/office:body/office:spreadsheet/table:tracked-changes/table:cell-content-change[1]/office:change-info/dc:date"_ostr, u"1970-01-01T12:00:00"_ustr); + + // Reset config change + officecfg::Office::Common::Security::Scripting::RemovePersonalInfoOnSaving::set(false, pBatch); + pBatch->commit(); +} + +CPPUNIT_TEST_FIXTURE(ScExportTest4, testChangesAuthorDateXLSX) +{ + createScDoc("xlsx/change-tracking.xlsx"); + + auto pBatch(comphelper::ConfigurationChanges::create()); + // Remove all personal info + officecfg::Office::Common::Security::Scripting::RemovePersonalInfoOnSaving::set(true, pBatch); + pBatch->commit(); + + save(u"Calc Office Open XML"_ustr); + xmlDocUniquePtr pXmlDoc = parseExport(u"xl/revisions/revisionHeaders.xml"_ustr); + CPPUNIT_ASSERT(pXmlDoc); + + assertXPath(pXmlDoc, "/x:headers/x:header[1]"_ostr, "userName"_ostr, u"Author1"_ustr); + assertXPath(pXmlDoc, "/x:headers/x:header[1]"_ostr, "dateTime"_ostr, + u"1970-01-01T12:00:00.000000000Z"_ustr); + + // Reset config change + officecfg::Office::Common::Security::Scripting::RemovePersonalInfoOnSaving::set(false, pBatch); + pBatch->commit(); } CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/sc/source/filter/inc/XclExpChangeTrack.hxx b/sc/source/filter/inc/XclExpChangeTrack.hxx index b23b6f8cdcaf..746125e50ab1 100644 --- a/sc/source/filter/inc/XclExpChangeTrack.hxx +++ b/sc/source/filter/inc/XclExpChangeTrack.hxx @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include "xelink.hxx" @@ -262,6 +263,10 @@ public: virtual void SaveXml( XclExpXmlStream& rStrm ) override; void AppendAction( std::unique_ptr pAction ); + +private: + /// map authors to remove personal info + std::unique_ptr mpAuthorIDs; }; // XclExpChTrInfo - header of action group of a user diff --git a/sc/source/filter/xcl97/XclExpChangeTrack.cxx b/sc/source/filter/xcl97/XclExpChangeTrack.cxx index 52d2150e9f75..30812d7bb9e2 100644 --- a/sc/source/filter/xcl97/XclExpChangeTrack.cxx +++ b/sc/source/filter/xcl97/XclExpChangeTrack.cxx @@ -37,6 +37,9 @@ #include #include #include +#include + +#include using namespace oox; @@ -395,7 +398,7 @@ XclExpXmlChTrHeader::XclExpXmlChTrHeader( OUString aUserName, const DateTime& rDateTime, const sal_uInt8* pGUID, sal_Int32 nLogNumber, const XclExpChTrTabIdBuffer& rBuf ) : maUserName(std::move(aUserName)), maDateTime(rDateTime), mnLogNumber(nLogNumber), - mnMinAction(0), mnMaxAction(0) + mnMinAction(0), mnMaxAction(0), mpAuthorIDs(new SvtSecurityMapPersonalInfo) { memcpy(maGUID, pGUID, 16); if (rBuf.GetBufferCount()) @@ -421,6 +424,14 @@ void XclExpXmlChTrHeader::SaveXml( XclExpXmlStream& rStrm ) &aRelId); tools::Guid aGuid(maGUID); + bool bRemovePersonalInfo + = SvtSecurityOptions::IsOptionSet(SvtSecurityOptions::EOption::DocWarnRemovePersonalInfo) + && !SvtSecurityOptions::IsOptionSet(SvtSecurityOptions::EOption::DocWarnKeepRedlineInfo); + if (bRemovePersonalInfo) + { + maDateTime = css::util::DateTime(0, 0, 0, 12, 1, 1, 1970, true); + maUserName = "Author" + OUString::number(mpAuthorIDs->GetInfoID(maUserName)); + } rStrm.WriteAttributes( XML_guid, aGuid.getString(), XML_dateTime, lcl_DateTimeToOString(maDateTime), From 0acac1a2741d47b98ae600800e2db0e7a5fb3efe Mon Sep 17 00:00:00 2001 From: Samuel Mehrbrodt Date: Thu, 27 Jun 2024 09:23:08 +0200 Subject: [PATCH 089/194] xlsx: Don't export notes author when in privacy mode Change-Id: Id0b3f0aca7bd4e21f41c2a8307964423debcf5bb Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169616 Tested-by: Jenkins Reviewed-by: Samuel Mehrbrodt --- sc/qa/unit/data/xlsx/cell-note.xlsx | Bin 0 -> 7083 bytes sc/qa/unit/subsequent_export_test4.cxx | 20 ++++++++++++++++++++ sc/source/filter/excel/xeescher.cxx | 12 ++++++++++++ sc/source/filter/inc/xeescher.hxx | 3 +++ 4 files changed, 35 insertions(+) create mode 100644 sc/qa/unit/data/xlsx/cell-note.xlsx diff --git a/sc/qa/unit/data/xlsx/cell-note.xlsx b/sc/qa/unit/data/xlsx/cell-note.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..9df212a2970f83b73d0880c17496bc7dc6903272 GIT binary patch literal 7083 zcmaJ`1yodB*QPtAL%JIQX{B)}>6B*Z9;Adpn4twEB?Sbe1ZkudkOt`v0fhm9k&upm z(C_=@_5WY@T{G*YQ)&rncv(K=nUfb zar1Pta&vRy^L26NyZ)z4Th_5dfT($$%nDw+l@HbCS-*wT@OlFk+FYmR46qk<**hyy zx2MI*#mw#;aI_1v?4R&}ePmbKY}V1V5y$fCn#yt_3)otGX=b4}*vEUAK1NYx$`J2O z%ULn7tfz8^98*1w5H^~>>oJ^Z;S3zMeQT1mFJ;~*Hu-c@Nypg{-9v|h!MpJ3)ySdx z7}cXEAj;w0+qk_B6p1;pyj3CQzHHGvk-^Q`miK@dD>`vr_#RzxTNFC8K_~CnqkE>% zf^>0?_NBH~{6_iS#2U7N)Vf8=ZPd)$2UPq(o)e;)s+d@tBjX^3hWgDpkHmhBH$zfs$4 zhn6E)OO;?LQHCPXbaP1hT(GN*R{r?wwFj?f(CY->q)LU?4@?c=7bAA zux8l2yks#FA4k7Ph;3DrU+O_kn!_zSoCi2>bD$?pTu9o=zKxjRzsAhK9JlTfG7^$2 z>fbO!@(VLw_COaP|Ics1>z%cbtnM}^fENZoBMaFnU3rH+%Ag_0gX_&vAz!yZl~y|nnxOe%M&)pd!V zqmsZ2r)oTPnAzCB4O|~mz^%!+yFAOsm>UY3ND%CAq1jS5$~}BykaHv_Al4k^!PGj-eSnnWbRtBx zdX;fMJ&@=Lr0nSdQ5N`3?-6|g<0l3Z32Z{(H?k(AQTzrTDf}s<4a?K?#hOVPPw5sU zr1jRM<(Uzb6~KH2Z;@H-7otz_oc{WQRb)bsXVMqPeMkYtnKc6hzZkq?- zmb};}22(3eFQe){$R*4ZjkP-su_-v0iuzea(!8nDghO_4@^|zU0Z}Gk(-_=>K(J+75Uep5$(yev}B# z=z9|+o(k+);FmHOgHJH!H3iYzTBmLAZ(oVGU9=mnyY*wxA6DC4kX*y-uwpla4pELq zu>J-w{9o__dHFd5LD#_AHhlPSPJp%ru4C95$HGdQI?B*B?(hOThKW&KGPM)HbIx96 zYJYriCay6CZD)HNPFBo5$KQ5zzPDB6ofw_`85Zx@k(9X%B-4XWhJQWR%N$_jX?9`W)1N72UK6rySB%gto9EXBg&(;16k*g zorBg}zWEop%50{Kg1#!eF&iZ~o=!n z#a3PI85eIq?UyAAW>tg3@T$(zr-kh5o9IsiBh=QmJHHR;ruT-2rdMAIcIqD8B{G;n z9h_q0PC;^fqw)GU)4@=8xD}$u{_c9&m>^?hC zrBZ(Km2Ht*G%?Ty@999&6$MB<4V;4zr zr$oGCX(20vFrmr(j%(UMo<)Xx0hHm}Da=Me44n8B9MZOq0s$%S@4xBv593y7G zB(W2onu+i^rG}?(;!WlhX2x+`ZZ=_)U}Ur@k1k!K_u0cRQV0UQ*2I59FZ1t)3bF?R zy+HrrAU}WntdqYO$n!y*b^#(N{GQ@;6JQJyA-r9HWu{2akUvN741QoWQ7_6Bflf## zwKK3&-$6Q|7iS|!kKu&oo{lV==PZ<}@qV|$v^HIq(MV=&3Je2HEHqnAMLwfj_>L#Z}XSl^q%P{rqIFWc)}Bst!cNjM4b z_T#>O12$w7EPxB(myMfjin<^DujCBh5jp!f5&H?dyan z)g~9bM@+X6(J}s=VNm{`g#1oLmOi3oh!M5G-x7Jjiff(gHPUtUiNyxJgM|rJyl}T- z$d$>7qdF3jZm&ak2)BQIr$mxeplgKDWCqVY)kkF9nVKAhD*h1`}_uIua|i!WuZzO65C>44Toj?=TLwm=R4ULkjq49%gt zEqRHo{YHqgk~?xygtR=|%ee^|y8-pyz54R3e1;6`TE!VucMe0|tU{UPVXs4JL9?zt zCr<2JwS<)@oSfZ8v|qt+b7;^WW9&p<48=M581euJ@wm`28L+w@I3 zG2Qmw>6qs}51rB%3PLv__vq|t3{M#hXm*WNI$STJ2AGHJf(+72hxv5Z^|7^=!#|g^ zm{s?#Tv*kKrSbb`6>*t=aMIX0fhu*9=;c+{oLVy6f@4XnP z$8`-72iCPCPU+h#D<-G zSuwXrYK-rzNh#)KB~gZfXXP=oz$Ho7p<&b%OM&s$50tjfFr>UL()N@b-vTAhkonpsJ>$Ebrt&1>iVVAuqY;!ws(N{eOkWerZY z8+a0SZ(+=^b_8F2Q1VTx{}W6}>WtSOVS&|t$BhpXk-M1h+JFg1oNk4#&mqlO74(XI z;z_QsKB>IOdN$CIGnsEWjhAtGC42aj8&aaRmlh#-q4i&zH|ek44zjoO1ls6$c{;e- z{p{f)vFZfv3`C(vFGB_vwM{9flzawOW2& z9Bw)mBDd#<=LKK(7k7)xF{F**vu&qa>=Brbu_V_k?UYty0u_p!VJEJ#eR?p_@HHV* z*JvkwJ;e13wwCtzS)DZO3rg^wA7inhCT?hVNMT!D7)0d0LU;9k@*`2o{wNFSuA-N+ zY>Gz1_LWLOtBo(K=&y?!Zd`D80b&xPh|j+lHKJeBw03iG0lIpDe%AFE&3?xY8NB8r zZt{hU$DSM?rwMXdHSKf44^g3Ione8g$q5n{r+t+RhtnN=qxQB39CZ+%HMz(pN)^Mm zcLYc`r@fYS+q=&$FNyJR!!S(obla0D>n2RKl;NCMG!vM7xnvt4rv}$v=C@W4Wx2ak zrJ`PM*fczZ;@2yzWG&dtKz>Z4r_%1_0{up6Lea$VNHA!W#y|i_F?Pxj#!z3Y*n*L=dRT#Cx zK=VW2y>iPOH78iItoUQVCK0jf_Iu8_e%YDP;6-1*xjRkTY!g+72W;?j!aYcII!@MC7*>7c2o(UY@BOV&{>NM0Jj zAa)>NCK+b8G=M0mc8hv%Id1tDQ<=jH@Fgs)<^0FXLt_#jakql4DT?HVKQ}L8K7&Zu z`+z+j_wub=ngsA3FiKmTVv{y~j8w_JyFH#;V5BacxN9;^NqlJ^Qcdu2k|)+Xhfu=# z1I3!rp7lwH9{);FD}*pZc-XBXIVjnU&iw(O(s}#sz_@v3s?vZI()DVVXg5JszH&S4 zm;2vNX5vYvX$a$rbbj>IB#!vV3^%=RIB%G81eTzCeUOw@x*EGYAe&m2@s+p*mNWl~ zOrT^>WKblcN1ihhyH*LWM<0DRLmm(sX@%EyG``D5e;ES3y8q1O>+nEynh%x&}~*2K`}4d=4JwZA0cDl3s*G(gB71Nk3nJV(IvWAc=XzgKw(-(uH|fdq&Fg8& z0KwEOc{mZs2Y*Ua?m#I#6<880AUF`7#+|$mkune5jJtDL7i9MQY6pMXY zBydI4+oQiO)^+px-^H?YcfVe%tawQ`hyc;kqe~o{$M|<^G}-UOa_MC;)uP5UGFsC| za#!$fG3>#=2|Ff;`}DUQEJT;B=RRbkY^i%KXQZNuqGVh!ST1M&<1FM=C#Gc*tSlJk z_J=%?AdBq0#{wAm_af0&xoZeNlnESq5<7n>EqH{xOgUh?>C<5dAg@D{ zDA$mbf{owd5@kh}a?a!G>AzgtpF4#y#Z^;dOhqGQE|(h3F`OC`z6ao$(;jX2*?D^m;WAGBZL+Wir=V4MUYH>JM%w=F%GK=}hbrHnVA( zTN2V}EUv-V%QH(56LL$V>fRtosft*$$QmwDPIxEJq*=Tsr|$m+bUq7afq+XT&8Xao z*SMyb8;;f@wO_0;q(#>vhsLX!^h)tS1Q1#Lp4VOAcX!wfqwL7MVvVBNTHY>G1PKmV1f zVYgz6z?5|Z-n!os_UNtZmJa5O4@I0LjM`yx32c5>&^50wT$uG{1BY~KM(#l zQRB~mH;)Y0GQe+(!u~VhZ&BdSC^s4T_3`4j`64EWc&z_(*!VNTO)7d_{C=A`!OsZ) z;PHQY-=qfDboI9tA(j_$|9>N|e+IhQO0Sv3Z_~f^4_@)7u-D!WD8v-N$Tgw02 ycmH(1S;PK0eOj^`?*Hioe|q2CGXF%REBXIh^)yw{F|MBwA8{EXKr8)o>Hi0#<>q(* literal 0 HcmV?d00001 diff --git a/sc/qa/unit/subsequent_export_test4.cxx b/sc/qa/unit/subsequent_export_test4.cxx index a6e5802cf98f..fbf31673ada3 100644 --- a/sc/qa/unit/subsequent_export_test4.cxx +++ b/sc/qa/unit/subsequent_export_test4.cxx @@ -1917,6 +1917,26 @@ CPPUNIT_TEST_FIXTURE(ScExportTest4, testChangesAuthorDateXLSX) pBatch->commit(); } +CPPUNIT_TEST_FIXTURE(ScExportTest4, testNotesAuthor) +{ + createScDoc("xlsx/cell-note.xlsx"); + + auto pBatch(comphelper::ConfigurationChanges::create()); + // Remove all personal info + officecfg::Office::Common::Security::Scripting::RemovePersonalInfoOnSaving::set(true, pBatch); + pBatch->commit(); + + save(u"Calc Office Open XML"_ustr); + xmlDocUniquePtr pXmlDoc = parseExport(u"xl/comments1.xml"_ustr); + CPPUNIT_ASSERT(pXmlDoc); + + assertXPathContent(pXmlDoc, "/x:comments/x:authors/x:author"_ostr, u"Author1"_ustr); + + // Reset config change + officecfg::Office::Common::Security::Scripting::RemovePersonalInfoOnSaving::set(false, pBatch); + pBatch->commit(); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/filter/excel/xeescher.cxx b/sc/source/filter/excel/xeescher.cxx index 314f2ebe5b1c..625021e7555b 100644 --- a/sc/source/filter/excel/xeescher.cxx +++ b/sc/source/filter/excel/xeescher.cxx @@ -38,6 +38,7 @@ #include #include #include +#include #include #include @@ -1639,6 +1640,7 @@ XclExpNote::XclExpNote(const XclExpRoot& rRoot, const ScAddress& rScPos, , mbAutoFill(false) , mbColHidden(false) , mbRowHidden(false) + , mpAuthorIDs(new SvtSecurityMapPersonalInfo) { // get the main note text OUString aNoteText; @@ -1681,8 +1683,18 @@ XclExpNote::XclExpNote(const XclExpRoot& rRoot, const ScAddress& rScPos, // stAuthor (variable): An XLUnicodeString that specifies the name of the comment // author. String length MUST be greater than or equal to 1 and less than or equal // to 54. + bool bRemovePersonalInfo + = SvtSecurityOptions::IsOptionSet( + SvtSecurityOptions::EOption::DocWarnRemovePersonalInfo) + && !SvtSecurityOptions::IsOptionSet( + SvtSecurityOptions::EOption::DocWarnKeepNoteAuthorDateInfo); if( pScNote->GetAuthor().isEmpty() ) maAuthor = XclExpString( u" "_ustr ); + else if (bRemovePersonalInfo) + maAuthor = XclExpString( + "Author" + + OUString::number(mpAuthorIDs->GetInfoID(pScNote->GetAuthor())), + XclStrFlags::NONE, 54); else maAuthor = XclExpString( pScNote->GetAuthor(), XclStrFlags::NONE, 54 ); diff --git a/sc/source/filter/inc/xeescher.hxx b/sc/source/filter/inc/xeescher.hxx index c7adf1050b9b..2d7aefcf07d7 100644 --- a/sc/source/filter/inc/xeescher.hxx +++ b/sc/source/filter/inc/xeescher.hxx @@ -26,6 +26,7 @@ #include "xlformula.hxx" #include #include +#include #include #include #include @@ -382,6 +383,8 @@ private: bool mbRowHidden; /// Row containing the comment is hidden tools::Rectangle maCommentFrom; /// From and From Offset tools::Rectangle maCommentTo; /// To and To Offsets + /// map authors to remove personal info + std::unique_ptr mpAuthorIDs; }; class XclExpComments : public XclExpRecord From 374a76adc567ad9fe4fa09099f7038c0f388a28e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Toma=C5=BE=20Vajngerl?= Date: Sat, 23 Mar 2024 22:56:53 +0900 Subject: [PATCH 090/194] vcl: Remove graph. reader context from {Imp}Graph and GraphicReader MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This removes the mpContext member variable from ImpGraph, which also make {Get,Set}ReaderContext on Graphic obsolete and is also removed. GraphicFilter and other code is adjusted and simplified. Change-Id: Icd1927d7b1bd4624b523d0f49a4343911ec6cd0a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/165214 Tested-by: Jenkins Reviewed-by: Tomaž Vajngerl --- forms/source/component/imgprod.cxx | 6 ++--- include/vcl/graph.hxx | 3 --- vcl/Library_vcl.mk | 1 - vcl/inc/graphic/GraphicReader.hxx | 37 --------------------------- vcl/inc/impgraph.hxx | 3 --- vcl/source/filter/graphicfilter.cxx | 18 +++---------- vcl/source/filter/igif/gifread.cxx | 4 +-- vcl/source/filter/ixbm/xbmread.cxx | 4 +-- vcl/source/filter/ixpm/xpmread.cxx | 3 +-- vcl/source/filter/jpeg/JpegReader.cxx | 6 ----- vcl/source/filter/jpeg/JpegReader.hxx | 6 ++--- vcl/source/gdi/graph.cxx | 10 -------- vcl/source/gdi/impgraph.cxx | 12 --------- vcl/source/graphic/GraphicReader.cxx | 29 --------------------- 14 files changed, 12 insertions(+), 130 deletions(-) delete mode 100644 vcl/inc/graphic/GraphicReader.hxx delete mode 100644 vcl/source/graphic/GraphicReader.cxx diff --git a/forms/source/component/imgprod.cxx b/forms/source/component/imgprod.cxx index bec815b91343..47f9f13e3425 100644 --- a/forms/source/component/imgprod.cxx +++ b/forms/source/component/imgprod.cxx @@ -125,7 +125,7 @@ void ImageProducer::setImage( css::uno::Reference< css::io::XInputStream > const void ImageProducer::NewDataAvailable() { - if( ( GraphicType::NONE == moGraphic->GetType() ) || moGraphic->GetReaderContext() ) + if (GraphicType::NONE == moGraphic->GetType()) startProduction(); } @@ -138,11 +138,11 @@ void ImageProducer::startProduction() bool bNotifyEmptyGraphics = false; // valid stream or filled graphic? => update consumers - if( mpStm || ( moGraphic->GetType() != GraphicType::NONE ) ) + if (mpStm || moGraphic->GetType() != GraphicType::NONE) { // if we already have a graphic, we don't have to import again; // graphic is cleared if a new Stream is set - if( ( moGraphic->GetType() == GraphicType::NONE ) || moGraphic->GetReaderContext() ) + if (moGraphic->GetType() == GraphicType::NONE) { if ( ImplImportGraphic( *moGraphic ) ) maDoneHdl.Call( &*moGraphic ); diff --git a/include/vcl/graph.hxx b/include/vcl/graph.hxx index 74261bb84e6f..9d1499ea98c1 100644 --- a/include/vcl/graph.hxx +++ b/include/vcl/graph.hxx @@ -47,7 +47,6 @@ class GDIMetaFile; class SvStream; class ImpGraphic; class OutputDevice; -class GraphicReader; class SAL_WARN_UNUSED VCL_DLLPUBLIC GraphicConversionParameters { @@ -174,8 +173,6 @@ public: SAL_DLLPRIVATE OString getUniqueID() const; - std::shared_ptr& GetReaderContext(); - SAL_DLLPRIVATE void SetReaderContext( const std::shared_ptr &pReader ); SAL_DLLPRIVATE void SetDummyContext(bool value); SAL_DLLPRIVATE bool IsDummyContext() const; diff --git a/vcl/Library_vcl.mk b/vcl/Library_vcl.mk index 361d55a0ae2c..dd3d9d48c8e3 100644 --- a/vcl/Library_vcl.mk +++ b/vcl/Library_vcl.mk @@ -319,7 +319,6 @@ $(eval $(call gb_Library_add_exception_objects,vcl,\ vcl/source/graphic/GraphicLoader \ vcl/source/graphic/GraphicObject \ vcl/source/graphic/GraphicObject2 \ - vcl/source/graphic/GraphicReader \ vcl/source/graphic/Manager \ vcl/source/graphic/UnoBinaryDataContainer \ vcl/source/graphic/UnoGraphic \ diff --git a/vcl/inc/graphic/GraphicReader.hxx b/vcl/inc/graphic/GraphicReader.hxx deleted file mode 100644 index 0faf5a7fe9d0..000000000000 --- a/vcl/inc/graphic/GraphicReader.hxx +++ /dev/null @@ -1,37 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#pragma once - -#include - -class GraphicReader -{ -public: - virtual ~GraphicReader(); - - const OUString& GetUpperFilterName() const { return maUpperName; } - -protected: - OUString maUpperName; - - GraphicReader(); -}; - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/inc/impgraph.hxx b/vcl/inc/impgraph.hxx index fd6446e1972a..e15845c9d99a 100644 --- a/vcl/inc/impgraph.hxx +++ b/vcl/inc/impgraph.hxx @@ -70,7 +70,6 @@ private: Size maExPrefSize; ImpSwapInfo maSwapInfo; std::unique_ptr mpAnimation; - std::shared_ptr mpContext; std::shared_ptr mpSwapFile; std::shared_ptr mpGfxLink; std::shared_ptr maVectorGraphicData; @@ -189,8 +188,6 @@ private: bool swapOutGraphic(SvStream& rStream); // end swapping - std::shared_ptr& getContext() { return mpContext;} - void setContext( const std::shared_ptr& pReader ); void setDummyContext( bool value ) { mbDummyContext = value; } bool isDummyContext() const { return mbDummyContext; } void setGfxLink( const std::shared_ptr& ); diff --git a/vcl/source/filter/graphicfilter.cxx b/vcl/source/filter/graphicfilter.cxx index a7b125760107..e4a9f97f3188 100644 --- a/vcl/source/filter/graphicfilter.cxx +++ b/vcl/source/filter/graphicfilter.cxx @@ -91,7 +91,6 @@ #include "FilterConfigCache.hxx" #include -#include // Support for GfxLinkType::NativeWebp is so far disabled, // as enabling it would write .webp images e.g. to .odt documents, @@ -640,7 +639,7 @@ void GraphicFilter::ImportGraphics(std::vector< std::shared_ptr >& rGra if (!rContext.mAlphaMask.IsEmpty()) // Need to move the AlphaMask back to the BitmapEx. *rContext.m_pGraphic = BitmapEx( rContext.m_pGraphic->GetBitmapExRef().GetBitmap(), rContext.mAlphaMask ); - if (rContext.m_nStatus == ERRCODE_NONE && (rContext.m_eLinkType != GfxLinkType::NONE) && !rContext.m_pGraphic->GetReaderContext()) + if (rContext.m_nStatus == ERRCODE_NONE && rContext.m_eLinkType != GfxLinkType::NONE) { BinaryDataContainer aGraphicContent; @@ -1281,10 +1280,8 @@ ErrCode GraphicFilter::ImportGraphic(Graphic& rGraphic, std::u16string_view rPat ResetLastError(); - std::shared_ptr pContext = rGraphic.GetReaderContext(); - bool bDummyContext = rGraphic.IsDummyContext(); - if( !pContext || bDummyContext ) { + bool bDummyContext = rGraphic.IsDummyContext(); if( bDummyContext ) { rGraphic.SetDummyContext( false ); @@ -1313,13 +1310,6 @@ ErrCode GraphicFilter::ImportGraphic(Graphic& rGraphic, std::u16string_view rPat aFilterName = pConfig->GetImportFilterName( nFormat ); } - else - { - aFilterName = pContext->GetUpperFilterName(); - - nStreamBegin = 0; - nStatus = ERRCODE_NONE; - } // read graphic { @@ -1423,7 +1413,7 @@ ErrCode GraphicFilter::ImportGraphic(Graphic& rGraphic, std::u16string_view rPat nStatus = ERRCODE_GRFILTER_FILTERERROR; } - if( nStatus == ERRCODE_NONE && ( eLinkType != GfxLinkType::NONE ) && !rGraphic.GetReaderContext() && !bLinkSet ) + if (nStatus == ERRCODE_NONE && eLinkType != GfxLinkType::NONE && !bLinkSet) { if (aGraphicContent.isEmpty()) { @@ -1854,7 +1844,7 @@ IMPL_LINK( GraphicFilter, FilterCallback, ConvertData&, rData, bool ) default: break; } - if( GraphicType::NONE == rData.maGraphic.GetType() || rData.maGraphic.GetReaderContext() ) // Import + if (GraphicType::NONE == rData.maGraphic.GetType()) // Import { // Import nFormat = GetImportFormatNumberForShortName( aShortName ); diff --git a/vcl/source/filter/igif/gifread.cxx b/vcl/source/filter/igif/gifread.cxx index 67af603218d4..6f96131a7908 100644 --- a/vcl/source/filter/igif/gifread.cxx +++ b/vcl/source/filter/igif/gifread.cxx @@ -23,7 +23,6 @@ #include "gifread.hxx" #include #include -#include namespace { @@ -53,7 +52,7 @@ class SvStream; namespace { -class GIFReader : public GraphicReader +class GIFReader { Animation aAnimation; sal_uInt64 nAnimationByteSize; @@ -155,7 +154,6 @@ GIFReader::GIFReader( SvStream& rStm ) , cNonTransIndex1 ( 0 ) , nPaletteSize( 0 ) { - maUpperName = "SVIGIF"; aSrcBuf.resize(256); // Memory buffer for ReadNextBlock ClearImageExtensions(); } diff --git a/vcl/source/filter/ixbm/xbmread.cxx b/vcl/source/filter/ixbm/xbmread.cxx index 5b6ae9dd7d07..2a701e4ce025 100644 --- a/vcl/source/filter/ixbm/xbmread.cxx +++ b/vcl/source/filter/ixbm/xbmread.cxx @@ -24,7 +24,6 @@ #include #include -#include #include "xbmread.hxx" @@ -43,7 +42,7 @@ enum ReadState XBMREAD_ERROR }; -class XBMReader : public GraphicReader +class XBMReader { SvStream& mrStream; Bitmap maBitmap; @@ -74,7 +73,6 @@ XBMReader::XBMReader(SvStream& rStream) : mrStream(rStream) , mnLastPosition(rStream.Tell()) { - maUpperName = "SVIXBM"; InitTable(); } diff --git a/vcl/source/filter/ixpm/xpmread.cxx b/vcl/source/filter/ixpm/xpmread.cxx index 1ad06483a712..6c9d226a3f32 100644 --- a/vcl/source/filter/ixpm/xpmread.cxx +++ b/vcl/source/filter/ixpm/xpmread.cxx @@ -23,7 +23,6 @@ #include #include -#include #include "rgbtable.hxx" @@ -63,7 +62,7 @@ class Graphic; namespace { -class XPMReader : public GraphicReader +class XPMReader { private: SvStream& mrStream; diff --git a/vcl/source/filter/jpeg/JpegReader.cxx b/vcl/source/filter/jpeg/JpegReader.cxx index 7e4b3dc25f63..81f1a1688cdd 100644 --- a/vcl/source/filter/jpeg/JpegReader.cxx +++ b/vcl/source/filter/jpeg/JpegReader.cxx @@ -174,18 +174,12 @@ JPEGReader::JPEGReader( SvStream& rStream, GraphicFilterImportFlags nImportFlags mnLastPos ( rStream.Tell() ), mbSetLogSize ( nImportFlags & GraphicFilterImportFlags::SetLogsizeForJpeg ) { - maUpperName = "SVIJPEG"; - if (!(nImportFlags & GraphicFilterImportFlags::UseExistingBitmap)) { mpBitmap.emplace(); } } -JPEGReader::~JPEGReader() -{ -} - bool JPEGReader::CreateBitmap(JPEGCreateBitmapParam const & rParam) { if (rParam.nWidth > SAL_MAX_INT32 / 8 || rParam.nHeight > SAL_MAX_INT32 / 8) diff --git a/vcl/source/filter/jpeg/JpegReader.hxx b/vcl/source/filter/jpeg/JpegReader.hxx index 0e541c75916f..58d8f8315054 100644 --- a/vcl/source/filter/jpeg/JpegReader.hxx +++ b/vcl/source/filter/jpeg/JpegReader.hxx @@ -23,7 +23,6 @@ #include #include -#include enum class GraphicFilterImportFlags; @@ -44,7 +43,7 @@ struct JPEGCreateBitmapParam bool bGray; }; -class JPEGReader : public GraphicReader +class JPEGReader { SvStream& mrStream; std::optional mpBitmap; @@ -52,8 +51,7 @@ class JPEGReader : public GraphicReader bool mbSetLogSize; public: - JPEGReader( SvStream& rStream, GraphicFilterImportFlags nImportFlags ); - virtual ~JPEGReader() override; + JPEGReader( SvStream& rStream, GraphicFilterImportFlags nImportFlags ); ReadState Read(Graphic& rGraphic, GraphicFilterImportFlags nImportFlags, BitmapScopedWriteAccess* ppAccess); diff --git a/vcl/source/gdi/graph.cxx b/vcl/source/gdi/graph.cxx index 2c3e05235225..f90adeb24703 100644 --- a/vcl/source/gdi/graph.cxx +++ b/vcl/source/gdi/graph.cxx @@ -474,16 +474,6 @@ sal_uInt32 Graphic::GetAnimationLoopCount() const return mxImpGraphic->getAnimationLoopCount(); } -std::shared_ptr& Graphic::GetReaderContext() -{ - return mxImpGraphic->getContext(); -} - -void Graphic::SetReaderContext( const std::shared_ptr &pReader ) -{ - mxImpGraphic->setContext( pReader ); -} - void Graphic::SetDummyContext( bool value ) { mxImpGraphic->setDummyContext( value ); diff --git a/vcl/source/gdi/impgraph.cxx b/vcl/source/gdi/impgraph.cxx index 8bdcfb4146f6..d801fd14b8e2 100644 --- a/vcl/source/gdi/impgraph.cxx +++ b/vcl/source/gdi/impgraph.cxx @@ -92,7 +92,6 @@ ImpGraphic::ImpGraphic(const ImpGraphic& rImpGraphic) , maMetaFile(rImpGraphic.maMetaFile) , maBitmapEx(rImpGraphic.maBitmapEx) , maSwapInfo(rImpGraphic.maSwapInfo) - , mpContext(rImpGraphic.mpContext) , mpSwapFile(rImpGraphic.mpSwapFile) , mpGfxLink(rImpGraphic.mpGfxLink) , maVectorGraphicData(rImpGraphic.maVectorGraphicData) @@ -119,7 +118,6 @@ ImpGraphic::ImpGraphic(ImpGraphic&& rImpGraphic) noexcept , maBitmapEx(std::move(rImpGraphic.maBitmapEx)) , maSwapInfo(std::move(rImpGraphic.maSwapInfo)) , mpAnimation(std::move(rImpGraphic.mpAnimation)) - , mpContext(std::move(rImpGraphic.mpContext)) , mpSwapFile(std::move(rImpGraphic.mpSwapFile)) , mpGfxLink(std::move(rImpGraphic.mpGfxLink)) , maVectorGraphicData(std::move(rImpGraphic.maVectorGraphicData)) @@ -207,7 +205,6 @@ ImpGraphic& ImpGraphic::operator=( const ImpGraphic& rImpGraphic ) updateCurrentSizeInBytes(mnSizeBytes); maSwapInfo = rImpGraphic.maSwapInfo; - mpContext = rImpGraphic.mpContext; mbDummyContext = rImpGraphic.mbDummyContext; maGraphicExternalLink = rImpGraphic.maGraphicExternalLink; @@ -244,7 +241,6 @@ ImpGraphic& ImpGraphic::operator=(ImpGraphic&& rImpGraphic) meType = rImpGraphic.meType; mnSizeBytes = rImpGraphic.mnSizeBytes; maSwapInfo = std::move(rImpGraphic.maSwapInfo); - mpContext = std::move(rImpGraphic.mpContext); mbDummyContext = rImpGraphic.mbDummyContext; mpAnimation = std::move(rImpGraphic.mpAnimation); maBitmapEx = std::move(rImpGraphic.maBitmapEx); @@ -1120,12 +1116,6 @@ sal_uInt32 ImpGraphic::getAnimationLoopCount() const return mpAnimation ? mpAnimation->GetLoopCount() : 0; } -void ImpGraphic::setContext( const std::shared_ptr& pReader ) -{ - mpContext = pReader; - mbDummyContext = false; -} - bool ImpGraphic::swapInContent(SvStream& rStream) { bool bRet = false; @@ -1759,8 +1749,6 @@ sal_Int32 ImpGraphic::getPageNumber() const bool ImpGraphic::canReduceMemory() const { - if (mpContext) - return false; return !isSwappedOut(); } diff --git a/vcl/source/graphic/GraphicReader.cxx b/vcl/source/graphic/GraphicReader.cxx deleted file mode 100644 index 9137ebd8a246..000000000000 --- a/vcl/source/graphic/GraphicReader.cxx +++ /dev/null @@ -1,29 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#include - -#include -#include - -GraphicReader::GraphicReader() {} - -GraphicReader::~GraphicReader() {} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ From 274ecfa4e27f0d4198c1d351c285d3dfc2cdd075 Mon Sep 17 00:00:00 2001 From: Miklos Vajna Date: Wed, 26 Jun 2024 10:11:08 +0200 Subject: [PATCH 091/194] sw: simplify SwShellCursor::Show() If we carefully dereference the shell and its sfx view shell, then no need to do this again, as pointed out at . Change-Id: I4da444d1f4001849c7fe70ac0acd5e8af26b3415 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169636 Reviewed-by: Miklos Vajna Tested-by: Jenkins --- sw/source/core/crsr/viscrs.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sw/source/core/crsr/viscrs.cxx b/sw/source/core/crsr/viscrs.cxx index 7c30e8f43675..5a67e7192d0d 100644 --- a/sw/source/core/crsr/viscrs.cxx +++ b/sw/source/core/crsr/viscrs.cxx @@ -1001,7 +1001,7 @@ void SwShellCursor::Show(SfxViewShell const * pViewShell) } pSfxViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_TEXT_SELECTION, sRect); - SfxLokHelper::notifyOtherViews(GetShell()->GetSfxViewShell(), LOK_CALLBACK_TEXT_VIEW_SELECTION, "selection", sRect); + SfxLokHelper::notifyOtherViews(pSfxViewShell, LOK_CALLBACK_TEXT_VIEW_SELECTION, "selection", sRect); } } From 6e002da1615b52cda4e9331e87878458b1fe9677 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1szl=C3=B3=20N=C3=A9meth?= Date: Thu, 27 Jun 2024 10:06:03 +0200 Subject: [PATCH 092/194] tdf#161737 i18npool: fix fake spelling alarms with NNBSP MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fix word break by excluding narrow no-break space at the end of the words for spell checking. This was a problem e.g. for French, where (automatically? or manually) inserted narrow no-break space is used to get correct typography before exclamation and question marks, also after and before guillemets, if the OpenType/Graphite font doesn't have this feature). Regression from commit 44699b3de37f07090ac6fee1cd97aa76036e9700 "tdf#49885 BreakIterator rule upgrades". Note: this fixes also the problem, when digits separated by NNBSP thousand separator weren't handled by spell checking, alarming fake spelling mistakes, when "Check words with numbers" was enabled in Tools->Options->Languages and Locales->Writing Aids. (TODO: at the case of thousand separators, remove NBSP by the linguistic module or by the spell checking dictionaries to allow to check numbers with thousand separators and with correct suffix.) Change-Id: I36e10add7e0ba840f207a375ccc8668dbfef9572 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169618 Tested-by: Jenkins Reviewed-by: László Németh --- i18npool/qa/cppunit/test_breakiterator.cxx | 30 +++++++++++++++++++ .../source/breakiterator/data/dict_word.txt | 2 +- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/i18npool/qa/cppunit/test_breakiterator.cxx b/i18npool/qa/cppunit/test_breakiterator.cxx index e790c17e1155..6fbde026f565 100644 --- a/i18npool/qa/cppunit/test_breakiterator.cxx +++ b/i18npool/qa/cppunit/test_breakiterator.cxx @@ -992,6 +992,36 @@ void TestBreakIterator::testWordBoundaries() CPPUNIT_ASSERT_EQUAL(sal_Int32(8), aBounds.startPos); CPPUNIT_ASSERT_EQUAL(sal_Int32(11), aBounds.endPos); } + + // tdf#161737: narrow no-break space at the end of words resulted spelling mistakes + { + aLocale.Language = "en"; + aLocale.Country = "US"; + + OUString aTest(u"L’espace fine insécable\u202F!"_ustr); + aBounds + = m_xBreak->getWordBoundary(aTest, 14, aLocale, i18n::WordType::DICTIONARY_WORD, false); + CPPUNIT_ASSERT_EQUAL(sal_Int32(14), aBounds.startPos); + // This was 24 (word + NNBSP) + CPPUNIT_ASSERT_EQUAL(sal_Int32(23), aBounds.endPos); + } + + // tdf#161737: narrow no-break space between digits resulted spelling mistakes + // as a quick fix, limit NBSP as word-part character only for editing, and not for spell checking + // TODO: remove NBSP by the linguistic module or by the spell checking dictionaries to allow + // to check numbers with thousand separators and with correct suffix + { + aLocale.Language = "en"; + aLocale.Country = "US"; + + OUString aTest(u"1\u202F000\u202F000"_ustr); + aBounds + = m_xBreak->getWordBoundary(aTest, 2, aLocale, i18n::WordType::DICTIONARY_WORD, false); + // This was 0 (word + NNBSP) + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), aBounds.startPos); + // This was 8 (word + NNBSP) + CPPUNIT_ASSERT_EQUAL(sal_Int32(5), aBounds.endPos); + } } void TestBreakIterator::testSentenceBoundaries() diff --git a/i18npool/source/breakiterator/data/dict_word.txt b/i18npool/source/breakiterator/data/dict_word.txt index f804b0eec214..deeec7dd659e 100644 --- a/i18npool/source/breakiterator/data/dict_word.txt +++ b/i18npool/source/breakiterator/data/dict_word.txt @@ -54,7 +54,7 @@ $Double_Quote = [\p{Word_Break = Double_Quote}]; $MidNumLet = [\p{Word_Break = MidNumLet}]; $MidNum = [\p{Word_Break = MidNum}]; $Numeric = [\p{Word_Break = Numeric}]; -$ExtendNumLet = [\p{Word_Break = ExtendNumLet}]; +$ExtendNumLet = [\p{Word_Break = ExtendNumLet}-[:name = NARROW NO-BREAK SPACE:]]; $WSegSpace = [\p{Word_Break = WSegSpace}]; $Extended_Pict = [\p{Extended_Pictographic}]; From 2b9fee5a3e9d1eae65932fb0f08f0216f8a30cf7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1szl=C3=B3=20N=C3=A9meth?= Date: Thu, 27 Jun 2024 11:06:35 +0200 Subject: [PATCH 093/194] tdf#161737 i18npool: fix bad word selection with NNBSP MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fix word breaking rules also for editing. Previously the word was selected with the following narrow no-break space, e.g. at French words before exclamation and question marks (where narrow no-break space allows to get correct typography, if the OpenType/Graphite font doesn't have this feature). Add this and the previous fixes for Hungarian, which handled by extra word-breaking rule files. Follow-up to commit 6e002da1615b52cda4e9331e87878458b1fe9677 "tdf#161737 i18npool: fix fake spelling alarms with NNBSP". Change-Id: I7230bd356e5f0360172b652e615a61d96131d336 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169624 Tested-by: Jenkins Reviewed-by: László Németh --- i18npool/qa/cppunit/test_breakiterator.cxx | 30 +++++++++++++++++++ .../breakiterator/data/dict_word_hu.txt | 2 +- .../source/breakiterator/data/edit_word.txt | 8 +++-- .../breakiterator/data/edit_word_hu.txt | 8 +++-- 4 files changed, 41 insertions(+), 7 deletions(-) diff --git a/i18npool/qa/cppunit/test_breakiterator.cxx b/i18npool/qa/cppunit/test_breakiterator.cxx index 6fbde026f565..7e9f47ad22f1 100644 --- a/i18npool/qa/cppunit/test_breakiterator.cxx +++ b/i18npool/qa/cppunit/test_breakiterator.cxx @@ -1022,6 +1022,36 @@ void TestBreakIterator::testWordBoundaries() // This was 8 (word + NNBSP) CPPUNIT_ASSERT_EQUAL(sal_Int32(5), aBounds.endPos); } + + // tdf#161737: narrow no-break space at the end of words resulted spelling mistakes + { + aLocale.Language = "hu"; + aLocale.Country = "HU"; + + OUString aTest(u"L’espace fine insécable\u202F!"_ustr); + aBounds + = m_xBreak->getWordBoundary(aTest, 14, aLocale, i18n::WordType::DICTIONARY_WORD, false); + CPPUNIT_ASSERT_EQUAL(sal_Int32(14), aBounds.startPos); + // This was 24 (word + NNBSP) + CPPUNIT_ASSERT_EQUAL(sal_Int32(23), aBounds.endPos); + } + + // tdf#161737: narrow no-break space between digits resulted spelling mistakes + // as a quick fix, limit NBSP as word-part character only for editing, and not for spell checking + // TODO: remove NBSP by the linguistic module or by the spell checking dictionaries to allow + // to check numbers with thousand separators and with correct suffix + { + aLocale.Language = "hu"; + aLocale.Country = "HU"; + + OUString aTest(u"1\u202F000\u202F000"_ustr); + aBounds + = m_xBreak->getWordBoundary(aTest, 2, aLocale, i18n::WordType::DICTIONARY_WORD, false); + // This was 0 (word + NNBSP) + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), aBounds.startPos); + // This was 8 (word + NNBSP) + CPPUNIT_ASSERT_EQUAL(sal_Int32(5), aBounds.endPos); + } } void TestBreakIterator::testSentenceBoundaries() diff --git a/i18npool/source/breakiterator/data/dict_word_hu.txt b/i18npool/source/breakiterator/data/dict_word_hu.txt index 88648e6e5716..4ba426c8c7db 100644 --- a/i18npool/source/breakiterator/data/dict_word_hu.txt +++ b/i18npool/source/breakiterator/data/dict_word_hu.txt @@ -53,7 +53,7 @@ $Double_Quote = [\p{Word_Break = Double_Quote}]; $MidNumLet = [\p{Word_Break = MidNumLet}]; $MidNum = [\p{Word_Break = MidNum}]; $Numeric = [\p{Word_Break = Numeric}]; -$ExtendNumLet = [\p{Word_Break = ExtendNumLet}]; +$ExtendNumLet = [\p{Word_Break = ExtendNumLet}-[:name = NARROW NO-BREAK SPACE:]]; $WSegSpace = [\p{Word_Break = WSegSpace}]; $Extended_Pict = [\p{Extended_Pictographic}]; diff --git a/i18npool/source/breakiterator/data/edit_word.txt b/i18npool/source/breakiterator/data/edit_word.txt index 14fc221aa96e..1e3bcd15b20d 100644 --- a/i18npool/source/breakiterator/data/edit_word.txt +++ b/i18npool/source/breakiterator/data/edit_word.txt @@ -65,7 +65,7 @@ $Extended_Pict = [\p{Extended_Pictographic}]; $MidNumLet = [\p{Word_Break = MidNumLet}-[:name= FULL STOP:]]; # $ExtendNumLet = [\p{Word_Break = ExtendNumLet}]; -$ExtendNumLet = [\p{Word_Break = ExtendNumLet}-[:name= LOW LINE:]]; +$ExtendNumLet = [\p{Word_Break = ExtendNumLet}-[:name= LOW LINE:]-[:name = NARROW NO-BREAK SPACE:]]; ### END CUSTOMIZATION @@ -164,16 +164,18 @@ $Numeric $ExFm* ($MidNum | $MidNumLet | $Single_Quote) $ExFm* $Numeric; $Katakana $ExFm* $Katakana {400}; # rule 13a/b +# allow to select numbers with narrow no-break spaces as thousand separators +$ExtendNumLetNNBSP = [\p{Word_Break = ExtendNumLet}]; $ALetterPlus $ExFm* $ExtendNumLet {200}; # (13a) $Hebrew_Letter $ExFm* $ExtendNumLet {200}; # (13a) -$Numeric $ExFm* $ExtendNumLet {100}; # (13a) +$Numeric $ExFm* $ExtendNumLetNNBSP {100}; # (13a) $Katakana $ExFm* $ExtendNumLet {400}; # (13a) $ExtendNumLet $ExFm* $ExtendNumLet {200}; # (13a) $ExtendNumLet $ExFm* $ALetterPlus {200}; # (13b) $ExtendNumLet $ExFm* $Hebrew_Letter {200}; # (13b) -$ExtendNumLet $ExFm* $Numeric {100}; # (13b) +$ExtendNumLetNNBSP $ExFm* $Numeric {100}; # (13b) $ExtendNumLet $ExFm* $Katakana {400}; # (13b) # rules 15 - 17 diff --git a/i18npool/source/breakiterator/data/edit_word_hu.txt b/i18npool/source/breakiterator/data/edit_word_hu.txt index 389ad2bacc13..a5e44d2732d9 100644 --- a/i18npool/source/breakiterator/data/edit_word_hu.txt +++ b/i18npool/source/breakiterator/data/edit_word_hu.txt @@ -81,7 +81,7 @@ $MidLetter = [\p{Word_Break = MidLetter} $Symbols_hu]; $MidNumLet = [\p{Word_Break = MidNumLet}-[:name= FULL STOP:]]; # $ExtendNumLet = [\p{Word_Break = ExtendNumLet}]; -$ExtendNumLet = [\p{Word_Break = ExtendNumLet}-[:name= LOW LINE:]]; +$ExtendNumLet = [\p{Word_Break = ExtendNumLet}-[:name= LOW LINE:]-[:name = NARROW NO-BREAK SPACE:]]; ### END CUSTOMIZATION @@ -180,16 +180,18 @@ $Numeric $ExFm* ($MidNum | $MidNumLet | $Single_Quote) $ExFm* $Numeric; $Katakana $ExFm* $Katakana {400}; # rule 13a/b +# allow to select numbers with narrow no-break spaces as thousand separators +$ExtendNumLetNNBSP = [\p{Word_Break = ExtendNumLet}]; $ALetterPlus $ExFm* $ExtendNumLet {200}; # (13a) $Hebrew_Letter $ExFm* $ExtendNumLet {200}; # (13a) -$Numeric $ExFm* $ExtendNumLet {100}; # (13a) +$Numeric $ExFm* $ExtendNumLetNNBSP {100}; # (13a) $Katakana $ExFm* $ExtendNumLet {400}; # (13a) $ExtendNumLet $ExFm* $ExtendNumLet {200}; # (13a) $ExtendNumLet $ExFm* $ALetterPlus {200}; # (13b) $ExtendNumLet $ExFm* $Hebrew_Letter {200}; # (13b) -$ExtendNumLet $ExFm* $Numeric {100}; # (13b) +$ExtendNumLetNNBSP $ExFm* $Numeric {100}; # (13b) $ExtendNumLet $ExFm* $Katakana {400}; # (13b) # rules 15 - 17 From 5173341825ffb3f97462d2485c909e8fd45f8daa Mon Sep 17 00:00:00 2001 From: Balazs Varga Date: Tue, 25 Jun 2024 09:49:00 +0200 Subject: [PATCH 094/194] tdf#159925 - A11Y sidebar: Check for missing hyperlink name Check if the hyperlink have missing name and add a fix button to fix the warning. Change-Id: I3a69490aa81cf0ed9d0edb04eaa3401e4b47eb7f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169508 Tested-by: Jenkins Tested-by: Gabor Kelemen Reviewed-by: Balazs Varga --- include/sfx2/AccessibilityIssue.hxx | 1 + sw/inc/AccessibilityCheckStrings.hrc | 2 ++ .../AccessibilityCheckTest.cxx | 6 ++-- sw/source/core/access/AccessibilityCheck.cxx | 26 +++++++++++++++ sw/source/core/access/AccessibilityIssue.cxx | 32 ++++++++++++++++++- sw/source/core/inc/AccessibilityIssue.hxx | 1 + .../uibase/sidebar/A11yCheckIssuesPanel.cxx | 1 + 7 files changed, 66 insertions(+), 3 deletions(-) diff --git a/include/sfx2/AccessibilityIssue.hxx b/include/sfx2/AccessibilityIssue.hxx index d6dd7eb3f4bf..1533159c42f8 100644 --- a/include/sfx2/AccessibilityIssue.hxx +++ b/include/sfx2/AccessibilityIssue.hxx @@ -37,6 +37,7 @@ enum class AccessibilityIssueID TABLE_FORMATTING, HYPERLINK_IS_TEXT, HYPERLINK_SHORT, + HYPERLINK_NO_NAME, FAKE_FOOTNOTE, FAKE_CAPTION, MANUAL_NUMBERING diff --git a/sw/inc/AccessibilityCheckStrings.hrc b/sw/inc/AccessibilityCheckStrings.hrc index 8073f9cc1c73..11a5b5299ab1 100644 --- a/sw/inc/AccessibilityCheckStrings.hrc +++ b/sw/inc/AccessibilityCheckStrings.hrc @@ -19,6 +19,7 @@ #define STR_FAKE_NUMBERING NC_("STR_FAKE_NUMBERING", "Simulated numbering “%NUMBERING%”.") #define STR_HYPERLINK_TEXT_IS_LINK NC_("STR_HYPERLINK_TEXT_IS_LINK", "Hyperlink text is the same as the link address “%LINK%”.") #define STR_HYPERLINK_TEXT_IS_SHORT NC_("STR_HYPERLINK_TEXT_IS_SHORT", "Hyperlink text is too short.") +#define STR_HYPERLINK_NO_NAME NC_("STR_HYPERLINK_NO_NAME", "Missing 'Name' property of hyperlink.") #define STR_TEXT_CONTRAST NC_("STR_TEXT_CONTRAST", "Text contrast is too low.") #define STR_TEXT_BLINKING NC_("STR_TEXT_BLINKING", "Blinking text.") #define STR_AVOID_FOOTNOTES NC_("STR_AVOID_FOOTNOTES", "Avoid footnotes.") @@ -45,6 +46,7 @@ #define STR_DOCUMENT_TITLE NC_("STR_DOCUMENT_TITLE", "Document title is not set.") #define STR_DOCUMENT_TITLE_DLG_TITLE NC_("STR_DOCUMENT_TITLE_DLG_TITLE", "Document title") #define STR_DOCUMENT_TITLE_DLG_DESC NC_("STR_DOCUMENT_TITLE_DLG_DESC", "Enter document title:") +#define STR_HYPERLINK_NO_NAME_DLG NC_("STR_HYPERLINK_NO_NAME_DLG", "Enter a name of the hyperlink:") #define STR_ENTER_ALT NC_("STR_ENTER_ALT", "Enter alternative text:") diff --git a/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx b/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx index d3355bcfdd43..302efe29a5a8 100644 --- a/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx +++ b/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx @@ -129,9 +129,11 @@ CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testHyperlinks) sw::AccessibilityCheck aCheck(pDoc); aCheck.check(); auto& aIssues = aCheck.getIssueCollection().getIssues(); - CPPUNIT_ASSERT_EQUAL(size_t(2), aIssues.size()); + CPPUNIT_ASSERT_EQUAL(size_t(4), aIssues.size()); CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::HYPERLINK_SHORT, aIssues[0]->m_eIssueID); - CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::HYPERLINK_IS_TEXT, aIssues[1]->m_eIssueID); + CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::HYPERLINK_NO_NAME, aIssues[1]->m_eIssueID); + CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::HYPERLINK_IS_TEXT, aIssues[2]->m_eIssueID); + CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::HYPERLINK_NO_NAME, aIssues[3]->m_eIssueID); } CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testCheckHighlightedText) diff --git a/sw/source/core/access/AccessibilityCheck.cxx b/sw/source/core/access/AccessibilityCheck.cxx index cd75edac31db..70e71f4aa090 100644 --- a/sw/source/core/access/AccessibilityCheck.cxx +++ b/sw/source/core/access/AccessibilityCheck.cxx @@ -406,6 +406,32 @@ private: pIssue->setStart(nStart); pIssue->setEnd(nStart + sText.getLength()); } + + if (aHyperlink.GetProtocol() != INetProtocol::NotValid) + { + // Check if the Hyperlink have Name settled. + if (!xProperties->getPropertySetInfo()->hasPropertyByName(u"HyperLinkName"_ustr)) + return; + + OUString sHyperlinkName; + xProperties->getPropertyValue(u"HyperLinkName"_ustr) >>= sHyperlinkName; + if (sHyperlinkName.isEmpty()) + { + std::shared_ptr pNameIssue + = lclAddIssue(m_rIssueCollection, SwResId(STR_HYPERLINK_NO_NAME), + sfx::AccessibilityIssueID::HYPERLINK_NO_NAME); + + if (pNameIssue) + { + pNameIssue->setIssueObject(IssueObject::HYPERLINKTEXT); + pNameIssue->setNode(pTextNode); + SwDoc& rDocument = pTextNode->GetDoc(); + pNameIssue->setDoc(rDocument); + pNameIssue->setStart(nStart); + pNameIssue->setEnd(nStart + sText.getLength()); + } + } + } } } diff --git a/sw/source/core/access/AccessibilityIssue.cxx b/sw/source/core/access/AccessibilityIssue.cxx index 7347559221a6..5c34449f6e40 100644 --- a/sw/source/core/access/AccessibilityIssue.cxx +++ b/sw/source/core/access/AccessibilityIssue.cxx @@ -29,6 +29,7 @@ #include #include +#include #include #include @@ -185,6 +186,7 @@ void AccessibilityIssue::gotoIssue() const } break; case IssueObject::TEXT: + case IssueObject::HYPERLINKTEXT: { SwContentNode* pContentNode = TempIssueObject.m_pNode->GetContentNode(); SwPosition aStart(*pContentNode, TempIssueObject.m_nStart); @@ -241,7 +243,8 @@ bool AccessibilityIssue::canQuickFixIssue() const || m_eIssueObject == IssueObject::SHAPE || m_eIssueObject == IssueObject::FORM || m_eIssueObject == IssueObject::DOCUMENT_TITLE || m_eIssueObject == IssueObject::DOCUMENT_BACKGROUND - || m_eIssueObject == IssueObject::LANGUAGE_NOT_SET; + || m_eIssueObject == IssueObject::LANGUAGE_NOT_SET + || m_eIssueObject == IssueObject::HYPERLINKTEXT; } void AccessibilityIssue::quickFixIssue() const @@ -323,6 +326,33 @@ void AccessibilityIssue::quickFixIssue() const } } break; + case IssueObject::HYPERLINKTEXT: + { + SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); + SwWrtShell* pWrtShell = m_pDoc->GetDocShell()->GetWrtShell(); + ScopedVclPtr aNameDialog(pFact->CreateSvxNameDialog( + pWrtShell->GetView().GetFrameWeld(), OUString(), SwResId(STR_HYPERLINK_NO_NAME_DLG), + SwResId(STR_HYPERLINK_NO_NAME_DLG))); + if (aNameDialog->Execute() == RET_OK) + { + SwContentNode* pContentNode = m_pNode->GetContentNode(); + SwPosition aStart(*pContentNode, m_nStart); + SwPosition aEnd(*pContentNode, m_nEnd); + uno::Reference xRun + = SwXTextRange::CreateXTextRange(*m_pDoc, aStart, &aEnd); + if (xRun.is()) + { + uno::Reference xProperties(xRun, uno::UNO_QUERY); + if (xProperties->getPropertySetInfo()->hasPropertyByName(u"HyperLinkName"_ustr)) + { + xProperties->setPropertyValue(u"HyperLinkName"_ustr, + uno::Any(aNameDialog->GetName())); + } + } + pWrtShell->SetModified(); + } + } + break; case IssueObject::DOCUMENT_TITLE: { SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); diff --git a/sw/source/core/inc/AccessibilityIssue.hxx b/sw/source/core/inc/AccessibilityIssue.hxx index 5fe9857b9941..e4c1b3206c76 100644 --- a/sw/source/core/inc/AccessibilityIssue.hxx +++ b/sw/source/core/inc/AccessibilityIssue.hxx @@ -26,6 +26,7 @@ enum class IssueObject FORM, TABLE, TEXT, + HYPERLINKTEXT, DOCUMENT_TITLE, DOCUMENT_BACKGROUND, LANGUAGE_NOT_SET, diff --git a/sw/source/uibase/sidebar/A11yCheckIssuesPanel.cxx b/sw/source/uibase/sidebar/A11yCheckIssuesPanel.cxx index a8de69432188..0dded3d952b4 100644 --- a/sw/source/uibase/sidebar/A11yCheckIssuesPanel.cxx +++ b/sw/source/uibase/sidebar/A11yCheckIssuesPanel.cxx @@ -295,6 +295,7 @@ void A11yCheckIssuesPanel::populateIssues() break; case sfx::AccessibilityIssueID::HYPERLINK_IS_TEXT: case sfx::AccessibilityIssueID::HYPERLINK_SHORT: + case sfx::AccessibilityIssueID::HYPERLINK_NO_NAME: { addEntryForGroup(AccessibilityCheckGroups::Hyperlink, nIndices, pIssue); } From 189aed797b52284aad5777788218742f65e64ee3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Toma=C5=BE=20Vajngerl?= Date: Thu, 27 Jun 2024 21:06:28 +0900 Subject: [PATCH 095/194] use ESelection::NoSelection() instead of manually setting values MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I65f378d0178c0fcd209dc629f49befacfce02de2 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169640 Tested-by: Jenkins Reviewed-by: Tomaž Vajngerl --- sd/source/ui/annotations/annotationwindow.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sd/source/ui/annotations/annotationwindow.cxx b/sd/source/ui/annotations/annotationwindow.cxx index 1430e2875e28..14952248f5e6 100644 --- a/sd/source/ui/annotations/annotationwindow.cxx +++ b/sd/source/ui/annotations/annotationwindow.cxx @@ -351,7 +351,7 @@ void AnnotationWindow::FillMenuButton() void AnnotationWindow::StartEdit() { - GetOutlinerView()->SetSelection(ESelection(EE_PARA_MAX_COUNT,EE_TEXTPOS_MAX_COUNT,EE_PARA_MAX_COUNT,EE_TEXTPOS_MAX_COUNT)); + GetOutlinerView()->SetSelection(ESelection::NoSelection()); GetOutlinerView()->ShowCursor(); } From 16d8f37cae3e6b68e4c41fbbacd94f48c3e304ab Mon Sep 17 00:00:00 2001 From: Balazs Varga Date: Wed, 26 Jun 2024 10:46:23 +0200 Subject: [PATCH 096/194] tdf#159777 - A11Y sidebar: Add warning about ParaTopMargin and ParaBottomMargin direct formats. Change-Id: Ifac19eba9d3c2e3631ebede1a5f9f172bbaf8927 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169541 Reviewed-by: Balazs Varga Tested-by: Jenkins Tested-by: Gabor Kelemen --- .../AccessibilityCheckTest.cxx | 34 +++++++++++++------ sw/source/core/access/AccessibilityCheck.cxx | 20 +++++++++++ 2 files changed, 44 insertions(+), 10 deletions(-) diff --git a/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx b/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx index 302efe29a5a8..77330b9a8157 100644 --- a/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx +++ b/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx @@ -104,9 +104,11 @@ CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testCheckNewlineSpace) sw::AccessibilityCheck aCheck(pDoc); aCheck.check(); auto& aIssues = aCheck.getIssueCollection().getIssues(); - CPPUNIT_ASSERT_EQUAL(size_t(2), aIssues.size()); - CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TEXT_FORMATTING, aIssues[0]->m_eIssueID); + CPPUNIT_ASSERT_EQUAL(size_t(4), aIssues.size()); + CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::DIRECT_FORMATTING, aIssues[0]->m_eIssueID); CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TEXT_FORMATTING, aIssues[1]->m_eIssueID); + CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::DIRECT_FORMATTING, aIssues[2]->m_eIssueID); + CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TEXT_FORMATTING, aIssues[3]->m_eIssueID); } CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testCheckSpacebarSpace) @@ -117,8 +119,10 @@ CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testCheckSpacebarSpace) sw::AccessibilityCheck aCheck(pDoc); aCheck.check(); auto& aIssues = aCheck.getIssueCollection().getIssues(); - CPPUNIT_ASSERT_EQUAL(size_t(1), aIssues.size()); - CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TEXT_FORMATTING, aIssues[0]->m_eIssueID); + CPPUNIT_ASSERT_EQUAL(size_t(3), aIssues.size()); + CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::DIRECT_FORMATTING, aIssues[0]->m_eIssueID); + CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TEXT_FORMATTING, aIssues[1]->m_eIssueID); + CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::DIRECT_FORMATTING, aIssues[2]->m_eIssueID); } CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testHyperlinks) @@ -144,8 +148,10 @@ CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testCheckHighlightedText) sw::AccessibilityCheck aCheck(pDoc); aCheck.check(); auto& aIssues = aCheck.getIssueCollection().getIssues(); - CPPUNIT_ASSERT_EQUAL(size_t(1), aIssues.size()); + CPPUNIT_ASSERT_EQUAL(size_t(3), aIssues.size()); CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::DIRECT_FORMATTING, aIssues[0]->m_eIssueID); + CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::DIRECT_FORMATTING, aIssues[1]->m_eIssueID); + CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::DIRECT_FORMATTING, aIssues[2]->m_eIssueID); } CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testNumberingCheck) @@ -172,9 +178,13 @@ CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testCheckFakeFootnote) sw::AccessibilityCheck aCheck(pDoc); aCheck.check(); auto& aIssues = aCheck.getIssueCollection().getIssues(); - CPPUNIT_ASSERT_EQUAL(size_t(2), aIssues.size()); - CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::FAKE_FOOTNOTE, aIssues[0]->m_eIssueID); + CPPUNIT_ASSERT_EQUAL(size_t(6), aIssues.size()); + CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::DIRECT_FORMATTING, aIssues[0]->m_eIssueID); CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::FAKE_FOOTNOTE, aIssues[1]->m_eIssueID); + CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::DIRECT_FORMATTING, aIssues[2]->m_eIssueID); + CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::FAKE_FOOTNOTE, aIssues[3]->m_eIssueID); + CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::DIRECT_FORMATTING, aIssues[4]->m_eIssueID); + CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::DIRECT_FORMATTING, aIssues[5]->m_eIssueID); } CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testCheckFakeCaption) @@ -209,11 +219,15 @@ CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testCheckTabsFormatting) sw::AccessibilityCheck aCheck(pDoc); aCheck.check(); auto& aIssues = aCheck.getIssueCollection().getIssues(); - CPPUNIT_ASSERT_EQUAL(size_t(4), aIssues.size()); + CPPUNIT_ASSERT_EQUAL(size_t(8), aIssues.size()); CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TEXT_FORMATTING, aIssues[0]->m_eIssueID); - CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TEXT_FORMATTING, aIssues[1]->m_eIssueID); + CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::DIRECT_FORMATTING, aIssues[1]->m_eIssueID); CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TEXT_FORMATTING, aIssues[2]->m_eIssueID); - CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TEXT_FORMATTING, aIssues[3]->m_eIssueID); + CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::DIRECT_FORMATTING, aIssues[3]->m_eIssueID); + CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TEXT_FORMATTING, aIssues[4]->m_eIssueID); + CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::DIRECT_FORMATTING, aIssues[5]->m_eIssueID); + CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TEXT_FORMATTING, aIssues[6]->m_eIssueID); + CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::DIRECT_FORMATTING, aIssues[7]->m_eIssueID); } //tdf#156550 - Accessibility sidebar complains about TOC hyperlinks diff --git a/sw/source/core/access/AccessibilityCheck.cxx b/sw/source/core/access/AccessibilityCheck.cxx index 70e71f4aa090..723d20566f24 100644 --- a/sw/source/core/access/AccessibilityCheck.cxx +++ b/sw/source/core/access/AccessibilityCheck.cxx @@ -28,6 +28,7 @@ #include #include #include +#include #include #include #include @@ -806,6 +807,25 @@ public: pIssue->setEnd(nParagraphLength); } } + + // paragraph direct formats (TODO: add more paragraph direct format) + sal_Int32 nParagraphLength = pTextNode->GetText().getLength(); + if (nParagraphLength != 0 && pTextNode->HasSwAttrSet()) + { + const SvxULSpaceItem& rULSpace = pTextNode->SwContentNode::GetAttr(RES_UL_SPACE, false); + bool bULSpace = rULSpace.GetLower() > 0 || rULSpace.GetUpper() > 0; + if (bULSpace) + { + auto pIssue + = lclAddIssue(m_rIssueCollection, SwResId(STR_TEXT_FORMATTING_CONVEYS_MEANING), + sfx::AccessibilityIssueID::DIRECT_FORMATTING); + pIssue->setIssueObject(IssueObject::TEXT); + pIssue->setNode(pTextNode); + SwDoc& rDocument = pTextNode->GetDoc(); + pIssue->setDoc(rDocument); + pIssue->setEnd(nParagraphLength); + } + } } }; From e3d865274ba8628b29872bb533fcf257279c6fb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Toma=C5=BE=20Vajngerl?= Date: Thu, 27 Jun 2024 21:01:26 +0900 Subject: [PATCH 097/194] annot: rename testAnnotationUpdate and add comments MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit testAnnotationUpdate is not specific, so rename the test name to testAnnotationPositionUpdate. Change-Id: I1608025143455ad789cf2cce84b80e8b8b6b2e34 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169641 Reviewed-by: Tomaž Vajngerl Tested-by: Jenkins --- sd/qa/unit/AnnotationTest.cxx | 36 +++++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/sd/qa/unit/AnnotationTest.cxx b/sd/qa/unit/AnnotationTest.cxx index 0f9e1c81ad0f..a1b73be924ba 100644 --- a/sd/qa/unit/AnnotationTest.cxx +++ b/sd/qa/unit/AnnotationTest.cxx @@ -194,52 +194,68 @@ CPPUNIT_TEST_FIXTURE(AnnotationTest, testAnnotationInsertUndoRedo) CPPUNIT_ASSERT_EQUAL(sal_uInt32(nID + 1), pPage->getAnnotations().at(1)->GetId()); } -CPPUNIT_TEST_FIXTURE(AnnotationTest, testAnnotationUpdate) +CPPUNIT_TEST_FIXTURE(AnnotationTest, testAnnotationPositionUpdate) { createSdDrawDoc(); auto pXImpressDocument = dynamic_cast(mxComponent.get()); sd::ViewShell* pViewShell = pXImpressDocument->GetDocShell()->GetViewShell(); + // Check current page SdPage* pPage = pViewShell->GetActualPage(); + + // Should have no objects yet CPPUNIT_ASSERT_EQUAL(size_t(0), pPage->GetObjCount()); + // Insert new annotation uno::Sequence aArgs; - aArgs = comphelper::InitPropertySequence({ { "Text", uno::Any(u"Comment"_ustr) }, }); dispatchCommand(mxComponent, u".uno:InsertAnnotation"_ustr, aArgs); + // 1 object in the page now CPPUNIT_ASSERT_EQUAL(size_t(1), pPage->GetObjCount()); + // .. and is an annotation object SdrObject* pObject = pPage->GetObj(0); CPPUNIT_ASSERT_EQUAL(SdrObjKind::Annotation, pObject->GetObjIdentifier()); - auto& pAnnotationData = pObject->getAnnotationData(); CPPUNIT_ASSERT(pAnnotationData); + + // Remember the annotation ID sal_Int32 nID = pAnnotationData->mxAnnotation->GetId(); + // Current annotation position CPPUNIT_ASSERT_EQUAL(tools::Long(0), pObject->GetLogicRect().Left()); CPPUNIT_ASSERT_EQUAL(tools::Long(0), pObject->GetLogicRect().Top()); + // Move the object pObject->Move({ 200, 200 }); - CPPUNIT_ASSERT_EQUAL(tools::Long(200), pObject->GetLogicRect().Left()); + // Object at a new postion + CPPUNIT_ASSERT_EQUAL(tools::Long(200), + pObject->GetLogicRect().Left()); // in 100th of an mm (hmm) CPPUNIT_ASSERT_EQUAL(tools::Long(200), pObject->GetLogicRect().Top()); - CPPUNIT_ASSERT_DOUBLES_EQUAL(2.0, pAnnotationData->mxAnnotation->getPosition().X, 1E-4); + // Position of the annotation whould be the same as the object (2.0 mm equals 200 hmm) + CPPUNIT_ASSERT_DOUBLES_EQUAL(2.0, pAnnotationData->mxAnnotation->getPosition().X, 1E-4); // mm CPPUNIT_ASSERT_DOUBLES_EQUAL(2.0, pAnnotationData->mxAnnotation->getPosition().Y, 1E-4); - aArgs = comphelper::InitPropertySequence({ { "Id", uno::Any(OUString::number(nID)) }, - { "PositionX", uno::Any(sal_Int32(1440)) }, - { "PositionY", uno::Any(sal_Int32(14400)) } }); + // Change the annotation position + aArgs = comphelper::InitPropertySequence( + { { "Id", uno::Any(OUString::number(nID)) }, + { "PositionX", uno::Any(sal_Int32(1440)) }, // 1440 twips = 2540 hmm + { "PositionY", uno::Any(sal_Int32(14400)) } }); dispatchCommand(mxComponent, u".uno:EditAnnotation"_ustr, aArgs); - CPPUNIT_ASSERT_DOUBLES_EQUAL(25.4, pAnnotationData->mxAnnotation->getPosition().X, 1E-4); + // Position of the annotation changed again + CPPUNIT_ASSERT_DOUBLES_EQUAL(25.4, pAnnotationData->mxAnnotation->getPosition().X, + 1E-4); // in mm CPPUNIT_ASSERT_DOUBLES_EQUAL(254.0, pAnnotationData->mxAnnotation->getPosition().Y, 1E-4); - CPPUNIT_ASSERT_EQUAL(tools::Long(2540), pObject->GetLogicRect().Left()); + // Position of the annotation object changed also to the same value + CPPUNIT_ASSERT_EQUAL(tools::Long(2540), pObject->GetLogicRect().Left()); // in hmm CPPUNIT_ASSERT_EQUAL(tools::Long(25400), pObject->GetLogicRect().Top()); } From f5f5ff719f30fccd207e36627f2e42b34d0a6fb1 Mon Sep 17 00:00:00 2001 From: Balazs Varga Date: Wed, 26 Jun 2024 19:12:07 +0200 Subject: [PATCH 098/194] Related: tdf#127293 Ignore 'search-criteria-must-apply-to-whole-cell' dependency for XLOOKUP and XMATCH because of better compatibility. The idea is to specify, that the global setting 'search-criteria-must-apply-to-whole-cell' is ignored and XMATCH and XLOOKUP always behaves as if 'search-criteria-must-apply-to-whole-cell'=true. That would affect exact search in Match_mode value 0. Users would need to use wildcard or regex to get a match to part of the content. But removing dependency to the global setting increases interoperability with MS Excel. Also the ODF TC will follow that in the final specification of these functions: https://issues.oasis-open.org/browse/OFFICE-4154 Follow-up commit: 17d578ba91f9c78a0e41d19b58183d2214c0b7a4 (Related: tdf#127293 Add new Match_mode option for XLOOKUP and XMATCH functions.) Change-Id: I1317865631d2925eaff72e9c1425d93386c3d016 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169582 Reviewed-by: Balazs Varga Reviewed-by: Regina Henschel Tested-by: Jenkins --- sc/inc/document.hxx | 3 +- sc/inc/queryevaluator.hxx | 3 +- sc/inc/queryiter.hxx | 2 +- sc/inc/rangecache.hxx | 2 +- .../functions/spreadsheet/fods/xlookup.fods | 379 ++++++++++-------- .../functions/spreadsheet/fods/xmatch.fods | 38 +- sc/source/core/data/documen2.cxx | 5 +- sc/source/core/data/queryevaluator.cxx | 4 +- sc/source/core/data/queryiter.cxx | 20 +- sc/source/core/tool/rangecache.cxx | 10 +- 10 files changed, 269 insertions(+), 197 deletions(-) diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx index d0e825721740..2f67225bf8ec 100644 --- a/sc/inc/document.hxx +++ b/sc/inc/document.hxx @@ -1425,7 +1425,8 @@ public: doesn't already exist. */ ScLookupCache & GetLookupCache( const ScRange & rRange, ScInterpreterContext* pContext ); ScSortedRangeCache & GetSortedRangeCache( const ScRange & rRange, const ScQueryParam& param, - ScInterpreterContext* pContext, sal_uInt8 nSortedBinarySearch = 0x00 ); + ScInterpreterContext* pContext, bool bNewSearchFunction, + sal_uInt8 nSortedBinarySearch = 0x00 ); /** Only ScLookupCache dtor uses RemoveLookupCache(), do not use elsewhere! */ void RemoveLookupCache( ScLookupCache & rCache ); diff --git a/sc/inc/queryevaluator.hxx b/sc/inc/queryevaluator.hxx index 351531b9731c..6d3012141db8 100644 --- a/sc/inc/queryevaluator.hxx +++ b/sc/inc/queryevaluator.hxx @@ -108,7 +108,8 @@ class ScQueryEvaluator public: ScQueryEvaluator(ScDocument& rDoc, const ScTable& rTab, const ScQueryParam& rParam, - ScInterpreterContext* pContext = nullptr, bool* pTestEqualCondition = nullptr); + ScInterpreterContext* pContext = nullptr, bool* pTestEqualCondition = nullptr, + bool bNewSearchFunction = false); bool ValidQuery(SCROW nRow, const ScRefCellValue* pCell = nullptr, sc::TableColumnBlockPositionSet* pBlockPos = nullptr); diff --git a/sc/inc/queryiter.hxx b/sc/inc/queryiter.hxx index 9d0ab1cc6aea..67f0e16fc0b5 100644 --- a/sc/inc/queryiter.hxx +++ b/sc/inc/queryiter.hxx @@ -103,7 +103,7 @@ public: protected: ScQueryCellIteratorAccessSpecific( ScDocument& rDocument, ScInterpreterContext& rContext, const ScQueryParam& rParam, bool bReverseSearch ); - void InitPosStart(sal_uInt8 nSortedBinarySearch = 0x00); + void InitPosStart(bool bNewSearchFunction, sal_uInt8 nSortedBinarySearch = 0x00); void InitPosFinish( SCROW beforeRow, SCROW lastRow, bool bFirstMatch ); void InitPosColFinish( SCCOL beforeCol, SCCOL lastCol, bool bFirstMatch ); void IncPos() { IncPosImpl(); } diff --git a/sc/inc/rangecache.hxx b/sc/inc/rangecache.hxx index 5a9553e764ff..4f0e810db0a8 100644 --- a/sc/inc/rangecache.hxx +++ b/sc/inc/rangecache.hxx @@ -47,7 +47,7 @@ public: /// MUST be new'd because Notify() deletes. ScSortedRangeCache(ScDocument* pDoc, const ScRange& rRange, const ScQueryParam& param, ScInterpreterContext* context, bool invalid = false, - sal_uInt8 nSortedBinarySearch = 0x00); + bool bNewSearchFunction = false, sal_uInt8 nSortedBinarySearch = 0x00); /// Returns if the cache is usable. bool isValid() const { return mValid; } diff --git a/sc/qa/unit/data/functions/spreadsheet/fods/xlookup.fods b/sc/qa/unit/data/functions/spreadsheet/fods/xlookup.fods index 633153fd5b40..593054bf4682 100644 --- a/sc/qa/unit/data/functions/spreadsheet/fods/xlookup.fods +++ b/sc/qa/unit/data/functions/spreadsheet/fods/xlookup.fods @@ -1,13 +1,13 @@ - 2024-01-16T18:30:06.278000000PT1H51M31S33LibreOfficeDev/24.8.0.0.alpha1$Windows_X86_64 LibreOffice_project/d3ae30f41573c7cb5b4cd6244c1ccd8010f966d72024-06-03T13:56:08.658000000 + 2024-01-16T18:30:06.278000000PT1H56M5S34LibreOfficeDev/25.2.0.0.alpha0$Windows_X86_64 LibreOffice_project/449050477173ff56b3f3d94406913b261f541b0f2024-06-26T18:39:33.496000000 0 0 - 60486 - 61863 + 15882 + 5013 view1 @@ -30,13 +30,13 @@ false - 4 - 85 + 2 + 32 2 0 0 0 - 30 + 99 0 100 60 @@ -48,7 +48,7 @@ Sheet1 - 2495 + 1539 0 100 60 @@ -2001,7 +2001,7 @@ - + @@ -2036,10 +2036,6 @@ - - - - @@ -2057,11 +2053,6 @@ - - - - - @@ -2079,8 +2070,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -2141,7 +2184,7 @@ ???(???) - 0000.00.00, 00:00:00 + 0000.00.00, 00:00:00 @@ -2155,13 +2198,13 @@ - + - + - + XLOOKUP Function @@ -2173,10 +2216,10 @@ - + Result - + IGAZ @@ -2185,13 +2228,13 @@ - + Sheet - + Result - + Description @@ -2199,16 +2242,16 @@ 2 - + IGAZ - + Simple XLOOKUP formulas with local references and values - + @@ -2299,7 +2342,7 @@ +55 - + IGAZ @@ -2342,7 +2385,7 @@ +91 - + IGAZ @@ -2382,7 +2425,7 @@ +91 - + IGAZ @@ -2425,7 +2468,7 @@ #N/A - + IGAZ @@ -2468,7 +2511,7 @@ - + IGAZ @@ -2508,7 +2551,7 @@ -99 - + IGAZ @@ -2545,7 +2588,7 @@ Not here - + IGAZ @@ -2588,7 +2631,7 @@ #N/A - + IGAZ @@ -2631,7 +2674,7 @@ 00234 - + IGAZ @@ -2671,7 +2714,7 @@ +234 - + IGAZ @@ -2706,7 +2749,7 @@ - + Mexico @@ -2727,7 +2770,7 @@ - + @@ -2737,7 +2780,7 @@ Ned Lanning - + IGAZ @@ -2789,7 +2832,7 @@ Marketing - + IGAZ @@ -2838,7 +2881,7 @@ Mia Arnold - + IGAZ @@ -2887,7 +2930,7 @@ Operations - + IGAZ @@ -2902,7 +2945,7 @@ ID not found - + IGAZ @@ -2921,7 +2964,7 @@ ID not found - + IGAZ @@ -2936,7 +2979,7 @@ #N/A - + IGAZ @@ -2951,7 +2994,7 @@ #N/A - + IGAZ @@ -2966,7 +3009,7 @@ Earlene McCartney - + IGAZ @@ -2998,7 +3041,7 @@ Accounting - + IGAZ @@ -3030,7 +3073,7 @@ Earlene McCartney - + IGAZ @@ -3059,7 +3102,7 @@ Accounting - + IGAZ @@ -3092,7 +3135,7 @@ Earlene McCartney - + IGAZ @@ -3125,7 +3168,7 @@ Accounting - + IGAZ @@ -3135,7 +3178,7 @@ - + @@ -3145,7 +3188,7 @@ 0,24 - + IGAZ @@ -3170,7 +3213,7 @@ 0,24 - + IGAZ @@ -3192,7 +3235,7 @@ 0,22 - + IGAZ @@ -3214,10 +3257,10 @@ #VALUE! - - #N/A + + 519 - + IGAZ @@ -3234,7 +3277,7 @@ - + 0,32 @@ -3246,7 +3289,7 @@ - + 0,35 @@ -3258,7 +3301,7 @@ - + 0,37 @@ -3270,7 +3313,7 @@ - + @@ -3280,7 +3323,7 @@ 25000 - + IGAZ @@ -3331,7 +3374,7 @@ 19342 - + IGAZ @@ -3379,7 +3422,7 @@ 0,293 - + IGAZ @@ -3422,7 +3465,7 @@ - + Q3 @@ -3465,7 +3508,7 @@ Mia Arnold - + IGAZ @@ -3513,7 +3556,7 @@ Operations - + IGAZ @@ -3556,7 +3599,7 @@ - + @@ -3566,7 +3609,7 @@ 110,56 - + IGAZ @@ -3593,7 +3636,7 @@ - + Banana @@ -3614,7 +3657,7 @@ - + Grape @@ -3632,7 +3675,7 @@ - + Pear @@ -3650,7 +3693,7 @@ - + Banana @@ -3668,7 +3711,7 @@ - + Cherry @@ -3686,7 +3729,7 @@ - + @@ -3696,7 +3739,7 @@ err:504 - + IGAZ @@ -3729,7 +3772,7 @@ err:504 - + IGAZ @@ -3762,7 +3805,7 @@ err:504 - + IGAZ @@ -3795,7 +3838,7 @@ err:504 - + IGAZ @@ -3814,7 +3857,7 @@ err:504 - + IGAZ @@ -3828,7 +3871,7 @@ - + @@ -3838,7 +3881,7 @@ b3 - + IGAZ @@ -3876,7 +3919,7 @@ b3 - + IGAZ @@ -3914,7 +3957,7 @@ a5 - + IGAZ @@ -3952,7 +3995,7 @@ b3 - + IGAZ @@ -3986,7 +4029,7 @@ b3 - + IGAZ @@ -4024,7 +4067,7 @@ b3 - + IGAZ @@ -4043,7 +4086,7 @@ a5 - + IGAZ @@ -4062,7 +4105,7 @@ b3 - + IGAZ @@ -4077,7 +4120,7 @@ c3 - + IGAZ @@ -4096,7 +4139,7 @@ c3 - + IGAZ @@ -4115,7 +4158,7 @@ D5.2 - + IGAZ @@ -4134,7 +4177,7 @@ 519 - + IGAZ @@ -4152,7 +4195,7 @@ c3 - + IGAZ @@ -4171,7 +4214,7 @@ c3 - + IGAZ @@ -4190,7 +4233,7 @@ b5 - + IGAZ @@ -4209,7 +4252,7 @@ 519 - + IGAZ @@ -4227,7 +4270,7 @@ b3 - + IGAZ @@ -4262,7 +4305,7 @@ b3 - + IGAZ @@ -4297,7 +4340,7 @@ a5 - + IGAZ @@ -4316,7 +4359,7 @@ b3 - + IGAZ @@ -4330,7 +4373,7 @@ - + @@ -4340,7 +4383,7 @@ bC - + IGAZ @@ -4378,7 +4421,7 @@ bC - + IGAZ @@ -4416,7 +4459,7 @@ aE - + IGAZ @@ -4454,7 +4497,7 @@ eB - + IGAZ @@ -4488,7 +4531,7 @@ bC - + IGAZ @@ -4526,7 +4569,7 @@ bC - + IGAZ @@ -4549,7 +4592,7 @@ aE - + IGAZ @@ -4572,7 +4615,7 @@ bC - + IGAZ @@ -4591,7 +4634,7 @@ cC - + IGAZ @@ -4614,7 +4657,7 @@ cC - + IGAZ @@ -4637,7 +4680,7 @@ eE - + IGAZ @@ -4651,7 +4694,7 @@ - + @@ -4661,7 +4704,7 @@ cC - + IGAZ @@ -4680,7 +4723,7 @@ cC - + IGAZ @@ -4699,7 +4742,7 @@ eE - + IGAZ @@ -4713,7 +4756,7 @@ - + @@ -4723,7 +4766,7 @@ bC - + IGAZ @@ -4758,7 +4801,7 @@ bC - + IGAZ @@ -4793,7 +4836,7 @@ aE - + IGAZ @@ -4812,7 +4855,7 @@ #N/A - + IGAZ @@ -4822,7 +4865,7 @@ - + LookCol @@ -4864,7 +4907,7 @@ bC - + IGAZ @@ -4909,7 +4952,7 @@ bC - + IGAZ @@ -4935,7 +4978,7 @@ aE - + IGAZ @@ -4961,7 +5004,7 @@ #N/A - + IGAZ @@ -4983,7 +5026,7 @@ g - + IGAZ @@ -5005,7 +5048,7 @@ a - + IGAZ @@ -5027,7 +5070,7 @@ BR - + IGAZ @@ -5049,7 +5092,7 @@ BR - + IGAZ @@ -5071,7 +5114,7 @@ ID - + IGAZ @@ -5093,7 +5136,7 @@ PK - + IGAZ @@ -5115,7 +5158,7 @@ PK - + IGAZ @@ -5130,7 +5173,7 @@ #N/A - + IGAZ @@ -5140,7 +5183,7 @@ - + @@ -5150,7 +5193,7 @@ #N/A - + IGAZ @@ -5165,7 +5208,7 @@ c - + IGAZ @@ -5180,7 +5223,7 @@ d - + IGAZ @@ -5195,7 +5238,7 @@ c - + IGAZ @@ -5210,7 +5253,7 @@ c - + IGAZ @@ -5225,7 +5268,7 @@ c - + IGAZ @@ -5235,7 +5278,7 @@ - + @@ -5245,7 +5288,7 @@ #N/A - + IGAZ @@ -5260,7 +5303,7 @@ h - + IGAZ @@ -5282,7 +5325,7 @@ g - + IGAZ @@ -5304,7 +5347,7 @@ h - + IGAZ @@ -5326,7 +5369,7 @@ h - + IGAZ @@ -5348,7 +5391,7 @@ h - + IGAZ @@ -5365,7 +5408,7 @@ - + Klein @@ -5382,7 +5425,7 @@ 16 - + IGAZ @@ -5404,7 +5447,7 @@ 86 - + IGAZ @@ -5421,7 +5464,7 @@ - + @@ -5431,7 +5474,7 @@ Susanne - + IGAZ @@ -5441,7 +5484,7 @@ - + Country Asc1 @@ -5471,7 +5514,7 @@ - + Country Asc2 @@ -5509,7 +5552,7 @@ c - + IGAZ @@ -5535,7 +5578,7 @@ - + Country Desc2 @@ -5568,7 +5611,7 @@ - + Prefix @@ -5607,12 +5650,12 @@ - + - + 2 @@ -5621,7 +5664,7 @@ - + diff --git a/sc/qa/unit/data/functions/spreadsheet/fods/xmatch.fods b/sc/qa/unit/data/functions/spreadsheet/fods/xmatch.fods index 1bcb37925d14..7ba23d505bb3 100644 --- a/sc/qa/unit/data/functions/spreadsheet/fods/xmatch.fods +++ b/sc/qa/unit/data/functions/spreadsheet/fods/xmatch.fods @@ -1,7 +1,7 @@ - 2024-01-16T18:30:06.278000000PT2H45M21S49LibreOfficeDev/24.8.0.0.alpha0$Windows_X86_64 LibreOffice_project/8c4fe90c53a6a889e5d327b1d0fff5a74ce284cb2024-05-13T14:33:55.183000000 + 2024-01-16T18:30:06.278000000PT2H53M47S51LibreOfficeDev/25.2.0.0.alpha0$Windows_X86_64 LibreOffice_project/449050477173ff56b3f3d94406913b261f541b0f2024-06-26T18:59:52.334000000 0 @@ -31,7 +31,7 @@ 0 - 32 + 34 2 0 0 @@ -48,7 +48,7 @@ Sheet1 - 2479 + 1539 0 100 60 @@ -3098,7 +3098,7 @@ ???(???) - 0000.00.00, 00:00:00 + 0000.00.00, 00:00:00 @@ -3112,7 +3112,7 @@ - + @@ -4091,18 +4091,38 @@ + + #N/A + + + #N/A + + + IGAZ + + + =XMATCH("Micha*";F$13:F$19) + - - 8 + + #N/A + + + #N/A + + + IGAZ + + + =XMATCH("chael";F$13:F$19;2;1) + - - 9 diff --git a/sc/source/core/data/documen2.cxx b/sc/source/core/data/documen2.cxx index ca7fbcc938c4..49cdd8d8fb81 100644 --- a/sc/source/core/data/documen2.cxx +++ b/sc/source/core/data/documen2.cxx @@ -1254,7 +1254,8 @@ ScLookupCache & ScDocument::GetLookupCache( const ScRange & rRange, ScInterprete } ScSortedRangeCache& ScDocument::GetSortedRangeCache( const ScRange & rRange, const ScQueryParam& param, - ScInterpreterContext* pContext, sal_uInt8 nSortedBinarySearch ) + ScInterpreterContext* pContext, bool bNewSearchFunction, + sal_uInt8 nSortedBinarySearch ) { assert(mxScSortedRangeCache); ScSortedRangeCache::HashKey key = ScSortedRangeCache::makeHashKey(rRange, param); @@ -1281,7 +1282,7 @@ ScSortedRangeCache& ScDocument::GetSortedRangeCache( const ScRange & rRange, con auto [findIt, bInserted] = mxScSortedRangeCache->aCacheMap.emplace(key, nullptr); if (bInserted) { - findIt->second = std::make_unique(this, rRange, param, pContext, invalid, nSortedBinarySearch); + findIt->second = std::make_unique(this, rRange, param, pContext, invalid, bNewSearchFunction, nSortedBinarySearch); StartListeningArea(rRange, false, findIt->second.get()); } return *findIt->second; diff --git a/sc/source/core/data/queryevaluator.cxx b/sc/source/core/data/queryevaluator.cxx index b21c75801a6f..060716e08d92 100644 --- a/sc/source/core/data/queryevaluator.cxx +++ b/sc/source/core/data/queryevaluator.cxx @@ -98,7 +98,7 @@ void ScQueryEvaluator::setupCollatorIfNeeded() ScQueryEvaluator::ScQueryEvaluator(ScDocument& rDoc, const ScTable& rTab, const ScQueryParam& rParam, ScInterpreterContext* pContext, - bool* pTestEqualCondition) + bool* pTestEqualCondition, bool bNewSearchFunction) : mrDoc(rDoc) , mrStrPool(rDoc.GetSharedStringPool()) , mrTab(rTab) @@ -106,7 +106,7 @@ ScQueryEvaluator::ScQueryEvaluator(ScDocument& rDoc, const ScTable& rTab, , mpTestEqualCondition(pTestEqualCondition) , mpTransliteration(nullptr) , mpCollator(nullptr) - , mbMatchWholeCell(rDoc.GetDocOptions().IsMatchWholeCell()) + , mbMatchWholeCell(!bNewSearchFunction ? rDoc.GetDocOptions().IsMatchWholeCell() : true) , mbCaseSensitive(rParam.bCaseSens) , mpContext(pContext) , mnEntryCount(mrParam.GetEntryCount()) diff --git a/sc/source/core/data/queryiter.cxx b/sc/source/core/data/queryiter.cxx index 1cccedd59dc5..8141b90cc95e 100644 --- a/sc/source/core/data/queryiter.cxx +++ b/sc/source/core/data/queryiter.cxx @@ -91,8 +91,9 @@ void ScQueryCellIteratorBase< accessType, queryType >::PerformQuery() ((maParam.bByRow && nRow == maParam.nRow1) || (!maParam.bByRow && nCol == maParam.nCol1)); bool bTestEqualCondition = false; + const bool bNewSearchFunction = nSearchOpCode == SC_OPCODE_X_LOOKUP || nSearchOpCode == SC_OPCODE_X_MATCH; ScQueryEvaluator queryEvaluator(rDoc, *rDoc.maTabs[nTab], maParam, &mrContext, - (nTestEqualCondition ? &bTestEqualCondition : nullptr)); + (nTestEqualCondition ? &bTestEqualCondition : nullptr), bNewSearchFunction); if( queryType == ScQueryCellIteratorType::CountIf ) { // These are not used for COUNTIF, so should not be set, make the compiler @@ -193,7 +194,7 @@ void ScQueryCellIteratorBase< accessType, queryType >::PerformQuery() return; // XLookUp/XMatch: Forward/asc/backward/desc search for best fit value, except if we have an exact match - if ((nSearchOpCode == SC_OPCODE_X_LOOKUP || nSearchOpCode == SC_OPCODE_X_MATCH) && + if (bNewSearchFunction && (rEntry.eOp == SC_LESS_EQUAL || rEntry.eOp == SC_GREATER_EQUAL) && (nBestFitCol != nCol || nBestFitRow != nRow)) { @@ -221,7 +222,7 @@ void ScQueryCellIteratorBase< accessType, queryType >::PerformQuery() else if (bStringSearch) rItemTmp.maString = svl::SharedString(aBFCell.getString(&rDoc)); - ScQueryEvaluator queryEvaluatorTmp(rDoc, *rDoc.maTabs[nTab], aParamTmp, &mrContext, nullptr); + ScQueryEvaluator queryEvaluatorTmp(rDoc, *rDoc.maTabs[nTab], aParamTmp, &mrContext, nullptr, bNewSearchFunction); if (queryEvaluatorTmp.ValidQuery(nRow, (nCol == static_cast(nFirstQueryField) ? &aCell : nullptr))) HandleBestFitItemFound(nCol, nRow); else @@ -288,7 +289,8 @@ void ScQueryCellIteratorBase< accessType, queryType >::InitPos() { // This should be all in AccessBase::InitPos(), but that one can't call // BinarySearch(), so do it this way instead. - AccessBase::InitPosStart(nSortedBinarySearch); + bool bNewSearchFunction = nSearchOpCode == SC_OPCODE_X_LOOKUP || nSearchOpCode == SC_OPCODE_X_MATCH; + AccessBase::InitPosStart(bNewSearchFunction, nSortedBinarySearch); ScQueryOp& op = maParam.GetEntry(0).eOp; SCCOLROW beforeColRow = -1; SCCOLROW lastColRow = -1; @@ -1362,11 +1364,11 @@ void ScQueryCellIteratorAccessSpecific< ScQueryCellIteratorAccess::SortedCache > // over indexes of the sorted cache (which is a stable sort of the cell contents) in the range // that fits the query condition and then that is mapped to rows. This will result in iterating // over only matching rows in their sorted order (and for equal rows in their row order). -void ScQueryCellIteratorAccessSpecific< ScQueryCellIteratorAccess::SortedCache >::InitPosStart(sal_uInt8 nSortedBinarySearch) +void ScQueryCellIteratorAccessSpecific< ScQueryCellIteratorAccess::SortedCache >::InitPosStart(bool bNewSearchFunction, sal_uInt8 nSortedBinarySearch) { ScRange aSortedRangeRange( maParam.nCol1, maParam.nRow1, nTab, maParam.nCol2, maParam.nRow2, nTab ); // We want all matching values first in the sort order, - SetSortedRangeCache( rDoc.GetSortedRangeCache( aSortedRangeRange, maParam, &mrContext, nSortedBinarySearch )); + SetSortedRangeCache( rDoc.GetSortedRangeCache( aSortedRangeRange, maParam, &mrContext, bNewSearchFunction, nSortedBinarySearch )); // InitPosFinish() needs to be called after this, ScQueryCellIteratorBase::InitPos() // will handle that } @@ -1615,7 +1617,8 @@ static bool CanBeUsedForSorterCache(ScDocument& /*rDoc*/, const ScQueryParam& /* return false; if(rParam.mbRangeLookup) return false; - if(rParam.GetEntry(0).GetQueryItem().meType == ScQueryEntry::ByString + const bool bNewSearchFunction = nSearchOpCode == SC_OPCODE_X_LOOKUP || nSearchOpCode == SC_OPCODE_X_MATCH; + if(rParam.GetEntry(0).GetQueryItem().meType == ScQueryEntry::ByString && !bNewSearchFunction && !ScQueryEvaluator::isMatchWholeCell(rDoc, rParam.GetEntry(0).eOp)) return false; // substring matching cannot be sorted if(rParam.GetEntry(0).eOp != SC_LESS && rParam.GetEntry(0).eOp != SC_LESS_EQUAL @@ -1773,7 +1776,8 @@ sal_uInt64 ScCountIfCellIterator< ScQueryCellIteratorAccess::SortedCache >::GetC nRow = maParam.nRow1; ScRange aSortedRangeRange( col, maParam.nRow1, nTab, col, maParam.nRow2, nTab); ScQueryOp& op = maParam.GetEntry(0).eOp; - SetSortedRangeCache( rDoc.GetSortedRangeCache( aSortedRangeRange, maParam, &mrContext )); + bool bNewSearchFunction = nSearchOpCode == SC_OPCODE_X_LOOKUP || nSearchOpCode == SC_OPCODE_X_MATCH; + SetSortedRangeCache( rDoc.GetSortedRangeCache( aSortedRangeRange, maParam, &mrContext, bNewSearchFunction, nSearchOpCode )); if( op == SC_EQUAL ) { // BinarySearch() searches for the last item that matches. Therefore first diff --git a/sc/source/core/tool/rangecache.cxx b/sc/source/core/tool/rangecache.cxx index e18dbace0f31..24a8a39313ff 100644 --- a/sc/source/core/tool/rangecache.cxx +++ b/sc/source/core/tool/rangecache.cxx @@ -51,7 +51,8 @@ static ScSortedRangeCache::ValueType toValueType(const ScQueryParam& param) ScSortedRangeCache::ScSortedRangeCache(ScDocument* pDoc, const ScRange& rRange, const ScQueryParam& param, ScInterpreterContext* context, - bool invalid, sal_uInt8 nSortedBinarySearch) + bool invalid, bool bNewSearchFunction, + sal_uInt8 nSortedBinarySearch) : maRange(rRange) , mpDoc(pDoc) , mValid(false) @@ -111,8 +112,8 @@ ScSortedRangeCache::ScSortedRangeCache(ScDocument* pDoc, const ScRange& rRange, // the whole column which includes a textual header). But if it can possibly // match, then bail out and leave it to the unoptimized case. // TODO Maybe it would actually work to use the numeric value obtained here? - if (!ScQueryEvaluator::isMatchWholeCell(*pDoc, mQueryOp)) - return; // substring matching cannot be sorted + if (!bNewSearchFunction && !ScQueryEvaluator::isMatchWholeCell(*pDoc, mQueryOp)) + return; // substring matching cannot be sorted, but new search functions are sorted sal_uInt32 format = 0; double value; if (context->NFIsNumberFormat(cell.getString(pDoc), format, value)) @@ -169,7 +170,8 @@ ScSortedRangeCache::ScSortedRangeCache(ScDocument* pDoc, const ScRange& rRange, // Try to reuse as much ScQueryEvaluator code as possible, this should // basically do the same comparisons. assert(pDoc->FetchTable(nTab) != nullptr); - ScQueryEvaluator evaluator(*pDoc, *pDoc->FetchTable(nTab), param, context); + ScQueryEvaluator evaluator(*pDoc, *pDoc->FetchTable(nTab), param, context, nullptr, + bNewSearchFunction); for (SCCOL nCol = startCol; nCol <= endCol; ++nCol) { for (SCROW nRow = startRow; nRow <= endRow; ++nRow) From dd13569254e832d48bcdc7e612aaa1d7909708b0 Mon Sep 17 00:00:00 2001 From: RMZeroFour Date: Sun, 23 Jun 2024 12:31:16 +0530 Subject: [PATCH 099/194] .NET Bindings: Remove absolute path check in DotnetLibrary This commit removes the gb_DotnetLibrary__ensure_absolute gbuild function that was breaking out-of-source directory builds. Code using that function was changed to accept already absolute paths as arguments. Change-Id: I6d9d3dac33e296cf0e69910f16564d822047857e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169353 Tested-by: Jenkins Reviewed-by: Mike Kaganski --- net_ure/DotnetLibrary_net_basetypes.mk | 13 +++++++------ net_ure/DotnetLibrary_net_oootypes.mk | 3 ++- net_ure/DotnetLibrary_net_uretypes.mk | 3 ++- solenv/gbuild/DotnetLibrary.mk | 23 +++++++++-------------- 4 files changed, 20 insertions(+), 22 deletions(-) diff --git a/net_ure/DotnetLibrary_net_basetypes.mk b/net_ure/DotnetLibrary_net_basetypes.mk index b8500fd7aa26..b6a847838344 100644 --- a/net_ure/DotnetLibrary_net_basetypes.mk +++ b/net_ure/DotnetLibrary_net_basetypes.mk @@ -9,12 +9,13 @@ $(eval $(call gb_DotnetLibrary_CsLibrary,net_basetypes)) $(eval $(call gb_DotnetLibrary_add_sources,net_basetypes,\ - net_ure/source/basetypes/Any.cs \ - net_ure/source/basetypes/BoundAttribute.cs \ - net_ure/source/basetypes/Exception.cs \ - net_ure/source/basetypes/IQueryInterface.cs \ - net_ure/source/basetypes/RaisesAttribute.cs \ - net_ure/source/basetypes/UnoGeneratedAttribute.cs \ + $(SRCDIR)/net_ure/source/basetypes, \ + Any.cs \ + BoundAttribute.cs \ + Exception.cs \ + IQueryInterface.cs \ + RaisesAttribute.cs \ + UnoGeneratedAttribute.cs \ )) $(eval $(call gb_DotnetLibrary_add_properties,net_basetypes,\ diff --git a/net_ure/DotnetLibrary_net_oootypes.mk b/net_ure/DotnetLibrary_net_oootypes.mk index f799f5056764..b21f1bb92945 100644 --- a/net_ure/DotnetLibrary_net_oootypes.mk +++ b/net_ure/DotnetLibrary_net_oootypes.mk @@ -12,7 +12,8 @@ $(call gb_DotnetLibrary_get_target,net_oootypes) : \ $(call gb_CustomTarget_get_target,net_oootypes) $(eval $(call gb_DotnetLibrary_add_generated_sources,net_oootypes,\ - $(gb_CustomTarget_workdir)/net_ure/net_oootypes/**/*.cs \ + $(gb_CustomTarget_workdir)/net_ure/net_oootypes, \ + **/*.cs \ )) $(eval $(call gb_DotnetLibrary_link_cs_library,net_oootypes,net_uretypes)) diff --git a/net_ure/DotnetLibrary_net_uretypes.mk b/net_ure/DotnetLibrary_net_uretypes.mk index a5e6968887c2..747e4574ecb9 100644 --- a/net_ure/DotnetLibrary_net_uretypes.mk +++ b/net_ure/DotnetLibrary_net_uretypes.mk @@ -12,7 +12,8 @@ $(call gb_DotnetLibrary_get_target,net_uretypes) : \ $(call gb_CustomTarget_get_target,net_uretypes) $(eval $(call gb_DotnetLibrary_add_generated_sources,net_uretypes,\ - $(gb_CustomTarget_workdir)/net_ure/net_uretypes/**/*.cs \ + $(gb_CustomTarget_workdir)/net_ure/net_uretypes, \ + **/*.cs \ )) $(eval $(call gb_DotnetLibrary_link_cs_library,net_uretypes,net_basetypes)) diff --git a/solenv/gbuild/DotnetLibrary.mk b/solenv/gbuild/DotnetLibrary.mk index 190a0059e724..9d20638f0738 100644 --- a/solenv/gbuild/DotnetLibrary.mk +++ b/solenv/gbuild/DotnetLibrary.mk @@ -33,11 +33,6 @@ $(strip $(subst ",\",$(1))) endef -define gb_DotnetLibrary__ensure_absolute -$(if $(filter $(SRCDIR)%,$(1)),$(1),$(SRCDIR)/$(1)) - -endef - ####### Build and Clean Targets ######### .PHONY : $(call gb_DotnetLibrary_get_clean_target,%) @@ -136,19 +131,19 @@ endef # Add one source file to the project file # This adds it to the project, and makes it a build dependency # so the library is rebuilt if the source changes -# call gb_DotnetLibrary_add_source,target,source +# call gb_DotnetLibrary_add_source,target,basedir,source define gb_DotnetLibrary_add_source -$(call gb_DotnetLibrary_get_target,$(1)) : $(call gb_DotnetLibrary__ensure_absolute,$(strip $(2))) -$(call gb_DotnetLibrary_add_items,$(1),) +$(call gb_DotnetLibrary_get_target,$(1)) : $(strip $(2))/$(strip $(3)) +$(call gb_DotnetLibrary_add_items,$(1),) endef # Add source files to the project file # This adds them to the project, and makes it them build dependency # so the library is rebuilt if the sources change -# call gb_DotnetLibrary_add_sources,target,sources +# call gb_DotnetLibrary_add_sources,target,basedir,sources define gb_DotnetLibrary_add_sources -$(foreach source,$(2),$(call gb_DotnetLibrary_add_source,$(1),$(source))) +$(foreach source,$(3),$(call gb_DotnetLibrary_add_source,$(1),$(2),$(source))) endef @@ -156,9 +151,9 @@ endef # This is not marked as makefile build dependency, # so the library is NOT rebuilt if this source changes # Useful for things like source globs supported by .net projects -# call gb_DotnetLibrary_add_generated_source,target,source +# call gb_DotnetLibrary_add_generated_source,target,basedir,source define gb_DotnetLibrary_add_generated_source -$(call gb_DotnetLibrary_add_items,$(1),) +$(call gb_DotnetLibrary_add_items,$(1),) endef @@ -166,9 +161,9 @@ endef # These are not marked as makefile build dependencies, # so the library is NOT rebuilt if these sources change # Useful for things like source globs supported by .net projects -# call gb_DotnetLibrary_add_generated_sources,target,sources +# call gb_DotnetLibrary_add_generated_sources,target,basedir,sources define gb_DotnetLibrary_add_generated_sources -$(foreach source,$(2),$(call gb_DotnetLibrary_add_generated_source,$(1),$(source))) +$(foreach source,$(3),$(call gb_DotnetLibrary_add_generated_source,$(1),$(2),$(source))) endef From 7f593484a1f929663ec9ec7def76b63ec3a832b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1szl=C3=B3=20N=C3=A9meth?= Date: Thu, 27 Jun 2024 13:30:07 +0200 Subject: [PATCH 100/194] tdf#158051 AutoCorrect: don't apply final sigma before apostrophe MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Don't change Greek sigma with final sigma, if the sigma is followed by an apostrophe, which means removed word part (vowel) here. Follow-up to commit 5ecc0cad3f0aeb1c7643fae7b414b1a2316ed59f "tdf#116387 Autocorrect greek character σ (sigma) to ς (final sigma)". Change-Id: I6b7045502c04993cbad92f21f96ca5799abd1fd5 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169637 Tested-by: Jenkins Reviewed-by: László Németh --- extras/source/autocorr/lang/el/DocumentList.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/extras/source/autocorr/lang/el/DocumentList.xml b/extras/source/autocorr/lang/el/DocumentList.xml index 1cc23c2b3132..1d9bbeb7efae 100644 --- a/extras/source/autocorr/lang/el/DocumentList.xml +++ b/extras/source/autocorr/lang/el/DocumentList.xml @@ -1,5 +1,7 @@ + + From 589bce37764d4e539a3c3ebf37fdd039be30bd51 Mon Sep 17 00:00:00 2001 From: Noel Grandin Date: Thu, 27 Jun 2024 09:03:10 +0200 Subject: [PATCH 101/194] avoid OUString temporary in a hotspot Change-Id: I9fc3abc90c73e17b82fc7a4b197a91557c2ac6f4 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169610 Reviewed-by: Noel Grandin Tested-by: Jenkins --- sw/source/core/doc/doclay.cxx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sw/source/core/doc/doclay.cxx b/sw/source/core/doc/doclay.cxx index 26431d2df24c..b5ea2bf9fe9a 100644 --- a/sw/source/core/doc/doclay.cxx +++ b/sw/source/core/doc/doclay.cxx @@ -1370,8 +1370,7 @@ static OUString lcl_GetUniqueFlyName(const SwDoc& rDoc, TranslateId pDefStrId, s lcl_collectUsedNums(aUsedNums, nNmLen, *pObj, aName); } - OUString sName = pFlyFormat->GetName(); - lcl_collectUsedNums(aUsedNums, nNmLen, sName, aName); + lcl_collectUsedNums(aUsedNums, nNmLen, pFlyFormat->GetName(), aName); } // All numbers are flagged accordingly, so determine the right one From a337a6ed162826f95cf52b88241d45c2b392d751 Mon Sep 17 00:00:00 2001 From: Mike Kaganski Date: Thu, 27 Jun 2024 19:18:18 +0500 Subject: [PATCH 102/194] warning C6011: Dereferencing NULL pointer 'sNewPath' C:\lo\build\instdir\sdk\include\LibreOfficeKit\LibreOfficeKitInit.h(161) : warning C6011: Dereferencing NULL pointer 'sNewPath'. : Lines: 136, 137, 138, 140, 143, 144, 157, 159, 160, 161 Change-Id: I0fba0db79b4a36f293e867da262a970eb152e3d5 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169651 Tested-by: Jenkins Reviewed-by: Mike Kaganski --- include/LibreOfficeKit/LibreOfficeKitInit.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/LibreOfficeKit/LibreOfficeKitInit.h b/include/LibreOfficeKit/LibreOfficeKitInit.h index 10085d3c1c35..eafee08083a4 100644 --- a/include/LibreOfficeKit/LibreOfficeKitInit.h +++ b/include/LibreOfficeKit/LibreOfficeKitInit.h @@ -158,6 +158,7 @@ extern "C" size_sEnvPath = strlen(sEnvPath); buffer_size = size_sEnvPath + 2*strlen(pPath) + strlen(UNOPATH) + 4; sNewPath = (char *) malloc(buffer_size); + assert(sNewPath); sNewPath[0] = L'\0'; strcat_s(sNewPath, buffer_size, pPath); // program to PATH strcat_s(sNewPath, buffer_size, ";"); From df61a5846197a01c10322ac54731b6df7e0faf07 Mon Sep 17 00:00:00 2001 From: Tibor Nagy Date: Thu, 27 Jun 2024 12:15:23 +0200 Subject: [PATCH 103/194] tdf#157019 PPTX import: Workaround for object placeholder shape preset Follow-up to commit Ic8a8ab3f6dfb7367ecd2c619ce888bf77abef460 "tdf#132557: PPTX import: Workaround for slide footer shape presets" note: This is a workaround because there is no custom shape support for placeholder shapes in LibreOffice. Change-Id: Iefb9d97e0eb10a04c39b515b11e549aeb7be8f25 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169626 Reviewed-by: Nagy Tibor Tested-by: Jenkins --- ...stTdf157019_objPlaceholderCustomShape.pptx | Bin 0 -> 33050 bytes oox/qa/unit/drawingml.cxx | 17 ++++++++++++++++ oox/source/drawingml/shape.cxx | 19 +++++------------- oox/source/ppt/pptshape.cxx | 11 +++++++--- sd/qa/unit/import-tests2.cxx | 12 +++++------ 5 files changed, 36 insertions(+), 23 deletions(-) create mode 100644 oox/qa/unit/data/testTdf157019_objPlaceholderCustomShape.pptx diff --git a/oox/qa/unit/data/testTdf157019_objPlaceholderCustomShape.pptx b/oox/qa/unit/data/testTdf157019_objPlaceholderCustomShape.pptx new file mode 100644 index 0000000000000000000000000000000000000000..125494d5f3767d8f95ef4eb643b5a11cfdf0ab30 GIT binary patch literal 33050 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 literal 0 HcmV?d00001 diff --git a/oox/qa/unit/drawingml.cxx b/oox/qa/unit/drawingml.cxx index 35cb7528452e..f2f06509cdf3 100644 --- a/oox/qa/unit/drawingml.cxx +++ b/oox/qa/unit/drawingml.cxx @@ -464,6 +464,23 @@ CPPUNIT_TEST_FIXTURE(OoxDrawingmlTest, testTdf132557_footerCustomShapes) CPPUNIT_ASSERT_EQUAL(u"com.sun.star.drawing.CustomShape"_ustr, xShapeSlideNum->getShapeType()); } +CPPUNIT_TEST_FIXTURE(OoxDrawingmlTest, testTdf132557_objPlaceholderCustomShape) +{ + // slide with object placeholder with custom shape + loadFromFile(u"testTdf157019_objPlaceholderCustomShape.pptx"); + + uno::Reference xDrawPagesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xDrawPage(xDrawPagesSupplier->getDrawPages()->getByIndex(0), + uno::UNO_QUERY); + + // Test if we were able to import the outliner shape with CustomShape service. + // Without the fix in place, this test would have failed with + // Expected: shape type: "com.sun.star.drawing.CustomShape" + // Actual : shape type: "com.sun.star.presentation.OutlinerShape" + uno::Reference xObjShape(xDrawPage->getByIndex(0), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(u"com.sun.star.drawing.CustomShape"_ustr, xObjShape->getShapeType()); +} + CPPUNIT_TEST_FIXTURE(OoxDrawingmlTest, testThemeColorTint_Table) { // Given a document with a table style, using theme color with tinting in the A2 cell: diff --git a/oox/source/drawingml/shape.cxx b/oox/source/drawingml/shape.cxx index 9727688b25fe..5adf4a8eb15b 100644 --- a/oox/source/drawingml/shape.cxx +++ b/oox/source/drawingml/shape.cxx @@ -1293,30 +1293,21 @@ Reference< XShape > const & Shape::createAndInsert( ppt::PowerPointImport* pPPT = dynamic_cast(&rFilterBase); if (!pPPT->getActualSlidePersist()->isMasterPage()) { - // There is no support for change the shape of the drawing in LO, but we check, - // if the placeholder changes its shape, top and bottom margins won't be used. - bool bIsChangePlaceholderShape - = !mpCustomShapePropertiesPtr->getAdjustmentGuideList().empty(); - sal_Int32 nUpper = 0; sal_Int32 nLower = 0; sal_Int32 nHeight = maSize.Height / 360; - if (getTextBody()->getTextProperties().moInsets[1].value() != 0 - && getTextBody()->getTextProperties().moInsets[3].value() != 0) + if (getTextBody()->getTextProperties().moInsets[1].has_value() + && getTextBody()->getTextProperties().moInsets[3].has_value()) { - if (!bIsChangePlaceholderShape) - { - nUpper = *getTextBody()->getTextProperties().moInsets[1]; - nLower = *getTextBody()->getTextProperties().moInsets[3]; - nHeight -= (nUpper + nLower); - } + nUpper = *getTextBody()->getTextProperties().moInsets[1]; + nLower = *getTextBody()->getTextProperties().moInsets[3]; } else { maDefaultShapeProperties.getProperty(PROP_TextUpperDistance) >>= nUpper; maDefaultShapeProperties.getProperty(PROP_TextLowerDistance) >>= nLower; - nHeight += (nUpper + nLower); } + nHeight -= (nUpper + nLower); mxShape->setSize(awt::Size(0, nHeight)); } } diff --git a/oox/source/ppt/pptshape.cxx b/oox/source/ppt/pptshape.cxx index c443e3bd5e52..6ee8b660a1b9 100644 --- a/oox/source/ppt/pptshape.cxx +++ b/oox/source/ppt/pptshape.cxx @@ -335,9 +335,14 @@ void PPTShape::addShape( // Since it is not possible to represent custom shaped placeholders in Impress // Need to use service name css.drawing.CustomShape if they have a non default shape. // This workaround has the drawback of them not really being processed as placeholders - // so it is only done for slide footers... - bool convertInSlideMode = meShapeLocation == Slide && - (mnSubType == XML_sldNum || mnSubType == XML_dt || mnSubType == XML_ftr || mnSubType == XML_body); + // so it is done for slide footers and obj placeholder + bool convertInSlideMode + = meShapeLocation == Slide + && (mnSubType == XML_sldNum || mnSubType == XML_dt || mnSubType == XML_ftr + || mnSubType == XML_body + || (mnSubType == XML_obj + && sServiceName != "com.sun.star.drawing.GraphicObjectShape")); + bool convertInLayoutMode = meShapeLocation == Layout && (mnSubType == XML_body); if ((convertInSlideMode || convertInLayoutMode) && !mpCustomShapePropertiesPtr->representsDefaultShape()) { diff --git a/sd/qa/unit/import-tests2.cxx b/sd/qa/unit/import-tests2.cxx index c01ae0b8747a..3f01a678ca5b 100644 --- a/sd/qa/unit/import-tests2.cxx +++ b/sd/qa/unit/import-tests2.cxx @@ -111,18 +111,18 @@ CPPUNIT_TEST_FIXTURE(SdImportTest2, testTdf160490) sal_Int32 nHeight1 = xShape1->getSize().Height; // Without the fix in place, this test would have failed with - // Expected: placeholder height: 3730 - // Actual : placeholder height: 2627 - CPPUNIT_ASSERT_EQUAL(sal_Int32(3730), nHeight1); + // Expected: placeholder height: 2627 + // Actual : placeholder height: 3476 + CPPUNIT_ASSERT_EQUAL(sal_Int32(2627), nHeight1); uno::Reference xShape2(getShapeFromPage(0, 1), uno::UNO_QUERY); CPPUNIT_ASSERT(xShape2.is()); sal_Int32 nHeight2 = xShape2->getSize().Height; // Without the fix in place, this test would have failed with - // Expected: placeholder height: 3366 - // Actual : placeholder height: 2373 - CPPUNIT_ASSERT_EQUAL(sal_Int32(3366), nHeight2); + // Expected: placeholder height: 2373 + // Actual : placeholder height: 3116 + CPPUNIT_ASSERT_EQUAL(sal_Int32(2373), nHeight2); } CPPUNIT_TEST_FIXTURE(SdImportTest2, testTdf157285) From 1ac602f6ccd75f3b79d6c7a9d40e64677dd5741a Mon Sep 17 00:00:00 2001 From: Patrick Luby Date: Thu, 27 Jun 2024 11:15:52 -0400 Subject: [PATCH 104/194] tdf#161498 use COL_ALPHA_OPAQUE for finding opaque pixels Starting with commit 81994cb2b8b32453a92bcb011830fcb884f22ff3, pixels now contain an alpha value instead of a transparency value. Change-Id: I07dd39859057bbbbd153a21ee38625049039b106 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169654 Tested-by: Jenkins Reviewed-by: Noel Grandin Reviewed-by: Patrick Luby --- vcl/source/bitmap/BitmapEx.cxx | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/vcl/source/bitmap/BitmapEx.cxx b/vcl/source/bitmap/BitmapEx.cxx index 0d1216bb7095..ebcb7aa1cb9a 100644 --- a/vcl/source/bitmap/BitmapEx.cxx +++ b/vcl/source/bitmap/BitmapEx.cxx @@ -1286,7 +1286,11 @@ tools::Polygon BitmapEx::GetContour( bool bContourEdgeDetect, std::unique_ptr pPoints2; tools::Long nX, nY; sal_uInt16 nPolyPos = 0; - const BitmapColor aBlack = pAcc->GetBestMatchingColor( COL_BLACK ); + // tdf#161498 use COL_ALPHA_OPAQUE for finding opaque pixels + // Starting with commit 81994cb2b8b32453a92bcb011830fcb884f22ff3, + // pixels now contain an alpha value instead of a transparency + // value. + const BitmapColor aTransparencyOpaque = pAcc->GetBestMatchingColor( COL_ALPHA_OPAQUE ); pPoints1.reset(new Point[ nHeight ]); pPoints2.reset(new Point[ nHeight ]); @@ -1299,7 +1303,7 @@ tools::Polygon BitmapEx::GetContour( bool bContourEdgeDetect, // scan row from left to right while( nX < nEndX1 ) { - if( aBlack == pAcc->GetPixelFromData( pScanline, nX ) ) + if( aTransparencyOpaque == pAcc->GetPixelFromData( pScanline, nX ) ) { pPoints1[ nPolyPos ] = Point( nX, nY ); nX = nStartX2; @@ -1307,7 +1311,7 @@ tools::Polygon BitmapEx::GetContour( bool bContourEdgeDetect, // this loop always breaks eventually as there is at least one pixel while( true ) { - if( aBlack == pAcc->GetPixelFromData( pScanline, nX ) ) + if( aTransparencyOpaque == pAcc->GetPixelFromData( pScanline, nX ) ) { pPoints2[ nPolyPos ] = Point( nX, nY ); break; From 8fc2fd284bca88d491ff5975a7110c188344976b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1szl=C3=B3=20N=C3=A9meth?= Date: Thu, 27 Jun 2024 14:22:43 +0200 Subject: [PATCH 105/194] tdf#92029 AutoCorrect: correct 's and 't in Dutch to apostrophe MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit “In Dutch (in Belgium as in the Netherlands), when you type "'s" or "'t" in sentences like: "Ik ben 's morgens opgestaan", the apostrophe is changed into an opening quote by the autocorrect feature, which is incorrect and requires a manual correction.” The bug reported with the suggested AutoCorrect extension by Pierre François. The difference here is always to use the de facto standard typographic apostrophe in the replacement. Change-Id: I2ede612f72145abcca2bc1477ffae3cabc9e5641 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169645 Tested-by: Jenkins Reviewed-by: Adolfo Jayme Barrientos --- extras/source/autocorr/lang/nl-BE/DocumentList.xml | 4 ++++ extras/source/autocorr/lang/nl/DocumentList.xml | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/extras/source/autocorr/lang/nl-BE/DocumentList.xml b/extras/source/autocorr/lang/nl-BE/DocumentList.xml index aad43a2ac536..76521b3fc5b1 100644 --- a/extras/source/autocorr/lang/nl-BE/DocumentList.xml +++ b/extras/source/autocorr/lang/nl-BE/DocumentList.xml @@ -10,6 +10,10 @@ + + + + diff --git a/extras/source/autocorr/lang/nl/DocumentList.xml b/extras/source/autocorr/lang/nl/DocumentList.xml index b96d88166d7b..cea1f26bccca 100644 --- a/extras/source/autocorr/lang/nl/DocumentList.xml +++ b/extras/source/autocorr/lang/nl/DocumentList.xml @@ -10,6 +10,10 @@ + + + + From 5c6c6a73e9c58ad934a4f89505d5b3e2b781e0b9 Mon Sep 17 00:00:00 2001 From: Justin Luth Date: Mon, 24 Jun 2024 13:12:59 -0400 Subject: [PATCH 106/194] tdf#43767 mso-format layout: no smallcaps applied to numbering If the paragraph marker is formatted as Uppercase, then Uppercase is applied to that line's numbering as well. However, if the marker is formatted as SmallCaps, it MUST NOT be applied for MSO formats. Apparently MSO only supports Uppercase and SmallCaps, not Lowercase or Titlease. I don't like these adhoc exceptions, so I didn't attempt to apply them to ODF formats. Let's keep it simple for ODF - any char format that applies to the entire paragraph should apply to numbering as well (except for the existing underline/overline exceptions). - if you don't like that char attributes apply at all, blame MSO. - if you don't like that DOCX is missing your goofy formatting, blame MSO for being inconsistent. ooxmlexport12's tdf143384_tableInFoot_negativeMargins.docx is almost interesting because it applies superscript and small caps. However, the list is already uppercase, so it can't be used for the test. make CppunitTest_sw_ooxmlexport21 \ CPPUNIT_TEST_NAME=testTdf43767_caseMapNumbering Change-Id: I273baebc996adfd001e1c591dbb9aef9272a42f0 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169476 Reviewed-by: Justin Luth Tested-by: Jenkins --- editeng/source/items/svxfont.cxx | 6 ++ include/editeng/svxfont.hxx | 3 + .../data/tdf43767_caseMapNumbering.odt | Bin 0 -> 21107 bytes sw/qa/extras/ooxmlexport/ooxmlexport21.cxx | 66 ++++++++++++++++++ sw/source/core/text/inftxt.cxx | 3 +- sw/source/core/text/txtfld.cxx | 8 +++ 6 files changed, 85 insertions(+), 1 deletion(-) create mode 100644 sw/qa/extras/ooxmlexport/data/tdf43767_caseMapNumbering.odt diff --git a/editeng/source/items/svxfont.cxx b/editeng/source/items/svxfont.cxx index 2df18feb449f..3bd2c8086c07 100644 --- a/editeng/source/items/svxfont.cxx +++ b/editeng/source/items/svxfont.cxx @@ -670,6 +670,12 @@ SvxFont& SvxFont::operator=( const SvxFont& rFont ) return *this; } +bool SvxFont::SvxFontSubsetEquals(const SvxFont& rFont) const +{ + return nEsc == rFont.GetEscapement() && nPropr == rFont.GetPropr() + && eCaseMap == rFont.GetCaseMap(); +} + namespace { class SvxDoGetCapitalSize : public SvxDoCapitals diff --git a/include/editeng/svxfont.hxx b/include/editeng/svxfont.hxx index 126b56f8f65f..9061ffe398d2 100644 --- a/include/editeng/svxfont.hxx +++ b/include/editeng/svxfont.hxx @@ -113,6 +113,9 @@ public: SvxFont& operator=( const SvxFont& rFont ); SvxFont& operator=( const Font& rFont ); + + // returns true if the SvxFont's own properties are equal (the SvxFont portion of an operator==) + bool SvxFontSubsetEquals(const SvxFont& rFont) const; }; #endif // INCLUDED_EDITENG_SVXFONT_HXX diff --git a/sw/qa/extras/ooxmlexport/data/tdf43767_caseMapNumbering.odt b/sw/qa/extras/ooxmlexport/data/tdf43767_caseMapNumbering.odt new file mode 100644 index 0000000000000000000000000000000000000000..9b9c9a299503bffc229a349737412bda76a6ca5a GIT binary patch literal 21107 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%0AIb|G= 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 K=Lfqh0RIBLyUDEp literal 0 HcmV?d00001 diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport21.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport21.cxx index 43dff8ae68cf..9ef569e47683 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport21.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport21.cxx @@ -327,6 +327,72 @@ DECLARE_OOXMLEXPORT_TEST(testTdf158597, "tdf158597.docx") } } +DECLARE_OOXMLEXPORT_TEST(testTdf43767_caseMapNumbering, "tdf43767_caseMapNumbering.odt") +{ + // given a document with 2 numbered Lists [each entry restarts numbering for visual comparison] + xmlDocUniquePtr pDump = parseLayoutDump(); + + // using the relative width difference between "A)" and "a)" as the test comparison + // since ListLabelString etc. does not output the actual string that is displayed on the screen + + // When the entire paragraph has a certain character attribute, that property is also applied + // to the list numbering itself (with some differing exceptions) for both ODT and DOCX. + + // ESTABLISH A BASELINE: these baseline paragraphs have no special character attributes. + // Paragraph 1/list 1(uppercase): no formatting applied to list numbering. Width is 253 for me + const sal_Int32 nUpperCaseWidth + = getXPath(pDump, "//body/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion"_ostr, + "width"_ostr) + .toInt32(); + // Paragraph 4/list 2(lowercase): no formatting applied to list numbering. Width is 186 for me. + const sal_Int32 nLowerCaseWidth + = getXPath(pDump, "//body/txt[5]/SwParaPortion/SwLineLayout/SwFieldPortion"_ostr, + "width"_ostr) + .toInt32(); + + // UPPERCASE LIST + // Paragraph 2: ODF should honour "lowercase". MSO doesn't know about lowercase + sal_Int32 nWidth + = getXPath(pDump, "//body/txt[2]/SwParaPortion/SwLineLayout/SwFieldPortion"_ostr, + "width"_ostr) + .toInt32(); + CPPUNIT_ASSERT_EQUAL(isExported() ? nUpperCaseWidth : nLowerCaseWidth, nWidth); + + // Paragraph 3: ODF should honour "superscript" (for consistency). MSO ignores superscript + nWidth = getXPath(pDump, "//body/txt[3]/SwParaPortion/SwLineLayout/SwFieldPortion"_ostr, + "width"_ostr) + .toInt32(); + if (!isExported()) + CPPUNIT_ASSERT_LESS(nLowerCaseWidth, nWidth); + else + CPPUNIT_ASSERT_EQUAL(nUpperCaseWidth, nWidth); + + // LOWERCASE LIST + //Paragraph 6: ODF should honour "titlecase". MSO doesn't know about titlecase + nWidth = getXPath(pDump, "//body/txt[6]/SwParaPortion/SwLineLayout/SwFieldPortion"_ostr, + "width"_ostr) + .toInt32(); + CPPUNIT_ASSERT_EQUAL(isExported() ? nLowerCaseWidth : nUpperCaseWidth, nWidth); + + // Paragraph 7: ODF should honour "smallcaps". MSO apparently has an exception for small caps + nWidth = getXPath(pDump, "//body/txt[7]/SwParaPortion/SwLineLayout/SwFieldPortion"_ostr, + "width"_ostr) + .toInt32(); + if (!isExported()) + { + CPPUNIT_ASSERT_GREATER(nLowerCaseWidth, nWidth); + CPPUNIT_ASSERT_LESS(nUpperCaseWidth, nWidth); + } + else + CPPUNIT_ASSERT_EQUAL(nLowerCaseWidth, nWidth); + + // Paragraph 8: ODF should honour "uppercase". MSO also honours uppercase + nWidth = getXPath(pDump, "//body/txt[8]/SwParaPortion/SwLineLayout/SwFieldPortion"_ostr, + "width"_ostr) + .toInt32(); + CPPUNIT_ASSERT_EQUAL(nUpperCaseWidth, nWidth); +} + DECLARE_OOXMLEXPORT_TEST(testTdf156105_percentSuffix, "tdf156105_percentSuffix.odt") { // given a numbered list with a non-escaping percent symbol in the prefix and suffix diff --git a/sw/source/core/text/inftxt.cxx b/sw/source/core/text/inftxt.cxx index a8222328e1ae..5f9ac5597934 100644 --- a/sw/source/core/text/inftxt.cxx +++ b/sw/source/core/text/inftxt.cxx @@ -2155,7 +2155,8 @@ SwFontSave::SwFontSave(const SwTextSizeInfo &rInf, SwFont *pNew, ( ! pNew->GetBackColor() && pFnt->GetBackColor() ) || ( pNew->GetBackColor() && ! pFnt->GetBackColor() ) || ( pNew->GetBackColor() && pFnt->GetBackColor() && - ( *pNew->GetBackColor() != *pFnt->GetBackColor() ) ) ) + ( *pNew->GetBackColor() != *pFnt->GetBackColor() ) ) + || !pNew->GetActualFont().SvxFontSubsetEquals(pFnt->GetActualFont())) { pNew->SetTransparent( true ); pNew->SetAlign( ALIGN_BASELINE ); diff --git a/sw/source/core/text/txtfld.cxx b/sw/source/core/text/txtfld.cxx index e3abe96cab00..43e4b9e906de 100644 --- a/sw/source/core/text/txtfld.cxx +++ b/sw/source/core/text/txtfld.cxx @@ -55,6 +55,7 @@ #include #include #include +#include #include #include #include @@ -396,6 +397,13 @@ static void checkApplyParagraphMarkFormatToNumbering(SwFont* pNumFnt, SwTextForm pCleanedSet->ClearItem(pItem->Which()); } } + else if (pItem->Which() == RES_CHRATR_CASEMAP) + { + SvxCaseMap eCaseMap = static_cast(pItem)->GetCaseMap(); + // MS only knows about "all caps" and "small caps". Small caps is not set on numbering + if (eCaseMap == SvxCaseMap::SmallCaps) + pCleanedSet->ClearItem(pItem->Which()); + } pItem = aIter.NextItem(); }; From e9dd8d2311e6c40128f769dcc7477026dc59da23 Mon Sep 17 00:00:00 2001 From: Bogdan Buzea Date: Thu, 27 Jun 2024 18:10:53 +0200 Subject: [PATCH 107/194] Resave with newer Glade version Change-Id: Ic951f42f5a6dd7ab2d972a5ccc2d6e7fd3b5fa91 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169596 Reviewed-by: Taichi Haradaguchi <20001722@ymail.ne.jp> Tested-by: Jenkins --- writerperfect/uiconfig/ui/exportepub.ui | 313 +++++++++--------- .../uiconfig/ui/wpftencodingdialog.ui | 41 ++- 2 files changed, 174 insertions(+), 180 deletions(-) diff --git a/writerperfect/uiconfig/ui/exportepub.ui b/writerperfect/uiconfig/ui/exportepub.ui index 97c789ff567e..0d7730fdd57b 100644 --- a/writerperfect/uiconfig/ui/exportepub.ui +++ b/writerperfect/uiconfig/ui/exportepub.ui @@ -1,38 +1,35 @@ - + - False + False True - 6 + 6 EPUB Export False True - 0 - 0 - dialog - - - + 0 + 0 + dialog - False + False True vertical 12 - False - end + False + end _OK True - True - True - True - True + True + True + True + True True @@ -45,8 +42,8 @@ _Cancel True - True - True + True + True True @@ -59,8 +56,8 @@ _Help True - True - True + True + True True @@ -74,55 +71,55 @@ False True - end + end 2 - + True - False + False True - 6 - 12 + 6 + 12 True - False + False True True - 6 - 0 - none + 6 + 0 + none - + True - False - True - 6 - 12 + False 12 6 + True + 6 + 12 True - False + False Version: - True - versionlb + True + versionlb 0 - 0 - 0 + 0 + 0 True - False + False True 0 @@ -131,15 +128,15 @@ - 1 - 0 + 1 + 0 2 True - False + False True 0 @@ -148,43 +145,43 @@ - 1 - 1 + 1 + 1 2 True - False + False Split method: - True - splitlb + True + splitlb 0 - 0 - 1 + 0 + 1 True - False + False Layout method: - True - layoutlb + True + layoutlb 0 - 0 - 2 + 0 + 2 True - False + False True 0 @@ -193,8 +190,8 @@ - 1 - 2 + 1 + 2 2 @@ -203,9 +200,9 @@ True - False + False General - True + True 0 @@ -214,162 +211,162 @@ - 0 - 0 + 0 + 0 True - False + False True True - 6 - 0 - none + 6 + 0 + none - + True - False - True - 6 - 12 + False 12 6 + True + 6 + 12 True - False + False Identifier: - True - identifier + True + identifier 0 - 0 - 0 + 0 + 0 True - False + False Title: - True - title + True + title 0 - 0 - 1 + 0 + 1 True - False + False Author: - True - author + True + author 0 - 0 - 2 + 0 + 2 True - False + False Date: - True - date + True + date 0 - 0 - 4 + 0 + 4 True - False + False Language: - True - language + True + language 0 - 0 - 3 + 0 + 3 True - True + True True + True True - True - 1 - 0 + 1 + 0 True - True + True True + True True - True - 1 - 1 + 1 + 1 True - True + True True + True True - True - 1 - 2 + 1 + 2 True - True + True True + True True - True - 1 - 3 + 1 + 3 True - True + True True + True True - True - 1 - 4 + 1 + 4 @@ -377,9 +374,9 @@ True - False + False Metadata - True + True @@ -387,105 +384,105 @@ - 0 - 2 + 0 + 2 True - False + False True True - 6 - 0 - none + 6 + 0 + none - + True - False - True - 6 - 12 + False 12 6 + True + 6 + 12 True - False + False Cover image: - True - coverpath + True + coverpath 0 - 0 - 0 + 0 + 0 True - True + True True + True True - True - 1 - 0 + 1 + 0 Browse... True - True - True + True + True - 2 - 0 + 2 + 0 True - False + False Media directory: - True - mediadir + True + mediadir 0 - 0 - 1 + 0 + 1 True - True + True True + True True - True - 1 - 1 + 1 + 1 Browse... True - True - True + True + True - 2 - 1 + 2 + 1 @@ -493,7 +490,7 @@ True - False + False Customize @@ -502,8 +499,8 @@ - 0 - 1 + 0 + 1 diff --git a/writerperfect/uiconfig/ui/wpftencodingdialog.ui b/writerperfect/uiconfig/ui/wpftencodingdialog.ui index cf6da9c698c8..9f1a88ca3344 100644 --- a/writerperfect/uiconfig/ui/wpftencodingdialog.ui +++ b/writerperfect/uiconfig/ui/wpftencodingdialog.ui @@ -1,35 +1,32 @@ - + - False - 6 + False + 6 False True - 0 - 0 - dialog - - - + 0 + 0 + dialog - False + False vertical 6 - False - end + False + end _OK True - True - True - True - True + True + True + True + True True @@ -42,8 +39,8 @@ _Cancel True - True - True + True + True True @@ -62,11 +59,11 @@ True - False + False start _Character set: - True - comboboxtext + True + comboboxtext False @@ -77,7 +74,7 @@ True - False + False False From 2668a9bb592fd7665087d6ea36abc10fcb8a852e Mon Sep 17 00:00:00 2001 From: Bogdan Buzea Date: Sun, 23 Jun 2024 20:42:05 +0200 Subject: [PATCH 108/194] Resave with newer Glade version Change-Id: I7524659a266204a470f2fd407112a2d8fc47c99d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169422 Reviewed-by: Taichi Haradaguchi <20001722@ymail.ne.jp> Tested-by: Jenkins --- .../swriter/ui/querycontinuebegindialog.ui | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/sw/uiconfig/swriter/ui/querycontinuebegindialog.ui b/sw/uiconfig/swriter/ui/querycontinuebegindialog.ui index 481cc4aff241..0c9c1359cb72 100644 --- a/sw/uiconfig/swriter/ui/querycontinuebegindialog.ui +++ b/sw/uiconfig/swriter/ui/querycontinuebegindialog.ui @@ -1,31 +1,31 @@ - + - False + False Continue at the beginning? False True - dialog - True - question + dialog + True + question yes-no Do you want to continue at the beginning? - %PRODUCTNAME Writer has searched to the end of the document. + %PRODUCTNAME Writer has searched to the end of the document. - False + False vertical 12 - False + False False True - end + end 0 From 97833217ebacd77d01b8e06ee1eb05cc06c17afc Mon Sep 17 00:00:00 2001 From: Bogdan Buzea Date: Sun, 23 Jun 2024 20:48:08 +0200 Subject: [PATCH 109/194] Resave with newer Glade version Change-Id: Iaa30a56068f7db4a735793d99e04f31054f8e17c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169426 Tested-by: Jenkins Reviewed-by: Taichi Haradaguchi <20001722@ymail.ne.jp> --- cui/uiconfig/ui/querydeletedictionarydialog.ui | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/cui/uiconfig/ui/querydeletedictionarydialog.ui b/cui/uiconfig/ui/querydeletedictionarydialog.ui index 38185b2eb7d6..aaba7043233c 100644 --- a/cui/uiconfig/ui/querydeletedictionarydialog.ui +++ b/cui/uiconfig/ui/querydeletedictionarydialog.ui @@ -1,31 +1,31 @@ - + - False + False Delete Dictionary? False True - dialog - True - warning + dialog + True + warning yes-no Do you really want to delete the dictionary? - This action cannot be undone. + This action cannot be undone. - False + False vertical 12 - False + False False True - end + end 0 From 390bfad2bb6389e7e25c6b63df0e0bc9a1949f75 Mon Sep 17 00:00:00 2001 From: Bogdan Buzea Date: Thu, 27 Jun 2024 19:20:37 +0200 Subject: [PATCH 110/194] Resave with newer Glade version Change-Id: If3fb270c17a32410fdd23ac37e46389c9cfdf56e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169604 Tested-by: Jenkins Reviewed-by: Taichi Haradaguchi <20001722@ymail.ne.jp> --- sfx2/uiconfig/ui/alienwarndialog.ui | 46 ++-- sfx2/uiconfig/ui/autoredactdialog.ui | 94 +++---- sfx2/uiconfig/ui/charviewmenu.ui | 12 +- sfx2/uiconfig/ui/checkin.ui | 83 +++---- sfx2/uiconfig/ui/classificationbox.ui | 14 +- sfx2/uiconfig/ui/cmisinfopage.ui | 24 +- sfx2/uiconfig/ui/custominfopage.ui | 52 ++-- sfx2/uiconfig/ui/documentpropertiesdialog.ui | 197 +++------------ sfx2/uiconfig/ui/editdocumentdialog.ui | 38 +-- sfx2/uiconfig/ui/editdurationdialog.ui | 221 ++++++++--------- sfx2/uiconfig/ui/extrabutton.ui | 12 +- sfx2/uiconfig/ui/floatingrecord.ui | 30 ++- sfx2/uiconfig/ui/helpbookmarkpage.ui | 50 ++-- sfx2/uiconfig/ui/helpcontentpage.ui | 22 +- sfx2/uiconfig/ui/helpcontrol.ui | 134 ++-------- sfx2/uiconfig/ui/helpindexpage.ui | 70 +++--- sfx2/uiconfig/ui/helpsearchpage.ui | 104 ++++---- sfx2/uiconfig/ui/helpwindow.ui | 69 +++--- sfx2/uiconfig/ui/infobar.ui | 81 +++--- sfx2/uiconfig/ui/inputdialog.ui | 63 +++-- sfx2/uiconfig/ui/licensedialog.ui | 45 ++-- sfx2/uiconfig/ui/linkeditdialog.ui | 113 +++++---- sfx2/uiconfig/ui/loadtemplatedialog.ui | 247 +++++++++---------- sfx2/uiconfig/ui/newstyle.ui | 91 ++++--- sfx2/uiconfig/ui/notebookbarpopup.ui | 12 +- sfx2/uiconfig/ui/printeroptionsdialog.ui | 41 ++- sfx2/uiconfig/ui/querysavedialog.ui | 38 +-- sfx2/uiconfig/ui/safemodequerydialog.ui | 31 ++- sfx2/uiconfig/ui/saveastemplatedlg.ui | 111 ++++----- sfx2/uiconfig/ui/searchdialog.ui | 123 +++++---- sfx2/uiconfig/ui/singletabdialog.ui | 35 ++- sfx2/uiconfig/ui/stylecontextmenu.ui | 24 +- sfx2/uiconfig/ui/templatecategorydlg.ui | 91 ++++--- sfx2/uiconfig/ui/urlbox.ui | 10 +- sfx2/uiconfig/ui/versioncommentdialog.ui | 73 +++--- sfx2/uiconfig/ui/versionscmis.ui | 90 ++++--- sfx2/uiconfig/ui/versionsofdialog.ui | 139 +++++------ 37 files changed, 1234 insertions(+), 1496 deletions(-) diff --git a/sfx2/uiconfig/ui/alienwarndialog.ui b/sfx2/uiconfig/ui/alienwarndialog.ui index d142433c53f8..02570dfd1ed4 100644 --- a/sfx2/uiconfig/ui/alienwarndialog.ui +++ b/sfx2/uiconfig/ui/alienwarndialog.ui @@ -1,62 +1,62 @@ - + - False + False Confirm File Format False True - dialog - True - question + dialog + True + question This document may contain formatting or content that cannot be saved in the currently selected file format “%FORMATNAME”. - Use the default ODF file format to be sure that the document is saved correctly. + Use the default ODF file format to be sure that the document is saved correctly. - False + False vertical 12 - False + False Use %DEFAULTEXTENSION _Format True - True - True - True + True + True + True False True 0 - True + True _Use %FORMATNAME Format True - True - True - True - True - True + True + True + True + True + True False True 1 - True + True False True - end + end 0 @@ -64,10 +64,10 @@ _Ask when not saving in ODF or default format True - True - False - True - True + True + False + True + True False diff --git a/sfx2/uiconfig/ui/autoredactdialog.ui b/sfx2/uiconfig/ui/autoredactdialog.ui index b4eda210b86c..ed89df505fb5 100644 --- a/sfx2/uiconfig/ui/autoredactdialog.ui +++ b/sfx2/uiconfig/ui/autoredactdialog.ui @@ -1,5 +1,5 @@ - + @@ -19,27 +19,27 @@ - False - 6 + False + 6 Automatic Redaction True - dialog + dialog - False + False True True vertical 12 - False + False _Help True - True - True + True + True True @@ -53,8 +53,8 @@ _OK True - True - True + True + True True @@ -67,8 +67,8 @@ _Cancel True - True - True + True + True True @@ -81,37 +81,37 @@ False False - end + end 5 - + True - False + False True - 6 - 12 + 6 + 12 True - True + True True True - in + in True - True - True + True + True 5 - 5 + 5 True True liststore1 - 0 - False + 0 + False @@ -187,42 +187,42 @@ - 0 - 1 + 0 + 1 True - False + False start center 1 - 1 + 1 _Redaction Targets - True + True - 0 - 0 + 0 + 0 True - False + False vertical 6 - start + start Load Targets True - True - True + True + True False @@ -234,8 +234,8 @@ Save Targets True - True - True + True + True False @@ -247,21 +247,21 @@ True False - False + False True True 2 - True + True Add Target True - True - True + True + True False @@ -273,8 +273,8 @@ Edit Target True - True - True + True + True False @@ -286,8 +286,8 @@ Delete Target True - True - True + True + True False @@ -297,8 +297,8 @@ - 1 - 1 + 1 + 1 diff --git a/sfx2/uiconfig/ui/charviewmenu.ui b/sfx2/uiconfig/ui/charviewmenu.ui index 714d33c6e606..f417d7633743 100644 --- a/sfx2/uiconfig/ui/charviewmenu.ui +++ b/sfx2/uiconfig/ui/charviewmenu.ui @@ -1,24 +1,24 @@ - + True - False + False True - False + False Remove - True + True True - False + False Clear All - True + True diff --git a/sfx2/uiconfig/ui/checkin.ui b/sfx2/uiconfig/ui/checkin.ui index fb0bf0ec8a6c..a322b6ac5113 100644 --- a/sfx2/uiconfig/ui/checkin.ui +++ b/sfx2/uiconfig/ui/checkin.ui @@ -1,37 +1,34 @@ - + - False - 6 + False + 6 Check-In False True - center-on-parent - 0 - 0 - dialog - - - + center-on-parent + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _OK True - True - True - True - True + True + True + True + True True @@ -44,8 +41,8 @@ _Cancel True - True - True + True + True True @@ -58,8 +55,8 @@ _Help True - True - True + True + True True @@ -73,67 +70,67 @@ False True - end + end 0 - + True - False + False True True - 6 + 6 New major version True - True - False - True - True + True + False + True + True - 0 - 2 + 0 + 2 True - False + False Version comment: - True + True 0 - 0 - 0 + 0 + 0 True - True + True True True - in + in - 300 - 150 + 300 + 150 True - True + True True True - word + word - 0 - 1 + 0 + 1 diff --git a/sfx2/uiconfig/ui/classificationbox.ui b/sfx2/uiconfig/ui/classificationbox.ui index 4441818c2dd6..9d6bbda4ad62 100644 --- a/sfx2/uiconfig/ui/classificationbox.ui +++ b/sfx2/uiconfig/ui/classificationbox.ui @@ -1,24 +1,24 @@ - + True - False + False vertical True - False + False 6 6 6 True - False - True - combobox + False + True + combobox False @@ -29,7 +29,7 @@ True - False + False True diff --git a/sfx2/uiconfig/ui/cmisinfopage.ui b/sfx2/uiconfig/ui/cmisinfopage.ui index b7a410804cba..75b2f2926a4a 100644 --- a/sfx2/uiconfig/ui/cmisinfopage.ui +++ b/sfx2/uiconfig/ui/cmisinfopage.ui @@ -1,32 +1,32 @@ - + True - False + False True True - 6 - 6 + 6 + 6 True - True + True True True - never - always - in + never + always + in True - False + False True - False + False True True vertical @@ -39,8 +39,8 @@ - 0 - 0 + 0 + 0 diff --git a/sfx2/uiconfig/ui/custominfopage.ui b/sfx2/uiconfig/ui/custominfopage.ui index 645db84af469..6a5a6fd31f58 100644 --- a/sfx2/uiconfig/ui/custominfopage.ui +++ b/sfx2/uiconfig/ui/custominfopage.ui @@ -1,23 +1,23 @@ - + - + True - False + False True True - 6 - 6 + 6 + 6 Add _Property True - True - True + True + True end - True + True Click to add a new row to the Properties list. @@ -25,20 +25,20 @@ - 0 - 2 + 0 + 2 True - False + False True 12 True - False + False Name 0 @@ -51,7 +51,7 @@ True - False + False Type 0 @@ -64,7 +64,7 @@ True - False + False Value 0 @@ -76,36 +76,36 @@ - 0 - 0 + 0 + 0 True - True + True True True - never - always - in + never + always + in True - False + False True True True - False + False vertical True - False + False start - 3 + 3 vertical 6 @@ -129,8 +129,8 @@ - 0 - 1 + 0 + 1 diff --git a/sfx2/uiconfig/ui/documentpropertiesdialog.ui b/sfx2/uiconfig/ui/documentpropertiesdialog.ui index 5b5c1a8e7ffb..5ce35fa601f8 100644 --- a/sfx2/uiconfig/ui/documentpropertiesdialog.ui +++ b/sfx2/uiconfig/ui/documentpropertiesdialog.ui @@ -1,33 +1,30 @@ - + - False - 6 + False + 6 Properties of “%1” True - 0 - 0 - dialog - - - + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _Reset True - True - True + True + True True @@ -40,10 +37,10 @@ _OK True - True - True - True - True + True + True + True + True True @@ -56,8 +53,8 @@ _Cancel True - True - True + True + True True @@ -70,8 +67,8 @@ _Help True - True - True + True + True True @@ -85,44 +82,20 @@ False True - end + end 0 True - True - True + True + True True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -131,42 +104,18 @@ True - False + False General - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -178,43 +127,19 @@ True - False + False Description 1 - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -226,43 +151,19 @@ True - False + False Custom Properties 2 - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -274,43 +175,19 @@ True - False + False CMIS Properties 3 - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -322,12 +199,12 @@ True - False + False Security 4 - False + False diff --git a/sfx2/uiconfig/ui/editdocumentdialog.ui b/sfx2/uiconfig/ui/editdocumentdialog.ui index aa1cc1d2bd54..6e57e6c8f0b5 100644 --- a/sfx2/uiconfig/ui/editdocumentdialog.ui +++ b/sfx2/uiconfig/ui/editdocumentdialog.ui @@ -1,62 +1,62 @@ - + - False + False Confirm editing of document False True - dialog - True - question + dialog + True + question Are you sure you want to edit the document? - The original file can be signed without editing the document. Existing signatures on the document will be lost in case of saving an edited version. + The original file can be signed without editing the document. Existing signatures on the document will be lost in case of saving an edited version. - False + False vertical 12 - False + False Edit Document True - True - True - True - True - True + True + True + True + True + True False True 0 - True + True Cancel True - True - True - True + True + True + True False True 1 - True + True False True - end + end 0 diff --git a/sfx2/uiconfig/ui/editdurationdialog.ui b/sfx2/uiconfig/ui/editdurationdialog.ui index b6ebe0553d0e..6c8a8bb91ece 100644 --- a/sfx2/uiconfig/ui/editdurationdialog.ui +++ b/sfx2/uiconfig/ui/editdurationdialog.ui @@ -1,68 +1,68 @@ - + 2147483647 - 1 - 10 + 1 + 10 2147483647 - 1 - 10 + 1 + 10 2147483647 - 1 - 10 + 1 + 10 2147483647 - 1 - 10 + 1 + 10 2147483647 - 1 - 10 + 1 + 10 2147483647 - 1 - 10 + 1 + 10 2147483647 - 1 - 10 + 1 + 10 - False - 6 + False + 6 Edit Duration False True - 0 - 0 - dialog + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _OK True - True - True - True - True + True + True + True + True True @@ -75,8 +75,8 @@ _Cancel True - True - True + True + True True @@ -89,8 +89,8 @@ _Help True - True - True + True + True True @@ -104,231 +104,231 @@ False True - end + end 0 True - False + False True True - 0 - none + 0 + none - + True - False - 6 - 12 + False 12 6 True True + 6 + 12 _Negative True - True - False - True - True + True + False + True + True - 0 - 0 + 0 + 0 2 True - False + False _Years: - True - years + True + years 1 - 0 - 1 + 0 + 1 True - False + False _Months: - True - months + True + months 1 - 0 - 2 + 0 + 2 True - False + False _Days: - True - days + True + days 1 - 0 - 3 + 0 + 3 True - False + False H_ours: - True - hours + True + hours 1 - 0 - 4 + 0 + 4 True - False + False Min_utes: - True - minutes + True + minutes 1 - 0 - 5 + 0 + 5 True - False + False _Seconds: - True - seconds + True + seconds 1 - 0 - 6 + 0 + 6 True - False + False Millise_conds: - True - milliseconds + True + milliseconds 1 - 0 - 7 + 0 + 7 True - True - True + True + True True adjustment1 - 1 - 1 + 1 + 1 True - True - True + True + True True adjustment2 - 1 - 2 + 1 + 2 True - True - True + True + True True adjustment3 - 1 - 3 + 1 + 3 True - True - True + True + True True adjustment4 - 1 - 4 + 1 + 4 True - True - True + True + True True adjustment5 - 1 - 5 + 1 + 5 True - True - True + True + True True adjustment6 - 1 - 6 + 1 + 6 True - True - True + True + True True adjustment7 - 1 - 7 + 1 + 7 @@ -336,7 +336,7 @@ True - False + False Duration @@ -357,8 +357,5 @@ cancel help - - - diff --git a/sfx2/uiconfig/ui/extrabutton.ui b/sfx2/uiconfig/ui/extrabutton.ui index cec9c2b676b3..179e67cdbe0f 100644 --- a/sfx2/uiconfig/ui/extrabutton.ui +++ b/sfx2/uiconfig/ui/extrabutton.ui @@ -1,18 +1,18 @@ - + True - False + False vertical True - True - True - True - True + True + True + True + True True diff --git a/sfx2/uiconfig/ui/floatingrecord.ui b/sfx2/uiconfig/ui/floatingrecord.ui index 570fba2a9b41..805cd33afe66 100644 --- a/sfx2/uiconfig/ui/floatingrecord.ui +++ b/sfx2/uiconfig/ui/floatingrecord.ui @@ -1,26 +1,23 @@ - + - False + False Record Macro - 0 - 0 - utility + 0 + 0 + utility False - - - - False + False vertical - False - True - end + False + True + end @@ -34,17 +31,18 @@ True - True + True True True - text - False + text + False True + False True True - True + True True diff --git a/sfx2/uiconfig/ui/helpbookmarkpage.ui b/sfx2/uiconfig/ui/helpbookmarkpage.ui index d7219ec5443d..465120d25352 100644 --- a/sfx2/uiconfig/ui/helpbookmarkpage.ui +++ b/sfx2/uiconfig/ui/helpbookmarkpage.ui @@ -1,5 +1,5 @@ - + @@ -12,51 +12,51 @@ True - False + False True True - 6 + 6 vertical - + True - False + False True True - 6 + 6 True - False + False _Bookmarks - True - bookmarks + True + bookmarks 0 - 0 - 0 + 0 + 0 True - True + True True True - in + in True - True + True True True liststore2 - False - False - 0 - False + False + False + 0 + False @@ -74,22 +74,22 @@ - 0 - 1 + 0 + 1 _Display True - True - True + True + True end - True + True - 0 - 2 + 0 + 2 diff --git a/sfx2/uiconfig/ui/helpcontentpage.ui b/sfx2/uiconfig/ui/helpcontentpage.ui index 42012f9bc093..97646c191355 100644 --- a/sfx2/uiconfig/ui/helpcontentpage.ui +++ b/sfx2/uiconfig/ui/helpcontentpage.ui @@ -1,5 +1,5 @@ - + @@ -15,28 +15,28 @@ True - False + False True True - 6 + 6 vertical True - False + False True True - in + in True - True + True True True liststore2 - False - False - 0 + False + False + 0 @@ -63,8 +63,8 @@ - 0 - 0 + 0 + 0 diff --git a/sfx2/uiconfig/ui/helpcontrol.ui b/sfx2/uiconfig/ui/helpcontrol.ui index 8d30bdfc9b35..8570d96996d1 100644 --- a/sfx2/uiconfig/ui/helpcontrol.ui +++ b/sfx2/uiconfig/ui/helpcontrol.ui @@ -1,25 +1,25 @@ - + True - False + False True True True - False + False True True - 6 + 6 vertical 6 True - False + False False @@ -30,90 +30,42 @@ True - True + True True True - True + True True - False + False True True - - - - - - - - - - - - - - - - - - - - - - - - True - False + False Contents - False + False True - False + False True True - - - - - - - - - - - - - - - - - - - - - - - - 1 @@ -122,48 +74,24 @@ True - False + False Index 1 - False + False True - False + False True True - - - - - - - - - - - - - - - - - - - - - - - - 2 @@ -172,48 +100,24 @@ True - False + False Find 2 - False + False True - False + False True True - - - - - - - - - - - - - - - - - - - - - - - - 3 @@ -222,12 +126,12 @@ True - False + False Bookmarks 3 - False + False diff --git a/sfx2/uiconfig/ui/helpindexpage.ui b/sfx2/uiconfig/ui/helpindexpage.ui index 8850f8ccfacf..fbab8d8cf0ef 100644 --- a/sfx2/uiconfig/ui/helpindexpage.ui +++ b/sfx2/uiconfig/ui/helpindexpage.ui @@ -1,5 +1,5 @@ - + @@ -12,67 +12,67 @@ True - False + False True True - 6 + 6 vertical - + True - False + False True True - 6 + 6 _Display True - True - True + True + True end - True + True - 0 - 1 + 0 + 1 True - False + False True True - 0 - none + 0 + none - + True - False - True - 3 + False 6 + True + 3 True - True + True True True - in + in True - True + True True True liststore2 - False - False - 0 - False + False + False + 0 + False @@ -90,21 +90,21 @@ - 0 - 1 + 0 + 1 True - True + True True + True True - True - 0 - 0 + 0 + 0 @@ -112,16 +112,16 @@ True - False + False _Search Term - True + True 0 - 0 - 0 + 0 + 0 diff --git a/sfx2/uiconfig/ui/helpsearchpage.ui b/sfx2/uiconfig/ui/helpsearchpage.ui index 664bda924524..ac8f4ec8ef6d 100644 --- a/sfx2/uiconfig/ui/helpsearchpage.ui +++ b/sfx2/uiconfig/ui/helpsearchpage.ui @@ -1,5 +1,5 @@ - + @@ -12,65 +12,65 @@ True - False + False True True - 6 + 6 vertical - + True - False + False True True - 6 + 6 _Display True - True - True + True + True end - True + True - 0 - 5 + 0 + 5 True - False + False _Search term - True - search + True + search 0 - 0 - 0 + 0 + 0 True - True + True True True - in + in True - True + True True True liststore2 - False - False - 0 - False + False + False + 0 + False @@ -88,80 +88,80 @@ - 0 - 4 + 0 + 4 - + True - False + False True - 12 + 12 True - False + False True - True + True + True True - True - 0 - 0 + 0 + 0 _Find True - True - True - True + True + True + True - 1 - 0 + 1 + 0 - 0 - 1 + 0 + 1 _Complete words only True - True - False - True - True + True + False + True + True - 0 - 2 + 0 + 2 Find in _headings only True - True - False - True - True + True + False + True + True - 0 - 3 + 0 + 3 diff --git a/sfx2/uiconfig/ui/helpwindow.ui b/sfx2/uiconfig/ui/helpwindow.ui index 6241c287c166..31692552b468 100644 --- a/sfx2/uiconfig/ui/helpwindow.ui +++ b/sfx2/uiconfig/ui/helpwindow.ui @@ -1,17 +1,17 @@ - + True - False + False True True - True + True True - False + False True True vertical @@ -27,7 +27,7 @@ True - False + False True True vertical @@ -35,18 +35,19 @@ True - False + False True 12 True - True - icons + True + icons True - sfx2/res/indexon_small.png + False + sfx2/res/indexon_small.png False @@ -56,7 +57,7 @@ True - False + False False @@ -66,8 +67,9 @@ True - Previous Page - res/sc06301.png + False + Previous Page + res/sc06301.png False @@ -77,8 +79,9 @@ True - Next Page - res/sc06300.png + False + Next Page + res/sc06300.png False @@ -88,8 +91,9 @@ True - First Page - res/sc06303.png + False + First Page + res/sc06303.png False @@ -99,7 +103,7 @@ True - False + False False @@ -109,8 +113,9 @@ True - Print - res/sc05504.png + False + Print + res/sc05504.png False @@ -120,8 +125,9 @@ True - Add to Bookmarks - sfx2/res/favourite.png + False + Add to Bookmarks + sfx2/res/favourite.png False @@ -131,8 +137,9 @@ True - Find on this Page - sfx2/res/sc05961.png + False + Find on this Page + sfx2/res/sc05961.png False @@ -148,16 +155,16 @@ - True - False - True - True - True + True + False + True + True + True False True - end + end 1 @@ -171,7 +178,7 @@ True - False + False True True vertical @@ -194,6 +201,6 @@ True - False + False diff --git a/sfx2/uiconfig/ui/infobar.ui b/sfx2/uiconfig/ui/infobar.ui index a7cf21662096..0caeecd2a513 100644 --- a/sfx2/uiconfig/ui/infobar.ui +++ b/sfx2/uiconfig/ui/infobar.ui @@ -1,44 +1,44 @@ - + True - False + False True True vertical True - True + True True True - never - never - in + never + never + in True - False + False - + True - False + False True - 2 - 6 + 2 + 6 True - False + False start 3 True - False + False center 6 @@ -53,17 +53,18 @@ - True - True + True + True center - icons - False + icons + False 1 True - Close Infobar - window-close-symbolic + False + Close Infobar + window-close-symbolic False @@ -82,20 +83,20 @@ - 2 - 0 + 2 + 0 True - False + False start 6 True - False + False center missing-image @@ -107,8 +108,8 @@ - False - True + False + True center True label @@ -131,38 +132,38 @@ - 0 - 0 + 0 + 0 - 60 - 6 + 60 + 6 True - True + True True True - never - never + never + never - 60 - 6 + 60 + 6 True - True + True True True False - word-char - False - False + word-char + False + False - 1 - 0 + 1 + 0 diff --git a/sfx2/uiconfig/ui/inputdialog.ui b/sfx2/uiconfig/ui/inputdialog.ui index 9d8680fd98ac..8bee2dd5cd93 100644 --- a/sfx2/uiconfig/ui/inputdialog.ui +++ b/sfx2/uiconfig/ui/inputdialog.ui @@ -1,29 +1,29 @@ - + - False - 6 + False + 6 True - 0 - 0 - dialog + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _Help True - True - True + True + True True @@ -37,10 +37,10 @@ _OK True - True - True - True - True + True + True + True + True True @@ -53,8 +53,8 @@ _Cancel True - True - True + True + True True @@ -67,44 +67,44 @@ False True - end + end 0 - + True - False + False start True True - 6 + 6 True - False + False Height: - True - entry + True + entry 0 - 0 - 0 + 0 + 0 True - True + True True + True True - True - 0 - 1 + 0 + 1 @@ -121,8 +121,5 @@ ok cancel - - - diff --git a/sfx2/uiconfig/ui/licensedialog.ui b/sfx2/uiconfig/ui/licensedialog.ui index ee82f6968513..004f029b9132 100644 --- a/sfx2/uiconfig/ui/licensedialog.ui +++ b/sfx2/uiconfig/ui/licensedialog.ui @@ -1,33 +1,33 @@ - + - False - 6 + False + 6 Licensing and Legal information False True - 0 - 0 - dialog + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _Show License True - True - True - True - True + True + True + True + True False @@ -40,11 +40,11 @@ _Close True - True - True - True - True - True + True + True + True + True + True True @@ -57,14 +57,14 @@ False True - end + end 0 True - False + False %PRODUCTNAME is made available subject to the terms of the Mozilla Public License, v. 2.0. A copy of the MPL can be obtained at http://mozilla.org/MPL/2.0/. Third Party Code Additional copyright notices and license terms applicable to portions of the Software are set forth in the LICENSE.html file; choose Show License to see exact details in English. @@ -75,7 +75,7 @@ Copyright © 2000–2024 LibreOffice contributors. All rights reserved. This product was created by %OOOVENDOR, based on OpenOffice.org, which is Copyright 2000, 2011 Oracle and/or its affiliates. %OOOVENDOR acknowledges all community members, please see http://www.libreoffice.org/ for more details. True - 80 + 80 0 0 @@ -91,8 +91,5 @@ This product was created by %OOOVENDOR, based on OpenOffice.org, which is Copyri ok close - - - diff --git a/sfx2/uiconfig/ui/linkeditdialog.ui b/sfx2/uiconfig/ui/linkeditdialog.ui index 0fbe755ffc6d..c5bd365d8b67 100644 --- a/sfx2/uiconfig/ui/linkeditdialog.ui +++ b/sfx2/uiconfig/ui/linkeditdialog.ui @@ -1,35 +1,32 @@ - + - False - 6 + False + 6 Modify DDE Link True - 0 - 0 - dialog - - - + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _OK True - True - True - True - True + True + True + True + True True @@ -42,8 +39,8 @@ _Cancel True - True - True + True + True True @@ -56,8 +53,8 @@ _Help True - True - True + True + True True @@ -71,78 +68,78 @@ False True - end + end 0 True - False + False True True - 0 - none + 0 + none - + True - False - True - True - 6 - 12 + False 12 6 + True + True + 6 + 12 True - False + False start _Application: - True - app + True + app - 0 - 0 + 0 + 0 True - False + False start _File: - True - file + True + file - 0 - 1 + 0 + 1 True - False + False start _Category: - True - category + True + category - 0 - 2 + 0 + 2 True - True + True True + True True - True Lists the application that last saved the source file. The office suite applications have the server name soffice. @@ -150,17 +147,17 @@ - 1 - 0 + 1 + 0 True - True + True True + True True - True Path to the source file. Relative paths must be expressed by full URI, for example, with file://. @@ -168,17 +165,17 @@ - 1 - 1 + 1 + 1 True - True + True True + True True - True Lists the section or object that the link refers to in the source file. If you want, you can enter a new section or object here. @@ -186,8 +183,8 @@ - 1 - 2 + 1 + 2 @@ -195,7 +192,7 @@ True - False + False Modify Link diff --git a/sfx2/uiconfig/ui/loadtemplatedialog.ui b/sfx2/uiconfig/ui/loadtemplatedialog.ui index 36ed46a32a2f..e9470430188d 100644 --- a/sfx2/uiconfig/ui/loadtemplatedialog.ui +++ b/sfx2/uiconfig/ui/loadtemplatedialog.ui @@ -1,5 +1,5 @@ - + @@ -19,30 +19,30 @@ - False - 6 + False + 6 New True - dialog + dialog - False + False True True vertical 12 - False - end + False + end From File... - True - True - True - True - Copy styles from selected external document to current document. + True + True + True + Copy styles from selected external document to current document. + True Locate the file containing the styles that you want to load, and then click Open. @@ -59,9 +59,9 @@ _Cancel True - True - True - True + True + True + True True @@ -74,10 +74,10 @@ _OK True - True - True - True - True + True + True + True + True True @@ -90,9 +90,9 @@ _Help True - True - True - True + True + True + True True @@ -106,47 +106,47 @@ False True - end + end 0 - + True - False + False True True - 6 - 12 - True + 6 + 12 + True True - False + False True True - 0 - none + 0 + none True - True - True - True - in + True 12 6 + True + True + in True - True + True True liststore1 - False - False - 0 - False + False + False + 0 + False @@ -172,7 +172,7 @@ True - False + False Categories @@ -181,37 +181,37 @@ - 0 - 0 + 0 + 0 True - False + False True True - 0 - none + 0 + none True - True - True - True - in + True 12 6 + True + True + in True - True + True True liststore2 - False - False - 0 - False + False + False + 0 + False @@ -237,37 +237,37 @@ True - False + False + Templates in the selected category Templates - Templates in the selected category - 1 - 0 + 1 + 0 - + True - False - 6 - 12 - True + False + 6 + 12 + True _Paragraph and Character - True - False - True - True - Copy paragraph and character styles to current document. - True + True + False + True + Copy paragraph and character styles to current document. + True + True Loads the paragraph and the character styles from the selected document into the current document. @@ -275,19 +275,19 @@ - 0 - 0 + 0 + 0 _Frame - True - False - True - True - Copy frame styles to current document. - True + True + False + True + Copy frame styles to current document. + True + True Loads the frame styles from the selected document into the current document. @@ -295,19 +295,19 @@ - 1 - 0 + 1 + 0 Pa_ge - True - False - True - True - Copy page styles to current document. - True + True + False + True + Copy page styles to current document. + True + True Loads the page styles from the selected document into the current document. @@ -315,19 +315,19 @@ - 2 - 0 + 2 + 0 _List - True - False - True - True - Copy list styles to current document. - True + True + False + True + Copy list styles to current document. + True + True Loads the list styles from the selected document into the current document. @@ -335,19 +335,19 @@ - 0 - 1 + 0 + 1 _Overwrite - True - False - True - True - True - Overwrite styles with same name + True + False + True + Overwrite styles with same name + True + True Replaces styles in the current document that have the same name as the styles you are loading. @@ -355,8 +355,8 @@ - 1 - 1 + 1 + 1 @@ -364,44 +364,44 @@ - 0 - 1 + 0 + 1 2 - False - True + False + True Load Styles from Template - 0 - 3 + 0 + 3 2 True - True - True + True + True True - False - 6 + False + 6 - False - True + False + True start start - 0 - 0 + 0 + 0 @@ -409,9 +409,9 @@ True - False + False Pre_view - True + True @@ -421,8 +421,8 @@ - 0 - 2 + 0 + 2 2 @@ -441,9 +441,6 @@ ok help - - - Imports formatting styles from another document or template into the current document. diff --git a/sfx2/uiconfig/ui/newstyle.ui b/sfx2/uiconfig/ui/newstyle.ui index 91ccd6174610..cabd281b8b97 100644 --- a/sfx2/uiconfig/ui/newstyle.ui +++ b/sfx2/uiconfig/ui/newstyle.ui @@ -1,5 +1,5 @@ - + @@ -11,36 +11,33 @@ - False - 6 + False + 6 New Style from Selection True - 0 - 0 - dialog - - - + 0 + 0 + dialog - False + False True True vertical 12 - False - end + False + end _OK True False - True - True - True - True + True + True + True + True True @@ -53,8 +50,8 @@ _Cancel True - True - True + True + True True @@ -67,8 +64,8 @@ _Help True - True - True + True + True True @@ -82,46 +79,46 @@ False True - end + end 0 True - False + False True True - 0 - none + 0 + none - + True - False - True - True - 3 + False 12 6 + True + True + 3 True - True + True True True - in + in True - True + True True True liststore1 - False - False - 0 - False + False + False + 0 + False @@ -144,16 +141,16 @@ - 0 - 2 + 0 + 2 True - True + True True - True + True True @@ -162,24 +159,24 @@ - 0 - 0 + 0 + 0 True - False + False + Custom styles for current document styles 0 - Custom styles for current document - 0 - 1 + 0 + 1 @@ -187,7 +184,7 @@ True - False + False Enter new style name: diff --git a/sfx2/uiconfig/ui/notebookbarpopup.ui b/sfx2/uiconfig/ui/notebookbarpopup.ui index 297c5093d5fd..5e86e0daff06 100644 --- a/sfx2/uiconfig/ui/notebookbarpopup.ui +++ b/sfx2/uiconfig/ui/notebookbarpopup.ui @@ -1,20 +1,20 @@ - + - False + False True True - 4 + 4 False - True - popup-menu + True + popup-menu False True - False + False 6 True True diff --git a/sfx2/uiconfig/ui/printeroptionsdialog.ui b/sfx2/uiconfig/ui/printeroptionsdialog.ui index 2176e68a89c0..8f85cda1aebb 100644 --- a/sfx2/uiconfig/ui/printeroptionsdialog.ui +++ b/sfx2/uiconfig/ui/printeroptionsdialog.ui @@ -1,33 +1,33 @@ - + - False - 6 + False + 6 Printer Options False True - 0 - 0 - dialog + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _OK True - True - True - True - True + True + True + True + True True @@ -40,9 +40,9 @@ _Cancel True - True - True - True + True + True + True True @@ -55,8 +55,8 @@ _Help True - True - True + True + True True @@ -70,7 +70,7 @@ False True - end + end 0 @@ -84,8 +84,5 @@ cancel help - - - diff --git a/sfx2/uiconfig/ui/querysavedialog.ui b/sfx2/uiconfig/ui/querysavedialog.ui index 4e78257e553c..4eeefe6c38b0 100644 --- a/sfx2/uiconfig/ui/querysavedialog.ui +++ b/sfx2/uiconfig/ui/querysavedialog.ui @@ -1,32 +1,32 @@ - + - False + False Save Document? False True - dialog - True - warning + dialog + True + warning Save changes to document “$(DOC)” before closing? - Your changes will be lost if you don’t save them. + Your changes will be lost if you don’t save them. - False + False vertical 12 - False + False Do_n’t Save True - True - True - True + True + True + True @@ -41,8 +41,8 @@ _Cancel True - True - True + True + True True @@ -55,11 +55,11 @@ _Save True - True - True - True - True - True + True + True + True + True + True False @@ -71,7 +71,7 @@ False True - end + end 0 diff --git a/sfx2/uiconfig/ui/safemodequerydialog.ui b/sfx2/uiconfig/ui/safemodequerydialog.ui index 774c380848a3..8f76f1a58de2 100644 --- a/sfx2/uiconfig/ui/safemodequerydialog.ui +++ b/sfx2/uiconfig/ui/safemodequerydialog.ui @@ -1,33 +1,33 @@ - + - False + False Enter Safe Mode False True - dialog - question + dialog + question Are you sure you want to restart %PRODUCTNAME and enter safe mode? - False + False vertical 2 - False + False True _Cancel True - True - True - True - True - True + True + True + True + True + True False @@ -39,9 +39,9 @@ _Restart True - True - True - True + True + True + True False @@ -62,8 +62,5 @@ cancel ok - - - diff --git a/sfx2/uiconfig/ui/saveastemplatedlg.ui b/sfx2/uiconfig/ui/saveastemplatedlg.ui index dc4d02404d3d..ae0d45567af3 100644 --- a/sfx2/uiconfig/ui/saveastemplatedlg.ui +++ b/sfx2/uiconfig/ui/saveastemplatedlg.ui @@ -1,5 +1,5 @@ - + @@ -9,28 +9,28 @@ - False - 6 + False + 6 Save As Template True - 0 - 0 - normal + 0 + 0 + normal - False + False vertical 2 - False - end + False + end _Help True - True - True + True + True True @@ -44,10 +44,10 @@ _OK True - True - True - True - True + True + True + True + True True @@ -60,8 +60,8 @@ _Cancel True - True - True + True + True True @@ -74,35 +74,35 @@ False True - end + end 1 - + True - False - 6 + False + 6 True True - 12 - 12 + 12 + 12 True - False + False True vertical 6 True - False + False + Enter a name for the template. Enter Template _Name: - Enter a name for the template. - True - name_entry + True + name_entry 0 @@ -116,10 +116,10 @@ - 300 + 300 True - True - True + True + True True @@ -135,14 +135,14 @@ - 0 - 0 + 0 + 0 True - False + False True True vertical @@ -150,11 +150,11 @@ True - False + False + Save template in selected category. Select Template _Category: - Save template in selected category. - True - categorylb + True + categorylb 0 @@ -169,22 +169,22 @@ True - True + True True True - in + in - 146 + 146 True - True + True True True categorylist - False - False - 0 - False + False + False + 0 + False @@ -214,18 +214,18 @@ - 0 - 1 + 0 + 1 _Set as default template True - True - False - True - True + True + False + True + True The new template will be used as the default template. @@ -233,8 +233,8 @@ - 0 - 2 + 0 + 2 @@ -251,9 +251,6 @@ ok cancel - - - Saves the current document as a template. diff --git a/sfx2/uiconfig/ui/searchdialog.ui b/sfx2/uiconfig/ui/searchdialog.ui index a99b20e768a5..60bf2b3da366 100644 --- a/sfx2/uiconfig/ui/searchdialog.ui +++ b/sfx2/uiconfig/ui/searchdialog.ui @@ -1,35 +1,32 @@ - + - False - 6 + False + 6 Find on this Page - 0 - 0 - dialog - - - + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _Find True - True - True - True - True - True + True + True + True + True + True False @@ -41,8 +38,8 @@ _Close True - True - True + True + True True @@ -55,55 +52,55 @@ False True - end + end 0 True - False + False True vertical 12 - + True - False - 6 + False + 6 True - False + False center True - True + True - True + True + True True - True - 0 - 1 + 0 + 1 True - False + False _Search for: - True - searchterm + True + searchterm 0 - 0 - 0 + 0 + 0 @@ -114,66 +111,66 @@ - + True - False - 6 - 12 + False + 6 + 12 Ma_tch case True - True - False - True - True + True + False + True + True - 0 - 0 + 0 + 0 Whole wor_ds only True - True - False - True - True + True + False + True + True - 1 - 0 + 1 + 0 Bac_kwards True - True - False - True - True + True + False + True + True - 1 - 1 + 1 + 1 Wrap _around True - True - False - True - True + True + False + True + True - 0 - 1 + 0 + 1 diff --git a/sfx2/uiconfig/ui/singletabdialog.ui b/sfx2/uiconfig/ui/singletabdialog.ui index c1ddd4f3190d..65d33288c226 100644 --- a/sfx2/uiconfig/ui/singletabdialog.ui +++ b/sfx2/uiconfig/ui/singletabdialog.ui @@ -1,33 +1,30 @@ - + - False - 6 + False + 6 False True - dialog - - - + dialog - False + False vertical 12 - False - end + False + end _OK True - True - True - True - True + True + True + True + True True @@ -40,8 +37,8 @@ _Cancel True - True - True + True + True True @@ -54,8 +51,8 @@ _Help True - True - True + True + True True @@ -69,7 +66,7 @@ False True - end + end 0 diff --git a/sfx2/uiconfig/ui/stylecontextmenu.ui b/sfx2/uiconfig/ui/stylecontextmenu.ui index 4dfb520ecf95..d8c1e2ee45c4 100644 --- a/sfx2/uiconfig/ui/stylecontextmenu.ui +++ b/sfx2/uiconfig/ui/stylecontextmenu.ui @@ -1,48 +1,48 @@ - + True - False + False True - False + False New... - True + True True - False + False Edit Style... - True + True True - False + False Hide - True + True True - False + False Show - True + True True - False + False Delete... - True + True diff --git a/sfx2/uiconfig/ui/templatecategorydlg.ui b/sfx2/uiconfig/ui/templatecategorydlg.ui index ecf5bd92ce6f..cdae9a2082d8 100644 --- a/sfx2/uiconfig/ui/templatecategorydlg.ui +++ b/sfx2/uiconfig/ui/templatecategorydlg.ui @@ -1,5 +1,5 @@ - + @@ -11,31 +11,28 @@ - False - 6 + False + 6 Select Category True - 0 - 0 - normal - - - + 0 + 0 + normal - False + False vertical 2 - False - end + False + end _Help True - True - True + True + True True @@ -49,10 +46,10 @@ _OK True - True - True - True - True + True + True + True + True True @@ -65,8 +62,8 @@ _Cancel True - True - True + True + True True @@ -79,24 +76,24 @@ False True - end + end 1 - + True - False - 6 + False + 6 True True - 12 - 12 + 12 + 12 True - False + False True True vertical @@ -104,10 +101,10 @@ True - False + False Select from Existing Category - True - categorylb + True + categorylb 0 @@ -122,20 +119,20 @@ True - True + True True True - in + in True - True + True True categorylist - False - False - 0 - False + False + False + 0 + False @@ -160,24 +157,24 @@ - 0 - 0 + 0 + 0 True - False + False True vertical 6 True - False + False or Create a New Category - True - category_entry + True + category_entry 0 @@ -192,10 +189,10 @@ True - True + True True + True True - True False @@ -205,8 +202,8 @@ - 0 - 1 + 0 + 1 diff --git a/sfx2/uiconfig/ui/urlbox.ui b/sfx2/uiconfig/ui/urlbox.ui index 29fe22b9f15a..05dd1acf0bfe 100644 --- a/sfx2/uiconfig/ui/urlbox.ui +++ b/sfx2/uiconfig/ui/urlbox.ui @@ -1,22 +1,22 @@ - + True - False + False True 6 True - False + False True - True + True + True True - True diff --git a/sfx2/uiconfig/ui/versioncommentdialog.ui b/sfx2/uiconfig/ui/versioncommentdialog.ui index 42184735715a..42053332bc3f 100644 --- a/sfx2/uiconfig/ui/versioncommentdialog.ui +++ b/sfx2/uiconfig/ui/versioncommentdialog.ui @@ -1,33 +1,33 @@ - + - False - 6 + False + 6 Insert Version Comment False True - 0 - 0 - dialog + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _OK True - True - True - True - True + True + True + True + True True @@ -40,9 +40,9 @@ _Close True - True - True - True + True + True + True True @@ -55,8 +55,8 @@ _Cancel True - True - True + True + True True @@ -69,8 +69,8 @@ _Help True - True - True + True + True True @@ -84,61 +84,61 @@ False True - end + end 0 - + True - False + False True True - 6 + 6 True - False + False Date and time: 0 - 0 - 0 + 0 + 0 True - False + False Saved by: 0 - 0 - 1 + 0 + 1 True - True + True True True - in + in True - True + True True True - 0 - 2 + 0 + 2 @@ -156,9 +156,6 @@ cancel help - - - Enter a comment here when you are saving a new version. If you clicked Show to open this dialog, you cannot edit the comment. diff --git a/sfx2/uiconfig/ui/versionscmis.ui b/sfx2/uiconfig/ui/versionscmis.ui index 16eff4f32926..277a07423ae9 100644 --- a/sfx2/uiconfig/ui/versionscmis.ui +++ b/sfx2/uiconfig/ui/versionscmis.ui @@ -1,5 +1,5 @@ - + @@ -15,29 +15,26 @@ - False - 6 + False + 6 True - dialog - - - + dialog - False + False vertical 12 - False - end + False + end _Delete True - True - True - True + True + True + True False @@ -49,9 +46,9 @@ _Compare True - True - True - True + True + True + True False @@ -63,9 +60,9 @@ _Show... True - True - True - True + True + True + True False @@ -77,8 +74,8 @@ _Close True - True - True + True + True True @@ -91,9 +88,9 @@ _Open True - True - True - True + True + True + True False @@ -105,8 +102,8 @@ _Help True - True - True + True + True True @@ -120,7 +117,7 @@ False True - end + end 0 @@ -128,45 +125,44 @@ True - False + False True True - 12 + 12 True - False + False True True - 0 - none + 0 + none True - False - True - True + False 12 6 + True + True True - True + True True True - in + in True - True - True + True + True True True liststore3 - True - 0 - False + 0 + False @@ -213,8 +209,8 @@ - 0 - 0 + 0 + 0 @@ -222,7 +218,7 @@ True - False + False Existing Versions @@ -231,8 +227,8 @@ - 0 - 0 + 0 + 0 diff --git a/sfx2/uiconfig/ui/versionsofdialog.ui b/sfx2/uiconfig/ui/versionsofdialog.ui index c217cbf59138..eb565de84cce 100644 --- a/sfx2/uiconfig/ui/versionsofdialog.ui +++ b/sfx2/uiconfig/ui/versionsofdialog.ui @@ -1,5 +1,5 @@ - + @@ -15,25 +15,25 @@ - False - 6 + False + 6 True - dialog + dialog - False + False vertical 12 - False - end + False + end CMIS True - True - True + True + True False @@ -45,9 +45,9 @@ _Delete True - True - True - True + True + True + True Deletes the selected version. @@ -64,9 +64,9 @@ _Compare True - True - True - True + True + True + True Compare the changes that were made in each version. @@ -83,9 +83,9 @@ _Show... True - True - True - True + True + True + True Displays the entire comment for the selected version. @@ -102,10 +102,10 @@ _Close True - True - True - True - True + True + True + True + True True @@ -118,9 +118,9 @@ _Open True - True - True - True + True + True + True Opens the selected version in a read-only window. @@ -137,8 +137,8 @@ _Help True - True - True + True + True True @@ -152,40 +152,40 @@ False True - end + end 0 - + True - False + False True True - 12 + 12 True - False + False True - 0 - none + 0 + none - + True - False - 12 + False 12 6 + 12 Save _New Version True - True - True - True + True + True + True Saves the current state of the document as a new version. If you want, you can also enter comments in the Insert Version Comment dialog before you save the new version. @@ -193,18 +193,18 @@ - 0 - 0 + 0 + 0 _Always save a new version on closing True - True - False - True - True + True + False + True + True If you have made changes to your document then a new version is automatically saved when you close the document. @@ -212,8 +212,8 @@ - 1 - 0 + 1 + 0 @@ -221,7 +221,7 @@ True - False + False New Versions @@ -230,44 +230,44 @@ - 0 - 0 + 0 + 0 True - False + False True True - 0 - none + 0 + none True - False - True - True + False 12 6 + True + True True - True + True True True - in + in True - True - True + True + True True True liststore3 - 0 - False + 0 + False @@ -319,8 +319,8 @@ - 0 - 0 + 0 + 0 @@ -328,7 +328,7 @@ True - False + False Existing Versions @@ -337,8 +337,8 @@ - 0 - 1 + 0 + 1 @@ -359,9 +359,6 @@ open help - - - Saves and organizes multiple versions of the current document in the same file. You can also open, delete and compare previous versions. From 0381750784107b28926180f6e67ca18c60e30384 Mon Sep 17 00:00:00 2001 From: Andrea Gelmini Date: Thu, 27 Jun 2024 23:19:02 +0200 Subject: [PATCH 111/194] Fix typos Change-Id: I0418baac572db21f3b87af6281572e61b983e11d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169689 Tested-by: Jenkins Reviewed-by: Julien Nabet --- sd/qa/unit/AnnotationTest.cxx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sd/qa/unit/AnnotationTest.cxx b/sd/qa/unit/AnnotationTest.cxx index a1b73be924ba..563fb2122018 100644 --- a/sd/qa/unit/AnnotationTest.cxx +++ b/sd/qa/unit/AnnotationTest.cxx @@ -232,12 +232,12 @@ CPPUNIT_TEST_FIXTURE(AnnotationTest, testAnnotationPositionUpdate) // Move the object pObject->Move({ 200, 200 }); - // Object at a new postion + // Object at a new position CPPUNIT_ASSERT_EQUAL(tools::Long(200), pObject->GetLogicRect().Left()); // in 100th of an mm (hmm) CPPUNIT_ASSERT_EQUAL(tools::Long(200), pObject->GetLogicRect().Top()); - // Position of the annotation whould be the same as the object (2.0 mm equals 200 hmm) + // Position of the annotation would be the same as the object (2.0 mm equals 200 hmm) CPPUNIT_ASSERT_DOUBLES_EQUAL(2.0, pAnnotationData->mxAnnotation->getPosition().X, 1E-4); // mm CPPUNIT_ASSERT_DOUBLES_EQUAL(2.0, pAnnotationData->mxAnnotation->getPosition().Y, 1E-4); From 5b33bc443859d376efd578f070e3d3d81c93fd24 Mon Sep 17 00:00:00 2001 From: Andrea Gelmini Date: Thu, 27 Jun 2024 08:23:25 +0200 Subject: [PATCH 112/194] Fix typo Change-Id: I8a970902688bdece46774e73b76ee2bdeea3de57 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169608 Tested-by: Jenkins Reviewed-by: Julien Nabet --- sfx2/source/doc/objserv.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sfx2/source/doc/objserv.cxx b/sfx2/source/doc/objserv.cxx index f4bcbd1b0496..428e4d2d9d0c 100644 --- a/sfx2/source/doc/objserv.cxx +++ b/sfx2/source/doc/objserv.cxx @@ -1294,7 +1294,7 @@ void SfxObjectShell::ExecFile_Impl(SfxRequest &rReq) case SID_CLOSEDOC: { - // cancel requests during SfxApplication is closing or quiting. + // cancel requests during SfxApplication is closing or quitting. SfxAppData_Impl* pAppData = SfxGetpApp()->Get_Impl(); if (pAppData && (pAppData->bInQuit || pAppData->bClosingDocs)) { From cb3c65fb706cb1c7c9224222fd16875e924a9759 Mon Sep 17 00:00:00 2001 From: Noel Grandin Date: Thu, 27 Jun 2024 19:24:28 +0200 Subject: [PATCH 113/194] assert when SfxObjectItems are modified while in a pool which has always been a problem, but becomes a more obvious problem when I implement some upcoming optimisations Change-Id: I8b0368b0b8e9a726c71d241841afeed3876281d9 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169657 Reviewed-by: Noel Grandin Tested-by: Jenkins --- editeng/source/items/textitem.cxx | 4 ++-- include/svl/cintitem.hxx | 8 ++++---- include/svl/custritm.hxx | 2 +- include/svl/eitem.hxx | 4 ++-- include/svl/flagitem.hxx | 2 +- include/svl/intitem.hxx | 2 +- include/svl/poolitem.hxx | 7 ++----- include/svl/ptitem.hxx | 2 +- 8 files changed, 14 insertions(+), 17 deletions(-) diff --git a/editeng/source/items/textitem.cxx b/editeng/source/items/textitem.cxx index 2bdfdd6890d9..34ca99d8fcd6 100644 --- a/editeng/source/items/textitem.cxx +++ b/editeng/source/items/textitem.cxx @@ -997,7 +997,7 @@ bool SvxFontHeightItem::HasMetrics() const void SvxFontHeightItem::SetHeight( sal_uInt32 nNewHeight, const sal_uInt16 nNewProp, MapUnit eUnit ) { - DBG_ASSERT( GetRefCount() == 0, "SetValue() with pooled item" ); + assert( !isPooled() && "SetHeight() with pooled item" ); ASSERT_CHANGE_REFCOUNTED_ITEM; if( MapUnit::MapRelative != eUnit ) @@ -1015,7 +1015,7 @@ void SvxFontHeightItem::SetHeight( sal_uInt32 nNewHeight, const sal_uInt16 nNewP void SvxFontHeightItem::SetHeight( sal_uInt32 nNewHeight, sal_uInt16 nNewProp, MapUnit eMetric, MapUnit eCoreMetric ) { - DBG_ASSERT( GetRefCount() == 0, "SetValue() with pooled item" ); + assert( !isPooled() && "SetValue() with pooled item" ); ASSERT_CHANGE_REFCOUNTED_ITEM; if( MapUnit::MapRelative != eMetric ) diff --git a/include/svl/cintitem.hxx b/include/svl/cintitem.hxx index 0b3da790d1ed..eef40f333240 100644 --- a/include/svl/cintitem.hxx +++ b/include/svl/cintitem.hxx @@ -56,7 +56,7 @@ public: inline void CntByteItem::SetValue(sal_uInt8 nTheValue) { - DBG_ASSERT(GetRefCount() == 0, "CntByteItem::SetValue(): Pooled item"); + assert( !isPooled() && "SetValue() with pooled item" ); m_nValue = nTheValue; } @@ -93,7 +93,7 @@ public: inline void CntUInt16Item::SetValue(sal_uInt16 nTheValue) { - DBG_ASSERT(GetRefCount() == 0, "CntUInt16Item::SetValue(): Pooled item"); + assert( !isPooled() && "SetValue() with pooled item" ); m_nValue = nTheValue; } @@ -130,7 +130,7 @@ public: inline void CntInt32Item::SetValue(sal_Int32 nTheValue) { - DBG_ASSERT(GetRefCount() == 0, "CntInt32Item::SetValue(): Pooled item"); + assert( !isPooled() && "SetValue() with pooled item" ); m_nValue = nTheValue; } @@ -167,7 +167,7 @@ public: inline void CntUInt32Item::SetValue(sal_uInt32 nTheValue) { - DBG_ASSERT(GetRefCount() == 0, "CntUInt32Item::SetValue(): Pooled item"); + assert( !isPooled() && "SetValue() with pooled item" ); m_nValue = nTheValue; } diff --git a/include/svl/custritm.hxx b/include/svl/custritm.hxx index 0251df2ca182..3e2d23eb8ee4 100644 --- a/include/svl/custritm.hxx +++ b/include/svl/custritm.hxx @@ -60,7 +60,7 @@ public: inline void CntUnencodedStringItem::SetValue(const OUString & rTheValue) { - assert(GetRefCount() == 0 && "cannot modify name of pooled item"); + assert( !isPooled() && "SetValue() with pooled item" ); m_aValue = rTheValue; } diff --git a/include/svl/eitem.hxx b/include/svl/eitem.hxx index 8e95bed00881..a75a329ba146 100644 --- a/include/svl/eitem.hxx +++ b/include/svl/eitem.hxx @@ -22,7 +22,7 @@ #include #include - +#include template class SAL_DLLPUBLIC_RTTI SfxEnumItem : public SfxEnumItemInterface @@ -43,7 +43,7 @@ public: void SetValue(EnumT nTheValue) { - assert(GetRefCount() == 0 && "SfxEnumItem::SetValue(): Pooled item"); + assert( !isPooled() && "SetValue() with pooled item" ); m_nValue = nTheValue; } diff --git a/include/svl/flagitem.hxx b/include/svl/flagitem.hxx index 76226cb1aa80..221416986593 100644 --- a/include/svl/flagitem.hxx +++ b/include/svl/flagitem.hxx @@ -46,7 +46,7 @@ public: const IntlWrapper& ) const override; sal_uInt16 GetValue() const { return nVal; } void SetValue( sal_uInt16 nNewVal ) { - DBG_ASSERT( GetRefCount() == 0, "SetValue() with pooled item" ); + assert( !isPooled() && "SetValue() with pooled item" ); nVal = nNewVal; } bool GetFlag( sal_uInt8 nFlag ) const { return (nVal & ( 1< 0; } + // version that allows nullptrs static bool areSame(const SfxPoolItem* pItem1, const SfxPoolItem* pItem2); @@ -707,11 +709,6 @@ inline bool IsDefaultItem( const SfxPoolItem *pItem ) return pItem && (pItem->isStaticDefault() || pItem->isDynamicDefault()); } -inline bool IsPooledItem( const SfxPoolItem *pItem ) -{ - return pItem && pItem->GetRefCount() > 0; -} - SVL_DLLPUBLIC extern SfxPoolItem const * const INVALID_POOL_ITEM; SVL_DLLPUBLIC extern SfxPoolItem const * const DISABLED_POOL_ITEM; diff --git a/include/svl/ptitem.hxx b/include/svl/ptitem.hxx index 2ceb39410695..bb41ea916f45 100644 --- a/include/svl/ptitem.hxx +++ b/include/svl/ptitem.hxx @@ -47,7 +47,7 @@ public: const Point& GetValue() const { return aVal; } void SetValue( const Point& rNewVal ) { - DBG_ASSERT( GetRefCount() == 0, "SetValue() with pooled item" ); + assert( !isPooled() && "SetValue() with pooled item" ); aVal = rNewVal; } From 912c55537b11331e030d915e5857bccf182c9087 Mon Sep 17 00:00:00 2001 From: Noel Grandin Date: Thu, 27 Jun 2024 12:55:04 +0200 Subject: [PATCH 114/194] item-specific instance managers for SwFormatFrameSize and SwFormatVertOrient and add some asserts to catch if we modify these things when they inside a pool, which now that they are in hash-based container, will cause trouble. Change-Id: I2779f25cbcf056fbf71e417731d9b1f09ae33dd6 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169629 Reviewed-by: Noel Grandin Tested-by: Jenkins --- include/editeng/sizeitem.hxx | 9 ++-- sw/inc/fmtfsize.hxx | 21 ++++++--- sw/inc/fmtornt.hxx | 23 +++++++--- sw/source/core/layout/atrfrm.cxx | 75 ++++++++++++++++++++++++++++++++ 4 files changed, 112 insertions(+), 16 deletions(-) diff --git a/include/editeng/sizeitem.hxx b/include/editeng/sizeitem.hxx index 2247c76d9e79..62ba4f1fba51 100644 --- a/include/editeng/sizeitem.hxx +++ b/include/editeng/sizeitem.hxx @@ -56,12 +56,15 @@ public: virtual bool HasMetrics() const override; const Size& GetSize() const { return m_aSize; } - void SetSize(const Size& rSize) { m_aSize = rSize; } + void SetSize(const Size& rSize) + { assert( !isPooled() && "SetValue() with pooled item" ); m_aSize = rSize; } tools::Long GetWidth() const { return m_aSize.getWidth(); } tools::Long GetHeight() const { return m_aSize.getHeight(); } - void SetWidth(tools::Long n) { m_aSize.setWidth(n); } - void SetHeight(tools::Long n) { m_aSize.setHeight(n); } + void SetWidth(tools::Long n) + { assert( !isPooled() && "SetValue() with pooled item" ); m_aSize.setWidth(n); } + void SetHeight(tools::Long n) + { assert( !isPooled() && "SetValue() with pooled item" ); m_aSize.setHeight(n); } }; #endif diff --git a/sw/inc/fmtfsize.hxx b/sw/inc/fmtfsize.hxx index 66aea1e78e50..7b70411f666d 100644 --- a/sw/inc/fmtfsize.hxx +++ b/sw/inc/fmtfsize.hxx @@ -87,10 +87,12 @@ public: virtual bool PutValue( const css::uno::Any& rVal, sal_uInt8 nMemberId ) override; SwFrameSize GetHeightSizeType() const { return m_eFrameHeightType; } - void SetHeightSizeType( SwFrameSize eSize ) { m_eFrameHeightType = eSize; } + void SetHeightSizeType( SwFrameSize eSize ) + { assert( !isPooled() && "SetValue() with pooled item" ); m_eFrameHeightType = eSize; } SwFrameSize GetWidthSizeType() const { return m_eFrameWidthType; } - void SetWidthSizeType( SwFrameSize eSize ) { m_eFrameWidthType = eSize; } + void SetWidthSizeType( SwFrameSize eSize ) + { assert( !isPooled() && "SetValue() with pooled item" ); m_eFrameWidthType = eSize; } enum PercentFlags { SYNCED = 0xff }; //0xff is reserved to indicate height is synced to width @@ -99,12 +101,19 @@ public: //0xff is reserved to indicate width is synced to height sal_uInt8 GetWidthPercent() const { return m_nWidthPercent; } sal_Int16 GetWidthPercentRelation() const { return m_eWidthPercentRelation; } - void SetHeightPercent( sal_uInt8 n ) { m_nHeightPercent = n; } - void SetHeightPercentRelation ( sal_Int16 n ) { m_eHeightPercentRelation = n; } - void SetWidthPercent ( sal_uInt8 n ) { m_nWidthPercent = n; } - void SetWidthPercentRelation ( sal_Int16 n ) { m_eWidthPercentRelation = n; } + void SetHeightPercent( sal_uInt8 n ) + { assert( !isPooled() && "SetValue() with pooled item" ); m_nHeightPercent = n; } + void SetHeightPercentRelation ( sal_Int16 n ) + { assert( !isPooled() && "SetValue() with pooled item" ); m_eHeightPercentRelation = n; } + void SetWidthPercent ( sal_uInt8 n ) + { assert( !isPooled() && "SetValue() with pooled item" ); m_nWidthPercent = n; } + void SetWidthPercentRelation ( sal_Int16 n ) + { assert( !isPooled() && "SetValue() with pooled item" ); m_eWidthPercentRelation = n; } void dumpAsXml(xmlTextWriterPtr pWriter) const override; + +protected: + virtual ItemInstanceManager* getItemInstanceManager() const override; }; inline const SwFormatFrameSize &SwAttrSet::GetFrameSize(bool bInP) const diff --git a/sw/inc/fmtornt.hxx b/sw/inc/fmtornt.hxx index 0a993243cf7a..644576b6fc7f 100644 --- a/sw/inc/fmtornt.hxx +++ b/sw/inc/fmtornt.hxx @@ -56,13 +56,19 @@ public: sal_Int16 GetVertOrient() const { return m_eOrient; } sal_Int16 GetRelationOrient() const { return m_eRelation; } - void SetVertOrient( sal_Int16 eNew ) { m_eOrient = eNew; } - void SetRelationOrient( sal_Int16 eNew ) { m_eRelation = eNew; } + void SetVertOrient( sal_Int16 eNew ) + { assert( !isPooled() && "SetValue() with pooled item" ); m_eOrient = eNew; } + void SetRelationOrient( sal_Int16 eNew ) + { assert( !isPooled() && "SetValue() with pooled item" ); m_eRelation = eNew; } SwTwips GetPos() const { return m_nYPos; } - void SetPos( SwTwips nNew ) { m_nYPos = nNew; } + void SetPos( SwTwips nNew ) + { assert( !isPooled() && "SetValue() with pooled item" ); m_nYPos = nNew; } void dumpAsXml(xmlTextWriterPtr pWriter) const override; + +protected: + virtual ItemInstanceManager* getItemInstanceManager() const override; }; /// Defines the horizontal position of a fly frame. @@ -93,16 +99,19 @@ public: sal_Int16 GetHoriOrient() const { return m_eOrient; } sal_Int16 GetRelationOrient() const { return m_eRelation; } - void SetHoriOrient( sal_Int16 eNew ) { m_eOrient = eNew; } - void SetRelationOrient( sal_Int16 eNew ) { m_eRelation = eNew; } + void SetHoriOrient( sal_Int16 eNew ) { assert( !isPooled() && "SetValue() with pooled item" ); m_eOrient = eNew; } + void SetRelationOrient( sal_Int16 eNew ) { assert( !isPooled() && "SetValue() with pooled item" ); m_eRelation = eNew; } SwTwips GetPos() const { return m_nXPos; } - void SetPos( SwTwips nNew ) { m_nXPos = nNew; } + void SetPos( SwTwips nNew ) { assert( !isPooled() && "SetValue() with pooled item" ); m_nXPos = nNew; } bool IsPosToggle() const { return m_bPosToggle; } - void SetPosToggle( bool bNew ) { m_bPosToggle = bNew; } + void SetPosToggle( bool bNew ) { assert( !isPooled() && "SetValue() with pooled item" ); m_bPosToggle = bNew; } void dumpAsXml(xmlTextWriterPtr pWriter) const override; + +protected: + virtual ItemInstanceManager* getItemInstanceManager() const override; }; inline const SwFormatVertOrient &SwAttrSet::GetVertOrient(bool bInP) const diff --git a/sw/source/core/layout/atrfrm.cxx b/sw/source/core/layout/atrfrm.cxx index c3534b19534a..8c44f2ac893b 100644 --- a/sw/source/core/layout/atrfrm.cxx +++ b/sw/source/core/layout/atrfrm.cxx @@ -216,6 +216,34 @@ static void lcl_DelHFFormat( SwClient *pToRemove, SwFrameFormat *pFormat ) delete pFormat; } +namespace +{ + class SwFormatFrameSizeInstanceManager : public TypeSpecificItemInstanceManager + { + protected: + virtual size_t hashCode(const SfxPoolItem& rItem) const override + { + auto const & rFormatItem = static_cast(rItem); + std::size_t seed(0); + o3tl::hash_combine(seed, rFormatItem.GetHeightSizeType()); + o3tl::hash_combine(seed, rFormatItem.GetWidthSizeType()); + o3tl::hash_combine(seed, rFormatItem.GetWidthPercent()); + o3tl::hash_combine(seed, rFormatItem.GetWidthPercentRelation()); + o3tl::hash_combine(seed, rFormatItem.GetHeightPercent()); + o3tl::hash_combine(seed, rFormatItem.GetHeightPercentRelation()); + o3tl::hash_combine(seed, rFormatItem.GetSize().Width()); + o3tl::hash_combine(seed, rFormatItem.GetSize().Height()); + return seed; + } + }; +} + +ItemInstanceManager* SwFormatFrameSize::getItemInstanceManager() const +{ + static SwFormatFrameSizeInstanceManager aInstanceManager; + return &aInstanceManager; +} + void SwFormatFrameSize::ScaleMetrics(tools::Long lMult, tools::Long lDiv) { // Don't inherit the SvxSizeItem override (might or might not be relevant; added "just in case" // when changing SwFormatFrameSize to derive from SvxSizeItem instead of directly from @@ -1375,6 +1403,29 @@ void SwFormatSurround::dumpAsXml(xmlTextWriterPtr pWriter) const (void)xmlTextWriterEndElement(pWriter); } +namespace +{ + class SwFormatVertOrientInstanceManager : public TypeSpecificItemInstanceManager + { + protected: + virtual size_t hashCode(const SfxPoolItem& rItem) const override + { + auto const & rFormatItem = static_cast(rItem); + std::size_t seed(0); + o3tl::hash_combine(seed, rFormatItem.GetPos()); + o3tl::hash_combine(seed, rFormatItem.GetVertOrient()); + o3tl::hash_combine(seed, rFormatItem.GetRelationOrient()); + return seed; + } + }; +} + +ItemInstanceManager* SwFormatVertOrient::getItemInstanceManager() const +{ + static SwFormatVertOrientInstanceManager aInstanceManager; + return &aInstanceManager; +} + // Partially implemented inline in hxx SwFormatVertOrient::SwFormatVertOrient( SwTwips nY, sal_Int16 eVert, sal_Int16 eRel ) @@ -1467,6 +1518,30 @@ void SwFormatVertOrient::dumpAsXml(xmlTextWriterPtr pWriter) const (void)xmlTextWriterEndElement(pWriter); } +namespace +{ + class SwFormatHoriOrientInstanceManager : public TypeSpecificItemInstanceManager + { + protected: + virtual size_t hashCode(const SfxPoolItem& rItem) const override + { + auto const & rFormatItem = static_cast(rItem); + std::size_t seed(0); + o3tl::hash_combine(seed, rFormatItem.GetPos()); + o3tl::hash_combine(seed, rFormatItem.GetHoriOrient()); + o3tl::hash_combine(seed, rFormatItem.GetRelationOrient()); + o3tl::hash_combine(seed, rFormatItem.IsPosToggle()); + return seed; + } + }; +} + +ItemInstanceManager* SwFormatHoriOrient::getItemInstanceManager() const +{ + static SwFormatHoriOrientInstanceManager aInstanceManager; + return &aInstanceManager; +} + // Partially implemented inline in hxx SwFormatHoriOrient::SwFormatHoriOrient( SwTwips nX, sal_Int16 eHori, sal_Int16 eRel, bool bPos ) From b3e01bd3bdd37961057026ab7f2b57cbfab35d4a Mon Sep 17 00:00:00 2001 From: Miklos Vajna Date: Fri, 28 Jun 2024 08:42:37 +0200 Subject: [PATCH 115/194] Related: tdf#161708 sw content controls: fix custom default of dropdown to PDF Export the bugdoc to PDF without noticing that there is a content control around some of the content and notice how the PDF export lacks some words from the body text. What happens is that content controls are exported to PDF as PDF forms by default, and the selected option of a dropdown has to be an index, so in case the text of the dropdown content control is not one of the options, then the PDF will miss those words. Fix the problem by inserting the text of the dropdown at the start if there would be no valid index for it. Also add a bit of padding around the rectangle of the content controls, it turns out there is a default 1pt border in PDF, and this would lead to a cut-off text at the end if we don't compensate for that border. Change-Id: I99447894b320b42ad9ffe0d54d0190000621616b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169694 Tested-by: Jenkins Reviewed-by: Miklos Vajna --- include/vcl/filter/PDFiumLibrary.hxx | 1 + sw/qa/core/text/itrform2.cxx | 56 +++++++++++++++++++++++++ sw/source/core/text/itrform2.cxx | 19 +++++++++ vcl/qa/cppunit/pdfexport/pdfexport2.cxx | 10 ++--- vcl/source/pdf/PDFiumLibrary.cxx | 6 +++ 5 files changed, 87 insertions(+), 5 deletions(-) diff --git a/include/vcl/filter/PDFiumLibrary.hxx b/include/vcl/filter/PDFiumLibrary.hxx index a5d757414429..6d2a65a8fa38 100644 --- a/include/vcl/filter/PDFiumLibrary.hxx +++ b/include/vcl/filter/PDFiumLibrary.hxx @@ -117,6 +117,7 @@ public: PDFAnnotAActionType eEvent) = 0; virtual OUString getFormFieldValue(PDFiumDocument* pDoc) = 0; + virtual int getOptionCount(PDFiumDocument* pDoc) = 0; }; class PDFiumTextPage; diff --git a/sw/qa/core/text/itrform2.cxx b/sw/qa/core/text/itrform2.cxx index 8753a797e9f8..5612863a0ddf 100644 --- a/sw/qa/core/text/itrform2.cxx +++ b/sw/qa/core/text/itrform2.cxx @@ -11,6 +11,9 @@ #include +#include + +#include #include #include @@ -258,6 +261,59 @@ CPPUNIT_TEST_FIXTURE(Test, testContentControlPDFFontColor) // i.e. the custom color was lost, the font color was black, not orange. CPPUNIT_ASSERT_EQUAL(nOrange, pAnnotation->getFontColor(pPdfDocument.get())); } + +CPPUNIT_TEST_FIXTURE(Test, testContentControlPDFDropDownText) +{ + std::shared_ptr pPDFium = vcl::pdf::PDFiumLibrary::get(); + if (!pPDFium) + return; + + // Given a document with a dropdown: custom default text and 3 items: + createSwDoc(); + uno::Reference xMSF(mxComponent, uno::UNO_QUERY); + uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference xText = xTextDocument->getText(); + uno::Reference xCursor = xText->createTextCursor(); + xText->insertString(xCursor, u"test"_ustr, /*bAbsorb=*/false); + xCursor->gotoStart(/*bExpand=*/false); + xCursor->gotoEnd(/*bExpand=*/true); + uno::Reference xContentControl( + xMSF->createInstance(u"com.sun.star.text.ContentControl"_ustr), uno::UNO_QUERY); + uno::Reference xContentControlProps(xContentControl, uno::UNO_QUERY); + { + uno::Sequence aListItems = { + { + comphelper::makePropertyValue(u"DisplayText"_ustr, uno::Any(u"red"_ustr)), + comphelper::makePropertyValue(u"Value"_ustr, uno::Any(u"R"_ustr)), + }, + { + comphelper::makePropertyValue(u"DisplayText"_ustr, uno::Any(u"green"_ustr)), + comphelper::makePropertyValue(u"Value"_ustr, uno::Any(u"G"_ustr)), + }, + { + comphelper::makePropertyValue(u"DisplayText"_ustr, uno::Any(u"blue"_ustr)), + comphelper::makePropertyValue(u"Value"_ustr, uno::Any(u"B"_ustr)), + }, + }; + xContentControlProps->setPropertyValue(u"ListItems"_ustr, uno::Any(aListItems)); + } + xText->insertTextContent(xCursor, xContentControl, /*bAbsorb=*/true); + + // When exporting that to PDF: + save(u"writer_pdf_Export"_ustr); + + // Then make sure that the custom default is not lost: + std::unique_ptr pPdfDocument = parsePDFExport(); + std::unique_ptr pPage = pPdfDocument->openPage(0); + pPage->onAfterLoadPage(pPdfDocument.get()); + CPPUNIT_ASSERT_EQUAL(1, pPage->getAnnotationCount()); + std::unique_ptr pAnnotation = pPage->getAnnotation(0); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 4 + // - Actual : 3 + // i.e. only the 3 colors were exported, the default "test" text was not. + CPPUNIT_ASSERT_EQUAL(4, pAnnotation->getOptionCount(pPdfDocument.get())); +} } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/core/text/itrform2.cxx b/sw/source/core/text/itrform2.cxx index 621294528767..bfb7c6ed7a2c 100644 --- a/sw/source/core/text/itrform2.cxx +++ b/sw/source/core/text/itrform2.cxx @@ -1038,13 +1038,24 @@ bool SwContentControlPortion::DescribePDFControl(const SwTextPaintInfo& rInf) co auto pListWidget = static_cast(pDescriptor.get()); pListWidget->DropDown = true; sal_Int32 nIndex = 0; + bool bTextFound = false; for (const auto& rItem : pContentControl->GetListItems()) { pListWidget->Entries.push_back(rItem.m_aDisplayText); if (rItem.m_aDisplayText == aText) + { pListWidget->SelectedEntries.push_back(nIndex); + bTextFound = true; + } ++nIndex; } + if (!aText.isEmpty() && !bTextFound) + { + // The selected entry has to be an index, if there is no index for it, insert one at + // the start. + pListWidget->Entries.insert(pListWidget->Entries.begin(), aText); + pListWidget->SelectedEntries.push_back(0); + } break; } case SwContentControlType::COMBO_BOX: @@ -1116,6 +1127,14 @@ bool SwContentControlPortion::DescribePDFControl(const SwTextPaintInfo& rInf) co aLocation = aStartRect; aLocation.Union(aEndRect); + + // PDF spec 12.5.2 Annotation Dictionaries says the default border with is 1pt wide, increase + // the rectangle to compensate for that, otherwise the text will be cut off at the end. + aLocation.AddTop(-20); + aLocation.AddBottom(20); + aLocation.AddLeft(-20); + aLocation.AddRight(20); + pDescriptor->Location = aLocation.SVRect(); pPDFExtOutDevData->WrapBeginStructureElement(vcl::PDFWriter::Form); diff --git a/vcl/qa/cppunit/pdfexport/pdfexport2.cxx b/vcl/qa/cppunit/pdfexport/pdfexport2.cxx index 6c0f39e977bd..fb7ad3f97d85 100644 --- a/vcl/qa/cppunit/pdfexport/pdfexport2.cxx +++ b/vcl/qa/cppunit/pdfexport/pdfexport2.cxx @@ -4713,11 +4713,11 @@ CPPUNIT_TEST_FIXTURE(PdfExportTest2, testTdf152246) CPPUNIT_ASSERT_EQUAL(size_t(1), aPages.size()); // Position array - constexpr double aPos[5][4] = { { 56.699, 707.701, 131.401, 721.499 }, - { 198.499, 707.701, 273.201, 721.499 }, - { 303.349, 680.101, 378.051, 693.899 }, - { 480.599, 680.101, 555.301, 693.899 }, - { 56.699, 652.501, 131.401, 666.299 } }; + constexpr double aPos[5][4] = { { 55.699, 706.701, 132.401, 722.499 }, + { 197.499, 706.701, 274.201, 722.499 }, + { 302.349, 679.101, 379.051, 694.899 }, + { 479.599, 679.101, 556.301, 694.899 }, + { 55.699, 651.501, 132.401, 667.299 } }; // Get page annotations. auto pAnnots = dynamic_cast(aPages[0]->Lookup("Annots"_ostr)); diff --git a/vcl/source/pdf/PDFiumLibrary.cxx b/vcl/source/pdf/PDFiumLibrary.cxx index 0c1ee041a223..29d95338b004 100644 --- a/vcl/source/pdf/PDFiumLibrary.cxx +++ b/vcl/source/pdf/PDFiumLibrary.cxx @@ -303,6 +303,7 @@ public: OUString getFormAdditionalActionJavaScript(PDFiumDocument* pDoc, PDFAnnotAActionType eEvent) override; OUString getFormFieldValue(PDFiumDocument* pDoc) override; + int getOptionCount(PDFiumDocument* pDoc) override; }; class PDFiumPageObjectImpl final : public PDFiumPageObject @@ -1382,6 +1383,11 @@ OUString PDFiumAnnotationImpl::getFormFieldValue(PDFiumDocument* pDoc) } return aString; } +int PDFiumAnnotationImpl::getOptionCount(PDFiumDocument* pDoc) +{ + auto pDocImpl = static_cast(pDoc); + return FPDFAnnot_GetOptionCount(pDocImpl->getFormHandlePointer(), mpAnnotation); +} OUString PDFiumAnnotationImpl::getFormAdditionalActionJavaScript(PDFiumDocument* pDoc, PDFAnnotAActionType eEvent) From 50b982570efec6bbbd805f906729280365cb0857 Mon Sep 17 00:00:00 2001 From: Olivier Hallot Date: Fri, 28 Jun 2024 06:07:37 -0300 Subject: [PATCH 116/194] Update git submodules * Update helpcontent2 from branch 'master' to 7c187e488710f930d4d0ec5291308af2e3776a46 - Fix broken links on Insert Table Help pages + refactor of the files Change-Id: I60dbaf848250abefc80272b5885ad01536cc218f Reviewed-on: https://gerrit.libreoffice.org/c/help/+/169652 Tested-by: Jenkins Reviewed-by: Olivier Hallot --- helpcontent2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helpcontent2 b/helpcontent2 index c796230a7363..7c187e488710 160000 --- a/helpcontent2 +++ b/helpcontent2 @@ -1 +1 @@ -Subproject commit c796230a7363073c9763dff5d157fd5711ba590d +Subproject commit 7c187e488710f930d4d0ec5291308af2e3776a46 From 93dbba5361b2fd4b4b9a62725edab5e59b8be575 Mon Sep 17 00:00:00 2001 From: Christian Lohmaier Date: Fri, 28 Jun 2024 11:51:29 +0200 Subject: [PATCH 117/194] Update git submodules * Update translations from branch 'master' to b87971d7ac97460271cb13bd0e4cb2e554654a45 - update translations for 24.8/master and force-fix errors using pocheck Change-Id: I512d2cb5e312ef9dcec6426c13ad33d10441b017 --- translations | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations b/translations index 755fc723ca53..b87971d7ac97 160000 --- a/translations +++ b/translations @@ -1 +1 @@ -Subproject commit 755fc723ca53063e9481f8ca26b14e6b00d46d38 +Subproject commit b87971d7ac97460271cb13bd0e4cb2e554654a45 From 2ad7d5cfb0288559921b0d9ccad0a23d95cde452 Mon Sep 17 00:00:00 2001 From: Sarper Akdemir Date: Fri, 21 Jun 2024 12:40:11 +0200 Subject: [PATCH 118/194] make additionsdialog show connection errors use non-scoped interaction handler instead of the scoped SimpleFileAccessInteraction so that errors will be handled with correct pop-up dialogs. Also throw the correct type of DAVException for USC_CONNECT_FAILED in Content::Open Change-Id: If2031dfa2796f91fad6866bc9608194c92658b96 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169519 Tested-by: Jenkins Reviewed-by: Michael Stahl --- cui/source/dialogs/AdditionsDialog.cxx | 10 +++++++--- include/unotools/ucbstreamhelper.hxx | 11 ++++++++--- ucb/source/ucp/webdav-curl/webdavcontent.cxx | 13 +++++++++++++ unotools/source/ucbhelper/ucbstreamhelper.cxx | 19 ++++++++++++++++--- 4 files changed, 44 insertions(+), 9 deletions(-) diff --git a/cui/source/dialogs/AdditionsDialog.cxx b/cui/source/dialogs/AdditionsDialog.cxx index 61bee50455b3..3f57676a13ec 100644 --- a/cui/source/dialogs/AdditionsDialog.cxx +++ b/cui/source/dialogs/AdditionsDialog.cxx @@ -71,11 +71,12 @@ using namespace ::com::sun::star::beans; namespace { // Gets the content of the given URL and returns as a standard string -std::string ucbGet(const OUString& rURL) +std::string ucbGet(const OUString& rURL, const css::uno::Reference& xParentWin) { try { - auto const s = utl::UcbStreamHelper::CreateStream(rURL, StreamMode::STD_READ); + auto const s + = utl::UcbStreamHelper::CreateStream(rURL, StreamMode::STD_READ, xParentWin, false); if (!s) { SAL_WARN("cui.dialogs", "CreateStream <" << rURL << "> failed"); @@ -404,7 +405,10 @@ void SearchAndParseThread::execute() if (m_bIsFirstLoading) { - std::string sResponse = !m_bUITest ? ucbGet(m_pAdditionsDialog->m_sURL) : ""; + const auto pDialog = m_pAdditionsDialog->getDialog(); + std::string sResponse = !m_bUITest ? ucbGet(m_pAdditionsDialog->m_sURL, + pDialog ? pDialog->GetXWindow() : nullptr) + : ""; parseResponse(sResponse, m_pAdditionsDialog->m_aAllExtensionsVector); std::sort(m_pAdditionsDialog->m_aAllExtensionsVector.begin(), m_pAdditionsDialog->m_aAllExtensionsVector.end(), diff --git a/include/unotools/ucbstreamhelper.hxx b/include/unotools/ucbstreamhelper.hxx index 69bae538b316..3c8868c03911 100644 --- a/include/unotools/ucbstreamhelper.hxx +++ b/include/unotools/ucbstreamhelper.hxx @@ -39,9 +39,14 @@ namespace utl class UNOTOOLS_DLLPUBLIC UcbStreamHelper { public: - static std::unique_ptr CreateStream(const OUString& rFileName, StreamMode eOpenMode, css::uno::Reference xParentWin = nullptr); - static std::unique_ptr CreateStream(const OUString& rFileName, StreamMode eOpenMode, - bool bFileExists, css::uno::Reference xParentWin = nullptr); + static std::unique_ptr + CreateStream(const OUString& rFileName, StreamMode eOpenMode, + css::uno::Reference xParentWin = nullptr, + bool bUseSimpleFileAccessInteraction = true); + static std::unique_ptr + CreateStream(const OUString& rFileName, StreamMode eOpenMode, bool bFileExists, + css::uno::Reference xParentWin = nullptr, + bool bUseSimpleFileAccessInteraction = true); static std::unique_ptr CreateStream( const css::uno::Reference < css::io::XInputStream >& xStream ); static std::unique_ptr CreateStream( const css::uno::Reference < css::io::XStream >& xStream ); static std::unique_ptr CreateStream( const css::uno::Reference < css::io::XInputStream >& xStream, bool bCloseStream ); diff --git a/ucb/source/ucp/webdav-curl/webdavcontent.cxx b/ucb/source/ucp/webdav-curl/webdavcontent.cxx index 96c0a4f1de61..4b3589ea7bf9 100644 --- a/ucb/source/ucp/webdav-curl/webdavcontent.cxx +++ b/ucb/source/ucp/webdav-curl/webdavcontent.cxx @@ -2258,6 +2258,19 @@ uno::Any Content::open( && aDAVOptions.getHttpResponseStatusCode() != SC_INTERNAL_SERVER_ERROR) { // throws exception as if there was a server error, a DAV exception + switch (aDAVOptions.getHttpResponseStatusCode()) + { + case USC_CONNECT_FAILED: + { + CurlUri aUri(aTargetURL); + throw DAVException( + DAVException::DAV_HTTP_CONNECT, + ConnectionEndPointString(aUri.GetHost(), aUri.GetPort()), + aDAVOptions.getHttpResponseStatusText()); + } + default: + break; + } throw DAVException( DAVException::DAV_HTTP_ERROR, aDAVOptions.getHttpResponseStatusText(), aDAVOptions.getHttpResponseStatusCode() ); diff --git a/unotools/source/ucbhelper/ucbstreamhelper.cxx b/unotools/source/ucbhelper/ucbstreamhelper.cxx index 72a3d7cbe64b..f68a503370c1 100644 --- a/unotools/source/ucbhelper/ucbstreamhelper.cxx +++ b/unotools/source/ucbhelper/ucbstreamhelper.cxx @@ -137,24 +137,37 @@ static std::unique_ptr lcl_CreateStream( const OUString& rFileName, St return pStream; } -std::unique_ptr UcbStreamHelper::CreateStream(const OUString& rFileName, StreamMode eOpenMode, css::uno::Reference xParentWin) +std::unique_ptr +UcbStreamHelper::CreateStream(const OUString& rFileName, StreamMode eOpenMode, + css::uno::Reference xParentWin, + bool bUseSimpleFileAccessInteraction) { // related tdf#99312 // create a specialized interaction handler to manages Web certificates and Web credentials when needed Reference< XInteractionHandler > xIH( css::task::InteractionHandler::createWithParent(comphelper::getProcessComponentContext(), xParentWin)); + + if (!bUseSimpleFileAccessInteraction) + return lcl_CreateStream(rFileName, eOpenMode, xIH, true /* bEnsureFileExists */); + Reference xIHScoped(new comphelper::SimpleFileAccessInteraction(xIH)); return lcl_CreateStream( rFileName, eOpenMode, xIHScoped, true /* bEnsureFileExists */ ); } -std::unique_ptr UcbStreamHelper::CreateStream(const OUString& rFileName, StreamMode eOpenMode, - bool bFileExists, css::uno::Reference xParentWin) +std::unique_ptr +UcbStreamHelper::CreateStream(const OUString& rFileName, StreamMode eOpenMode, bool bFileExists, + css::uno::Reference xParentWin, + bool bUseSimpleFileAccessInteraction) { // related tdf#99312 // create a specialized interaction handler to manages Web certificates and Web credentials when needed Reference< XInteractionHandler > xIH( css::task::InteractionHandler::createWithParent(comphelper::getProcessComponentContext(), xParentWin)); + + if (!bUseSimpleFileAccessInteraction) + return lcl_CreateStream(rFileName, eOpenMode, xIH, !bFileExists); + Reference xIHScoped(new comphelper::SimpleFileAccessInteraction(xIH)); return lcl_CreateStream( rFileName, eOpenMode, xIHScoped,!bFileExists ); } From 2fd72ed9cb8bb1fd7c5402194ac36e43fc2c0963 Mon Sep 17 00:00:00 2001 From: Christian Lohmaier Date: Fri, 21 Jun 2024 19:09:23 +0200 Subject: [PATCH 119/194] makefile simplification: cleanup template packaging mess the tmplate packaging code was full of copy'n'paste code with little understanding on how the rules actually work/what the statements actually do. (e.g. using separate calls to addprefix can be a matter of taste, but adding the call to get the extra files each time is pointless and just adds the same set of files multiple times). Unifying the fixed list of files and standardizing the base path for the relative filenames further allows to streamline the recipes Change-Id: I814fdb6f6534a9d5046281c45b6da87110f2093e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169342 Tested-by: Jenkins Reviewed-by: Christian Lohmaier --- extras/CustomTarget_templates.mk | 97 +++------ extras/CustomTarget_tplpresnt.mk | 143 ------------- extras/CustomTarget_tplwizard.mk | 241 --------------------- extras/CustomTarget_tplwizdesktop.mk | 89 -------- extras/Module_extras.mk | 3 - extras/README.md | 4 +- extras/template_files.mk | 307 +++++++++++++++++++++++++++ 7 files changed, 333 insertions(+), 551 deletions(-) delete mode 100644 extras/CustomTarget_tplpresnt.mk delete mode 100644 extras/CustomTarget_tplwizard.mk delete mode 100644 extras/CustomTarget_tplwizdesktop.mk create mode 100644 extras/template_files.mk diff --git a/extras/CustomTarget_templates.mk b/extras/CustomTarget_templates.mk index b17ce37df9eb..9754985f1a59 100644 --- a/extras/CustomTarget_templates.mk +++ b/extras/CustomTarget_templates.mk @@ -9,40 +9,17 @@ $(eval $(call gb_CustomTarget_CustomTarget,extras/source/templates)) -# # for OTT templates: mimetype, styles.xml, META-INF/manifest.xml and -# Thumbnails/thumbnail.png files are automatically added for each template -# # for OTG templates: mimetype, content.xml, styles.xml, META-INF/manifest.xml and -# Thumbnails/thumbnail.png files are automatically added for each template -# list of meta.xml files (one per template) + other files (content.xml, manifest.rdf, settings.xml, pictures...) -extras_TEMPLATES_XMLFILES := \ - officorr/Modern_business_letter_sans_serif/meta.xml \ - officorr/Modern_business_letter_serif/meta.xml \ - offimisc/Businesscard-with-logo/meta.xml \ - personal/CV/meta.xml \ - personal/Resume1page/meta.xml \ - styles/Default/meta.xml \ - styles/Modern/meta.xml \ - styles/Simple/meta.xml \ - officorr/Modern_business_letter_sans_serif/content.xml \ - officorr/Modern_business_letter_serif/content.xml \ - offimisc/Businesscard-with-logo/content.xml \ - personal/CV/content.xml \ - personal/Resume1page/content.xml \ - officorr/Modern_business_letter_sans_serif/manifest.rdf \ - officorr/Modern_business_letter_serif/manifest.rdf \ - offimisc/Businesscard-with-logo/manifest.rdf \ - personal/CV/manifest.rdf \ - personal/Resume1page/manifest.rdf \ - offimisc/Businesscard-with-logo/settings.xml \ - offimisc/Businesscard-with-logo/Pictures/10000201000001F4000000A0108F3F06.png \ - draw/bpmn/meta.xml \ - l10n/zh_CN_ott_normal/meta.xml \ - l10n/zh_CN_ott_normal/content.xml \ - l10n/ja_ott_normal/meta.xml \ - l10n/ja_ott_normal/content.xml \ +include $(SRCDIR)/extras/template_files.mk -# param: style-base (e.g. Modern) -extras_TEMPLATES_XMLFILES_RELATIVE = $(subst $(1)/,,$(filter $(1)/%,$(extras_TEMPLATES_XMLFILES))) +define run_zip_template_recipe = +$(call gb_Output_announce,$(subst $(gb_CustomTarget_workdir)/extras/source/,,$@),$(true),ZIP,2) +$(call gb_Trace_StartRange,$(subst $(gb_CustomTarget_workdir)/extras/source/,,$@),ZIP) +cd $(dir $<) && \ +$(call gb_Helper_wsl_path,\ +$(WSL) zip -q0X --filesync --must-match $@ mimetype && \ +$(WSL) zip -qrX --must-match $@ $(subst $(dir $<),,$^)) +$(call gb_Trace_EndRange,$(subst $(gb_CustomTarget_workdir)/extras/source/,,$@),ZIP) +endef .SECONDEXPANSION: # secondexpansion since the patterns not just cover a filename portion, but also include a @@ -64,48 +41,22 @@ $(gb_CustomTarget_workdir)/extras/source/templates/%.xml : $(SRCDIR)/extras/sour $(call gb_ExternalExecutable_get_command,xsltproc) --nonet -o $@ $(SRCDIR)/extras/util/compact.xsl $< $(call gb_Trace_EndRange,templates/$*.xml,XSL) -# zip files to OTT +$(gb_CustomTarget_workdir)/extras/source/templates/%.odt \ +$(gb_CustomTarget_workdir)/extras/source/templates/%.otg \ +$(gb_CustomTarget_workdir)/extras/source/templates/%.oth \ +$(gb_CustomTarget_workdir)/extras/source/templates/%.otp \ +$(gb_CustomTarget_workdir)/extras/source/templates/%.ots \ $(gb_CustomTarget_workdir)/extras/source/templates/%.ott : \ $$(addprefix $(gb_CustomTarget_workdir)/extras/source/templates/$$*/,\ - mimetype $$(call extras_TEMPLATES_XMLFILES_RELATIVE,$$*) ) \ - $$(addprefix $(gb_CustomTarget_workdir)/extras/source/templates/$$*/,\ - styles.xml $$(call extras_TEMPLATES_XMLFILES_RELATIVE,$$*) ) \ - $$(addprefix $(gb_CustomTarget_workdir)/extras/source/templates/$$*/,\ - META-INF/manifest.xml $$(call extras_TEMPLATES_XMLFILES_RELATIVE,$$*) ) \ - $$(addprefix $(gb_CustomTarget_workdir)/extras/source/templates/$$*/,\ - Thumbnails/thumbnail.png $$(call extras_TEMPLATES_XMLFILES_RELATIVE,$$*) ) - $(call gb_Output_announce,templates/$*.ott,$(true),ZIP,2) - $(call gb_Trace_StartRange,templates/$*.ott,ZIP) - $(call gb_Helper_abbreviate_dirs,\ - cd $(dir $<) && \ - $(call gb_Helper_wsl_path,\ - $(WSL) zip -q0X --filesync --must-match $@ mimetype && \ - $(WSL) zip -qrX --must-match $@ styles.xml META-INF/manifest.xml Thumbnails/thumbnail.png && \ - $(WSL) zip -qrX --must-match $@ $(call extras_TEMPLATES_XMLFILES_RELATIVE,$*)) \ - ) - $(call gb_Trace_EndRange,templates/$*.ott,ZIP) + mimetype META-INF/manifest.xml content.xml meta.xml styles.xml \ + $$(call extra_files_TEMPLATES_RELATIVE,$$*)) + $(run_zip_template_recipe) -# zip files to OTG -$(gb_CustomTarget_workdir)/extras/source/templates/%.otg : \ - $$(addprefix $(gb_CustomTarget_workdir)/extras/source/templates/$$*/,\ - mimetype $$(call extras_TEMPLATES_XMLFILES_RELATIVE,$$*) ) \ - $$(addprefix $(gb_CustomTarget_workdir)/extras/source/templates/$$*/,\ - content.xml $$(call extras_TEMPLATES_XMLFILES_RELATIVE,$$*) ) \ - $$(addprefix $(gb_CustomTarget_workdir)/extras/source/templates/$$*/,\ - styles.xml $$(call extras_TEMPLATES_XMLFILES_RELATIVE,$$*) ) \ - $$(addprefix $(gb_CustomTarget_workdir)/extras/source/templates/$$*/,\ - META-INF/manifest.xml $$(call extras_TEMPLATES_XMLFILES_RELATIVE,$$*) ) \ - $$(addprefix $(gb_CustomTarget_workdir)/extras/source/templates/$$*/,\ - Thumbnails/thumbnail.png $$(call extras_TEMPLATES_XMLFILES_RELATIVE,$$*) ) - $(call gb_Output_announce,templates/$*.otg,$(true),ZIP,2) - $(call gb_Trace_StartRange,templates/$*.otg,ZIP) - $(call gb_Helper_abbreviate_dirs,\ - cd $(dir $<) && \ - $(call gb_Helper_wsl_path,\ - $(WSL) zip -q0X --filesync --must-match $@ mimetype && \ - $(WSL) zip -qrX --must-match $@ content.xml styles.xml META-INF/manifest.xml Thumbnails/thumbnail.png && \ - $(WSL) zip -qrX --must-match $@ $(call extras_TEMPLATES_XMLFILES_RELATIVE,$*)) \ - ) - $(call gb_Trace_EndRange,templates/$*.otg,ZIP) +# special case for styles/Default,Modern,Simple - no content.xml for those +$(gb_CustomTarget_workdir)/extras/source/templates/styles/%.ott : \ + $$(addprefix $(gb_CustomTarget_workdir)/extras/source/templates/styles/$$*/,\ + mimetype META-INF/manifest.xml meta.xml styles.xml \ + $$(call extra_files_TEMPLATES_RELATIVE,styles/$$*)) + $(run_zip_template_recipe) # vim: set noet sw=4 ts=4: diff --git a/extras/CustomTarget_tplpresnt.mk b/extras/CustomTarget_tplpresnt.mk deleted file mode 100644 index 6be2550b0098..000000000000 --- a/extras/CustomTarget_tplpresnt.mk +++ /dev/null @@ -1,143 +0,0 @@ -# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- -# -# This file is part of the LibreOffice project. -# -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. -# - -$(eval $(call gb_CustomTarget_CustomTarget,extras/source/templates/presnt)) - -# # for OTP templates: mimetype, content.xml, styles.xml, META-INF/manifest.xml and -# Thumbnails/thumbnail.png files are automatically added for each template -# list of meta.xml files (one per template) + other files (content.xml, manifest.rdf, settings.xml, pictures...) -extras_PRESENTATIONS_XMLFILES := \ - Beehive/meta.xml \ - Blue_Curve/meta.xml \ - Blueprint_Plans/meta.xml \ - Candy/meta.xml \ - DNA/meta.xml \ - Focus/meta.xml \ - Forestbird/meta.xml \ - Grey_Elegant/meta.xml \ - Growing_Liberty/meta.xml \ - Freshes/meta.xml \ - Inspiration/meta.xml \ - Lights/meta.xml \ - Metropolis/meta.xml \ - Midnightblue/meta.xml \ - Nature_Illustration/meta.xml \ - Pencil/meta.xml \ - Piano/meta.xml \ - Portfolio/meta.xml \ - Progress/meta.xml \ - Sunset/meta.xml \ - Vintage/meta.xml \ - Vivid/meta.xml \ - Yellow_Idea/meta.xml \ - Freshes/Object_1/content.xml \ - Freshes/Object_2/content.xml \ - Blueprint_Plans/Pictures/10000000000000580000001F99D2A38C014B254B.png \ - Blueprint_Plans/Pictures/100000000000033C0000026D847ACE982C6E20B6.png \ - Blueprint_Plans/Pictures/10000000000004220000031A5C2E04AB7C51FB60.png \ - Blueprint_Plans/Pictures/1000020100000500000002D03918081590A75FCF.png \ - Blueprint_Plans/Pictures/1000020100000500000002D0F25E20EA381A5EBD.png \ - Candy/Pictures/10000000000004A800000500DD5BB9FFED422172.png \ - Candy/Pictures/10000000000005000000050014DEA376B6E67205.png \ - Candy/Pictures/1000000000000780000004383B6CE268A9802A07.png \ - Candy/Pictures/10000000000007800000043870026B1FACED0D1B.png \ - Freshes/Pictures/10000000000001980000067FB46981E5FBCD5A53.jpg \ - Freshes/Pictures/10000000000002C5000003C02FC12A07C25F42DF.jpg \ - Freshes/Pictures/10000000000002D50000067FACCA26111F046EB5.jpg \ - Freshes/Pictures/100000000000030F0000036F55A62FC34FCAB38E.jpg \ - Freshes/Pictures/100000000000049100000359E7B1AC100BA62FBB.jpg \ - Freshes/Pictures/10000000000006D7000003A637B7BBC50EDF4D24.jpg \ - Freshes/Pictures/1000000000000B8B0000067F7C4C059ECC323C6F.jpg \ - Grey_Elegant/Pictures/1000000000000007000000075D9D31963C8C0E25.jpg \ - Grey_Elegant/Pictures/1000000000000007000000076677E5BE1EDAF335.jpg \ - Grey_Elegant/Pictures/10000000000001920000019230489F7A89351262.jpg \ - Grey_Elegant/Pictures/10000109000002950000029599843C084F54196C.svg \ - Grey_Elegant/Pictures/100001E0000002950000029531405702AAD800D0.svg \ - Grey_Elegant/Pictures/10000201000000190000001945D72F17575B71B4.png \ - Grey_Elegant/Pictures/1000020100000019000000194F0EE08BB7018624.png \ - Grey_Elegant/Pictures/10000201000000190000001967D610D5BD5B9486.png \ - Grey_Elegant/Pictures/100002010000001900000019B19ADF33FD67D860.png \ - Grey_Elegant/Pictures/100002010000001900000019CA03B954885E470D.png \ - Grey_Elegant/Pictures/10000201000003300000026455AC9786240DB2F8.png \ - Grey_Elegant/Pictures/100002510000029500000295D9236A158400ED63.svg \ - Grey_Elegant/Pictures/100002800000029500000295458C6106AED5C839.svg \ - Grey_Elegant/Pictures/100002CA0000029500000295A190AE1D987B676B.svg \ - Grey_Elegant/Pictures/1000DC810000A57800007C20AABC768B7E7ACB30.svg \ - Growing_Liberty/Pictures/10000000000007800000043801760C0AF0E62E0B.jpg \ - Growing_Liberty/Pictures/10000000000007800000043827B5F54D1F4F498F.jpg \ - Growing_Liberty/Pictures/100002010000016A0000029374C9F2B8F26392AD.png \ - Growing_Liberty/Pictures/10000201000001F000000351DA39462E363D7ED3.png \ - Growing_Liberty/Pictures/10000201000001F10000029333ED1BC48076B5C4.png \ - Growing_Liberty/Pictures/10000201000001F3000003548E51808DE171DA02.png \ - Growing_Liberty/Pictures/10000C1C0000034200004A6A2C92F38BC117DD3C.svg \ - Growing_Liberty/Pictures/10000C340000844B000003422549B923A55839CC.svg \ - Growing_Liberty/Pictures/10000C8F0000034200004A6ABD021DA9BD39254C.svg \ - Growing_Liberty/Pictures/10000CA90000844B000003426738F0E80CCFF9F3.svg \ - Metropolis/Pictures/10000201000003AF000002126A94207C4902B60B.png \ - Metropolis/Pictures/100021B200008D2E00004F60B312A649B9EEC188.svg \ - Nature_Illustration/Pictures/10000000000004210000031931EA92AB7FB2FD6C.jpg \ - Nature_Illustration/Pictures/100000000000042100000319892187DC121460D8.jpg \ - Pencil/Pictures/1000020100000088000000870A26C51C993940C3.png \ - Pencil/Pictures/100002010000037D0000001C2F14EFE8274AD9FC.png \ - Pencil/Pictures/1000020100000402000000A2F7F509AE74DE6C69.png \ - Piano/Pictures/100000000000035400000120266623530F1969D0.png \ - Piano/Pictures/100002010000033A0000006EDD62437E1CC42053.png \ - Vintage/Pictures/10000000000000580000001F99D2A38C014B254B.png \ - Vintage/Pictures/10000201000004B000000337490AE22881331C9B.png \ - Vintage/Pictures/10000201000004B00000033776CA70A4BFE2196B.png \ - Vintage/Pictures/10000201000004B0000003379D1127938561C230.png \ - Vintage/Pictures/10000201000004B000000337D99A2303560BD59C.png \ - -# param: style-base (e.g. Modern) -extras_PRESNT_XMLFILES_RELATIVE = $(subst $(1)/,,$(filter $(1)/%,$(extras_PRESENTATIONS_XMLFILES))) - -.SECONDEXPANSION: -# secondexpansion since the patterns not just cover a filename portion, but also include a -# directory portion withdifferent number of elements -# copy regular files (mimetype, *.jpg, *.png, *.rdf, *.svg, *.svm, …) -$(gb_CustomTarget_workdir)/extras/source/templates/presnt/% : $(SRCDIR)/extras/source/templates/presnt/% \ - | $$(dir $(gb_CustomTarget_workdir)/extras/source/templates/presnt/$$*).dir - $(call gb_Output_announce,templates/presnt/$*,$(true),CPY,1) - $(call gb_Trace_StartRange,templates/presnt/$*,CPY) - cp $< $@ - $(call gb_Trace_EndRange,templates/presnt/$*,CPY) - -# test and copy xml files -$(gb_CustomTarget_workdir)/extras/source/templates/presnt/%.xml : $(SRCDIR)/extras/source/templates/presnt/%.xml \ - | $(call gb_ExternalExecutable_get_dependencies,xsltproc) \ - $$(dir $(gb_CustomTarget_workdir)/extras/source/templates/presnt/$$*.xml).dir - $(call gb_Output_announce,templates/presnt/$*.xml,$(true),XSL,1) - $(call gb_Trace_StartRange,templates/presnt/$*.xml,XSL) - $(call gb_ExternalExecutable_get_command,xsltproc) --nonet -o $@ $(SRCDIR)/extras/util/compact.xsl $< - $(call gb_Trace_EndRange,templates/presnt/$*.xml,XSL) - -# zip files to OTP -$(gb_CustomTarget_workdir)/extras/source/templates/presnt/%.otp : \ - $$(addprefix $(gb_CustomTarget_workdir)/extras/source/templates/presnt/$$*/,\ - mimetype $$(call extras_PRESNT_XMLFILES_RELATIVE,$$*) ) \ - $$(addprefix $(gb_CustomTarget_workdir)/extras/source/templates/presnt/$$*/,\ - content.xml $$(call extras_PRESNT_XMLFILES_RELATIVE,$$*) ) \ - $$(addprefix $(gb_CustomTarget_workdir)/extras/source/templates/presnt/$$*/,\ - styles.xml $$(call extras_PRESNT_XMLFILES_RELATIVE,$$*) ) \ - $$(addprefix $(gb_CustomTarget_workdir)/extras/source/templates/presnt/$$*/,\ - META-INF/manifest.xml $$(call extras_PRESNT_XMLFILES_RELATIVE,$$*) ) \ - $$(addprefix $(gb_CustomTarget_workdir)/extras/source/templates/presnt/$$*/,\ - Thumbnails/thumbnail.png $$(call extras_PRESNT_XMLFILES_RELATIVE,$$*) ) - $(call gb_Output_announce,templates/presnt/$*.otp,$(true),ZIP,2) - $(call gb_Trace_StartRange,templates/presnt/$*.otp,ZIP) - $(call gb_Helper_abbreviate_dirs,\ - cd $(dir $<) && \ - $(call gb_Helper_wsl_path,\ - $(WSL) zip -q0X --filesync --must-match $@ mimetype && \ - $(WSL) zip -qrX --must-match $@ content.xml styles.xml META-INF/manifest.xml Thumbnails/thumbnail.png && \ - $(WSL) zip -qrX --must-match $@ $(call extras_PRESNT_XMLFILES_RELATIVE,$*)) \ - ) - $(call gb_Trace_EndRange,templates/presnt/$*.otp,ZIP) - -# vim: set noet sw=4 ts=4: diff --git a/extras/CustomTarget_tplwizard.mk b/extras/CustomTarget_tplwizard.mk deleted file mode 100644 index 3e54d0b5e99c..000000000000 --- a/extras/CustomTarget_tplwizard.mk +++ /dev/null @@ -1,241 +0,0 @@ -# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- -# -# This file is part of the LibreOffice project. -# -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. -# - -$(eval $(call gb_CustomTarget_CustomTarget,extras/source/templates/wizard)) - -# mimetype, content.xml, settings.xml, styles.xml and META-INF/manifest.xml -# files are automatically added for each template -# list of meta.xml files (one per template) + other files (manifest.rdf, pictures...) -extras_WIZARD_XMLFILES := \ - agenda/10grey/meta.xml \ - agenda/1simple/meta.xml \ - agenda/2elegant/meta.xml \ - agenda/3modern/meta.xml \ - agenda/4classic/meta.xml \ - agenda/5blue/meta.xml \ - agenda/6orange/meta.xml \ - agenda/7red/meta.xml \ - agenda/8green/meta.xml \ - agenda/9colorful/meta.xml \ - agenda/aw-10grey/meta.xml \ - agenda/aw-1simple/meta.xml \ - agenda/aw-2elegant/meta.xml \ - agenda/aw-3modern/meta.xml \ - agenda/aw-4classic/meta.xml \ - agenda/aw-5blue/meta.xml \ - agenda/aw-6orange/meta.xml \ - agenda/aw-7red/meta.xml \ - agenda/aw-8green/meta.xml \ - agenda/aw-9colorful/meta.xml \ - agenda/10grey/manifest.rdf \ - agenda/1simple/manifest.rdf \ - agenda/2elegant/manifest.rdf \ - agenda/3modern/manifest.rdf \ - agenda/4classic/manifest.rdf \ - agenda/5blue/manifest.rdf \ - agenda/6orange/manifest.rdf \ - agenda/7red/manifest.rdf \ - agenda/8green/manifest.rdf \ - agenda/9colorful/manifest.rdf \ - agenda/aw-10grey/manifest.rdf \ - agenda/aw-1simple/manifest.rdf \ - agenda/aw-2elegant/manifest.rdf \ - agenda/aw-3modern/manifest.rdf \ - agenda/aw-4classic/manifest.rdf \ - agenda/aw-5blue/manifest.rdf \ - agenda/aw-6orange/manifest.rdf \ - agenda/aw-7red/manifest.rdf \ - agenda/aw-8green/manifest.rdf \ - agenda/aw-9colorful/manifest.rdf \ - agenda/2elegant/Pictures/1000000000000280000000052876A81A.gif \ - agenda/2elegant/Pictures/100002000000008F0000000A83659D51.gif \ - agenda/aw-2elegant/Pictures/1000000000000280000000052876A81A.gif \ - agenda/aw-2elegant/Pictures/100002000000008F0000000A83659D51.gif \ - fax/bus-classic_f/meta.xml \ - fax/bus-classic-pri_f/meta.xml \ - fax/bus-modern_f/meta.xml \ - fax/bus-modern-pri_f/meta.xml \ - fax/pri-bottle_f/meta.xml \ - fax/pri-fax_f/meta.xml \ - fax/pri-lines_f/meta.xml \ - fax/pri-marine_f/meta.xml \ - fax/bus-classic_f/manifest.rdf \ - fax/bus-classic-pri_f/manifest.rdf \ - fax/bus-modern_f/manifest.rdf \ - fax/bus-modern-pri_f/manifest.rdf \ - fax/bus-classic_f/Pictures/200000520000271100001F73A977C564.wmf \ - fax/bus-modern_f/Pictures/2000004E0000271100001F73772F7F48.wmf \ - fax/pri-bottle_f/Pictures/200002EB000022DA000024E1F891208C.wmf \ - fax/pri-fax_f/Pictures/2000032600002711000026A54A905481.wmf \ - fax/pri-marine_f/Pictures/2000004B0000227F0000227886F3FC0F.wmf \ - letter/bus-elegant_l/meta.xml \ - letter/bus-modern_l/meta.xml \ - letter/bus-office_l/meta.xml \ - letter/off-elegant_l/meta.xml \ - letter/off-modern_l/meta.xml \ - letter/off-office_l/meta.xml \ - letter/pri-bottle_l/meta.xml \ - letter/pri-mail_l/meta.xml \ - letter/pri-marine_l/meta.xml \ - letter/pri-redline_l/meta.xml \ - letter/bus-elegant_l/manifest.rdf \ - letter/bus-modern_l/manifest.rdf \ - letter/bus-office_l/manifest.rdf \ - letter/off-elegant_l/manifest.rdf \ - letter/off-modern_l/manifest.rdf \ - letter/off-office_l/manifest.rdf \ - letter/bus-elegant_l/Pictures/10000000000001B8000000824B7EA208.png \ - letter/bus-modern_l/Pictures/10000000000001B8000000824B7EA208.png \ - letter/bus-office_l/Pictures/10000000000001B8000000824B7EA208.png \ - letter/off-elegant_l/Pictures/2000000D00000434000006FD6841386B.svm \ - letter/off-modern_l/Pictures/10000000000000110000001142D1547F.png \ - letter/pri-bottle_l/Pictures/200002EB000022DA000024E1F891208C.wmf \ - letter/pri-mail_l/Pictures/200000430000271100001205CAE80946.wmf \ - letter/pri-marine_l/Pictures/2000004B0000227F0000227886F3FC0F.wmf \ - report/cnt-01/meta.xml \ - report/cnt-011/meta.xml \ - report/cnt-012/meta.xml \ - report/cnt-02/meta.xml \ - report/cnt-021/meta.xml \ - report/cnt-022/meta.xml \ - report/cnt-03/meta.xml \ - report/cnt-031/meta.xml \ - report/cnt-032/meta.xml \ - report/cnt-04/meta.xml \ - report/cnt-041/meta.xml \ - report/cnt-042/meta.xml \ - report/cnt-05/meta.xml \ - report/cnt-051/meta.xml \ - report/cnt-052/meta.xml \ - report/cnt-06/meta.xml \ - report/cnt-061/meta.xml \ - report/cnt-062/meta.xml \ - report/cnt-default/meta.xml \ - report/stl-01/meta.xml \ - report/stl-02/meta.xml \ - report/stl-03/meta.xml \ - report/stl-04/meta.xml \ - report/stl-05/meta.xml \ - report/stl-06/meta.xml \ - report/stl-07/meta.xml \ - report/stl-08/meta.xml \ - report/stl-09/meta.xml \ - report/stl-default/meta.xml \ - report/stl-01/manifest.rdf \ - report/stl-02/manifest.rdf \ - report/stl-03/manifest.rdf \ - report/stl-04/manifest.rdf \ - report/stl-05/manifest.rdf \ - report/stl-06/manifest.rdf \ - report/stl-07/manifest.rdf \ - report/stl-08/manifest.rdf \ - report/stl-09/manifest.rdf \ - report/stl-default/manifest.rdf \ - report/stl-01/Pictures/100002000000001400000014E87B6AC5.gif \ - report/stl-01/Pictures/2000018100001CB100002711BFED37A8.wmf \ - report/stl-02/Pictures/2000009E0000380100002657BA019D86.wmf \ - report/stl-03/Pictures/2000024900002711000021F4DCB2DF4A.wmf \ - report/stl-04/Pictures/10000000000000400000004077CDC8F9.png \ - report/stl-04/Pictures/10000000000001C6000000E44DCA6C94.jpg \ - report/stl-05/Pictures/2000036D000027110000145EB7E93049.wmf \ - report/stl-06/Pictures/100000000000005A000000268DE98CCE.gif \ - report/stl-06/Pictures/100000000000021B000001E8BE936AB6.gif \ - report/stl-08/Pictures/100000000000005E0000005E97FB9EF6.jpg \ - report/stl-09/Pictures/10000000000000050000004D32652675.jpg \ - report/stl-09/Pictures/100002000000001400000014E87B6AC5.gif \ - report/stl-09/Pictures/2000025100001D92000017719EB70CFB.wmf \ - styles/black_white/meta.xml \ - styles/blackberry/meta.xml \ - styles/default/meta.xml \ - styles/diner/meta.xml \ - styles/fall/meta.xml \ - styles/glacier/meta.xml \ - styles/green_grapes/meta.xml \ - styles/jeans/meta.xml \ - styles/marine/meta.xml \ - styles/millennium/meta.xml \ - styles/nature/meta.xml \ - styles/neon/meta.xml \ - styles/night/meta.xml \ - styles/nostalgic/meta.xml \ - styles/pastell/meta.xml \ - styles/pool/meta.xml \ - styles/pumpkin/meta.xml \ - styles/xos/meta.xml \ - -# param: style-base (e.g. agenda/10grey) -extras_WIZARD_XMLFILES_RELATIVE = $(subst $(1)/,,$(filter $(1)/%,$(extras_WIZARD_XMLFILES))) - -.SECONDEXPANSION: -# secondexpansion since the patterns not just cover a filename portion, but also include a -# directory portion with different number of elements -# copy regular files (mimetype, *.jpg, *.png, *.rdf, *.svg, *.svm, …) -$(gb_CustomTarget_workdir)/extras/source/templates/wizard/% : $(SRCDIR)/extras/source/templates/wizard/% \ - | $$(dir $(gb_CustomTarget_workdir)/extras/source/templates/wizard/$$*).dir - $(call gb_Output_announce,templates/wizard/$*,$(true),CPY,1) - $(call gb_Trace_StartRange,templates/wizard/$*,CPY) - cp $< $@ - $(call gb_Trace_EndRange,templates/wizard/$*,CPY) - -# test and copy xml files -$(gb_CustomTarget_workdir)/extras/source/templates/wizard/%.xml : $(SRCDIR)/extras/source/templates/wizard/%.xml \ - | $(call gb_ExternalExecutable_get_dependencies,xsltproc) \ - $$(dir $(gb_CustomTarget_workdir)/extras/source/templates/wizard/$$*.xml).dir - $(call gb_Output_announce,templates/wizard/$*.xml,$(true),XSL,1) - $(call gb_Trace_StartRange,templates/wizard/$*.xml,XSL) - $(call gb_ExternalExecutable_get_command,xsltproc) --nonet -o $@ $(SRCDIR)/extras/util/compact.xsl $< - $(call gb_Trace_EndRange,templates/wizard/$*.xml,XSL) - -# zip files to OTT -$(gb_CustomTarget_workdir)/extras/source/templates/wizard/%.ott : \ - $$(addprefix $(gb_CustomTarget_workdir)/extras/source/templates/wizard/$$*/,\ - mimetype $$(call extras_WIZARD_XMLFILES_RELATIVE,$$*) ) \ - $$(addprefix $(gb_CustomTarget_workdir)/extras/source/templates/wizard/$$*/,\ - content.xml $$(call extras_WIZARD_XMLFILES_RELATIVE,$$*) ) \ - $$(addprefix $(gb_CustomTarget_workdir)/extras/source/templates/wizard/$$*/,\ - settings.xml $$(call extras_WIZARD_XMLFILES_RELATIVE,$$*) ) \ - $$(addprefix $(gb_CustomTarget_workdir)/extras/source/templates/wizard/$$*/,\ - styles.xml $$(call extras_WIZARD_XMLFILES_RELATIVE,$$*) ) \ - $$(addprefix $(gb_CustomTarget_workdir)/extras/source/templates/wizard/$$*/,\ - META-INF/manifest.xml $$(call extras_WIZARD_XMLFILES_RELATIVE,$$*) ) - $(call gb_Output_announce,templates/wizard/$*.ott,$(true),ZIP,2) - $(call gb_Trace_StartRange,templates/wizard/$*.ott,ZIP) - $(call gb_Helper_abbreviate_dirs,\ - cd $(dir $<) && \ - $(call gb_Helper_wsl_path,\ - $(WSL) zip -q0X --filesync --must-match $@ mimetype && \ - $(WSL) zip -qrX --must-match $@ content.xml settings.xml styles.xml META-INF/manifest.xml && \ - $(WSL) zip -qrX --must-match $@ $(call extras_WIZARD_XMLFILES_RELATIVE,$*)) \ - ) - $(call gb_Trace_EndRange,templates/wizard/$*.ott,ZIP) - -# zip files to OTS -$(gb_CustomTarget_workdir)/extras/source/templates/wizard/%.ots : \ - $$(addprefix $(gb_CustomTarget_workdir)/extras/source/templates/wizard/$$*/,\ - mimetype $$(call extras_WIZARD_XMLFILES_RELATIVE,$$*) ) \ - $$(addprefix $(gb_CustomTarget_workdir)/extras/source/templates/wizard/$$*/,\ - content.xml $$(call extras_WIZARD_XMLFILES_RELATIVE,$$*) ) \ - $$(addprefix $(gb_CustomTarget_workdir)/extras/source/templates/wizard/$$*/,\ - settings.xml $$(call extras_WIZARD_XMLFILES_RELATIVE,$$*) ) \ - $$(addprefix $(gb_CustomTarget_workdir)/extras/source/templates/wizard/$$*/,\ - styles.xml $$(call extras_WIZARD_XMLFILES_RELATIVE,$$*) ) \ - $$(addprefix $(gb_CustomTarget_workdir)/extras/source/templates/wizard/$$*/,\ - META-INF/manifest.xml $$(call extras_WIZARD_XMLFILES_RELATIVE,$$*) ) - $(call gb_Output_announce,templates/wizard/$*.ots,$(true),ZIP,2) - $(call gb_Trace_StartRange,templates/wizard/$*.ots,ZIP) - $(call gb_Helper_abbreviate_dirs,\ - cd $(dir $<) && \ - $(call gb_Helper_wsl_path,\ - $(WSL) zip -q0X --filesync --must-match $@ mimetype && \ - $(WSL) zip -qrX --must-match $@ content.xml settings.xml styles.xml META-INF/manifest.xml && \ - $(WSL) zip -qrX --must-match $@ $(call extras_WIZARD_XMLFILES_RELATIVE,$*)) \ - ) - $(call gb_Trace_EndRange,templates/wizard/$*.ots,ZIP) - -# vim: set noet sw=4 ts=4: diff --git a/extras/CustomTarget_tplwizdesktop.mk b/extras/CustomTarget_tplwizdesktop.mk deleted file mode 100644 index cb51cf5400ca..000000000000 --- a/extras/CustomTarget_tplwizdesktop.mk +++ /dev/null @@ -1,89 +0,0 @@ -# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- -# -# This file is part of the LibreOffice project. -# -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. -# - -$(eval $(call gb_CustomTarget_CustomTarget,extras/source/templates/wizard)) - -# mimetype, content.xml, meta.xml, styles.xml and META-INF/manifest.xml -# files are automatically added for each template -# list of meta.xml files (one per template) + other files (manifest.rdf, pictures...) -extras_WIZDESKTOP_XMLFILES := \ - desktop/html/meta.xml \ - desktop/idxexample/meta.xml \ - desktop/idxexample/Pictures/2000008600001923000012C24E0D0895.wmf \ - -# param: style-base (e.g. agenda/10grey) -extras_WIZDESKTOP_XMLFILES_RELATIVE = $(subst $(1)/,,$(filter $(1)/%,$(extras_WIZDESKTOP_XMLFILES))) - -.SECONDEXPANSION: -# secondexpansion since the patterns not just cover a filename portion, but also include a -# directory portion with different number of elements -# copy regular files (mimetype, *.jpg, *.png, *.rdf, *.svg, *.svm, …) -$(gb_CustomTarget_workdir)/extras/source/templates/wizard/% : $(SRCDIR)/extras/source/templates/wizard/% \ - | $$(dir $(gb_CustomTarget_workdir)/extras/source/templates/wizard/$$*).dir - $(call gb_Output_announce,templates/wizard/$*,$(true),CPY,1) - $(call gb_Trace_StartRange,templates/wizard/$*,CPY) - cp $< $@ - $(call gb_Trace_EndRange,templates/wizard/$*,CPY) - -# test and copy xml files -$(gb_CustomTarget_workdir)/extras/source/templates/wizard/%.xml : $(SRCDIR)/extras/source/templates/wizard/%.xml \ - | $(call gb_ExternalExecutable_get_dependencies,xsltproc) \ - $$(dir $(gb_CustomTarget_workdir)/extras/source/templates/wizard/$$*.xml).dir - $(call gb_Output_announce,templates/wizard/$*.xml,$(true),XSL,1) - $(call gb_Trace_StartRange,templates/wizard/$*.xml,XSL) - $(call gb_ExternalExecutable_get_command,xsltproc) --nonet -o $@ $(SRCDIR)/extras/util/compact.xsl $< - $(call gb_Trace_EndRange,templates/wizard/$*.xml,XSL) - -# zip files to OTH -$(gb_CustomTarget_workdir)/extras/source/templates/wizard/%.oth : \ - $$(addprefix $(gb_CustomTarget_workdir)/extras/source/templates/wizard/$$*/,\ - mimetype $$(call extras_WIZDESKTOP_XMLFILES_RELATIVE,$$*) ) \ - $$(addprefix $(gb_CustomTarget_workdir)/extras/source/templates/wizard/$$*/,\ - content.xml $$(call extras_WIZDESKTOP_XMLFILES_RELATIVE,$$*) ) \ - $$(addprefix $(gb_CustomTarget_workdir)/extras/source/templates/wizard/$$*/,\ - styles.xml $$(call extras_WIZDESKTOP_XMLFILES_RELATIVE,$$*) ) \ - $$(addprefix $(gb_CustomTarget_workdir)/extras/source/templates/wizard/$$*/,\ - settings.xml $$(call extras_WIZDESKTOP_XMLFILES_RELATIVE,$$*) ) \ - $$(addprefix $(gb_CustomTarget_workdir)/extras/source/templates/wizard/$$*/,\ - META-INF/manifest.xml $$(call extras_WIZDESKTOP_XMLFILES_RELATIVE,$$*) ) - $(call gb_Output_announce,templates/wizard/$*.oth,$(true),ZIP,2) - $(call gb_Trace_StartRange,templates/wizard/$*.oth,ZIP) - $(call gb_Helper_abbreviate_dirs,\ - cd $(dir $<) && \ - $(call gb_Helper_wsl_path,\ - $(WSL) zip -q0X --filesync --must-match $@ mimetype && \ - $(WSL) zip -qrX --must-match $@ content.xml settings.xml styles.xml META-INF/manifest.xml && \ - $(WSL) zip -qrX --must-match $@ $(call extras_WIZDESKTOP_XMLFILES_RELATIVE,$*)) \ - ) - $(call gb_Trace_EndRange,templates/wizard/$*.oth,ZIP) - -# zip files to ODT -$(gb_CustomTarget_workdir)/extras/source/templates/wizard/%.odt : \ - $$(addprefix $(gb_CustomTarget_workdir)/extras/source/templates/wizard/$$*/,\ - mimetype $$(call extras_WIZDESKTOP_XMLFILES_RELATIVE,$$*) ) \ - $$(addprefix $(gb_CustomTarget_workdir)/extras/source/templates/wizard/$$*/,\ - content.xml $$(call extras_WIZDESKTOP_XMLFILES_RELATIVE,$$*) ) \ - $$(addprefix $(gb_CustomTarget_workdir)/extras/source/templates/wizard/$$*/,\ - settings.xml $$(call extras_WIZDESKTOP_XMLFILES_RELATIVE,$$*) ) \ - $$(addprefix $(gb_CustomTarget_workdir)/extras/source/templates/wizard/$$*/,\ - styles.xml $$(call extras_WIZDESKTOP_XMLFILES_RELATIVE,$$*) ) \ - $$(addprefix $(gb_CustomTarget_workdir)/extras/source/templates/wizard/$$*/,\ - META-INF/manifest.xml $$(call extras_WIZDESKTOP_XMLFILES_RELATIVE,$$*) ) - $(call gb_Output_announce,templates/wizard/$*.odt,$(true),ZIP,2) - $(call gb_Trace_StartRange,templates/wizard/$*.odt,ZIP) - $(call gb_Helper_abbreviate_dirs,\ - cd $(dir $<) && \ - $(call gb_Helper_wsl_path,\ - $(WSL) zip -q0X --filesync --must-match $@ mimetype && \ - $(WSL) zip -qrX --must-match $@ content.xml settings.xml styles.xml META-INF/manifest.xml && \ - $(WSL) zip -qrX --must-match $@ $(call extras_WIZDESKTOP_XMLFILES_RELATIVE,$*)) \ - ) - $(call gb_Trace_EndRange,templates/wizard/$*.odt,ZIP) - -# vim: set noet sw=4 ts=4: diff --git a/extras/Module_extras.mk b/extras/Module_extras.mk index 38632ca5b2a3..0c04202e8a20 100644 --- a/extras/Module_extras.mk +++ b/extras/Module_extras.mk @@ -15,9 +15,6 @@ $(eval $(call gb_Module_add_targets,extras,\ CustomTarget_glade \ CustomTarget_gallsystem \ CustomTarget_templates \ - CustomTarget_tplpresnt \ - CustomTarget_tplwizard \ - CustomTarget_tplwizdesktop \ Package_autocorr \ Package_autotextuser \ Package_cfgsrvnolang \ diff --git a/extras/README.md b/extras/README.md index 4c5fbdd2da2b..11a4ee3ef160 100644 --- a/extras/README.md +++ b/extras/README.md @@ -35,8 +35,8 @@ Contains templates, clipart galleries, palettes, symbol font, autocorrections, a + choose a template category `` + unzip `Foo.ot?` (? = p, t, s or g) in `extras/source/templates//Foo` (no space allowed in any file names) + add `/Foo.ot? /` in `Package_templates.mk` (or `Package_tplpresnt.mk` if it's a presentation) - + in `CustomTarget_templates.mk` (or `CustomTarget_tplpresnt.mk` if it's a presentation): - + add `/Foo/meta.xml /` and all files which are not automatically added in `extras_TEMPLATES_XMLFILES` (or `extras_PRESENTATIONS_XMLFILES` for presentation) + + in `template_files.mk`: + + add e.g. `/Foo/settings.xml` (and all other files which are not automatically added) to `extra_files_COMMON` (or `extra_files_PRESENTATIONS` in case of a presentation template) + for translation of template name + define a new STR_TEMPLATE_NAMExx in include/sfx2/strings.hrc + define a new STR_TEMPLATE_NAMExx_DEF in sfx2/inc/strings.hxx diff --git a/extras/template_files.mk b/extras/template_files.mk new file mode 100644 index 000000000000..57e006f6e774 --- /dev/null +++ b/extras/template_files.mk @@ -0,0 +1,307 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +# this file lists the contents/parts that make up the individual templates that are created during +# the build. +# +# The Package_*.mk files list the files that should be built and delivered to the installation tree, +# and CustomTarget_templates.mk has the actual recipes to assemble and package the template files. +# +# The split used here follows the split from the Package_*mk files, but that split is arbitrary/ +# artificial, they are ultimately combined into a single variable. +# A split only matters on the Package level, but even there only the wizard/desktop files are +# "special" (they are always created/packaged, while the rests is optional/behind a WITH_TEMPLATES +# conditional) + +# Specify filenames relative to SRC_ROOT/extras/source/templates +# mimetype, META-INF/manifest.xml, content.xml, meta.xml and styles.xml are always assumed to be +# present and can be omitted + +extra_files_COMMON := \ + draw/bpmn/Thumbnails/thumbnail.png \ + l10n/ja_ott_normal/manifest.rdf \ + l10n/ja_ott_normal/settings.xml \ + l10n/ja_ott_normal/Thumbnails/thumbnail.png \ + l10n/zh_CN_ott_normal/Thumbnails/thumbnail.png \ + officorr/Modern_business_letter_sans_serif/manifest.rdf \ + officorr/Modern_business_letter_sans_serif/Thumbnails/thumbnail.png \ + officorr/Modern_business_letter_serif/manifest.rdf \ + officorr/Modern_business_letter_serif/Thumbnails/thumbnail.png \ + offimisc/Businesscard-with-logo/manifest.rdf \ + offimisc/Businesscard-with-logo/Pictures/10000201000001F4000000A0108F3F06.png \ + offimisc/Businesscard-with-logo/settings.xml \ + offimisc/Businesscard-with-logo/Thumbnails/thumbnail.png \ + personal/CV/manifest.rdf \ + personal/CV/Thumbnails/thumbnail.png \ + personal/Resume1page/manifest.rdf \ + personal/Resume1page/Thumbnails/thumbnail.png \ + styles/Default/Thumbnails/thumbnail.png \ + styles/Modern/Thumbnails/thumbnail.png \ + styles/Simple/Thumbnails/thumbnail.png \ + + +extra_files_PRESENTATIONS := \ + presnt/Beehive/Thumbnails/thumbnail.png \ + presnt/Blue_Curve/Thumbnails/thumbnail.png \ + presnt/Blueprint_Plans/Pictures/10000000000000580000001F99D2A38C014B254B.png \ + presnt/Blueprint_Plans/Pictures/100000000000033C0000026D847ACE982C6E20B6.png \ + presnt/Blueprint_Plans/Pictures/10000000000004220000031A5C2E04AB7C51FB60.png \ + presnt/Blueprint_Plans/Pictures/1000020100000500000002D03918081590A75FCF.png \ + presnt/Blueprint_Plans/Pictures/1000020100000500000002D0F25E20EA381A5EBD.png \ + presnt/Blueprint_Plans/Thumbnails/thumbnail.png \ + presnt/Candy/Pictures/10000000000004A800000500DD5BB9FFED422172.png \ + presnt/Candy/Pictures/10000000000005000000050014DEA376B6E67205.png \ + presnt/Candy/Pictures/1000000000000780000004383B6CE268A9802A07.png \ + presnt/Candy/Pictures/10000000000007800000043870026B1FACED0D1B.png \ + presnt/Candy/Thumbnails/thumbnail.png \ + presnt/DNA/Thumbnails/thumbnail.png \ + presnt/Focus/Thumbnails/thumbnail.png \ + presnt/Forestbird/Thumbnails/thumbnail.png \ + presnt/Freshes/Object_1/content.xml \ + presnt/Freshes/Object_2/content.xml \ + presnt/Freshes/Pictures/10000000000001980000067FB46981E5FBCD5A53.jpg \ + presnt/Freshes/Pictures/10000000000002C5000003C02FC12A07C25F42DF.jpg \ + presnt/Freshes/Pictures/10000000000002D50000067FACCA26111F046EB5.jpg \ + presnt/Freshes/Pictures/100000000000030F0000036F55A62FC34FCAB38E.jpg \ + presnt/Freshes/Pictures/100000000000049100000359E7B1AC100BA62FBB.jpg \ + presnt/Freshes/Pictures/10000000000006D7000003A637B7BBC50EDF4D24.jpg \ + presnt/Freshes/Pictures/1000000000000B8B0000067F7C4C059ECC323C6F.jpg \ + presnt/Freshes/Thumbnails/thumbnail.png \ + presnt/Grey_Elegant/Pictures/1000000000000007000000075D9D31963C8C0E25.jpg \ + presnt/Grey_Elegant/Pictures/1000000000000007000000076677E5BE1EDAF335.jpg \ + presnt/Grey_Elegant/Pictures/10000000000001920000019230489F7A89351262.jpg \ + presnt/Grey_Elegant/Pictures/10000109000002950000029599843C084F54196C.svg \ + presnt/Grey_Elegant/Pictures/100001E0000002950000029531405702AAD800D0.svg \ + presnt/Grey_Elegant/Pictures/10000201000000190000001945D72F17575B71B4.png \ + presnt/Grey_Elegant/Pictures/1000020100000019000000194F0EE08BB7018624.png \ + presnt/Grey_Elegant/Pictures/10000201000000190000001967D610D5BD5B9486.png \ + presnt/Grey_Elegant/Pictures/100002010000001900000019B19ADF33FD67D860.png \ + presnt/Grey_Elegant/Pictures/100002010000001900000019CA03B954885E470D.png \ + presnt/Grey_Elegant/Pictures/10000201000003300000026455AC9786240DB2F8.png \ + presnt/Grey_Elegant/Pictures/100002510000029500000295D9236A158400ED63.svg \ + presnt/Grey_Elegant/Pictures/100002800000029500000295458C6106AED5C839.svg \ + presnt/Grey_Elegant/Pictures/100002CA0000029500000295A190AE1D987B676B.svg \ + presnt/Grey_Elegant/Pictures/1000DC810000A57800007C20AABC768B7E7ACB30.svg \ + presnt/Grey_Elegant/Thumbnails/thumbnail.png \ + presnt/Growing_Liberty/Pictures/10000000000007800000043801760C0AF0E62E0B.jpg \ + presnt/Growing_Liberty/Pictures/10000000000007800000043827B5F54D1F4F498F.jpg \ + presnt/Growing_Liberty/Pictures/100002010000016A0000029374C9F2B8F26392AD.png \ + presnt/Growing_Liberty/Pictures/10000201000001F000000351DA39462E363D7ED3.png \ + presnt/Growing_Liberty/Pictures/10000201000001F10000029333ED1BC48076B5C4.png \ + presnt/Growing_Liberty/Pictures/10000201000001F3000003548E51808DE171DA02.png \ + presnt/Growing_Liberty/Pictures/10000C1C0000034200004A6A2C92F38BC117DD3C.svg \ + presnt/Growing_Liberty/Pictures/10000C340000844B000003422549B923A55839CC.svg \ + presnt/Growing_Liberty/Pictures/10000C8F0000034200004A6ABD021DA9BD39254C.svg \ + presnt/Growing_Liberty/Pictures/10000CA90000844B000003426738F0E80CCFF9F3.svg \ + presnt/Growing_Liberty/Thumbnails/thumbnail.png \ + presnt/Inspiration/Thumbnails/thumbnail.png \ + presnt/Lights/Thumbnails/thumbnail.png \ + presnt/Metropolis/Pictures/10000201000003AF000002126A94207C4902B60B.png \ + presnt/Metropolis/Pictures/100021B200008D2E00004F60B312A649B9EEC188.svg \ + presnt/Metropolis/Thumbnails/thumbnail.png \ + presnt/Midnightblue/Thumbnails/thumbnail.png \ + presnt/Nature_Illustration/Pictures/10000000000004210000031931EA92AB7FB2FD6C.jpg \ + presnt/Nature_Illustration/Pictures/100000000000042100000319892187DC121460D8.jpg \ + presnt/Nature_Illustration/Thumbnails/thumbnail.png \ + presnt/Pencil/Pictures/1000020100000088000000870A26C51C993940C3.png \ + presnt/Pencil/Pictures/100002010000037D0000001C2F14EFE8274AD9FC.png \ + presnt/Pencil/Pictures/1000020100000402000000A2F7F509AE74DE6C69.png \ + presnt/Pencil/Thumbnails/thumbnail.png \ + presnt/Piano/Pictures/100000000000035400000120266623530F1969D0.png \ + presnt/Piano/Pictures/100002010000033A0000006EDD62437E1CC42053.png \ + presnt/Piano/Thumbnails/thumbnail.png \ + presnt/Portfolio/Thumbnails/thumbnail.png \ + presnt/Progress/Thumbnails/thumbnail.png \ + presnt/Sunset/Thumbnails/thumbnail.png \ + presnt/Vintage/Pictures/10000000000000580000001F99D2A38C014B254B.png \ + presnt/Vintage/Pictures/10000201000004B000000337490AE22881331C9B.png \ + presnt/Vintage/Pictures/10000201000004B00000033776CA70A4BFE2196B.png \ + presnt/Vintage/Pictures/10000201000004B0000003379D1127938561C230.png \ + presnt/Vintage/Pictures/10000201000004B000000337D99A2303560BD59C.png \ + presnt/Vintage/Thumbnails/thumbnail.png \ + presnt/Vivid/Thumbnails/thumbnail.png \ + presnt/Yellow_Idea/Thumbnails/thumbnail.png \ + + +extra_files_WIZARD := \ + wizard/agenda/10grey/manifest.rdf \ + wizard/agenda/10grey/settings.xml \ + wizard/agenda/1simple/manifest.rdf \ + wizard/agenda/1simple/settings.xml \ + wizard/agenda/2elegant/manifest.rdf \ + wizard/agenda/2elegant/Pictures/1000000000000280000000052876A81A.gif \ + wizard/agenda/2elegant/Pictures/100002000000008F0000000A83659D51.gif \ + wizard/agenda/2elegant/settings.xml \ + wizard/agenda/3modern/manifest.rdf \ + wizard/agenda/3modern/settings.xml \ + wizard/agenda/4classic/manifest.rdf \ + wizard/agenda/4classic/settings.xml \ + wizard/agenda/5blue/manifest.rdf \ + wizard/agenda/5blue/settings.xml \ + wizard/agenda/6orange/manifest.rdf \ + wizard/agenda/6orange/settings.xml \ + wizard/agenda/7red/manifest.rdf \ + wizard/agenda/7red/settings.xml \ + wizard/agenda/8green/manifest.rdf \ + wizard/agenda/8green/settings.xml \ + wizard/agenda/9colorful/manifest.rdf \ + wizard/agenda/9colorful/settings.xml \ + wizard/agenda/aw-10grey/manifest.rdf \ + wizard/agenda/aw-10grey/settings.xml \ + wizard/agenda/aw-1simple/manifest.rdf \ + wizard/agenda/aw-1simple/settings.xml \ + wizard/agenda/aw-2elegant/manifest.rdf \ + wizard/agenda/aw-2elegant/Pictures/1000000000000280000000052876A81A.gif \ + wizard/agenda/aw-2elegant/Pictures/100002000000008F0000000A83659D51.gif \ + wizard/agenda/aw-2elegant/settings.xml \ + wizard/agenda/aw-3modern/manifest.rdf \ + wizard/agenda/aw-3modern/settings.xml \ + wizard/agenda/aw-4classic/manifest.rdf \ + wizard/agenda/aw-4classic/settings.xml \ + wizard/agenda/aw-5blue/manifest.rdf \ + wizard/agenda/aw-5blue/settings.xml \ + wizard/agenda/aw-6orange/manifest.rdf \ + wizard/agenda/aw-6orange/settings.xml \ + wizard/agenda/aw-7red/manifest.rdf \ + wizard/agenda/aw-7red/settings.xml \ + wizard/agenda/aw-8green/manifest.rdf \ + wizard/agenda/aw-8green/settings.xml \ + wizard/agenda/aw-9colorful/manifest.rdf \ + wizard/agenda/aw-9colorful/settings.xml \ + wizard/desktop/html/settings.xml \ + wizard/desktop/idxexample/settings.xml \ + wizard/fax/bus-classic_f/manifest.rdf \ + wizard/fax/bus-classic_f/Pictures/200000520000271100001F73A977C564.wmf \ + wizard/fax/bus-classic_f/settings.xml \ + wizard/fax/bus-classic-pri_f/manifest.rdf \ + wizard/fax/bus-classic-pri_f/settings.xml \ + wizard/fax/bus-modern_f/manifest.rdf \ + wizard/fax/bus-modern_f/Pictures/2000004E0000271100001F73772F7F48.wmf \ + wizard/fax/bus-modern_f/settings.xml \ + wizard/fax/bus-modern-pri_f/manifest.rdf \ + wizard/fax/bus-modern-pri_f/settings.xml \ + wizard/fax/pri-bottle_f/Pictures/200002EB000022DA000024E1F891208C.wmf \ + wizard/fax/pri-bottle_f/settings.xml \ + wizard/fax/pri-fax_f/Pictures/2000032600002711000026A54A905481.wmf \ + wizard/fax/pri-fax_f/settings.xml \ + wizard/fax/pri-lines_f/settings.xml \ + wizard/fax/pri-marine_f/Pictures/2000004B0000227F0000227886F3FC0F.wmf \ + wizard/fax/pri-marine_f/settings.xml \ + wizard/letter/bus-elegant_l/manifest.rdf \ + wizard/letter/bus-elegant_l/Pictures/10000000000001B8000000824B7EA208.png \ + wizard/letter/bus-elegant_l/settings.xml \ + wizard/letter/bus-modern_l/manifest.rdf \ + wizard/letter/bus-modern_l/Pictures/10000000000001B8000000824B7EA208.png \ + wizard/letter/bus-modern_l/settings.xml \ + wizard/letter/bus-office_l/manifest.rdf \ + wizard/letter/bus-office_l/Pictures/10000000000001B8000000824B7EA208.png \ + wizard/letter/bus-office_l/settings.xml \ + wizard/letter/off-elegant_l/manifest.rdf \ + wizard/letter/off-elegant_l/Pictures/2000000D00000434000006FD6841386B.svm \ + wizard/letter/off-elegant_l/settings.xml \ + wizard/letter/off-modern_l/manifest.rdf \ + wizard/letter/off-modern_l/Pictures/10000000000000110000001142D1547F.png \ + wizard/letter/off-modern_l/settings.xml \ + wizard/letter/off-office_l/manifest.rdf \ + wizard/letter/off-office_l/settings.xml \ + wizard/letter/pri-bottle_l/Pictures/200002EB000022DA000024E1F891208C.wmf \ + wizard/letter/pri-bottle_l/settings.xml \ + wizard/letter/pri-mail_l/Pictures/200000430000271100001205CAE80946.wmf \ + wizard/letter/pri-mail_l/settings.xml \ + wizard/letter/pri-marine_l/Pictures/2000004B0000227F0000227886F3FC0F.wmf \ + wizard/letter/pri-marine_l/settings.xml \ + wizard/letter/pri-redline_l/settings.xml \ + wizard/report/cnt-01/settings.xml \ + wizard/report/cnt-011/settings.xml \ + wizard/report/cnt-012/settings.xml \ + wizard/report/cnt-02/settings.xml \ + wizard/report/cnt-021/settings.xml \ + wizard/report/cnt-022/settings.xml \ + wizard/report/cnt-03/settings.xml \ + wizard/report/cnt-031/settings.xml \ + wizard/report/cnt-032/settings.xml \ + wizard/report/cnt-04/settings.xml \ + wizard/report/cnt-041/settings.xml \ + wizard/report/cnt-042/settings.xml \ + wizard/report/cnt-05/settings.xml \ + wizard/report/cnt-051/settings.xml \ + wizard/report/cnt-052/settings.xml \ + wizard/report/cnt-06/settings.xml \ + wizard/report/cnt-061/settings.xml \ + wizard/report/cnt-062/settings.xml \ + wizard/report/cnt-default/settings.xml \ + wizard/report/stl-01/manifest.rdf \ + wizard/report/stl-01/Pictures/100002000000001400000014E87B6AC5.gif \ + wizard/report/stl-01/Pictures/2000018100001CB100002711BFED37A8.wmf \ + wizard/report/stl-01/settings.xml \ + wizard/report/stl-02/manifest.rdf \ + wizard/report/stl-02/Pictures/2000009E0000380100002657BA019D86.wmf \ + wizard/report/stl-02/settings.xml \ + wizard/report/stl-03/manifest.rdf \ + wizard/report/stl-03/Pictures/2000024900002711000021F4DCB2DF4A.wmf \ + wizard/report/stl-03/settings.xml \ + wizard/report/stl-04/manifest.rdf \ + wizard/report/stl-04/Pictures/10000000000000400000004077CDC8F9.png \ + wizard/report/stl-04/Pictures/10000000000001C6000000E44DCA6C94.jpg \ + wizard/report/stl-04/settings.xml \ + wizard/report/stl-05/manifest.rdf \ + wizard/report/stl-05/Pictures/2000036D000027110000145EB7E93049.wmf \ + wizard/report/stl-05/settings.xml \ + wizard/report/stl-06/manifest.rdf \ + wizard/report/stl-06/Pictures/100000000000005A000000268DE98CCE.gif \ + wizard/report/stl-06/Pictures/100000000000021B000001E8BE936AB6.gif \ + wizard/report/stl-06/settings.xml \ + wizard/report/stl-07/manifest.rdf \ + wizard/report/stl-07/settings.xml \ + wizard/report/stl-08/manifest.rdf \ + wizard/report/stl-08/Pictures/100000000000005E0000005E97FB9EF6.jpg \ + wizard/report/stl-08/settings.xml \ + wizard/report/stl-09/manifest.rdf \ + wizard/report/stl-09/Pictures/10000000000000050000004D32652675.jpg \ + wizard/report/stl-09/Pictures/100002000000001400000014E87B6AC5.gif \ + wizard/report/stl-09/Pictures/2000025100001D92000017719EB70CFB.wmf \ + wizard/report/stl-09/settings.xml \ + wizard/report/stl-default/manifest.rdf \ + wizard/report/stl-default/settings.xml \ + wizard/styles/black_white/settings.xml \ + wizard/styles/blackberry/settings.xml \ + wizard/styles/default/settings.xml \ + wizard/styles/diner/settings.xml \ + wizard/styles/fall/settings.xml \ + wizard/styles/glacier/settings.xml \ + wizard/styles/green_grapes/settings.xml \ + wizard/styles/jeans/settings.xml \ + wizard/styles/marine/settings.xml \ + wizard/styles/millennium/settings.xml \ + wizard/styles/nature/settings.xml \ + wizard/styles/neon/settings.xml \ + wizard/styles/night/settings.xml \ + wizard/styles/nostalgic/settings.xml \ + wizard/styles/pastell/settings.xml \ + wizard/styles/pool/settings.xml \ + wizard/styles/pumpkin/settings.xml \ + wizard/styles/xos/settings.xml \ + + +extra_files_WIZDESKTOP := \ + wizard/desktop/html/settings.xml \ + wizard/desktop/idxexample/Pictures/2000008600001923000012C24E0D0895.wmf \ + wizard/desktop/idxexample/settings.xml \ + + +extra_files_TEMPLATES := \ + $(extra_files_COMMON) \ + $(extra_files_PRESENTATIONS) \ + $(extra_files_WIZARD) \ + $(extra_files_WIZDESKTOP) \ + + +extra_files_TEMPLATES_RELATIVE = $(subst $(1)/,,$(filter $(1)/%,$(extra_files_TEMPLATES))) + +# vim: set noet sw=4 ts=4: From 2e87c644245751aea9f50faf16c4ca4d57b0c2f1 Mon Sep 17 00:00:00 2001 From: Patrick Luby Date: Thu, 27 Jun 2024 20:05:19 -0400 Subject: [PATCH 120/194] tdf#159680 fix memory leak of CTFontRef The CTFontRef in CoreTextFontFace::GetVariations() was never released and a new CTFontRef was allocated in every call to CoreTextFontFace::GetVariations(). So release the CTFontRef and only allocate it once when mxVariations is populated. Change-Id: I08999956501d5860fff67e48001ef85a62ca8079 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169690 Tested-by: Jenkins Reviewed-by: Patrick Luby --- vcl/quartz/CoreTextFontFace.cxx | 53 +++++++++++++++++---------------- 1 file changed, 28 insertions(+), 25 deletions(-) diff --git a/vcl/quartz/CoreTextFontFace.cxx b/vcl/quartz/CoreTextFontFace.cxx index 662b439a9eae..47792fff7a58 100644 --- a/vcl/quartz/CoreTextFontFace.cxx +++ b/vcl/quartz/CoreTextFontFace.cxx @@ -46,43 +46,46 @@ sal_IntPtr CoreTextFontFace::GetFontId() const const std::vector& CoreTextFontFace::GetVariations(const LogicalFontInstance&) const { - CTFontRef pFont = CTFontCreateWithFontDescriptor(mxFontDescriptor, 0.0, nullptr); - if (!mxVariations) { mxVariations.emplace(); - CFArrayRef pAxes = CTFontCopyVariationAxes(pFont); - if (pAxes) + CTFontRef pFont = CTFontCreateWithFontDescriptor(mxFontDescriptor, 0.0, nullptr); + if (pFont) { - CFDictionaryRef pVariations = CTFontCopyVariation(pFont); - if (pVariations) + CFArrayRef pAxes = CTFontCopyVariationAxes(pFont); + if (pAxes) { - CFIndex nAxes = CFArrayGetCount(pAxes); - for (CFIndex i = 0; i < nAxes; ++i) + CFDictionaryRef pVariations = CTFontCopyVariation(pFont); + if (pVariations) { - auto pAxis = static_cast(CFArrayGetValueAtIndex(pAxes, i)); - if (pAxis) + CFIndex nAxes = CFArrayGetCount(pAxes); + for (CFIndex i = 0; i < nAxes; ++i) { - hb_tag_t nTag; - auto pTag = static_cast( - CFDictionaryGetValue(pAxis, kCTFontVariationAxisIdentifierKey)); - if (!pTag) - continue; - CFNumberGetValue(pTag, kCFNumberIntType, &nTag); + auto pAxis = static_cast(CFArrayGetValueAtIndex(pAxes, i)); + if (pAxis) + { + hb_tag_t nTag; + auto pTag = static_cast( + CFDictionaryGetValue(pAxis, kCTFontVariationAxisIdentifierKey)); + if (!pTag) + continue; + CFNumberGetValue(pTag, kCFNumberIntType, &nTag); - float fValue; - auto pValue - = static_cast(CFDictionaryGetValue(pVariations, pTag)); - if (!pValue) - continue; - CFNumberGetValue(pValue, kCFNumberFloatType, &fValue); + float fValue; + auto pValue + = static_cast(CFDictionaryGetValue(pVariations, pTag)); + if (!pValue) + continue; + CFNumberGetValue(pValue, kCFNumberFloatType, &fValue); - mxVariations->push_back({ nTag, fValue }); + mxVariations->push_back({ nTag, fValue }); + } } + CFRelease(pVariations); } - CFRelease(pVariations); + CFRelease(pAxes); } - CFRelease(pAxes); + CFRelease(pFont); } } From a7d1a6f313b1ee73b8bd360a7dfb3f0fc56e64bf Mon Sep 17 00:00:00 2001 From: Sarper Akdemir Date: Fri, 21 Jun 2024 12:39:50 +0200 Subject: [PATCH 121/194] languagetool show cURL errors with the interaction handler Only shows the error once for a given checkerURL. Change-Id: I1873dc09584df33162c93d9d133b12eb8dfede04 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169518 Reviewed-by: Michael Stahl Tested-by: Jenkins Reviewed-by: Sarper Akdemir --- lingucomponent/Library_LanguageTool.mk | 1 + .../languagetool/languagetoolimp.cxx | 76 +++++++++++++++---- .../languagetool/languagetoolimp.hxx | 5 +- 3 files changed, 68 insertions(+), 14 deletions(-) diff --git a/lingucomponent/Library_LanguageTool.mk b/lingucomponent/Library_LanguageTool.mk index 91907fe2b52f..aa09327cdec3 100644 --- a/lingucomponent/Library_LanguageTool.mk +++ b/lingucomponent/Library_LanguageTool.mk @@ -23,6 +23,7 @@ $(eval $(call gb_Library_use_libraries,LanguageTool,\ comphelper \ cppu \ cppuhelper \ + fwk \ i18nlangtag \ svt \ lng \ diff --git a/lingucomponent/source/spellcheck/languagetool/languagetoolimp.cxx b/lingucomponent/source/spellcheck/languagetool/languagetoolimp.cxx index e50e96e4fb05..e565b3f269fe 100644 --- a/lingucomponent/source/spellcheck/languagetool/languagetoolimp.cxx +++ b/lingucomponent/source/spellcheck/languagetool/languagetoolimp.cxx @@ -47,8 +47,13 @@ #include #include #include +#include +#include +#include #include +#include #include +#include #include #include #include @@ -121,7 +126,7 @@ enum class HTTP_METHOD std::string makeHttpRequest_impl(std::u16string_view aURL, HTTP_METHOD method, const OString& aPostData, curl_slist* pHttpHeader, - tools::Long& nStatusCode) + tools::Long& nStatusCode, CURLcode& eCURLCode) { struct curl_cleanup_t { @@ -160,11 +165,12 @@ std::string makeHttpRequest_impl(std::u16string_view aURL, HTTP_METHOD method, (void)curl_easy_setopt(curl.get(), CURLOPT_POSTFIELDS, aPostData.getStr()); } - CURLcode cc = curl_easy_perform(curl.get()); - if (cc != CURLE_OK) + eCURLCode = curl_easy_perform(curl.get()); + if (eCURLCode != CURLE_OK) { SAL_WARN("languagetool", - "CURL request returned with error: " << static_cast(cc)); + "CURL request returned with error: " << static_cast(eCURLCode) << " " + << curl_easy_strerror(eCURLCode)); } curl_easy_getinfo(curl.get(), CURLINFO_RESPONSE_CODE, &nStatusCode); @@ -172,7 +178,7 @@ std::string makeHttpRequest_impl(std::u16string_view aURL, HTTP_METHOD method, } std::string makeDudenHttpRequest(std::u16string_view aURL, const OString& aPostData, - tools::Long& nStatusCode) + tools::Long& nStatusCode, CURLcode& eCURLCode) { struct curl_slist* pList = nullptr; OString sAccessToken @@ -186,11 +192,12 @@ std::string makeDudenHttpRequest(std::u16string_view aURL, const OString& aPostD pList = curl_slist_append(pList, sAccessToken.getStr()); } - return makeHttpRequest_impl(aURL, HTTP_METHOD::HTTP_POST, aPostData, pList, nStatusCode); + return makeHttpRequest_impl(aURL, HTTP_METHOD::HTTP_POST, aPostData, pList, nStatusCode, + eCURLCode); } std::string makeHttpRequest(std::u16string_view aURL, HTTP_METHOD method, const OString& aPostData, - tools::Long& nStatusCode) + tools::Long& nStatusCode, CURLcode& eCURLCode) { OString realPostData(aPostData); if (method == HTTP_METHOD::HTTP_POST) @@ -202,7 +209,7 @@ std::string makeHttpRequest(std::u16string_view aURL, HTTP_METHOD method, const realPostData += "&username=" + encodeTextForLT(username) + "&apiKey=" + apiKey; } - return makeHttpRequest_impl(aURL, method, realPostData, nullptr, nStatusCode); + return makeHttpRequest_impl(aURL, method, realPostData, nullptr, nStatusCode, eCURLCode); } template @@ -301,10 +308,41 @@ OUString getCheckerURL() return *oURL + "/check"; return {}; } + +void lclShowCURLErrorInteraction(const css::uno::Reference& xContext, + CURLcode eCURLCode, const OUString& rServer) +{ + if (!xContext.is()) + return; + + css::uno::Reference xInteractionHandler + = task::InteractionHandler::createWithParent(xContext, nullptr); + if (!xInteractionHandler.is()) + return; + + css::uno::Any aInteraction; + + rtl::Reference pApprove + = new comphelper::OInteractionApprove(); + css::uno::Sequence> aContinuations{ + pApprove + }; + + ucb::InteractiveNetworkConnectException aException( + { "(" + OUString::number(eCURLCode) + ") " + + OStringToOUString(curl_easy_strerror(eCURLCode), RTL_TEXTENCODING_UTF8) }, + {}, task::InteractionClassification_ERROR, rServer); + + aInteraction <<= aException; + xInteractionHandler->handle( + framework::InteractionRequest::CreateRequest(aInteraction, aContinuations)); +} } -LanguageToolGrammarChecker::LanguageToolGrammarChecker() +LanguageToolGrammarChecker::LanguageToolGrammarChecker( + const css::uno::Reference& xContext) : mCachedResults(10) + , mxContext(xContext) { } @@ -452,10 +490,22 @@ ProofreadingResult SAL_CALL LanguageToolGrammarChecker::doProofreading( tools::Long http_code = 0; std::string response_body; + CURLcode eCURLCode = CURLE_OK; if (bDudenProtocol) - response_body = makeDudenHttpRequest(checkerURL, postData, http_code); + response_body = makeDudenHttpRequest(checkerURL, postData, http_code, eCURLCode); else - response_body = makeHttpRequest(checkerURL, HTTP_METHOD::HTTP_POST, postData, http_code); + response_body + = makeHttpRequest(checkerURL, HTTP_METHOD::HTTP_POST, postData, http_code, eCURLCode); + + if (eCURLCode != CURLE_OK) + { + // show the cURL error only once for a given checkerURL + if (maLastErrorCheckerURL != checkerURL) + { + maLastErrorCheckerURL = checkerURL; + lclShowCURLErrorInteraction(mxContext, eCURLCode, checkerURL); + } + } if (http_code != 200) { @@ -512,9 +562,9 @@ void SAL_CALL LanguageToolGrammarChecker::initialize(const uno::Sequence const&) + css::uno::XComponentContext* pContext, css::uno::Sequence const&) { - return cppu::acquire(new LanguageToolGrammarChecker()); + return cppu::acquire(new LanguageToolGrammarChecker(pContext)); } /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/lingucomponent/source/spellcheck/languagetool/languagetoolimp.hxx b/lingucomponent/source/spellcheck/languagetool/languagetoolimp.hxx index 93d2c84c612d..487d6d154e4b 100644 --- a/lingucomponent/source/spellcheck/languagetool/languagetoolimp.hxx +++ b/lingucomponent/source/spellcheck/languagetool/languagetoolimp.hxx @@ -25,6 +25,7 @@ #include #include #include +#include #include #include #include @@ -37,11 +38,13 @@ class LanguageToolGrammarChecker css::uno::Sequence m_aSuppLocales; o3tl::lru_map> mCachedResults; + css::uno::Reference mxContext; + OUString maLastErrorCheckerURL; LanguageToolGrammarChecker(const LanguageToolGrammarChecker&) = delete; LanguageToolGrammarChecker& operator=(const LanguageToolGrammarChecker&) = delete; public: - LanguageToolGrammarChecker(); + LanguageToolGrammarChecker(const css::uno::Reference& xContext); virtual ~LanguageToolGrammarChecker() override; // XSupportedLocales From 5e143492320dac8cdf8b2956799ca366f3d8e72c Mon Sep 17 00:00:00 2001 From: Sarper Akdemir Date: Fri, 7 Jun 2024 21:14:44 +0200 Subject: [PATCH 122/194] tdf#33603: fix notespane (side/tool)bar interactions Introduces OverridingShells that when set, makes the view act like the MainViewShell. The main use case is having more then one ViewShell in a single window, where context (toolbars, sidebars etc.) can jump in between different ViewShells. Uses OverridingShells to enable NotesPane to react ToolBarShells. Accessing the functionality of ToolBarShells without the previous hacks with slot forwarding. Change-Id: Icc9721d7f54097025bc9dc7ef7069aed856e6d96 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169658 Tested-by: Jenkins Reviewed-by: Sarper Akdemir --- include/sfx2/shell.hxx | 2 +- sd/sdi/NotesPanelView.sdi | 1 - .../ui/framework/module/ToolBarModule.cxx | 118 +++++++++++++++--- .../ui/framework/module/ToolBarModule.hxx | 29 ++++- sd/source/ui/inc/EventMultiplexer.hxx | 12 +- sd/source/ui/inc/ToolBarManager.hxx | 5 +- sd/source/ui/inc/ViewShell.hxx | 1 + sd/source/ui/inc/ViewShellManager.hxx | 4 + sd/source/ui/tools/EventMultiplexer.cxx | 24 ++-- sd/source/ui/view/NotesPanelView.cxx | 6 + sd/source/ui/view/NotesPanelViewShell.cxx | 1 - sd/source/ui/view/ToolBarManager.cxx | 38 ++++-- sd/source/ui/view/ViewShellManager.cxx | 51 +++++++- sd/source/ui/view/drtxtob.cxx | 5 +- sd/source/ui/view/outlnvsh.cxx | 2 +- sd/source/ui/view/viewshel.cxx | 65 ++++++++++ 16 files changed, 318 insertions(+), 46 deletions(-) diff --git a/include/sfx2/shell.hxx b/include/sfx2/shell.hxx index 420c8d578b95..566241c6db7e 100644 --- a/include/sfx2/shell.hxx +++ b/include/sfx2/shell.hxx @@ -455,7 +455,7 @@ public: defined with an earlier call to SetContextName(). When then broadcast the 'default' context. */ - void BroadcastContextForActivation (const bool bIsActivated); + virtual void BroadcastContextForActivation (const bool bIsActivated); /** Enabled or disable the context broadcaster. Returns the old state. */ diff --git a/sd/sdi/NotesPanelView.sdi b/sd/sdi/NotesPanelView.sdi index b54addb52b8c..2fca90c56fdc 100644 --- a/sd/sdi/NotesPanelView.sdi +++ b/sd/sdi/NotesPanelView.sdi @@ -499,5 +499,4 @@ include "drtxtob.sdi" shell NotesPanelViewShell { import NotesPanelView; - import TextObjectBar; } diff --git a/sd/source/ui/framework/module/ToolBarModule.cxx b/sd/source/ui/framework/module/ToolBarModule.cxx index de7f3e583126..cf3fd880105e 100644 --- a/sd/source/ui/framework/module/ToolBarModule.cxx +++ b/sd/source/ui/framework/module/ToolBarModule.cxx @@ -18,10 +18,17 @@ */ #include "ToolBarModule.hxx" +#include #include +#include #include +#include #include #include +#include + +#include +#include using namespace ::com::sun::star; using namespace ::com::sun::star::uno; @@ -76,6 +83,9 @@ ToolBarModule::ToolBarModule ( ToolBarModule::~ToolBarModule() { + if (mpBase && mbListeningEventMultiplexer) + mpBase->GetEventMultiplexer()->RemoveEventListener( + LINK(this, ToolBarModule, EventMultiplexerListener)); } void ToolBarModule::disposing(std::unique_lock&) @@ -93,6 +103,16 @@ void SAL_CALL ToolBarModule::notifyConfigurationChange ( if (!mxConfigurationController.is()) return; + // since EventMultiplexer isn't available when the ToolBarModule is + // initialized, subscribing the event listener hacked here. + if (!mbListeningEventMultiplexer && mpBase) + { + mpBase->GetEventMultiplexer()->AddEventListener( + LINK(this, ToolBarModule, EventMultiplexerListener)); + mbListeningEventMultiplexer = true; + } + + sal_Int32 nEventType = 0; rEvent.UserData >>= nEventType; switch (nEventType) @@ -123,6 +143,34 @@ void SAL_CALL ToolBarModule::notifyConfigurationChange ( } } +void ToolBarModule::HandlePaneViewShellFocused(const css::uno::Reference& rxResourceId) +{ + if(!mpBase) + return; + + std::shared_ptr pFrameworkHelper(FrameworkHelper::Instance(*mpBase)); + std::shared_ptr pViewShell + = FrameworkHelper::GetViewShell(pFrameworkHelper->GetView(rxResourceId)); + + if(mpBase->GetMainViewShell() == pViewShell) + { + mpBase->GetViewShellManager()->RemoveOverridingMainShell(); + return; + } + + switch(pViewShell->GetShellType()) + { + // shells that override mainviewshell functionality when used in a pane + case ViewShell::ST_NOTESPANEL: + mpBase->GetViewShellManager()->SetOverridingMainShell(pViewShell); + UpdateToolbars(pViewShell.get()); + break; + default: + break; + } + mpToolBarManagerLock.reset(); +} + void ToolBarModule::HandleUpdateStart() { // Lock the ToolBarManager and tell it to lock the ViewShellManager as @@ -149,23 +197,11 @@ void ToolBarModule::HandleUpdateEnd() std::shared_ptr pToolBarManager (mpBase->GetToolBarManager()); std::shared_ptr pFrameworkHelper ( FrameworkHelper::Instance(*mpBase)); - ViewShell* pViewShell - = pFrameworkHelper->GetViewShell(FrameworkHelper::msCenterPaneURL).get(); - if (pViewShell != nullptr) - { - pToolBarManager->MainViewShellChanged(*pViewShell); - pToolBarManager->SelectionHasChanged( - *pViewShell, - *pViewShell->GetView()); - pToolBarManager->PreUpdate(); - } - else - { - pToolBarManager->MainViewShellChanged(); - pToolBarManager->PreUpdate(); - } - } + auto pViewShell + = pFrameworkHelper->GetViewShell(FrameworkHelper::msCenterPaneURL); + UpdateToolbars(pViewShell.get()); + } // Releasing the update lock of the ToolBarManager will let the // ToolBarManager with the help of the ViewShellManager take care of // updating tool bars and view shell with the minimal amount of @@ -173,6 +209,35 @@ void ToolBarModule::HandleUpdateEnd() mpToolBarManagerLock.reset(); } +void ToolBarModule::UpdateToolbars(ViewShell* pViewShell) +{ + // Update the set of visible tool bars and deactivate those that are + // no longer visible. This is done before the old view shell is + // destroyed in order to avoid unnecessary updates of those tool + // bars. + if (!mpBase) + return; + + std::shared_ptr pToolBarManager (mpBase->GetToolBarManager()); + + if(!pToolBarManager) + return; + + if (pViewShell) + { + pToolBarManager->MainViewShellChanged(*pViewShell); + pToolBarManager->SelectionHasChanged( + *pViewShell, + *pViewShell->GetView()); + pToolBarManager->PreUpdate(); + } + else + { + pToolBarManager->MainViewShellChanged(); + pToolBarManager->PreUpdate(); + } +} + void SAL_CALL ToolBarModule::disposing (const lang::EventObject& rEvent) { if (mxConfigurationController.is() @@ -184,6 +249,27 @@ void SAL_CALL ToolBarModule::disposing (const lang::EventObject& rEvent) } } +IMPL_LINK(ToolBarModule, EventMultiplexerListener, sd::tools::EventMultiplexerEvent&, rEvent, + void) +{ + if (!mpBase) + return; + + switch(rEvent.meEventId) + { + case EventMultiplexerEventId::FocusShifted: + { + uno::Reference xResourceId{ rEvent.mxUserData, + UNO_QUERY }; + if (xResourceId.is()) + HandlePaneViewShellFocused(xResourceId); + break; + } + default: + break; + } +} + } // end of namespace sd::framework /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sd/source/ui/framework/module/ToolBarModule.hxx b/sd/source/ui/framework/module/ToolBarModule.hxx index bf0c017ef981..f245e88f8562 100644 --- a/sd/source/ui/framework/module/ToolBarModule.hxx +++ b/sd/source/ui/framework/module/ToolBarModule.hxx @@ -20,20 +20,34 @@ #pragma once #include +#include #include +#include #include #include #include #include -namespace com::sun::star::drawing::framework { class XConfigurationController; } -namespace com::sun::star::frame { class XController; } +namespace com::sun::star::drawing::framework +{ +class XConfigurationController; +class XResourceId; +} +namespace com::sun::star::frame +{ +class XController; +} namespace sd { class DrawController; class ViewShellBase; } +namespace sd::tools +{ +class EventMultiplexerEvent; +} + namespace sd::framework { typedef comphelper::WeakComponentImplHelper < @@ -73,9 +87,20 @@ private: ViewShellBase* mpBase; std::unique_ptr> mpToolBarManagerLock; bool mbMainViewSwitchUpdatePending; + bool mbListeningEventMultiplexer = false; + + /** Update toolbars via ToolbarManager + + @param pViewShell may be nullptr + */ + void UpdateToolbars(ViewShell* pViewShell); void HandleUpdateStart(); void HandleUpdateEnd(); + void HandlePaneViewShellFocused( + const css::uno::Reference& rxResourceId); + + DECL_LINK(EventMultiplexerListener, ::sd::tools::EventMultiplexerEvent&, void); }; } // end of namespace sd::framework diff --git a/sd/source/ui/inc/EventMultiplexer.hxx b/sd/source/ui/inc/EventMultiplexer.hxx index d6d79d11b279..7de135d45fff 100644 --- a/sd/source/ui/inc/EventMultiplexer.hxx +++ b/sd/source/ui/inc/EventMultiplexer.hxx @@ -22,6 +22,7 @@ #include #include +#include template class Link; @@ -112,6 +113,10 @@ enum class EventMultiplexerEventId /** Edit mode was (or is being) switched to master mode. */ EditModeMaster, + + /** Focus shifted between views. + */ + FocusShifted, }; namespace sd::tools @@ -121,8 +126,10 @@ class EventMultiplexerEvent public: EventMultiplexerEventId meEventId; const void* mpUserData; + css::uno::Reference mxUserData; - EventMultiplexerEvent(EventMultiplexerEventId eEventId, const void* pUserData); + EventMultiplexerEvent(EventMultiplexerEventId eEventId, const void* pUserData, + const css::uno::Reference& xUserData = {}); }; /** This convenience class makes it easy to listen to various events that @@ -160,7 +167,8 @@ public: @param pUserData Some data sent to the listeners along with the event. */ - void MultiplexEvent(EventMultiplexerEventId eEventId, void const* pUserData); + void MultiplexEvent(EventMultiplexerEventId eEventId, void const* pUserData, + const css::uno::Reference& xUserData = {}); private: class Implementation; diff --git a/sd/source/ui/inc/ToolBarManager.hxx b/sd/source/ui/inc/ToolBarManager.hxx index da5325cf693c..a5cebb377f5c 100644 --- a/sd/source/ui/inc/ToolBarManager.hxx +++ b/sd/source/ui/inc/ToolBarManager.hxx @@ -178,10 +178,13 @@ public: The group is used for the actual tool bars. @param nToolBarId Id of the tool bar shell. + @param bAddBar + Add the toolbar itself with the shell. When false only adds the shell. */ void AddToolBarShell ( ToolBarGroup eGroup, - ShellId nToolBarId); + ShellId nToolBarId, + bool bAddBar = true); /** Remove the tool bar with the given name from the specified group. If the tool bar is not visible then nothing happens. diff --git a/sd/source/ui/inc/ViewShell.hxx b/sd/source/ui/inc/ViewShell.hxx index b848593458a6..8b1292e554ad 100644 --- a/sd/source/ui/inc/ViewShell.hxx +++ b/sd/source/ui/inc/ViewShell.hxx @@ -522,6 +522,7 @@ protected: virtual void Activate(bool IsMDIActivate) override; virtual void Deactivate(bool IsMDIActivate) override; + virtual void BroadcastContextForActivation (const bool bIsActivated) override; virtual void SetZoomFactor( const Fraction &rZoomX, const Fraction &rZoomY ); diff --git a/sd/source/ui/inc/ViewShellManager.hxx b/sd/source/ui/inc/ViewShellManager.hxx index b56335ad6170..1ad4f138d8ae 100644 --- a/sd/source/ui/inc/ViewShellManager.hxx +++ b/sd/source/ui/inc/ViewShellManager.hxx @@ -79,6 +79,10 @@ public: */ void ActivateViewShell(ViewShell* pViewShell); + void RemoveOverridingMainShell(); + void SetOverridingMainShell(std::shared_ptr pViewShell); + std::shared_ptr GetOverridingMainShell(); + /** Activate the given shell which is not a view shell. For view shells use the ActivateViewShell() method. */ diff --git a/sd/source/ui/tools/EventMultiplexer.cxx b/sd/source/ui/tools/EventMultiplexer.cxx index 122ac736a4e8..5e20b9cc1f33 100644 --- a/sd/source/ui/tools/EventMultiplexer.cxx +++ b/sd/source/ui/tools/EventMultiplexer.cxx @@ -132,7 +132,8 @@ private: void CallListeners ( EventMultiplexerEventId eId, - void const * pUserData = nullptr); + void const * pUserData = nullptr, + const css::uno::Reference& xUserData = {}); DECL_LINK(SlideSorterSelectionChangeListener, LinkParamNone*, void); }; @@ -173,11 +174,10 @@ void EventMultiplexer::RemoveEventListener ( mpImpl->RemoveEventListener(rCallback); } -void EventMultiplexer::MultiplexEvent( - EventMultiplexerEventId eEventId, - void const * pUserData ) +void EventMultiplexer::MultiplexEvent(EventMultiplexerEventId eEventId, void const* pUserData, + const css::uno::Reference& xUserData) { - EventMultiplexerEvent aEvent(eEventId, pUserData); + EventMultiplexerEvent aEvent(eEventId, pUserData, xUserData); mpImpl->CallListeners(aEvent); } @@ -622,11 +622,11 @@ void EventMultiplexer::Implementation::Notify ( } } -void EventMultiplexer::Implementation::CallListeners ( - EventMultiplexerEventId eId, - void const * pUserData) +void EventMultiplexer::Implementation::CallListeners( + EventMultiplexerEventId eId, void const* pUserData, + const css::uno::Reference& xUserData) { - EventMultiplexerEvent aEvent(eId, pUserData); + EventMultiplexerEvent aEvent(eId, pUserData, xUserData); CallListeners(aEvent); } @@ -648,9 +648,11 @@ IMPL_LINK_NOARG(EventMultiplexer::Implementation, SlideSorterSelectionChangeList EventMultiplexerEvent::EventMultiplexerEvent ( EventMultiplexerEventId eEventId, - const void* pUserData) + const void* pUserData, + const css::uno::Reference& xUserData) : meEventId(eEventId), - mpUserData(pUserData) + mpUserData(pUserData), + mxUserData(xUserData) { } diff --git a/sd/source/ui/view/NotesPanelView.cxx b/sd/source/ui/view/NotesPanelView.cxx index 45d29748504e..45c2c4117fa3 100644 --- a/sd/source/ui/view/NotesPanelView.cxx +++ b/sd/source/ui/view/NotesPanelView.cxx @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include @@ -193,7 +194,12 @@ void NotesPanelView::onUpdateStyleSettings() void NotesPanelView::onResize() { ::sd::Window* pWin = mrNotesPanelViewShell.GetActiveWindow(); + if (!pWin) + return; + OutlinerView* pOutlinerView = GetOutlinerView(); + if (!pOutlinerView) + return; Size aOutputSize = pWin->PixelToLogic(pWin->GetOutputSizePixel()); diff --git a/sd/source/ui/view/NotesPanelViewShell.cxx b/sd/source/ui/view/NotesPanelViewShell.cxx index 0b1904293b05..a13daeb9f6f0 100644 --- a/sd/source/ui/view/NotesPanelViewShell.cxx +++ b/sd/source/ui/view/NotesPanelViewShell.cxx @@ -308,7 +308,6 @@ void NotesPanelViewShell::Activate(bool bIsMDIActivate) } ViewShell::Activate(bIsMDIActivate); - SfxShell::BroadcastContextForActivation(true); if (bIsMDIActivate) { diff --git a/sd/source/ui/view/ToolBarManager.cxx b/sd/source/ui/view/ToolBarManager.cxx index c8f40b99a0ef..89a8f9cfba61 100644 --- a/sd/source/ui/view/ToolBarManager.cxx +++ b/sd/source/ui/view/ToolBarManager.cxx @@ -20,9 +20,11 @@ #include #include +#include #include #include #include +#include #include #include @@ -178,6 +180,8 @@ private: things easier and does not waste too much memory. */ GroupedShellList maCurrentList; + + std::shared_ptr pCurrentActiveShell; }; /** This class concentrates the knowledge about when to show what tool bars @@ -256,7 +260,7 @@ public: void ResetToolBars (ToolBarGroup eGroup); void ResetAllToolBars(); void AddToolBar (ToolBarGroup eGroup, const OUString& rsToolBarName); - void AddToolBarShell (ToolBarGroup eGroup, ShellId nToolBarId); + void AddToolBarShell (ToolBarGroup eGroup, ShellId nToolBarId, bool bAddBar = true); void RemoveToolBar (ToolBarGroup eGroup, const OUString& rsToolBarName); /** Release all tool bar shells and the associated framework tool bars. @@ -387,12 +391,13 @@ void ToolBarManager::AddToolBar ( void ToolBarManager::AddToolBarShell ( ToolBarGroup eGroup, - ShellId nToolBarId) + ShellId nToolBarId, + bool bAddBar) { if (mpImpl != nullptr) { UpdateLock aLock (shared_from_this()); - mpImpl->AddToolBarShell(eGroup,nToolBarId); + mpImpl->AddToolBarShell(eGroup,nToolBarId,bAddBar); } } @@ -621,13 +626,23 @@ void ToolBarManager::Implementation::RemoveToolBar ( void ToolBarManager::Implementation::AddToolBarShell ( ToolBarGroup eGroup, - ShellId nToolBarId) + ShellId nToolBarId, + bool bAddBar) { ViewShell* pMainViewShell = mrBase.GetMainViewShell().get(); if (pMainViewShell != nullptr) { maToolBarShellList.AddShellId(eGroup,nToolBarId); - GetToolBarRules().SubShellAdded(eGroup, nToolBarId); + if (bAddBar) + { + GetToolBarRules().SubShellAdded(eGroup, nToolBarId); + } + else + { + mbPostUpdatePending = true; + if (mnLockCount == 0) + PostUpdate(); + } } } @@ -958,6 +973,11 @@ void ToolBarRules::MainViewShellChanged (ViewShell::ShellType nShellType) ToolBarManager::msViewerToolBar); break; + case ::sd::ViewShell::ST_NOTESPANEL: + mpToolBarManager->AddToolBarShell(ToolBarManager::ToolBarGroup::Permanent, + ToolbarId::Draw_Text_Toolbox_Sd); + break; + case ::sd::ViewShell::ST_DRAW: mpToolBarManager->AddToolBar( ToolBarManager::ToolBarGroup::Permanent, @@ -993,7 +1013,6 @@ void ToolBarRules::MainViewShellChanged (ViewShell::ShellType nShellType) ToolBarManager::msSlideSorterObjectBar); break; - case ViewShell::ST_NOTESPANEL: case ViewShell::ST_NONE: case ViewShell::ST_PRESENTATION: case ViewShell::ST_SIDEBAR: @@ -1347,6 +1366,9 @@ void ToolBarShellList::UpdateShells ( if (rpMainViewShell == nullptr) return; + const std::shared_ptr& pCurrentMainViewShell + = rpManager->GetOverridingMainShell() ? rpManager->GetOverridingMainShell() : rpMainViewShell; + GroupedShellList aList; // Deactivate shells that are in maCurrentList, but not in @@ -1357,7 +1379,7 @@ void ToolBarShellList::UpdateShells ( for (const auto& rShell : aList) { SAL_INFO("sd.view", __func__ << ": deactivating tool bar shell " << static_cast(rShell.mnId)); - rpManager->DeactivateSubShell(*rpMainViewShell, rShell.mnId); + rpManager->DeactivateSubShell(*pCurrentMainViewShell, rShell.mnId); } // Activate shells that are in maNewList, but not in @@ -1369,7 +1391,7 @@ void ToolBarShellList::UpdateShells ( for (const auto& rShell : aList) { SAL_INFO("sd.view", __func__ << ": activating tool bar shell " << static_cast(rShell.mnId)); - rpManager->ActivateSubShell(*rpMainViewShell, rShell.mnId); + rpManager->ActivateSubShell(*pCurrentMainViewShell, rShell.mnId); } // The maNewList now reflects the current state and thus is made diff --git a/sd/source/ui/view/ViewShellManager.cxx b/sd/source/ui/view/ViewShellManager.cxx index db2ee5f8f158..f158e32e3296 100644 --- a/sd/source/ui/view/ViewShellManager.cxx +++ b/sd/source/ui/view/ViewShellManager.cxx @@ -113,6 +113,9 @@ public: void SetFormShell (const ViewShell* pViewShell, FmFormShell* pFormShell, bool bAbove); void ActivateSubShell (const SfxShell& rParentShell, ShellId nId); void DeactivateSubShell (const SfxShell& rParentShell, ShellId nId); + void RemoveOverridingMainShell(); + void SetOverridingShell(std::shared_ptr pViewShell); + std::shared_ptr GetOverridingShell(); void MoveToTop (const SfxShell& rParentShell); SfxShell* GetShell (ShellId nId) const; SfxShell* GetTopShell() const; @@ -189,6 +192,7 @@ private: SfxShell* mpTopShell; SfxShell* mpTopViewShell; + std::shared_ptr mpOverridingShell; void UpdateShellStack(); @@ -260,6 +264,26 @@ void ViewShellManager::DeactivateViewShell (const ViewShell* pShell) mpImpl->DeactivateViewShell(*pShell); } + +void ViewShellManager::RemoveOverridingMainShell() +{ + if(mbValid) + mpImpl->RemoveOverridingMainShell(); +} + +void ViewShellManager::SetOverridingMainShell(std::shared_ptr pViewShell) +{ + if(mbValid) + mpImpl->SetOverridingShell(pViewShell); +} + +std::shared_ptr ViewShellManager::GetOverridingMainShell() +{ + if(mbValid) + return mpImpl->GetOverridingShell(); + return {}; +} + void ViewShellManager::SetFormShell ( const ViewShell* pParentShell, FmFormShell* pFormShell, @@ -570,6 +594,21 @@ void ViewShellManager::Implementation::DeactivateSubShell ( DestroySubShell(aDescriptor); } +std::shared_ptr ViewShellManager::Implementation::GetOverridingShell() +{ + return mpOverridingShell; +} + +void ViewShellManager::Implementation::RemoveOverridingMainShell() +{ + mpOverridingShell.reset(); +} + +void ViewShellManager::Implementation::SetOverridingShell(std::shared_ptr pViewShell) +{ + mpOverridingShell = pViewShell; +} + void ViewShellManager::Implementation::MoveToTop (const SfxShell& rShell) { ::osl::MutexGuard aGuard (maMutex); @@ -711,10 +750,12 @@ void ViewShellManager::Implementation::UpdateShellStack() // 1. Create the missing shells. CreateShells(); + SfxShell* pPreviousTopViewShell = mpTopViewShell; // Update the pointer to the top-most active view shell. mpTopViewShell = (maActiveViewShells.empty()) ? nullptr : maActiveViewShells.begin()->mpShell; + bool bTopViewShellChanged = mpTopViewShell != pPreviousTopViewShell; // 2. Create the internal target stack. ShellStack aTargetStack; @@ -776,6 +817,10 @@ void ViewShellManager::Implementation::UpdateShellStack() if (mpTopShell!=nullptr && pUndoManager!=nullptr && mpTopShell->GetUndoManager()==nullptr) mpTopShell->SetUndoManager(pUndoManager); + // Only broadcast context for activation on the top-most ViewShell + if (mpTopViewShell && bTopViewShellChanged) + mpTopViewShell->BroadcastContextForActivation(true); + // Finally tell an invocation of this method on a higher level that it can (has // to) abort and return immediately. mbShellStackIsUpToDate = true; @@ -1071,6 +1116,7 @@ void ViewShellManager::Implementation::Shutdown() mrBase.RemoveSubShell (); maShellFactories.clear(); + mpOverridingShell.reset(); } #if OSL_DEBUG_LEVEL >= 2 @@ -1113,9 +1159,12 @@ void ViewShellManager::Implementation::Deactivate (SfxShell* pShell) { pView->SdrEndTextEdit(); pView->UnmarkAll(); + + // dispatch synchronously, otherwise it might execute while another + // ViewShell is active! pViewShell->GetViewFrame()->GetDispatcher()->Execute( SID_OBJECT_SELECT, - SfxCallMode::ASYNCHRON); + SfxCallMode::SYNCHRON); } } diff --git a/sd/source/ui/view/drtxtob.cxx b/sd/source/ui/view/drtxtob.cxx index 7310b2e19e2b..4bdc074a0574 100644 --- a/sd/source/ui/view/drtxtob.cxx +++ b/sd/source/ui/view/drtxtob.cxx @@ -56,6 +56,7 @@ #include #include #include +#include #include #include #include @@ -453,7 +454,9 @@ void TextObjectBar::GetAttrStateImpl(ViewShell* mpViewShell, ::sd::View* mpView, rSet.Put( aAttrSet, false ); // <- sal_False, so DontCare-Status gets acquired // these are disabled in outline-mode - if (!mpViewShell || dynamic_cast< const DrawViewShell *>( mpViewShell ) == nullptr) + if (!mpViewShell + || !(dynamic_cast(mpViewShell) + || dynamic_cast(mpViewShell))) { rSet.DisableItem( SID_ATTR_PARA_ADJUST_LEFT ); rSet.DisableItem( SID_ATTR_PARA_ADJUST_RIGHT ); diff --git a/sd/source/ui/view/outlnvsh.cxx b/sd/source/ui/view/outlnvsh.cxx index b945695d97de..8fcd132ff3de 100644 --- a/sd/source/ui/view/outlnvsh.cxx +++ b/sd/source/ui/view/outlnvsh.cxx @@ -317,7 +317,7 @@ void OutlineViewShell::Activate( bool bIsMDIActivate ) } ViewShell::Activate( bIsMDIActivate ); - SfxShell::BroadcastContextForActivation(true); + BroadcastContextForActivation(true); pOlView->SetLinks(); pOlView->ConnectToApplication(); diff --git a/sd/source/ui/view/viewshel.cxx b/sd/source/ui/view/viewshel.cxx index 2f2cecf7aabd..11f7a186f282 100644 --- a/sd/source/ui/view/viewshel.cxx +++ b/sd/source/ui/view/viewshel.cxx @@ -17,6 +17,8 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ +#include +#include #include #include #include @@ -58,6 +60,7 @@ #include #include #include +#include #include #include #include @@ -90,6 +93,12 @@ #include #include +#include +#include +#include +#include +#include + using namespace ::com::sun::star; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::presentation; @@ -405,6 +414,62 @@ void ViewShell::Deactivate(bool bIsMDIActivate) SfxShell::Deactivate(bIsMDIActivate); } +void ViewShell::BroadcastContextForActivation(const bool bIsActivated) +{ + auto getFrameworkResourceIdForShell + = [&]() -> uno::Reference const + { + Reference<::css::drawing::framework::XControllerManager> xControllerManager( + GetViewShellBase().GetController(), UNO_QUERY); + if (!xControllerManager.is()) + return {}; + + Reference<::css::drawing::framework::XConfigurationController> xConfigurationController + = xControllerManager->getConfigurationController(); + if (!xConfigurationController.is()) + return {}; + + Reference<::css::drawing::framework::XConfiguration> xConfiguration + = xConfigurationController->getCurrentConfiguration(); + if (!xConfiguration.is()) + return {}; + + auto aResIdsIndirect + = xConfiguration->getResources({}, "", drawing::framework::AnchorBindingMode_INDIRECT); + + for (const uno::Reference& rResId : aResIdsIndirect) + { + auto pFrameworkHelper = framework::FrameworkHelper::Instance(GetViewShellBase()); + + uno::Reference xView; + if (rResId->getResourceURL().match(framework::FrameworkHelper::msViewURLPrefix)) + { + xView.set(xConfigurationController->getResource(rResId), UNO_QUERY); + + if (xView.is()) + { + auto pViewShellWrapper + = dynamic_cast(xView.get()); + if (pViewShellWrapper->GetViewShell().get() == this) + { + return rResId; + } + } + } + } + return {}; + }; + + if (bIsActivated) + { + GetViewShellBase().GetEventMultiplexer()->MultiplexEvent( + EventMultiplexerEventId::FocusShifted, nullptr, getFrameworkResourceIdForShell()); + } + + if (GetDispatcher()) + SfxShell::BroadcastContextForActivation(bIsActivated); +} + void ViewShell::Shutdown() { Exit (); From 9fdb50763720a2970ebab39debf26010a8e6bc62 Mon Sep 17 00:00:00 2001 From: Taichi Haradaguchi <20001722@ymail.ne.jp> Date: Thu, 27 Jun 2024 03:15:09 +0200 Subject: [PATCH 123/194] licence: Fix div tag and move License Statements Change-Id: I9547679d0749e1bf539867cb1038c78ef8dcae12 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169586 Reviewed-by: Michael Stahl Tested-by: Michael Stahl --- readlicense_oo/license/license.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/readlicense_oo/license/license.xml b/readlicense_oo/license/license.xml index 61e2df247c2f..d74285e18a57 100644 --- a/readlicense_oo/license/license.xml +++ b/readlicense_oo/license/license.xml @@ -2232,12 +2232,6 @@ CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -
    -

    ZXing-C++

    -

    The following software may be included in this product: ZXing-C++. Use of any of this software is governed - by the terms of the license below:

    -

    Jump to Apache License Version 2.0

    -

    zlib

    The following software may be included in this product: zlib. Use of any of this software is governed by the @@ -2254,6 +2248,12 @@ original software.

    3. This notice may not be removed or altered from any source distribution.

    +
    +

    ZXing-C++

    +

    The following software may be included in this product: ZXing-C++. Use of any of this software is governed + by the terms of the license below:

    +

    Jump to Apache License Version 2.0

    +

    Skia

    The following software may be included in this product: Skia. Use of any of this software is governed by From c519de229627f3c6bb7736c810405b441c07f369 Mon Sep 17 00:00:00 2001 From: Samuel Mehrbrodt Date: Thu, 27 Jun 2024 11:10:19 +0200 Subject: [PATCH 124/194] Fix autotext shortcut generation The first character was replaced with a number. Fallout from 1f93816dd5d75aca98f210017d0b58b7ef1d08da Change-Id: I3b9a39336d5f6f3c10c85231f86fd196a29e3644 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169621 Reviewed-by: Thorsten Behrens Tested-by: Jenkins --- sw/source/ui/misc/glossary.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sw/source/ui/misc/glossary.cxx b/sw/source/ui/misc/glossary.cxx index a1c6e69fa980..985c597efefa 100644 --- a/sw/source/ui/misc/glossary.cxx +++ b/sw/source/ui/misc/glossary.cxx @@ -85,7 +85,7 @@ static OUString lcl_GetValidShortCut( const OUString& rName ) while( rName[nStart-1]==' ' && nStart < nSz ) nStart++; - OUStringBuffer aBuf(OUString::number(rName[nStart-1])); + OUStringBuffer aBuf(rName.subView(nStart-1, 1)); for( ; nStart < nSz; ++nStart ) { From d900a952eb2267717797c7e91326a0ce3f222063 Mon Sep 17 00:00:00 2001 From: Noel Grandin Date: Wed, 26 Jun 2024 11:57:42 +0200 Subject: [PATCH 125/194] reduce number of SvxUnoShape listeners on SdrModel when we have a lot of shapes, the number of listeners attached to SdrModel becomes a serious bottleneck because of the number of broadcast/notify function calls. So (1) make SvxUnoShape listen to the SdrObject which achieves the same end, and reduces the bottleneck on the SdrModel. (2) repurpose the maAllIncarnatedObjects set, which tracks all objects linked to the SdrModel, so we can shut down the associated UNO shapes during ClearModel. There is no other good way of doing this, and if we don't do it, we get various use-after-free issues during shutdown. This takes the load time of a large DOCX with lots of shapes, from 35s to 17s on my machine. Change-Id: I34a6ac35c90de8b7103a7373aafe6e9607cc01c4 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169612 Reviewed-by: Noel Grandin Tested-by: Jenkins --- include/svx/svdmodel.hxx | 10 +++------- include/svx/unoshape.hxx | 2 +- svx/source/svdraw/svdmodel.cxx | 21 ++++++++++++++++++++- svx/source/svdraw/svdobj.cxx | 12 ------------ svx/source/unodraw/unoshape.cxx | 31 +++++++++---------------------- 5 files changed, 33 insertions(+), 43 deletions(-) diff --git a/include/svx/svdmodel.hxx b/include/svx/svdmodel.hxx index 81ec0927db4c..f029d928aa8a 100644 --- a/include/svx/svdmodel.hxx +++ b/include/svx/svdmodel.hxx @@ -42,11 +42,7 @@ #include #include - -#ifdef DBG_UTIL -// SdrObjectLifetimeWatchDog #include -#endif class OutputDevice; class SdrOutliner; @@ -153,8 +149,9 @@ struct SdrModelImpl; class SVXCORE_DLLPUBLIC SdrModel : public SfxBroadcaster, public tools::WeakBase { -#ifdef DBG_UTIL - // SdrObjectLifetimeWatchDog: + // We need to keep track of all the SdrObjects linked to this SdrModel so that we can + // shut them down cleanly, otherwise we end up with use-after-free issues. + // // Use maAllIncarnatedObjects to keep track of all SdrObjects incarnated using this SdrModel // (what is now possible after the paradigm change that a SdrObject stays at a single SdrModel // for it's whole lifetime). @@ -174,7 +171,6 @@ class SVXCORE_DLLPUBLIC SdrModel : public SfxBroadcaster, public tools::WeakBase friend void impAddIncarnatedSdrObjectToSdrModel(SdrObject& rSdrObject, SdrModel& rSdrModel); friend void impRemoveIncarnatedSdrObjectToSdrModel(SdrObject& rSdrObject, SdrModel& rSdrModel); std::unordered_set< SdrObject* > maAllIncarnatedObjects; -#endif protected: std::vector> maMasterPages; std::vector> maPages; diff --git a/include/svx/unoshape.hxx b/include/svx/unoshape.hxx index a72c3beae1b5..4ae84a2bc74e 100644 --- a/include/svx/unoshape.hxx +++ b/include/svx/unoshape.hxx @@ -226,7 +226,7 @@ public: void setMaster( SvxShapeMaster* pMaster ); // SfxListener - virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) noexcept override; + virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) noexcept override final; // XAggregation virtual css::uno::Any SAL_CALL queryAggregation( const css::uno::Type& aType ) override; diff --git a/svx/source/svdraw/svdmodel.cxx b/svx/source/svdraw/svdmodel.cxx index 835689a00726..3c43cf2c81bc 100644 --- a/svx/source/svdraw/svdmodel.cxx +++ b/svx/source/svdraw/svdmodel.cxx @@ -44,6 +44,7 @@ #include #include #include +#include #include #include #include @@ -222,7 +223,6 @@ SdrModel::~SdrModel() implDtorClearModel(); #ifdef DBG_UTIL - // SdrObjectLifetimeWatchDog: if(!maAllIncarnatedObjects.empty()) { SAL_WARN("svx", @@ -580,6 +580,25 @@ void SdrModel::ClearModel(bool bCalledFromDestructor) mbInDestruction = true; } + // Disconnect all SvxShape's from their SdrObjects to prevent the SdrObjects + // from hanging around and causing use-after-free. + // Make a copy because it might modified during InvalidateSdrObject calls. + std::vector> allObjs(maAllIncarnatedObjects.begin(), maAllIncarnatedObjects.end()); + for (const auto & pSdrObj : allObjs) + { + uno::Reference xShape = pSdrObj->getWeakUnoShape().get(); + rtl::Reference pSvxShape = dynamic_cast(xShape.get()); + // calling getWeakUnoShape so we don't accidentally create new UNO shapes + if (pSvxShape) + pSvxShape->InvalidateSdrObject(); + else + { + // because some things like SwXShape don't subclass SvxShape + uno::Reference xComp(xShape, uno::UNO_QUERY); + if (xComp) + xComp->dispose(); + } + } sal_Int32 i; // delete all drawing pages sal_Int32 nCount=GetPageCount(); diff --git a/svx/source/svdraw/svdobj.cxx b/svx/source/svdraw/svdobj.cxx index 6c8330185f0a..1b768aee12d9 100644 --- a/svx/source/svdraw/svdobj.cxx +++ b/svx/source/svdraw/svdobj.cxx @@ -321,8 +321,6 @@ void SdrObject::SetBoundRectDirty() resetOutRectangle(); } -#ifdef DBG_UTIL -// SdrObjectLifetimeWatchDog: void impAddIncarnatedSdrObjectToSdrModel(SdrObject& rSdrObject, SdrModel& rSdrModel) { rSdrModel.maAllIncarnatedObjects.insert(&rSdrObject); @@ -334,7 +332,6 @@ void impRemoveIncarnatedSdrObjectToSdrModel(SdrObject& rSdrObject, SdrModel& rSd assert(false && "SdrObject::~SdrObject: Destructed incarnation of SdrObject not member of this SdrModel (!)"); } } -#endif SdrObject::SdrObject(SdrModel& rSdrModel) : mpFillGeometryDefiningShape(nullptr) @@ -369,10 +366,7 @@ SdrObject::SdrObject(SdrModel& rSdrModel) m_bIs3DObj=false; m_bMarkProt=false; m_bIsUnoObj=false; -#ifdef DBG_UTIL - // SdrObjectLifetimeWatchDog: impAddIncarnatedSdrObjectToSdrModel(*this, getSdrModelFromSdrObject()); -#endif } SdrObject::SdrObject(SdrModel& rSdrModel, SdrObject const & rSource) @@ -440,10 +434,7 @@ SdrObject::SdrObject(SdrModel& rSdrModel, SdrObject const & rSource) m_pGrabBagItem.reset(); if (rSource.m_pGrabBagItem!=nullptr) m_pGrabBagItem.reset(rSource.m_pGrabBagItem->Clone()); -#ifdef DBG_UTIL - // SdrObjectLifetimeWatchDog: impAddIncarnatedSdrObjectToSdrModel(*this, getSdrModelFromSdrObject()); -#endif } SdrObject::~SdrObject() @@ -470,10 +461,7 @@ SdrObject::~SdrObject() m_pGrabBagItem.reset(); mpProperties.reset(); mpViewContact.reset(); -#ifdef DBG_UTIL - // SdrObjectLifetimeWatchDog: impRemoveIncarnatedSdrObjectToSdrModel(*this, getSdrModelFromSdrObject()); -#endif } void SdrObject::acquire() noexcept diff --git a/svx/source/unodraw/unoshape.cxx b/svx/source/unodraw/unoshape.cxx index 5c3807817a6f..b547db4b436a 100644 --- a/svx/source/unodraw/unoshape.cxx +++ b/svx/source/unodraw/unoshape.cxx @@ -192,7 +192,7 @@ SvxShape::~SvxShape() noexcept if ( mxSdrObject ) { - EndListening(mxSdrObject->getSdrModelFromSdrObject()); + mxSdrObject->RemoveListener(*this); mxSdrObject->setUnoShape(nullptr); mxSdrObject.clear(); } @@ -205,7 +205,7 @@ void SvxShape::InvalidateSdrObject() { if(mxSdrObject) { - EndListening(mxSdrObject->getSdrModelFromSdrObject()); + mxSdrObject->RemoveListener(*this); mxSdrObject.clear(); } }; @@ -285,7 +285,7 @@ void SvxShape::impl_construct() { if ( HasSdrObject() ) { - StartListening(GetSdrObject()->getSdrModelFromSdrObject()); + GetSdrObject()->AddListener(*this); impl_initFromSdrObject(); } } @@ -355,14 +355,14 @@ void SvxShape::Create( SdrObject* pNewObj, SvxDrawPage* /*pNewPage*/ ) if( HasSdrObject() ) { - EndListening( GetSdrObject()->getSdrModelFromSdrObject() ); + GetSdrObject()->RemoveListener( *this ); } mxSdrObject = pNewObj; if( HasSdrObject() ) { - StartListening( GetSdrObject()->getSdrModelFromSdrObject() ); + GetSdrObject()->AddListener( *this ); } OSL_ENSURE( !mbIsMultiPropertyCall, "SvxShape::Create: hmm?" ); @@ -929,8 +929,7 @@ void SvxShape::Notify( SfxBroadcaster&, const SfxHint& rHint ) noexcept return; const SdrHint* pSdrHint = static_cast(&rHint); // #i55919# SdrHintKind::ObjectChange is only interesting if it's for this object - if ((pSdrHint->GetKind() != SdrHintKind::ModelCleared) && - (pSdrHint->GetKind() != SdrHintKind::ObjectChange || pSdrHint->GetObject() != mxSdrObject.get() )) + if (pSdrHint->GetKind() != SdrHintKind::ObjectChange || pSdrHint->GetObject() != mxSdrObject.get()) return; // prevent object being deleted from under us @@ -938,24 +937,12 @@ void SvxShape::Notify( SfxBroadcaster&, const SfxHint& rHint ) noexcept uno::Reference< uno::XInterface > xSelf( mxSdrObject->getWeakUnoShape() ); if( !xSelf.is() ) { - EndListening(mxSdrObject->getSdrModelFromSdrObject()); + mxSdrObject->RemoveListener(*this); mxSdrObject.clear(); return; } - if (pSdrHint->GetKind() == SdrHintKind::ObjectChange) - { - updateShapeKind(); - } - else // (pSdrHint->GetKind() == SdrHintKind::ModelCleared) - { - EndListening(mxSdrObject->getSdrModelFromSdrObject()); - mxSdrObject->setUnoShape(nullptr); - mxSdrObject.clear(); - - if(!mpImpl->mbDisposing) - dispose(); - } + updateShapeKind(); } // XShape @@ -1190,7 +1177,7 @@ void SAL_CALL SvxShape::dispose() if (!pObject) return; - EndListening( pObject->getSdrModelFromSdrObject() ); + pObject->RemoveListener( *this ); if ( pObject->IsInserted() && pObject->getSdrPageFromSdrObject() ) { From 86f296e82b426364c9675f5c0fbecf7613e7d72b Mon Sep 17 00:00:00 2001 From: Noel Grandin Date: Fri, 28 Jun 2024 09:36:24 +0200 Subject: [PATCH 126/194] use more ASSERT_CHANGE_REFCOUNTED_ITEM which did I not see when I did commit cb3c65fb706cb1c7c9224222fd16875e924a9759 Author: Noel Grandin Date: Thu Jun 27 19:24:28 2024 +0200 assert when SfxObjectItems are modified while in a pool Change-Id: I16e2ee72eda4b3ca69f83eb70ad4f4b0a14748a2 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169696 Tested-by: Jenkins Reviewed-by: Noel Grandin --- editeng/source/items/textitem.cxx | 6 ++---- include/editeng/sizeitem.hxx | 6 +++--- include/svl/cintitem.hxx | 30 ++++-------------------------- include/svl/custritm.hxx | 8 +------- include/svl/eitem.hxx | 2 +- include/svl/flagitem.hxx | 9 +++------ include/svl/intitem.hxx | 8 +------- include/svl/ptitem.hxx | 5 +---- sw/inc/fmtfsize.hxx | 12 ++++++------ sw/inc/fmtornt.hxx | 14 +++++++------- 10 files changed, 29 insertions(+), 71 deletions(-) diff --git a/editeng/source/items/textitem.cxx b/editeng/source/items/textitem.cxx index 34ca99d8fcd6..dcce4924092a 100644 --- a/editeng/source/items/textitem.cxx +++ b/editeng/source/items/textitem.cxx @@ -997,9 +997,8 @@ bool SvxFontHeightItem::HasMetrics() const void SvxFontHeightItem::SetHeight( sal_uInt32 nNewHeight, const sal_uInt16 nNewProp, MapUnit eUnit ) { - assert( !isPooled() && "SetHeight() with pooled item" ); - ASSERT_CHANGE_REFCOUNTED_ITEM; + if( MapUnit::MapRelative != eUnit ) nHeight = nNewHeight + ::ItemToControl( short(nNewProp), eUnit, FieldUnit::TWIP ); @@ -1015,9 +1014,8 @@ void SvxFontHeightItem::SetHeight( sal_uInt32 nNewHeight, const sal_uInt16 nNewP void SvxFontHeightItem::SetHeight( sal_uInt32 nNewHeight, sal_uInt16 nNewProp, MapUnit eMetric, MapUnit eCoreMetric ) { - assert( !isPooled() && "SetValue() with pooled item" ); - ASSERT_CHANGE_REFCOUNTED_ITEM; + if( MapUnit::MapRelative != eMetric ) nHeight = nNewHeight + ::ControlToItem( ::ItemToControl(static_cast(nNewProp), eMetric, diff --git a/include/editeng/sizeitem.hxx b/include/editeng/sizeitem.hxx index 62ba4f1fba51..4e20699f1cef 100644 --- a/include/editeng/sizeitem.hxx +++ b/include/editeng/sizeitem.hxx @@ -57,14 +57,14 @@ public: const Size& GetSize() const { return m_aSize; } void SetSize(const Size& rSize) - { assert( !isPooled() && "SetValue() with pooled item" ); m_aSize = rSize; } + { ASSERT_CHANGE_REFCOUNTED_ITEM; m_aSize = rSize; } tools::Long GetWidth() const { return m_aSize.getWidth(); } tools::Long GetHeight() const { return m_aSize.getHeight(); } void SetWidth(tools::Long n) - { assert( !isPooled() && "SetValue() with pooled item" ); m_aSize.setWidth(n); } + { ASSERT_CHANGE_REFCOUNTED_ITEM; m_aSize.setWidth(n); } void SetHeight(tools::Long n) - { assert( !isPooled() && "SetValue() with pooled item" ); m_aSize.setHeight(n); } + { ASSERT_CHANGE_REFCOUNTED_ITEM; m_aSize.setHeight(n); } }; #endif diff --git a/include/svl/cintitem.hxx b/include/svl/cintitem.hxx index eef40f333240..d9c0f273f260 100644 --- a/include/svl/cintitem.hxx +++ b/include/svl/cintitem.hxx @@ -51,15 +51,9 @@ public: sal_uInt8 GetValue() const { return m_nValue; } - inline void SetValue(sal_uInt8 nTheValue); + void SetValue(sal_uInt8 nTheValue) { ASSERT_CHANGE_REFCOUNTED_ITEM; m_nValue = nTheValue; } }; -inline void CntByteItem::SetValue(sal_uInt8 nTheValue) -{ - assert( !isPooled() && "SetValue() with pooled item" ); - m_nValue = nTheValue; -} - class SVL_DLLPUBLIC CntUInt16Item: public SfxPoolItem { sal_uInt16 m_nValue; @@ -88,14 +82,9 @@ public: sal_uInt16 GetValue() const { return m_nValue; } - inline void SetValue(sal_uInt16 nTheValue); + void SetValue(sal_uInt16 nTheValue) { ASSERT_CHANGE_REFCOUNTED_ITEM; m_nValue = nTheValue; } }; -inline void CntUInt16Item::SetValue(sal_uInt16 nTheValue) -{ - assert( !isPooled() && "SetValue() with pooled item" ); - m_nValue = nTheValue; -} class SVL_DLLPUBLIC CntInt32Item: public SfxPoolItem { @@ -125,14 +114,9 @@ public: sal_Int32 GetValue() const { return m_nValue; } - inline void SetValue(sal_Int32 nTheValue); + void SetValue(sal_Int32 nTheValue) { ASSERT_CHANGE_REFCOUNTED_ITEM; m_nValue = nTheValue; } }; -inline void CntInt32Item::SetValue(sal_Int32 nTheValue) -{ - assert( !isPooled() && "SetValue() with pooled item" ); - m_nValue = nTheValue; -} class SVL_DLLPUBLIC CntUInt32Item: public SfxPoolItem { @@ -162,15 +146,9 @@ public: sal_uInt32 GetValue() const { return m_nValue; } - inline void SetValue(sal_uInt32 nTheValue); + void SetValue(sal_uInt32 nTheValue) { ASSERT_CHANGE_REFCOUNTED_ITEM; m_nValue = nTheValue; } }; -inline void CntUInt32Item::SetValue(sal_uInt32 nTheValue) -{ - assert( !isPooled() && "SetValue() with pooled item" ); - m_nValue = nTheValue; -} - #endif // INCLUDED_SVL_CINTITEM_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svl/custritm.hxx b/include/svl/custritm.hxx index 3e2d23eb8ee4..118fd0963f15 100644 --- a/include/svl/custritm.hxx +++ b/include/svl/custritm.hxx @@ -55,15 +55,9 @@ public: const OUString & GetValue() const { return m_aValue; } - inline void SetValue(const OUString & rTheValue); + void SetValue(const OUString & rTheValue) { ASSERT_CHANGE_REFCOUNTED_ITEM; m_aValue = rTheValue; } }; -inline void CntUnencodedStringItem::SetValue(const OUString & rTheValue) -{ - assert( !isPooled() && "SetValue() with pooled item" ); - m_aValue = rTheValue; -} - #endif // INCLUDED_SVL_CUSTRITM_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svl/eitem.hxx b/include/svl/eitem.hxx index a75a329ba146..f6fb22bfeb7d 100644 --- a/include/svl/eitem.hxx +++ b/include/svl/eitem.hxx @@ -43,7 +43,7 @@ public: void SetValue(EnumT nTheValue) { - assert( !isPooled() && "SetValue() with pooled item" ); + ASSERT_CHANGE_REFCOUNTED_ITEM; m_nValue = nTheValue; } diff --git a/include/svl/flagitem.hxx b/include/svl/flagitem.hxx index 221416986593..ac32bab18ca9 100644 --- a/include/svl/flagitem.hxx +++ b/include/svl/flagitem.hxx @@ -44,12 +44,9 @@ public: MapUnit ePresMetric, OUString & rText, const IntlWrapper& ) const override; - sal_uInt16 GetValue() const { return nVal; } - void SetValue( sal_uInt16 nNewVal ) { - assert( !isPooled() && "SetValue() with pooled item" ); - nVal = nNewVal; - } - bool GetFlag( sal_uInt8 nFlag ) const { return (nVal & ( 1< Date: Fri, 28 Jun 2024 09:34:08 +0200 Subject: [PATCH 127/194] Adapt flatpak build to upstream changes "krb5: Update krb5-1.21.2.tar.gz to 1.21.3 (#294)" Change-Id: If99afd812eca43258398d79c1a7c009988d374e8 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169695 Tested-by: Jenkins Reviewed-by: Stephan Bergmann --- solenv/flatpak-manifest.in | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/solenv/flatpak-manifest.in b/solenv/flatpak-manifest.in index 2cb368af9cd4..c6e9d4f8e874 100644 --- a/solenv/flatpak-manifest.in +++ b/solenv/flatpak-manifest.in @@ -77,8 +77,8 @@ "sources": [ { "type": "archive", - "url": "https://kerberos.org/dist/krb5/1.21/krb5-1.21.2.tar.gz", - "sha256": "9560941a9d843c0243a71b17a7ac6fe31c7cebb5bce3983db79e52ae7e850491", + "url": "https://kerberos.org/dist/krb5/1.21/krb5-1.21.3.tar.gz", + "sha256": "b7a4cd5ead67fb08b980b21abd150ff7217e85ea320c9ed0c6dadd304840ad35", "x-checker-data": { "type": "html", "url": "https://kerberos.org/dist/", From f60e65e196a9c3fe50c5ee2dd2058731b435bfc2 Mon Sep 17 00:00:00 2001 From: Olivier Hallot Date: Fri, 28 Jun 2024 15:42:49 +0200 Subject: [PATCH 128/194] Update git submodules * Update helpcontent2 from branch 'master' to 8351b40030008eec294de3712fc1b67d99d00931 - Organizer -> General in Help pages Change-Id: Ibe5a9e819138b964a5f7336f9d4a71c5d43dc1bb Reviewed-on: https://gerrit.libreoffice.org/c/help/+/169683 Tested-by: Jenkins Reviewed-by: Olivier Hallot --- helpcontent2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helpcontent2 b/helpcontent2 index 7c187e488710..8351b4003000 160000 --- a/helpcontent2 +++ b/helpcontent2 @@ -1 +1 @@ -Subproject commit 7c187e488710f930d4d0ec5291308af2e3776a46 +Subproject commit 8351b40030008eec294de3712fc1b67d99d00931 From 802a10654151c00302bc7b7479673101f2d47b20 Mon Sep 17 00:00:00 2001 From: Michael Weghorn Date: Fri, 28 Jun 2024 12:13:45 +0200 Subject: [PATCH 129/194] tdf#157009 android: Add missing subdir for Triple-T/F-Droid icon MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Even with commit 69189de8fa9a9d4973a4304a82780d32e79fbe6f Author: Michael Weghorn Date: Thu May 16 09:26:44 2024 +0200 tdf#157009 android: Add icon symlink for F-Droid (and its 24-2 backport) in place, the icon is not shown for LibreOffice Viewer in the F-Droid app and on the repo website [1]. Revisiting the related specs [2] [3], it turns out that the icon needs to be in an "icon" subdir in the "graphics" directory, so add that missing "icon" subdir and move the symlink there. From [2]: > └── listings > ├── en-US (en-US is the default locale in F-Droid) > │ ├── title.txt (app name) > │ ├── short-description.txt (short description, max 80 chars, mandatory) > │ ├── full-description.txt (full app description, mandatory) > │ ├── video-url.txt (URL to a video introducing the app) > │ ├── whatsnew (alternative changelog location; single file, no .txt) > │ └── graphics > │ ├── icon (app icon; mandatory if your app doesn't include any png icon) > │ │ └── *.(png|jpg) 1 image, usually 512x512 [1] https://f-droid.org/en/packages/org.documentfoundation.libreoffice/ [2] https://f-droid.org/en/docs/All_About_Descriptions_Graphics_and_Screenshots/#triple-t-structure [3] https://github.com/Triple-T/gradle-play-publisher?tab=readme-ov-file#uploading-graphic-based-listings Change-Id: I43c23040bf63a34f8f9648b45fab6c47a8816b8d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169700 Reviewed-by: Michael Weghorn Tested-by: Jenkins --- android/source/src/main/play/listings/en-US/graphics/icon.png | 1 - .../source/src/main/play/listings/en-US/graphics/icon/icon.png | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) delete mode 120000 android/source/src/main/play/listings/en-US/graphics/icon.png create mode 120000 android/source/src/main/play/listings/en-US/graphics/icon/icon.png diff --git a/android/source/src/main/play/listings/en-US/graphics/icon.png b/android/source/src/main/play/listings/en-US/graphics/icon.png deleted file mode 120000 index f3e316efb456..000000000000 --- a/android/source/src/main/play/listings/en-US/graphics/icon.png +++ /dev/null @@ -1 +0,0 @@ -../../../../../../ic_launcher-web.png \ No newline at end of file diff --git a/android/source/src/main/play/listings/en-US/graphics/icon/icon.png b/android/source/src/main/play/listings/en-US/graphics/icon/icon.png new file mode 120000 index 000000000000..f78b23fa9ae5 --- /dev/null +++ b/android/source/src/main/play/listings/en-US/graphics/icon/icon.png @@ -0,0 +1 @@ +../../../../../../../ic_launcher-web.png \ No newline at end of file From b17171b949fed99c55c35bcb8203129c8fef41f1 Mon Sep 17 00:00:00 2001 From: Noel Grandin Date: Fri, 28 Jun 2024 09:39:02 +0200 Subject: [PATCH 130/194] improve lifecycle of SdrItemPool I ran into a problem where this global object would be destroyed and then resurrected during shutdown. Rather than make the existing code more complex, extend the existing vcl::DeleteOnDeinit code and re-use that here. Change-Id: Ib63739f57f489b1131111e9bab1db5fba7fd17bd Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169697 Tested-by: Jenkins Reviewed-by: Noel Grandin --- compilerplugins/clang/refcounting.cxx | 2 ++ include/vcl/lazydelete.hxx | 28 ++++++++++++++++++ svx/source/svdraw/svdobj.cxx | 42 ++++++--------------------- 3 files changed, 39 insertions(+), 33 deletions(-) diff --git a/compilerplugins/clang/refcounting.cxx b/compilerplugins/clang/refcounting.cxx index 801173ce6488..2bee2f80cf65 100644 --- a/compilerplugins/clang/refcounting.cxx +++ b/compilerplugins/clang/refcounting.cxx @@ -336,6 +336,8 @@ bool containsSalhelperReferenceObjectSubclass(const clang::Type* pType0) { auto const dc = loplugin::DeclCheck(pTemplate); if (dc.Class("Reference").Namespace("rtl").GlobalNamespace() || (dc.Class("OStoreHandle").AnonymousNamespace().Namespace("store") + .GlobalNamespace()) + || (dc.Class("DeleteRtlReferenceOnDeinit").Namespace("vcl") .GlobalNamespace())) { return false; diff --git a/include/vcl/lazydelete.hxx b/include/vcl/lazydelete.hxx index 4a524d99fa4d..9488030a3369 100644 --- a/include/vcl/lazydelete.hxx +++ b/include/vcl/lazydelete.hxx @@ -22,6 +22,7 @@ #include #include +#include #include @@ -131,6 +132,33 @@ namespace vcl } } }; + + /** Similar to DeleteOnDeinit, the DeleteRtlReferenceOnDeinit + template class makes sure that a static rtl::Reference managed object is disposed + and released at the right time. + + Use like + static DeleteUnoReferenceOnDeinit xStaticFactory (new Foo); + rtl::Reference xFactory (xStaticFactory.get()); + if (xFactory.is()) + \ + */ + template + class DeleteRtlReferenceOnDeinit final : public vcl::DeleteOnDeinitBase + { + rtl::Reference m_xI; + virtual void doCleanup() override { set(nullptr); } + public: + DeleteRtlReferenceOnDeinit(rtl::Reference _xI ) : m_xI(std::move( _xI )) { + addDeinitContainer( this ); } + + rtl::Reference get() { return m_xI; } + + void set (const rtl::Reference& r_xNew ) + { + m_xI = r_xNew; + } + }; } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/svx/source/svdraw/svdobj.cxx b/svx/source/svdraw/svdobj.cxx index 1b768aee12d9..fe95f30b6532 100644 --- a/svx/source/svdraw/svdobj.cxx +++ b/svx/source/svdraw/svdobj.cxx @@ -119,6 +119,7 @@ #include #include #include +#include using namespace ::com::sun::star; @@ -505,45 +506,20 @@ void SdrObject::handlePageChange(SdrPage*, SdrPage* ) } -// global static ItemPool for not-yet-inserted items -static rtl::Reference mpGlobalItemPool; - -/** If we let the libc runtime clean us up, we trigger a crash */ -namespace -{ -class TerminateListener : public ::cppu::WeakImplHelper< css::frame::XTerminateListener > -{ - void SAL_CALL queryTermination( const lang::EventObject& ) override - {} - void SAL_CALL notifyTermination( const lang::EventObject& ) override - { - mpGlobalItemPool.clear(); - } - virtual void SAL_CALL disposing( const ::css::lang::EventObject& ) override - {} -}; -}; - // init global static itempool SdrItemPool& SdrObject::GetGlobalDrawObjectItemPool() { - if(!mpGlobalItemPool) - { - mpGlobalItemPool = new SdrItemPool(); + static vcl::DeleteRtlReferenceOnDeinit xGlobalItemPool( []() { + rtl::Reference xNewPool(new SdrItemPool()); rtl::Reference pGlobalOutlPool = EditEngine::CreatePool(); - mpGlobalItemPool->SetSecondaryPool(pGlobalOutlPool.get()); - mpGlobalItemPool->SetDefaultMetric(SdrEngineDefaults::GetMapUnit()); + xNewPool->SetSecondaryPool(pGlobalOutlPool.get()); + xNewPool->SetDefaultMetric(SdrEngineDefaults::GetMapUnit()); if (comphelper::IsFuzzing()) - mpGlobalItemPool->acquire(); - else - { - uno::Reference< frame::XDesktop2 > xDesktop = frame::Desktop::create(comphelper::getProcessComponentContext()); - uno::Reference< frame::XTerminateListener > xListener( new TerminateListener ); - xDesktop->addTerminateListener( xListener ); - } - } + xNewPool->acquire(); + return xNewPool; + }() ); - return *mpGlobalItemPool; + return *xGlobalItemPool.get(); } void SdrObject::SetRelativeWidth( double nValue ) From 94094d86883ea78e3b09d1d237e9f1b757ec0136 Mon Sep 17 00:00:00 2001 From: Miklos Vajna Date: Fri, 28 Jun 2024 12:24:40 +0200 Subject: [PATCH 131/194] oox, drawingml: use more bLineShape in Shape::createAndInsert() As suggested at . Change-Id: I72f9cc905f18a48dcae2cf4b96d4560ad0a6080b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169701 Reviewed-by: Miklos Vajna Tested-by: Jenkins --- oox/source/drawingml/shape.cxx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/oox/source/drawingml/shape.cxx b/oox/source/drawingml/shape.cxx index 5adf4a8eb15b..4c7de78b8817 100644 --- a/oox/source/drawingml/shape.cxx +++ b/oox/source/drawingml/shape.cxx @@ -1039,8 +1039,7 @@ Reference< XShape > const & Shape::createAndInsert( bool bTopWriterLine = !pParentGroupShape && mbWps && bLineShape; // Build object matrix from shape size and position; corresponds to MSO ext and off // Only LineShape and ConnectorShape may have zero width or height. - if (aServiceName == "com.sun.star.drawing.LineShape" - || aServiceName == "com.sun.star.drawing.ConnectorShape") + if (bLineShape || aServiceName == "com.sun.star.drawing.ConnectorShape") { // For toplevel Writer lines, size is included in the point coordinates. if (!bTopWriterLine) @@ -1178,7 +1177,7 @@ Reference< XShape > const & Shape::createAndInsert( } // special for lineshape - if ( aServiceName == "com.sun.star.drawing.LineShape" ) + if (bLineShape) { ::basegfx::B2DPolygon aPoly; aPoly.insert( 0, ::basegfx::B2DPoint( 0, 0 ) ); From 6c949328650ccc8eeb149631a6368692dc08a309 Mon Sep 17 00:00:00 2001 From: Xisco Fauli Date: Fri, 28 Jun 2024 16:47:12 +0200 Subject: [PATCH 132/194] =?UTF-8?q?tdf#158051:=20fix=20*=CF=83=E2=80=99=20?= =?UTF-8?q?->=20=CF=83=E2=80=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit While writting a test for 7f593484a1f929663ec9ec7def76b63ec3a832b2 "tdf#158051 AutoCorrect: don't apply final sigma before apostrophe" I realized the added rules where *σ’ -> ς’ ( which was the old behavior ) instead of *σ’ -> σ’ Change-Id: Ibff92e74da3d353ba715025b244b614b7fb8f9fc Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169717 Reviewed-by: László Németh Tested-by: Jenkins --- extras/source/autocorr/lang/el/DocumentList.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extras/source/autocorr/lang/el/DocumentList.xml b/extras/source/autocorr/lang/el/DocumentList.xml index 1d9bbeb7efae..3668f00dd9d0 100644 --- a/extras/source/autocorr/lang/el/DocumentList.xml +++ b/extras/source/autocorr/lang/el/DocumentList.xml @@ -1,7 +1,7 @@ - - + + From 93987194f5dee2b917e32c18b8a377be95f0ab71 Mon Sep 17 00:00:00 2001 From: Xisco Fauli Date: Fri, 28 Jun 2024 15:17:56 +0200 Subject: [PATCH 133/194] tdf#92029: sw_autocorrect: Add unittest Change-Id: I7ac855ac826353869c3a905ea70448d0c8dc1b76 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169711 Tested-by: Jenkins Reviewed-by: Xisco Fauli --- sw/CppunitTest_sw_autocorrect.mk | 78 ++++++++++++++++++++++++ sw/Module_sw.mk | 1 + sw/qa/extras/autocorrect/autocorrect.cxx | 43 +++++++++++++ sw/qa/extras/autocorrect/data/nl-BE.fodt | 14 +++++ 4 files changed, 136 insertions(+) create mode 100644 sw/CppunitTest_sw_autocorrect.mk create mode 100644 sw/qa/extras/autocorrect/autocorrect.cxx create mode 100644 sw/qa/extras/autocorrect/data/nl-BE.fodt diff --git a/sw/CppunitTest_sw_autocorrect.mk b/sw/CppunitTest_sw_autocorrect.mk new file mode 100644 index 000000000000..7122b48b3d45 --- /dev/null +++ b/sw/CppunitTest_sw_autocorrect.mk @@ -0,0 +1,78 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +$(eval $(call gb_CppunitTest_CppunitTest,sw_autocorrect)) + +$(eval $(call gb_CppunitTest_use_common_precompiled_header,sw_autocorrect)) + +$(eval $(call gb_CppunitTest_add_exception_objects,sw_autocorrect, \ + sw/qa/extras/autocorrect/autocorrect \ +)) + +$(eval $(call gb_CppunitTest_use_libraries,sw_autocorrect, \ + comphelper \ + cppu \ + cppuhelper \ + editeng \ + sal \ + sfx \ + subsequenttest \ + svl \ + svx \ + svxcore \ + sw \ + swqahelper \ + test \ + unotest \ + utl \ + vcl \ + tl \ +)) + +$(eval $(call gb_CppunitTest_use_externals,sw_autocorrect,\ + boost_headers \ + libxml2 \ +)) + +$(eval $(call gb_CppunitTest_set_include,sw_autocorrect,\ + -I$(SRCDIR)/sw/inc \ + -I$(SRCDIR)/sw/source/core/inc \ + -I$(SRCDIR)/sw/source/uibase/inc \ + -I$(SRCDIR)/sw/qa/inc \ + $$(INCLUDE) \ +)) + +$(eval $(call gb_CppunitTest_use_api,sw_autocorrect,\ + udkapi \ + offapi \ + oovbaapi \ +)) + +$(eval $(call gb_CppunitTest_use_ure,sw_autocorrect)) +$(eval $(call gb_CppunitTest_use_vcl,sw_autocorrect)) + +$(eval $(call gb_CppunitTest_use_rdb,sw_autocorrect,services)) + +$(eval $(call gb_CppunitTest_use_custom_headers,sw_autocorrect,\ + officecfg/registry \ +)) + +$(eval $(call gb_CppunitTest_use_configuration,sw_autocorrect)) + +$(eval $(call gb_CppunitTest_use_uiconfigs,sw_autocorrect, \ + modules/swriter \ +)) + +$(eval $(call gb_CppunitTest_use_more_fonts,sw_autocorrect)) + +ifneq ($(filter MORE_FONTS,$(BUILD_TYPE)),) +$(eval $(call gb_CppunitTest_set_non_application_font_use,sw_autocorrect,abort)) +endif + +# vim: set noet sw=4 ts=4: diff --git a/sw/Module_sw.mk b/sw/Module_sw.mk index 2db6fbace5f5..941de1a43ff7 100644 --- a/sw/Module_sw.mk +++ b/sw/Module_sw.mk @@ -136,6 +136,7 @@ $(eval $(call gb_Module_add_slowcheck_targets,sw,\ CppunitTest_sw_accessible_relation_set \ CppunitTest_sw_apiterminate \ CppunitTest_sw_apitests \ + CppunitTest_sw_autocorrect \ CppunitTest_sw_unowriter \ CppunitTest_sw_core_text \ CppunitTest_sw_core_doc \ diff --git a/sw/qa/extras/autocorrect/autocorrect.cxx b/sw/qa/extras/autocorrect/autocorrect.cxx new file mode 100644 index 000000000000..bc06aaece662 --- /dev/null +++ b/sw/qa/extras/autocorrect/autocorrect.cxx @@ -0,0 +1,43 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include + +#include +#include + +// If you want to add a test for a language that doesn't exists yet +// copy an existing document and adapt "fo:language" and "fo:country" + +class SwAutoCorrect : public SwModelTestBase +{ +public: + SwAutoCorrect() + : SwModelTestBase(u"/sw/qa/extras/autocorrect/data/"_ustr) + { + } +}; + +CPPUNIT_TEST_FIXTURE(SwAutoCorrect, nl_BE) +{ + createSwDoc("nl-BE.fodt"); + + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + + // tdf#92029: Without the fix in place, this test would have failed with + // - Expected: Ik ben ’s morgens opgestaan + // - Actual : Ik ben ‘s morgens opgestaan + emulateTyping(*pTextDoc, u"Ik ben 's morgens opgestaan"); + OUString sReplaced(u"Ik ben ’s morgens opgestaan"_ustr); + CPPUNIT_ASSERT_EQUAL(sReplaced, getParagraph(1)->getString()); +} + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/qa/extras/autocorrect/data/nl-BE.fodt b/sw/qa/extras/autocorrect/data/nl-BE.fodt new file mode 100644 index 000000000000..06843555cb5d --- /dev/null +++ b/sw/qa/extras/autocorrect/data/nl-BE.fodt @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + From 16d58ad8d3423380aeb8588c50eaef10fc92c18d Mon Sep 17 00:00:00 2001 From: Andrea Gelmini Date: Fri, 28 Jun 2024 20:49:38 +0200 Subject: [PATCH 134/194] Fix "lets" -> "let's" Change-Id: Ibe6cbbd618aab5c145913235dc90fec3c98cd504 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169723 Reviewed-by: Julien Nabet Tested-by: Julien Nabet --- compilerplugins/clang/store/checkunusedparams.cxx | 2 +- filter/source/msfilter/msdffimp.cxx | 2 +- sal/qa/rtl/alloc/rtl_alloc.cxx | 2 +- sc/source/filter/oox/worksheethelper.cxx | 2 +- .../source/cpp/unobootstrapprotector/unobootstrapprotector.cxx | 2 +- unoxml/source/dom/documentbuilder.cxx | 2 +- vcl/unx/gtk3/gtksalmenu.cxx | 2 +- .../xmerge/converter/xml/sxc/SxcDocumentDeserializer.java | 2 +- xmloff/source/table/XMLTableImport.cxx | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/compilerplugins/clang/store/checkunusedparams.cxx b/compilerplugins/clang/store/checkunusedparams.cxx index 2f45049632d3..33916b4810bb 100644 --- a/compilerplugins/clang/store/checkunusedparams.cxx +++ b/compilerplugins/clang/store/checkunusedparams.cxx @@ -147,7 +147,7 @@ void CheckUnusedParams::checkForFunctionDecl(Expr const * expr, bool bCheckOnly) static int noFieldsInRecord(RecordType const * recordType) { auto recordDecl = recordType->getDecl(); - // if it's complicated, lets just assume it has fields + // if it's complicated, let's just assume it has fields if (isa(recordDecl)) return 1; return std::distance(recordDecl->field_begin(), recordDecl->field_end()); diff --git a/filter/source/msfilter/msdffimp.cxx b/filter/source/msfilter/msdffimp.cxx index 4089fcfba91d..28819f802134 100644 --- a/filter/source/msfilter/msdffimp.cxx +++ b/filter/source/msfilter/msdffimp.cxx @@ -3894,7 +3894,7 @@ rtl::Reference SvxMSDffManager::ImportGraphic( SvStream& rSt, SfxItem if ( !bGrfRead ) { /* - Still no luck, lets look at the end of this record for a FBSE pool, + Still no luck, let's look at the end of this record for a FBSE pool, this fallback is a specific case for how word does it sometimes */ bool bOk = rObjData.rSpHd.SeekToEndOfRecord( rSt ); diff --git a/sal/qa/rtl/alloc/rtl_alloc.cxx b/sal/qa/rtl/alloc/rtl_alloc.cxx index 2364f3fe56cf..0e743cae3c11 100644 --- a/sal/qa/rtl/alloc/rtl_alloc.cxx +++ b/sal/qa/rtl/alloc/rtl_alloc.cxx @@ -190,7 +190,7 @@ public: void test2() { - // should never happen but lets try it again. + // should never happen but let's try it again. test(); } diff --git a/sc/source/filter/oox/worksheethelper.cxx b/sc/source/filter/oox/worksheethelper.cxx index 495cc0ff7828..39a24a2303b3 100644 --- a/sc/source/filter/oox/worksheethelper.cxx +++ b/sc/source/filter/oox/worksheethelper.cxx @@ -1074,7 +1074,7 @@ void WorksheetGlobals::insertHyperlink( const ScAddress& rAddress, const OUStrin // Handle other cell types e.g. formulas ( and ? ) that have associated // hyperlinks. // Ideally all hyperlinks should be treated as below. For the moment, - // given the current absence of ods support lets just handle what we + // given the current absence of ods support let's just handle what we // previously didn't handle the new way. // Unfortunately we won't be able to preserve such hyperlinks when // saving to ods. Note: when we are able to save such hyperlinks to ods diff --git a/unotest/source/cpp/unobootstrapprotector/unobootstrapprotector.cxx b/unotest/source/cpp/unobootstrapprotector/unobootstrapprotector.cxx index 5ad175b9d0ef..98c5ea3cbe26 100644 --- a/unotest/source/cpp/unobootstrapprotector/unobootstrapprotector.cxx +++ b/unotest/source/cpp/unobootstrapprotector/unobootstrapprotector.cxx @@ -42,7 +42,7 @@ using namespace com::sun::star; //But we can't setup and tear down the root component context for //every test because all the uno singletons will be invalid after -//the first dispose. So lets setup the default context once before +//the first dispose. So let's setup the default context once before //all tests are run, and tear it down once after all have finished class Prot : public CppUnit::Protector diff --git a/unoxml/source/dom/documentbuilder.cxx b/unoxml/source/dom/documentbuilder.cxx index 46232463497d..3be49adcd899 100644 --- a/unoxml/source/dom/documentbuilder.cxx +++ b/unoxml/source/dom/documentbuilder.cxx @@ -369,7 +369,7 @@ namespace DOM Reference< XDocument > xRet; - // if we failed to parse the URI as a simple file, lets try via a ucb stream. + // if we failed to parse the URI as a simple file, let's try via a ucb stream. // For Android file:///assets/ URLs which must go via the osl/ file API. if (pDoc == nullptr) { Reference < XSimpleFileAccess3 > xStreamAccess( diff --git a/vcl/unx/gtk3/gtksalmenu.cxx b/vcl/unx/gtk3/gtksalmenu.cxx index ddfa5ef36b48..96e362428b9d 100644 --- a/vcl/unx/gtk3/gtksalmenu.cxx +++ b/vcl/unx/gtk3/gtksalmenu.cxx @@ -1054,7 +1054,7 @@ void GtkSalMenu::ApplyPersona() if (!mpMenuBarContainerWidget) return; assert(mbMenuBar); - // I'm dubious about the persona theming feature, but as it exists, lets try and support + // I'm dubious about the persona theming feature, but as it exists, let's try and support // it, apply the image to the mpMenuBarContainerWidget const BitmapEx& rPersonaBitmap = Application::GetSettings().GetStyleSettings().GetPersonaHeader(); diff --git a/xmerge/source/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SxcDocumentDeserializer.java b/xmerge/source/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SxcDocumentDeserializer.java index 1523b9089585..a969d179c3b8 100644 --- a/xmerge/source/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SxcDocumentDeserializer.java +++ b/xmerge/source/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SxcDocumentDeserializer.java @@ -511,7 +511,7 @@ public abstract class SxcDocumentDeserializer implements OfficeConstants, col = newCol; } - // Lets start dealing with the cell data + // Let's start dealing with the cell data Debug.log(Debug.TRACE, ""); // Get the cell's contents diff --git a/xmloff/source/table/XMLTableImport.cxx b/xmloff/source/table/XMLTableImport.cxx index 20e11b89048d..af7b849989eb 100644 --- a/xmloff/source/table/XMLTableImport.cxx +++ b/xmloff/source/table/XMLTableImport.cxx @@ -671,7 +671,7 @@ css::uno::Reference< css::xml::sax::XFastContextHandler > XMLCellImportContext:: SvXMLImportContext * pContext = nullptr; - // if we have a text cursor, lets try to import some text + // if we have a text cursor, let's try to import some text if( mxCursor.is() ) { pContext = GetImport().GetTextImport()->CreateTextChildContext( GetImport(), nElement, xAttrList ); From aa80eaeeabd9424f7e09227940c2f8b6c817f07f Mon Sep 17 00:00:00 2001 From: Andrea Gelmini Date: Fri, 28 Jun 2024 20:40:44 +0200 Subject: [PATCH 135/194] Fix "lets see" -> "let's see" Change-Id: I7aa939681720bc0dc81c8f114a3608a8cdfb4f60 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169722 Tested-by: Julien Nabet Reviewed-by: Julien Nabet --- connectivity/source/parse/sqlnode.cxx | 2 +- editeng/source/editeng/impedit3.cxx | 2 +- .../source/characterclassification/cclass_unicode_parser.cxx | 2 +- include/sal/config.h | 2 +- sc/source/core/tool/address.cxx | 2 +- sw/source/filter/ww8/ww8atr.cxx | 2 +- toolkit/inc/controls/controlmodelcontainerbase.hxx | 2 +- vcl/unx/generic/dtrans/X11_selection.cxx | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/connectivity/source/parse/sqlnode.cxx b/connectivity/source/parse/sqlnode.cxx index ca4521b05e7d..89d3d30779e6 100644 --- a/connectivity/source/parse/sqlnode.cxx +++ b/connectivity/source/parse/sqlnode.cxx @@ -387,7 +387,7 @@ void OSQLParseNode::impl_parseNodeToString_throw(OUStringBuffer& rString, const return; } - // Lets see how many nodes this subtree has + // Let's see how many nodes this subtree has sal_uInt32 nCount = count(); bool bHandled = false; diff --git a/editeng/source/editeng/impedit3.cxx b/editeng/source/editeng/impedit3.cxx index 7c1ccc19cfa8..5014f8c03576 100644 --- a/editeng/source/editeng/impedit3.cxx +++ b/editeng/source/editeng/impedit3.cxx @@ -3246,7 +3246,7 @@ void ImpEditEngine::RecalcFormatterFontMetrics( FormatterFontMetric& rCurMetrics // Fonts without leading cause problems if ( ( nIntLeading == 0 ) && (mpRefDev->GetOutDevType() == OUTDEV_PRINTER)) { - // Lets see what Leading one gets on the screen + // Let's see what Leading one gets on the screen VclPtr pVDev = GetVirtualDevice(mpRefDev->GetMapMode(), mpRefDev->GetDrawMode()); rFont.SetPhysFont(*pVDev); aMetric = pVDev->GetFontMetric(); diff --git a/i18npool/source/characterclassification/cclass_unicode_parser.cxx b/i18npool/source/characterclassification/cclass_unicode_parser.cxx index 9ed95e2f907a..6e27415bdf15 100644 --- a/i18npool/source/characterclassification/cclass_unicode_parser.cxx +++ b/i18npool/source/characterclassification/cclass_unicode_parser.cxx @@ -651,7 +651,7 @@ ParserFlags cclass_Unicode::getFlagsExtended(sal_uInt32 const c, const cclass_Un return ((nTypes & KParseTokens::IGNORE_LEADING_WS) ? ParserFlags::CHAR_DONTCARE : (bStart ? ParserFlags::CHAR_WORD : (ParserFlags::CHAR_DONTCARE | ParserFlags::WORD_SEP | ParserFlags::VALUE_SEP) )); case U_OTHER_PUNCTUATION: - // fdo#61754 Lets see (if we not at the start) if this is midletter + // fdo#61754 Let's see (if we not at the start) if this is midletter // punctuation and allow it in a word if it is similarly to // U_NON_SPACING_MARK, for example U+00B7 MIDDLE DOT. // tdf#123575 for U+30FB KATAKANA MIDDLE DOT property is not diff --git a/include/sal/config.h b/include/sal/config.h index 5d6bd3459287..f666fed23897 100644 --- a/include/sal/config.h +++ b/include/sal/config.h @@ -108,7 +108,7 @@ #if __has_warning("-Wpotentially-evaluated-expression") #pragma GCC diagnostic ignored "-Wpotentially-evaluated-expression" #endif -// Before fixing occurrences of this warning, lets see whether C++20 will still change to obsolete +// Before fixing occurrences of this warning, let's see whether C++20 will still change to obsolete // the warning (see // "[c++20] // Add rewriting from comparison operators to <=> / =="): diff --git a/sc/source/core/tool/address.cxx b/sc/source/core/tool/address.cxx index ffbeb495d4ab..cbd32ae3c849 100644 --- a/sc/source/core/tool/address.cxx +++ b/sc/source/core/tool/address.cxx @@ -1159,7 +1159,7 @@ static ScRefFlags lcl_ScAddress_Parse_OOo( const sal_Unicode* p, const ScDocumen bool bExtDoc = false; bool bExtDocInherited = false; - // Lets see if this is a reference to something in an external file. A + // Let's see if this is a reference to something in an external file. A // document name is always quoted and has a trailing #. if (*p == '\'') { diff --git a/sw/source/filter/ww8/ww8atr.cxx b/sw/source/filter/ww8/ww8atr.cxx index c2377fbb916b..639f43a47a95 100644 --- a/sw/source/filter/ww8/ww8atr.cxx +++ b/sw/source/filter/ww8/ww8atr.cxx @@ -644,7 +644,7 @@ void MSWordExportBase::OutputSectionBreaks( const SfxItemSet *pSet, const SwNode /* #i9301# - No explicit page break, lets see if the style had one and we've moved to a + No explicit page break, let's see if the style had one and we've moved to a new page style because of it, if we have to then we take the opportunity to set the equivalent word section here. We *could* do it for every paragraph that moves onto a new page because of layout, but that would be insane. diff --git a/toolkit/inc/controls/controlmodelcontainerbase.hxx b/toolkit/inc/controls/controlmodelcontainerbase.hxx index ae414346c78f..d8efbcf700bc 100644 --- a/toolkit/inc/controls/controlmodelcontainerbase.hxx +++ b/toolkit/inc/controls/controlmodelcontainerbase.hxx @@ -259,7 +259,7 @@ public: void SAL_CALL setDesignMode( sal_Bool bOn ) override; // XModifyListener // Using a dummy/no-op implementation here, not sure if every container control needs - // to implement this, certainly Dialog does, lets see about others + // to implement this, certainly Dialog does, let's see about others virtual void SAL_CALL modified( const css::lang::EventObject& ) override {} protected: virtual void ImplModelPropertiesChanged( const css::uno::Sequence< css::beans::PropertyChangeEvent >& rEvents ) override; diff --git a/vcl/unx/generic/dtrans/X11_selection.cxx b/vcl/unx/generic/dtrans/X11_selection.cxx index e3ef6e9e2c6f..097de9c04311 100644 --- a/vcl/unx/generic/dtrans/X11_selection.cxx +++ b/vcl/unx/generic/dtrans/X11_selection.cxx @@ -1013,7 +1013,7 @@ bool SelectionManager::getPasteData( Atom selection, const OUString& rType, Sequ if( rType == "text/plain;charset=utf-16" ) { - // lets see if we have UTF16 else try to find something convertible + // let's see if we have UTF16 else try to find something convertible if( it->second->m_aTypes.getLength() && ! it->second->m_bHaveUTF16 ) { Sequence< sal_Int8 > aData; From 2cb5e2256c607acd766e8693ea22b62459d93cbc Mon Sep 17 00:00:00 2001 From: Mike Kaganski Date: Fri, 28 Jun 2024 17:03:53 +0500 Subject: [PATCH 136/194] Simplify solar.h a bit Use std::copy / std::reverse_copy for double serialization. Also remove __cplusplus conditions, because the header is not included in any C files. And simplify the functions uses, where casts were unneeded. Change-Id: I1d8375e601851231fdffcf52e3f3e3bdcbcbde7f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169706 Tested-by: Jenkins Reviewed-by: Mike Kaganski --- include/tools/solar.h | 52 +++-------- lotuswordpro/source/filter/lwpobjstrm.cxx | 2 +- sc/source/filter/excel/xistream.cxx | 2 +- sw/source/filter/ww8/ww8graf.cxx | 108 ++++++++++------------ sw/source/filter/ww8/ww8par2.cxx | 12 +-- sw/source/filter/ww8/ww8par6.cxx | 6 +- vcl/source/gdi/jobset.cxx | 4 +- 7 files changed, 74 insertions(+), 112 deletions(-) diff --git a/include/tools/solar.h b/include/tools/solar.h index ae7c5288c4cc..94015e259c0c 100644 --- a/include/tools/solar.h +++ b/include/tools/solar.h @@ -23,6 +23,8 @@ #include #include +#include + /** Intermediate type to solve type clash with Windows headers. Should be removed as soon as all code parts have been reviewed and the correct type is known. Most of the times ULONG is meant @@ -42,8 +44,6 @@ typedef sal_uInt8 SVBT16[2]; typedef sal_uInt8 SVBT32[4]; typedef sal_uInt8 SVBT64[8]; -#ifdef __cplusplus - inline sal_uInt16 SVBT16ToUInt16( const SVBT16 p ) { return static_cast (static_cast(p[0]) + (static_cast(p[1]) << 8)); } @@ -53,32 +53,16 @@ inline sal_uInt32 SVBT32ToUInt32 ( const SVBT32 p ) { return static_cast(p[1]) << 8) + (static_cast(p[2]) << 16) + (static_cast(p[3]) << 24)); } -#if defined OSL_LITENDIAN inline double SVBT64ToDouble( const SVBT64 p ) { double n; - reinterpret_cast(&n)[0] = p[0]; - reinterpret_cast(&n)[1] = p[1]; - reinterpret_cast(&n)[2] = p[2]; - reinterpret_cast(&n)[3] = p[3]; - reinterpret_cast(&n)[4] = p[4]; - reinterpret_cast(&n)[5] = p[5]; - reinterpret_cast(&n)[6] = p[6]; - reinterpret_cast(&n)[7] = p[7]; +#if defined OSL_LITENDIAN + std::copy(p, p + 8, reinterpret_cast(&n)); +#else + std::reverse_copy(p, p + 8, reinterpret_cast(&n)); +#endif return n; } -#else -inline double SVBT64ToDouble( const SVBT64 p ) { double n; - reinterpret_cast(&n)[0] = p[7]; - reinterpret_cast(&n)[1] = p[6]; - reinterpret_cast(&n)[2] = p[5]; - reinterpret_cast(&n)[3] = p[4]; - reinterpret_cast(&n)[4] = p[3]; - reinterpret_cast(&n)[5] = p[2]; - reinterpret_cast(&n)[6] = p[1]; - reinterpret_cast(&n)[7] = p[0]; - return n; } -#endif inline void ShortToSVBT16( sal_uInt16 n, SVBT16 p ) { @@ -93,26 +77,14 @@ inline void UInt32ToSVBT32 ( sal_uInt32 n, SVBT32 p ) p[3] = static_cast(n >> 24); } inline void Int32ToSVBT32 ( sal_Int32 n, SVBT32 p ) { UInt32ToSVBT32(sal_uInt32(n), p); } +inline void DoubleToSVBT64( double n, SVBT64 p ) +{ #if defined OSL_LITENDIAN -inline void DoubleToSVBT64( double n, SVBT64 p ) { p[0] = reinterpret_cast(&n)[0]; - p[1] = reinterpret_cast(&n)[1]; - p[2] = reinterpret_cast(&n)[2]; - p[3] = reinterpret_cast(&n)[3]; - p[4] = reinterpret_cast(&n)[4]; - p[5] = reinterpret_cast(&n)[5]; - p[6] = reinterpret_cast(&n)[6]; - p[7] = reinterpret_cast(&n)[7]; } + std::copy(reinterpret_cast(&n), reinterpret_cast(&n) + 8, p); #else -inline void DoubleToSVBT64( double n, SVBT64 p ) { p[0] = reinterpret_cast(&n)[7]; - p[1] = reinterpret_cast(&n)[6]; - p[2] = reinterpret_cast(&n)[5]; - p[3] = reinterpret_cast(&n)[4]; - p[4] = reinterpret_cast(&n)[3]; - p[5] = reinterpret_cast(&n)[2]; - p[6] = reinterpret_cast(&n)[1]; - p[7] = reinterpret_cast(&n)[0]; } -#endif + std::reverse_copy(reinterpret_cast(&n), reinterpret_cast(&n) + 8, p); #endif +} #endif diff --git a/lotuswordpro/source/filter/lwpobjstrm.cxx b/lotuswordpro/source/filter/lwpobjstrm.cxx index 728e3a71f8f3..06e579c3843d 100644 --- a/lotuswordpro/source/filter/lwpobjstrm.cxx +++ b/lotuswordpro/source/filter/lwpobjstrm.cxx @@ -222,7 +222,7 @@ sal_Int16 LwpObjectStream::QuickReadInt16() SVBT16 aValue = { 0 }; QuickRead(aValue, sizeof(aValue)); - return static_cast(SVBT16ToUInt16(aValue)); + return SVBT16ToInt16(aValue); } /** * @descr Quick read sal_uInt8 diff --git a/sc/source/filter/excel/xistream.cxx b/sc/source/filter/excel/xistream.cxx index 0a6c24aca6b2..16eea86e7cd8 100644 --- a/sc/source/filter/excel/xistream.cxx +++ b/sc/source/filter/excel/xistream.cxx @@ -637,7 +637,7 @@ sal_Int16 XclImpStream::ReadInt16() { SVBT16 pnBuffer{0}; mxDecrypter->Read( mrStrm, pnBuffer, 2 ); - nValue = static_cast< sal_Int16 >( SVBT16ToUInt16( pnBuffer ) ); + nValue = SVBT16ToInt16(pnBuffer); } else mrStrm.ReadInt16( nValue ); diff --git a/sw/source/filter/ww8/ww8graf.cxx b/sw/source/filter/ww8/ww8graf.cxx index 97420da84945..71906dea342e 100644 --- a/sw/source/filter/ww8/ww8graf.cxx +++ b/sw/source/filter/ww8/ww8graf.cxx @@ -176,10 +176,10 @@ void wwFrameNamer::SetUniqueGraphName(SwFrameFormat *pFrameFormat, std::u16strin bool SwWW8ImplReader::ReadGrafStart(void* pData, short nDataSiz, WW8_DPHEAD const * pHd, SfxAllItemSet &rSet) { - if (SVBT16ToUInt16(pHd->cb) < sizeof(WW8_DPHEAD) + nDataSiz) + if (sal_uInt16 n = SVBT16ToUInt16(pHd->cb); n < sizeof(WW8_DPHEAD) + nDataSiz) { OSL_ENSURE( false, "+graphic element: too short?" ); - m_pStrm->SeekRel(SVBT16ToUInt16(pHd->cb) - sizeof(WW8_DPHEAD)); + m_pStrm->SeekRel(n - sizeof(WW8_DPHEAD)); return false; } @@ -202,19 +202,19 @@ bool SwWW8ImplReader::ReadGrafStart(void* pData, short nDataSiz, static void SetStdAttr( SfxItemSet& rSet, WW8_DP_LINETYPE& rL, WW8_DP_SHADOW const & rSh ) { - if( SVBT16ToUInt16( rL.lnps ) == 5 ){ // invisible + if( sal_uInt16 n = SVBT16ToUInt16( rL.lnps ); n == 5 ){ // invisible rSet.Put( XLineStyleItem( drawing::LineStyle_NONE ) ); }else{ // visible Color aCol( WW8TransCol( rL.lnpc ) ); // line color rSet.Put( XLineColorItem( OUString(), aCol ) ); - rSet.Put( XLineWidthItem( SVBT16ToUInt16( rL.lnpw ) ) ); + sal_uInt16 nLen = SVBT16ToUInt16( rL.lnpw ); + rSet.Put( XLineWidthItem( nLen ) ); // line thickness - if( SVBT16ToUInt16( rL.lnps ) >= 1 - && SVBT16ToUInt16(rL.lnps ) <= 4 ){ // line style + if( n >= 1 + && n <= 4 ){ // line style rSet.Put( XLineStyleItem( drawing::LineStyle_DASH ) ); - sal_Int16 nLen = SVBT16ToUInt16( rL.lnpw ); XDash aD( css::drawing::DashStyle_RECT, 1, 2 * nLen, 1, 5 * nLen, 5 * nLen ); - switch( SVBT16ToUInt16( rL.lnps ) ){ + switch( n ){ case 1: aD.SetDots( 0 ); // Dash aD.SetDashLen( 6 * nLen ); aD.SetDistance( 4 * nLen ); @@ -322,13 +322,13 @@ rtl::Reference SwWW8ImplReader::ReadLine(WW8_DPHEAD const * pHd, SfxA Point& rP0 = aP[0]; Point& rP1 = aP[1]; - rP0.setX( static_cast(SVBT16ToUInt16( pHd->xa )) + m_nDrawXOfs2 ); - rP0.setY( static_cast(SVBT16ToUInt16( pHd->ya )) + m_nDrawYOfs2 ); + rP0.setX(SVBT16ToInt16(pHd->xa) + m_nDrawXOfs2); + rP0.setY(SVBT16ToInt16(pHd->ya) + m_nDrawYOfs2); rP1 = rP0; - rP0.AdjustX(static_cast(SVBT16ToUInt16( aLine.xaStart )) ); - rP0.AdjustY(static_cast(SVBT16ToUInt16( aLine.yaStart )) ); - rP1.AdjustX(static_cast(SVBT16ToUInt16( aLine.xaEnd )) ); - rP1.AdjustY(static_cast(SVBT16ToUInt16( aLine.yaEnd )) ); + rP0.AdjustX(SVBT16ToInt16(aLine.xaStart)); + rP0.AdjustY(SVBT16ToInt16(aLine.yaStart)); + rP1.AdjustX(SVBT16ToInt16(aLine.xaEnd)); + rP1.AdjustY(SVBT16ToInt16(aLine.yaEnd)); } ::basegfx::B2DPolygon aPolygon; @@ -352,11 +352,10 @@ rtl::Reference SwWW8ImplReader::ReadRect(WW8_DPHEAD const * pHd, SfxA if( !ReadGrafStart( static_cast(&aRect), sizeof( aRect ), pHd, rSet ) ) return nullptr; - Point aP0( static_cast(SVBT16ToUInt16( pHd->xa )) + m_nDrawXOfs2, - static_cast(SVBT16ToUInt16( pHd->ya )) + m_nDrawYOfs2 ); + Point aP0(SVBT16ToInt16(pHd->xa) + m_nDrawXOfs2, SVBT16ToInt16(pHd->ya) + m_nDrawYOfs2); Point aP1( aP0 ); - aP1.AdjustX(static_cast(SVBT16ToUInt16( pHd->dxa )) ); - aP1.AdjustY(static_cast(SVBT16ToUInt16( pHd->dya )) ); + aP1.AdjustX(SVBT16ToInt16(pHd->dxa)); + aP1.AdjustY(SVBT16ToInt16(pHd->dya)); rtl::Reference pObj = new SdrRectObj( *m_pDrawModel, @@ -375,11 +374,10 @@ rtl::Reference SwWW8ImplReader::ReadEllipse(WW8_DPHEAD const * pHd, S if( !ReadGrafStart( static_cast(&aEllipse), sizeof( aEllipse ), pHd, rSet ) ) return nullptr; - Point aP0( static_cast(SVBT16ToUInt16( pHd->xa )) + m_nDrawXOfs2, - static_cast(SVBT16ToUInt16( pHd->ya )) + m_nDrawYOfs2 ); + Point aP0(SVBT16ToInt16(pHd->xa) + m_nDrawXOfs2, SVBT16ToInt16(pHd->ya) + m_nDrawYOfs2); Point aP1( aP0 ); - aP1.AdjustX(static_cast(SVBT16ToUInt16( pHd->dxa )) ); - aP1.AdjustY(static_cast(SVBT16ToUInt16( pHd->dya )) ); + aP1.AdjustX(SVBT16ToInt16(pHd->dxa)); + aP1.AdjustY(SVBT16ToInt16(pHd->dya)); rtl::Reference pObj = new SdrCircObj( *m_pDrawModel, @@ -399,21 +397,20 @@ rtl::Reference SwWW8ImplReader::ReadArc(WW8_DPHEAD const * pHd, SfxAl if( !ReadGrafStart( static_cast(&aArc), sizeof( aArc ), pHd, rSet ) ) return nullptr; - Point aP0( static_cast(SVBT16ToUInt16( pHd->xa )) + m_nDrawXOfs2, - static_cast(SVBT16ToUInt16( pHd->ya )) + m_nDrawYOfs2 ); + Point aP0(SVBT16ToInt16(pHd->xa) + m_nDrawXOfs2, SVBT16ToInt16(pHd->ya) + m_nDrawYOfs2); Point aP1( aP0 ); - aP1.AdjustX(static_cast(SVBT16ToUInt16( pHd->dxa )) * 2 ); - aP1.AdjustY(static_cast(SVBT16ToUInt16( pHd->dya )) * 2 ); + aP1.AdjustX(SVBT16ToInt16(pHd->dxa) * 2); + aP1.AdjustY(SVBT16ToInt16(pHd->dya) * 2); short nA[] = { 2, 3, 1, 0 }; short nW = nA[ ( ( aArc.fLeft & 1 ) << 1 ) + ( aArc.fUp & 1 ) ]; if( !aArc.fLeft ){ - aP0.AdjustY( -static_cast(SVBT16ToUInt16( pHd->dya )) ); - aP1.AdjustY( -static_cast(SVBT16ToUInt16( pHd->dya )) ); + aP0.AdjustY(-SVBT16ToInt16(pHd->dya)); + aP1.AdjustY(-SVBT16ToInt16(pHd->dya)); } if( aArc.fUp ){ - aP0.AdjustX( -static_cast(SVBT16ToUInt16( pHd->dxa )) ); - aP1.AdjustX( -static_cast(SVBT16ToUInt16( pHd->dxa )) ); + aP0.AdjustX(-SVBT16ToInt16(pHd->dxa)); + aP1.AdjustX(-SVBT16ToInt16(pHd->dxa)); } rtl::Reference pObj = new SdrCircObj( @@ -448,10 +445,8 @@ rtl::Reference SwWW8ImplReader::ReadPolyLine(WW8_DPHEAD const * pHd, Point aPt; for (sal_uInt16 i=0; i(SVBT16ToUInt16( pHd->xa )) ); - aPt.setY( SVBT16ToUInt16( xP[( i << 1 ) + 1] ) + m_nDrawYOfs2 - + static_cast(SVBT16ToUInt16( pHd->ya )) ); + aPt.setX(SVBT16ToUInt16(xP[i << 1]) + m_nDrawXOfs2 + SVBT16ToInt16(pHd->xa)); + aPt.setY(SVBT16ToUInt16(xP[(i << 1) + 1]) + m_nDrawYOfs2 + SVBT16ToInt16(pHd->ya)); aP[i] = aPt; } xP.reset(); @@ -1305,11 +1300,10 @@ rtl::Reference SwWW8ImplReader::ReadTextBox(WW8_DPHEAD const * pHd, S if( !ReadGrafStart( static_cast(&aTextB), sizeof( aTextB ), pHd, rSet ) ) return nullptr; - Point aP0( static_cast(SVBT16ToUInt16( pHd->xa )) + m_nDrawXOfs2, - static_cast(SVBT16ToUInt16( pHd->ya )) + m_nDrawYOfs2 ); + Point aP0(SVBT16ToInt16(pHd->xa) + m_nDrawXOfs2, SVBT16ToInt16(pHd->ya) + m_nDrawYOfs2); Point aP1( aP0 ); - aP1.AdjustX(static_cast(SVBT16ToUInt16( pHd->dxa )) ); - aP1.AdjustY(static_cast(SVBT16ToUInt16( pHd->dya )) ); + aP1.AdjustX(SVBT16ToInt16(pHd->dxa)); + aP1.AdjustY(SVBT16ToInt16(pHd->dya)); rtl::Reference pObj = new SdrRectObj( *m_pDrawModel, @@ -1317,8 +1311,7 @@ rtl::Reference SwWW8ImplReader::ReadTextBox(WW8_DPHEAD const * pHd, S tools::Rectangle(aP0, aP1)); pObj->NbcSetSnapRect(tools::Rectangle(aP0, aP1)); - Size aSize( static_cast(SVBT16ToUInt16( pHd->dxa )) , - static_cast(SVBT16ToUInt16( pHd->dya )) ); + Size aSize(SVBT16ToInt16(pHd->dxa), SVBT16ToInt16(pHd->dya)); tools::Long nStartCpFly,nEndCpFly; bool bContainsGraphics; @@ -1369,19 +1362,17 @@ rtl::Reference SwWW8ImplReader::ReadCaptionBox(WW8_DPHEAD const * pHd if( nTyp == 1 && SVBT16ToUInt16( xP[0] ) == SVBT16ToUInt16( xP[2] ) ) nTyp = 0; - Point aP0( static_cast(SVBT16ToUInt16( pHd->xa )) + - static_cast(SVBT16ToUInt16( aCallB.dpheadTxbx.xa )) + m_nDrawXOfs2, - static_cast(SVBT16ToUInt16( pHd->ya )) - + static_cast(SVBT16ToUInt16( aCallB.dpheadTxbx.ya )) + m_nDrawYOfs2 ); + Point aP0(SVBT16ToInt16(pHd->xa) + SVBT16ToInt16(aCallB.dpheadTxbx.xa) + m_nDrawXOfs2, + SVBT16ToInt16(pHd->ya) + SVBT16ToInt16(aCallB.dpheadTxbx.ya) + m_nDrawYOfs2); Point aP1( aP0 ); - aP1.AdjustX(static_cast(SVBT16ToUInt16( aCallB.dpheadTxbx.dxa )) ); - aP1.AdjustY(static_cast(SVBT16ToUInt16( aCallB.dpheadTxbx.dya )) ); - Point aP2( static_cast(SVBT16ToUInt16( pHd->xa )) - + static_cast(SVBT16ToUInt16( aCallB.dpheadPolyLine.xa )) - + m_nDrawXOfs2 + static_cast(SVBT16ToUInt16( xP[0] )), - static_cast(SVBT16ToUInt16( pHd->ya )) - + static_cast(SVBT16ToUInt16( aCallB.dpheadPolyLine.ya )) - + m_nDrawYOfs2 + static_cast(SVBT16ToUInt16( xP[1] )) ); + aP1.AdjustX(SVBT16ToInt16(aCallB.dpheadTxbx.dxa)); + aP1.AdjustY(SVBT16ToInt16(aCallB.dpheadTxbx.dya)); + Point aP2( SVBT16ToInt16( pHd->xa ) + + SVBT16ToInt16( aCallB.dpheadPolyLine.xa ) + + m_nDrawXOfs2 + SVBT16ToInt16( xP[0] ), + SVBT16ToInt16( pHd->ya ) + + SVBT16ToInt16( aCallB.dpheadPolyLine.ya ) + + m_nDrawYOfs2 + SVBT16ToInt16( xP[1] ) ); xP.reset(); rtl::Reference pObj = new SdrCaptionObj( @@ -1390,8 +1381,7 @@ rtl::Reference SwWW8ImplReader::ReadCaptionBox(WW8_DPHEAD const * pHd aP2); pObj->NbcSetSnapRect(tools::Rectangle(aP0, aP1)); - Size aSize( static_cast(SVBT16ToUInt16( aCallB.dpheadTxbx.dxa )), - static_cast(SVBT16ToUInt16( aCallB.dpheadTxbx.dya )) ); + Size aSize(SVBT16ToInt16(aCallB.dpheadTxbx.dxa), SVBT16ToInt16(aCallB.dpheadTxbx.dya)); bool bEraseThisObject; InsertTxbxText(pObj.get(), &aSize, 0, 0, 0, nullptr, false, bEraseThisObject ); @@ -1417,12 +1407,12 @@ rtl::Reference SwWW8ImplReader::ReadGroup(WW8_DPHEAD const * pHd, Sfx nGrouped = (sal_Int16)OSL_SWAPWORD( nGrouped ); #endif - m_nDrawXOfs = m_nDrawXOfs + static_cast(SVBT16ToUInt16( pHd->xa )); - m_nDrawYOfs = m_nDrawYOfs + static_cast(SVBT16ToUInt16( pHd->ya )); + m_nDrawXOfs = m_nDrawXOfs + SVBT16ToInt16(pHd->xa); + m_nDrawYOfs = m_nDrawYOfs + SVBT16ToInt16(pHd->ya); rtl::Reference pObj = new SdrObjGroup(*m_pDrawModel); - short nLeft = static_cast(SVBT16ToUInt16( pHd->cb )) - sizeof( WW8_DPHEAD ); + short nLeft = SVBT16ToInt16(pHd->cb) - sizeof(WW8_DPHEAD); for (int i = 0; i < nGrouped && nLeft >= static_cast(sizeof(WW8_DPHEAD)); ++i) { SfxAllItemSet aSet(m_pDrawModel->GetItemPool()); @@ -1437,8 +1427,8 @@ rtl::Reference SwWW8ImplReader::ReadGroup(WW8_DPHEAD const * pHd, Sfx } } - m_nDrawXOfs = m_nDrawXOfs - static_cast(SVBT16ToUInt16( pHd->xa )); - m_nDrawYOfs = m_nDrawYOfs - static_cast(SVBT16ToUInt16( pHd->ya )); + m_nDrawXOfs = m_nDrawXOfs - SVBT16ToInt16(pHd->xa); + m_nDrawYOfs = m_nDrawYOfs - SVBT16ToInt16(pHd->ya); return pObj; } diff --git a/sw/source/filter/ww8/ww8par2.cxx b/sw/source/filter/ww8/ww8par2.cxx index 6765b4487522..bdaedc02dfa1 100644 --- a/sw/source/filter/ww8/ww8par2.cxx +++ b/sw/source/filter/ww8/ww8par2.cxx @@ -568,7 +568,7 @@ static void SetBaseAnlv(SwNumFormat &rNum, WW8_ANLV const &rAV, sal_uInt8 nSwLev rNum.SetNumAdjust( eAdjA[ rAV.aBits1 & 0x3] ); rNum.SetCharTextDistance( SVBT16ToUInt16( rAV.dxaSpace ) ); - sal_Int16 nIndent = std::abs(static_cast(SVBT16ToUInt16( rAV.dxaIndent ))); + sal_Int16 nIndent = std::abs(SVBT16ToInt16(rAV.dxaIndent)); if( rAV.aBits1 & 0x08 ) //fHang { rNum.SetFirstLineOffset( -nIndent ); @@ -1122,7 +1122,7 @@ void WW8TabBandDesc::ReadDef(bool bVer67, const sal_uInt8* pS, short nLen) const sal_uInt8* pT = &pS[1]; for (int i = 0; i <= nCols; i++, pT+=2) - nCenter[i] = static_cast(SVBT16ToUInt16( pT )); // X-borders + nCenter[i] = SVBT16ToInt16(pT); // X-borders if( nCols != nOldCols ) // different column count { @@ -1346,7 +1346,7 @@ void WW8TabBandDesc::ProcessSprmTDxaCol(const sal_uInt8* pParamsTDxaCol) sal_uInt8 nitcFirst= pParamsTDxaCol[0]; // first col to be changed sal_uInt8 nitcLim = pParamsTDxaCol[1]; // (last col to be changed)+1 - short nDxaCol = static_cast(SVBT16ToUInt16( pParamsTDxaCol + 2 )); + short nDxaCol = SVBT16ToInt16(pParamsTDxaCol + 2); for( int i = nitcFirst; (i < nitcLim) && (i < nWwCols); i++ ) { @@ -1897,10 +1897,10 @@ WW8TabDesc::WW8TabDesc(SwWW8ImplReader* pIoClass, WW8_CP nStartCp) : m_bIsBiDi = SVBT16ToUInt16(pParams) != 0; break; case sprmTDxaGapHalf: - pNewBand->nGapHalf = static_cast(SVBT16ToUInt16( pParams )); + pNewBand->nGapHalf = SVBT16ToInt16(pParams); break; case sprmTDyaRowHeight: - pNewBand->nLineHeight = static_cast(SVBT16ToUInt16( pParams )); + pNewBand->nLineHeight = SVBT16ToInt16(pParams); m_bClaimLineFormat = true; break; case sprmTDefTable: @@ -1925,7 +1925,7 @@ WW8TabDesc::WW8TabDesc(SwWW8ImplReader* pIoClass, WW8_CP nStartCp) : // parameter (meaning the left-most position) and then // shift the whole table to that margin (see below) { - short nDxaNew = static_cast(SVBT16ToUInt16( pParams )); + short nDxaNew = SVBT16ToInt16(pParams); if( nDxaNew < nTabeDxaNew ) nTabeDxaNew = nDxaNew; } diff --git a/sw/source/filter/ww8/ww8par6.cxx b/sw/source/filter/ww8/ww8par6.cxx index 021445724647..e772ed9017d1 100644 --- a/sw/source/filter/ww8/ww8par6.cxx +++ b/sw/source/filter/ww8/ww8par6.cxx @@ -1620,7 +1620,7 @@ static bool SetValSprm( sal_Int16* pVar, WW8PLCFx_Cp_FKP* pPap, sal_uInt16 nId ) { SprmResult aS = pPap->HasSprm(nId); if (aS.pSprm && aS.nRemainingData >= 2) - *pVar = static_cast(SVBT16ToUInt16(aS.pSprm)); + *pVar = SVBT16ToInt16(aS.pSprm); return aS.pSprm != nullptr; } @@ -1628,7 +1628,7 @@ static bool SetValSprm( sal_Int16* pVar, const WW8RStyle* pStyle, sal_uInt16 nId { SprmResult aS = pStyle->HasParaSprm(nId); if (aS.pSprm && aS.nRemainingData >= 2) - *pVar = static_cast(SVBT16ToUInt16(aS.pSprm)); + *pVar = SVBT16ToInt16(aS.pSprm); return aS.pSprm != nullptr; } @@ -3568,7 +3568,7 @@ void SwWW8ImplReader::Read_SubSuperProp( sal_uInt16, const sal_uInt8* pData, sho } // font position in HalfPoints - short nPos = eVersion <= ww::eWW2 ? static_cast< sal_Int8 >( *pData ) : SVBT16ToInt16( pData ); + short nPos = eVersion <= ww::eWW2 ? static_cast(*pData) : SVBT16ToInt16(pData); sal_Int32 nPos2 = nPos * ( 10 * 100 ); // HalfPoints in 100 * tw const SvxFontHeightItem* pF = GetFormatAttr(RES_CHRATR_FONTSIZE); OSL_ENSURE(pF, "Expected to have the fontheight available here"); diff --git a/vcl/source/gdi/jobset.cxx b/vcl/source/gdi/jobset.cxx index 19fa712ea658..4ac341f47e59 100644 --- a/vcl/source/gdi/jobset.cxx +++ b/vcl/source/gdi/jobset.cxx @@ -363,8 +363,8 @@ SvStream& WriteJobSetup( SvStream& rOStream, const JobSetup& rJobSetup ) ShortToSVBT16( static_cast(rJobData.GetOrientation()), aOldJobData.nOrientation ); ShortToSVBT16( rJobData.GetPaperBin(), aOldJobData.nPaperBin ); ShortToSVBT16( static_cast(rJobData.GetPaperFormat()), aOldJobData.nPaperFormat ); - UInt32ToSVBT32( static_cast(rJobData.GetPaperWidth()), aOldJobData.nPaperWidth ); - UInt32ToSVBT32( static_cast(rJobData.GetPaperHeight()), aOldJobData.nPaperHeight ); + UInt32ToSVBT32( static_cast(rJobData.GetPaperWidth()), aOldJobData.nPaperWidth ); + UInt32ToSVBT32( static_cast(rJobData.GetPaperHeight()), aOldJobData.nPaperHeight ); ImplOldJobSetupData aOldData = {}; OString aPrnByteName(OUStringToOString(rJobData.GetPrinterName(), RTL_TEXTENCODING_UTF8)); From 3621ddfb9a490c58cfa70679d9bd89099a91e663 Mon Sep 17 00:00:00 2001 From: Jim Raykowski Date: Wed, 26 Jun 2024 19:32:17 -0800 Subject: [PATCH 137/194] Resolves tdf#115665 Format in the CTRL+H search affects the CTRL+F search Change-Id: I51ccd2186c47a91958c262efac9a1514b9c3b138 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169606 Reviewed-by: Jim Raykowski Tested-by: Jenkins --- include/sfx2/sfxsids.hrc | 1 + sfx2/sdi/sfx.sdi | 2 +- .../tbxctrls/tbunosearchcontrollers.cxx | 3 +- sw/qa/uitest/findBar/tdf115665.py | 55 +++++++++++++++++++ sw/source/uibase/uiview/viewsrch.cxx | 9 +++ 5 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 sw/qa/uitest/findBar/tdf115665.py diff --git a/include/sfx2/sfxsids.hrc b/include/sfx2/sfxsids.hrc index 617d4b2363a6..2c20b3d8b81a 100644 --- a/include/sfx2/sfxsids.hrc +++ b/include/sfx2/sfxsids.hrc @@ -587,6 +587,7 @@ class SvxZoomItem; #define SID_GALLERY_BG_BRUSH (SID_SVX_START + 279) #define SID_SEARCH_OPTIONS TypedWhichId(SID_SVX_START + 281) #define SID_SEARCH_ITEM TypedWhichId(SID_SVX_START + 291) +#define SID_SEARCH_USE_ATTR_ITEM_LIST TypedWhichId(SID_SFX_START + 292) #define SID_SIDEBAR TypedWhichId(SID_SVX_START + 336) #define SID_NOTEBOOKBAR TypedWhichId(SID_SVX_START + 338) #define SID_MENUBAR TypedWhichId(SID_SVX_START + 339) diff --git a/sfx2/sdi/sfx.sdi b/sfx2/sdi/sfx.sdi index 9993519b3ebe..9a341064c970 100644 --- a/sfx2/sdi/sfx.sdi +++ b/sfx2/sdi/sfx.sdi @@ -1158,7 +1158,7 @@ SfxVoidItem ShowStyle SID_STYLE_SHOW SfxVoidItem ExecuteSearch FID_SEARCH_NOW -(SvxSearchItem SearchItem SID_SEARCH_ITEM, SfxBoolItem Quiet SID_SEARCH_QUIET ) +(SvxSearchItem SearchItem SID_SEARCH_ITEM, SfxBoolItem Quiet SID_SEARCH_QUIET, SfxBoolItem UseAttrItemList SID_SEARCH_USE_ATTR_ITEM_LIST) [ AutoUpdate = FALSE, FastCall = FALSE, diff --git a/svx/source/tbxctrls/tbunosearchcontrollers.cxx b/svx/source/tbxctrls/tbunosearchcontrollers.cxx index c2070618d69e..94ac6c8fde8c 100644 --- a/svx/source/tbxctrls/tbunosearchcontrollers.cxx +++ b/svx/source/tbxctrls/tbunosearchcontrollers.cxx @@ -178,7 +178,8 @@ void impl_executeSearch( const css::uno::Reference< css::uno::XComponentContext { "SearchItem.Command", css::uno::Any( static_cast(aFindAll ?SvxSearchCmd::FIND_ALL : SvxSearchCmd::FIND ) ) }, { "SearchItem.AlgorithmType", css::uno::Any( sal_Int16(css::util::SearchAlgorithms_ABSOLUTE) ) }, { "SearchItem.AlgorithmType2", css::uno::Any( sal_Int16(css::util::SearchAlgorithms2::ABSOLUTE) ) }, - { "SearchItem.SearchFormatted", css::uno::Any( bSearchFormatted ) } + { "SearchItem.SearchFormatted", css::uno::Any( bSearchFormatted ) }, + { "UseAttrItemList", css::uno::Any(false) } } ) ); css::uno::Reference< css::frame::XDispatchProvider > xDispatchProvider(xFrame, css::uno::UNO_QUERY); diff --git a/sw/qa/uitest/findBar/tdf115665.py b/sw/qa/uitest/findBar/tdf115665.py new file mode 100644 index 000000000000..94409589e427 --- /dev/null +++ b/sw/qa/uitest/findBar/tdf115665.py @@ -0,0 +1,55 @@ +# -*- tab-width: 4; indent-tabs-mode: nil; py-indent-offset: 4 -*- +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +from uitest.framework import UITestCase +from libreoffice.uno.propertyvalue import mkPropertyValues +from uitest.uihelper.common import select_pos +from uitest.uihelper.common import select_by_text +from uitest.uihelper.common import get_state_as_dict + +class tdf115665(UITestCase): + + def test_tdf115665(self): + + with self.ui_test.create_doc_in_start_center("writer"): + xWriterDoc = self.xUITest.getTopFocusWindow() + xWriterEdit = xWriterDoc.getChild("writer_edit") + + # Type a line to use for search + xWriterEdit.executeAction("TYPE", mkPropertyValues({"TEXT": "This is happiness."})) + + # Open the F&R dialog and set to find search term with attribute format UPPERCASE + with self.ui_test.execute_modeless_dialog_through_command(".uno:SearchDialog", close_button="close") as xDialog: + format = xDialog.getChild("format") + with self.ui_test.execute_blocking_action(format.executeAction, args=('CLICK', ())) as dialog: + xTabs = dialog.getChild("tabcontrol") + select_pos(xTabs, "1") + xEffectsLb = dialog.getChild("effectslb") + select_by_text(xEffectsLb, "UPPERCASE") + + # Open the find bar + xWriterEdit.executeAction("TYPE", mkPropertyValues({"KEYCODE": "CTRL+f"})) + + # Type "happiness" in the find bar search edit box + xfind = xWriterDoc.getChild("find") + xfind.executeAction("TYPE", mkPropertyValues({"TEXT": "happiness"})) + + xfind_bar = xWriterDoc.getChild("FindBar") + + # Press on Find All in the find bar + xfind_bar.executeAction("CLICK", mkPropertyValues({"POS": "4"})) # 4 is Find All + + # Without the fix in place the test would fail with + # AssertionError: '' != 'happiness' + self.assertEqual(get_state_as_dict(xWriterEdit)["SelectedText"], "happiness") + + # Close the find bar + xfind_bar.executeAction("CLICK", mkPropertyValues({"POS": "0"})) # 0 is pos for close + +# vim: set shiftwidth=4 softtabstop=4 expandtab: diff --git a/sw/source/uibase/uiview/viewsrch.cxx b/sw/source/uibase/uiview/viewsrch.cxx index 9f7c9cabe130..849122fe0e94 100644 --- a/sw/source/uibase/uiview/viewsrch.cxx +++ b/sw/source/uibase/uiview/viewsrch.cxx @@ -232,6 +232,15 @@ void SwView::ExecSearch(SfxRequest& rReq) s_pSrchItem = pArgs->Get(SID_SEARCH_ITEM).Clone(); } } + + // tdf#115665 Format in the CTRL+H search affects the CTRL+F search + if (const SfxBoolItem* pUseAttrItemListItem + = pArgs->GetItemIfSet(SID_SEARCH_USE_ATTR_ITEM_LIST, false)) + { + if (!pUseAttrItemListItem->GetValue()) + s_xSearchList.reset(); + } + SvxSearchCmd eCommand = s_pSrchItem->GetCommand(); switch (eCommand) { From 50be3fa1f0f3b8870af5bda88b65f835ef37d77e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1szl=C3=B3=20N=C3=A9meth?= Date: Fri, 28 Jun 2024 00:27:57 +0200 Subject: [PATCH 138/194] tdf#141773 AutoCorrect: fix broken [All] dictionaries MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit ae56dc05b27f05ffcee99845d661a237e70a7a51 "tdf#96787: AutoCorrect: after deleting a replacement entry, it's still used". Change-Id: Ifb4cf1b359b852c7610337d4bd389a8ca5dce610 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169713 Tested-by: Jenkins Reviewed-by: László Németh --- editeng/source/misc/svxacorr.cxx | 1 - 1 file changed, 1 deletion(-) diff --git a/editeng/source/misc/svxacorr.cxx b/editeng/source/misc/svxacorr.cxx index 6730a2c82d16..677919211c88 100644 --- a/editeng/source/misc/svxacorr.cxx +++ b/editeng/source/misc/svxacorr.cxx @@ -2060,7 +2060,6 @@ SvxAutoCorrect::SearchWordsInList( rLang = aLanguageTag; return pRet; } - return std::nullopt; } // If it still could not be found here, then keep on searching From 39dfb6393ac95787e4259b9509a12b686a9a0dae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1szl=C3=B3=20N=C3=A9meth?= Date: Fri, 28 Jun 2024 15:49:22 +0200 Subject: [PATCH 139/194] tdf#96787 AutoCorrect: find item with ".*" and between :colons: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It was very hard to disable autocorrection of (c)->© and other AutoCorrect items, because the searched Replace string "(c)" etc. didn't jump the list cursor to the corresponding ".*(c)" item. Now skip ".*" pattern matching marks, also colon (emoji replacement) characters, so the list cursor jumps to the line ".*(c)"->© typing only "(c" etc., allowing users to press Delete to disable its autocorrection without knowing about the special AutoCorrect patterns. Follow-up to commit 50be3fa1f0f3b8870af5bda88b65f835ef37d77e "tdf#141773 AutoCorrect: fix broken [All] dictionaries". Change-Id: I72be1ecb2fdc5ae67c72727ce7fbd70b28a4125b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169714 Tested-by: Jenkins Reviewed-by: László Németh --- cui/source/tabpages/autocdlg.cxx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cui/source/tabpages/autocdlg.cxx b/cui/source/tabpages/autocdlg.cxx index 87e803f677b4..393f9f79d872 100644 --- a/cui/source/tabpages/autocdlg.cxx +++ b/cui/source/tabpages/autocdlg.cxx @@ -1145,7 +1145,9 @@ IMPL_LINK(OfaAutocorrReplacePage, ModifyHdl, weld::Entry&, rEdt, void) else { aTestStr = pCharClass->lowercase( aTestStr ); - if( aTestStr.startsWith(aWordStr) && !bTmpSelEntry ) + if( !bTmpSelEntry && ( aTestStr.startsWith(aWordStr) + // find also with ".*" and between :colons: + || aTestStr.replaceAll(".*","").replaceAll(":", "").startsWith(aWordStr) ) ) { m_xReplaceTLB->scroll_to_row(rIter); bTmpSelEntry = true; From 4982e260bb75665287b071cefb349550c200914e Mon Sep 17 00:00:00 2001 From: Mike Kaganski Date: Sat, 29 Jun 2024 03:34:10 +0500 Subject: [PATCH 140/194] Simplify WrapPolygon Use doubles instead of fractions. Simplify correctWordWrapPolygon, which used redundant arithmetics (it scaled by a fraction with nWrap100Percent in multiplier, then by another fraction with nWrap100Percent in divisor). Change-Id: I69a38ac7e3afda33a1e7725cab711d50dc80eed7 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169746 Reviewed-by: Mike Kaganski Tested-by: Jenkins --- sw/qa/extras/ooxmlexport/ooxmlexport8.cxx | 12 +++--- sw/qa/writerfilter/dmapper/GraphicImport.cxx | 4 +- .../dmapper/WrapPolygonHandler.cxx | 39 +++++++++---------- .../dmapper/WrapPolygonHandler.hxx | 3 +- 4 files changed, 28 insertions(+), 30 deletions(-) diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport8.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport8.cxx index 61a11908563f..8e25f62f46ea 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport8.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport8.cxx @@ -451,20 +451,20 @@ CPPUNIT_TEST_FIXTURE(Test, testFdo76803) CPPUNIT_ASSERT_EQUAL(sal_uInt32(4), aPolygon.count()); - CPPUNIT_ASSERT_EQUAL(double(-149), aPolygon.getB2DPoint(0).getX()); + CPPUNIT_ASSERT_EQUAL(double(-150), aPolygon.getB2DPoint(0).getX()); // Without the accompanying fix in place, this test would have failed with: // - Expected: -35 // - Actual : -67 // i.e. the cropping did not influence the wrap polygon during export. CPPUNIT_ASSERT_EQUAL(double(-35), aPolygon.getB2DPoint(0).getY()); - CPPUNIT_ASSERT_EQUAL(double(-149), aPolygon.getB2DPoint(1).getX()); - CPPUNIT_ASSERT_EQUAL(double(3511), aPolygon.getB2DPoint(1).getY()); + CPPUNIT_ASSERT_EQUAL(double(-150), aPolygon.getB2DPoint(1).getX()); + CPPUNIT_ASSERT_EQUAL(double(3514), aPolygon.getB2DPoint(1).getY()); - CPPUNIT_ASSERT_EQUAL(double(16889), aPolygon.getB2DPoint(2).getX()); - CPPUNIT_ASSERT_EQUAL(double(3511), aPolygon.getB2DPoint(2).getY()); + CPPUNIT_ASSERT_EQUAL(double(16891), aPolygon.getB2DPoint(2).getX()); + CPPUNIT_ASSERT_EQUAL(double(3514), aPolygon.getB2DPoint(2).getY()); - CPPUNIT_ASSERT_EQUAL(double(16889), aPolygon.getB2DPoint(3).getX()); + CPPUNIT_ASSERT_EQUAL(double(16891), aPolygon.getB2DPoint(3).getX()); CPPUNIT_ASSERT_EQUAL(double(-35), aPolygon.getB2DPoint(3).getY()); } diff --git a/sw/qa/writerfilter/dmapper/GraphicImport.cxx b/sw/qa/writerfilter/dmapper/GraphicImport.cxx index 20048d15b804..548f09b92da5 100644 --- a/sw/qa/writerfilter/dmapper/GraphicImport.cxx +++ b/sw/qa/writerfilter/dmapper/GraphicImport.cxx @@ -283,11 +283,11 @@ CPPUNIT_TEST_FIXTURE(Test, testWrapPolyCrop) // Then there is a 15 twips shift from the origo, so it's 2351.55 + 26.46 = 2378.01 in mm100. // // Without the accompanying fix in place, this test would have failed with: - // - Expected: 2368 + // - Expected: 2369 // - Actual : 3542 // i.e. the wrap polygon covered a larger-than-correct area, which end the end means 3 lines // were wrapping around the image, not only 2 as Word does it. - CPPUNIT_ASSERT_EQUAL(2368., aPolygon.getB2DPoint(0).getY()); + CPPUNIT_ASSERT_EQUAL(2369., aPolygon.getB2DPoint(0).getY()); } CPPUNIT_TEST_FIXTURE(Test, testTextboxTextline) diff --git a/sw/source/writerfilter/dmapper/WrapPolygonHandler.cxx b/sw/source/writerfilter/dmapper/WrapPolygonHandler.cxx index 319fae5c4cb0..96d39fb4892f 100644 --- a/sw/source/writerfilter/dmapper/WrapPolygonHandler.cxx +++ b/sw/source/writerfilter/dmapper/WrapPolygonHandler.cxx @@ -17,6 +17,10 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ +#include + +#include + #include #include #include @@ -75,7 +79,7 @@ WrapPolygon::Pointer_t WrapPolygon::move(const awt::Point & rPoint) const return pResult; } -WrapPolygon::Pointer_t WrapPolygon::scale(const Fraction & rFractionX, const Fraction & rFractionY) const +WrapPolygon::Pointer_t WrapPolygon::scale(double scaleX, double scaleY) const { WrapPolygon::Pointer_t pResult(new WrapPolygon); @@ -84,7 +88,7 @@ WrapPolygon::Pointer_t WrapPolygon::scale(const Fraction & rFractionX, const Fra while (aIt != aItEnd) { - awt::Point aPoint((Fraction(tools::Long(aIt->X)) * rFractionX).operator long(), (Fraction(tools::Long(aIt->Y)) * rFractionY).operator long()); + awt::Point aPoint(std::round(aIt->X * scaleX), std::round(aIt->Y * scaleY)); pResult->addPoint(aPoint); ++aIt; } @@ -96,20 +100,15 @@ WrapPolygon::Pointer_t WrapPolygon::correctWordWrapPolygon(const awt::Size & rSr { WrapPolygon::Pointer_t pResult; - const tools::Long nWrap100Percent = 21600; + const double nWrap100Percent = 21600; - Fraction aMove(nWrap100Percent, rSrcSize.Width); - aMove = aMove * Fraction(convertTwipToMm100(15), 1); - awt::Point aMovePoint(aMove.operator long(), 0); + double nMove(convertTwipToMm100(nWrap100Percent * 15) / rSrcSize.Width); + awt::Point aMovePoint(std::round(nMove), 0); pResult = move(aMovePoint); - Fraction aScaleX = nWrap100Percent / (nWrap100Percent + aMove); - Fraction aScaleY = nWrap100Percent / (nWrap100Percent - aMove); - pResult = pResult->scale(aScaleX, aScaleY); - - Fraction aScaleSrcX(rSrcSize.Width, nWrap100Percent); - Fraction aScaleSrcY(rSrcSize.Height, nWrap100Percent); - pResult = pResult->scale(aScaleSrcX, aScaleSrcY); + double nScaleX = rSrcSize.Width / (nWrap100Percent + nMove); + double nScaleY = rSrcSize.Height / (nWrap100Percent - nMove); + pResult = pResult->scale(nScaleX, nScaleY); return pResult; } @@ -128,10 +127,10 @@ WrapPolygon::Pointer_t WrapPolygon::correctWordWrapPolygonPixel(const awt::Size * polygon units to fit the size of the image. The 21600 value is a legacy * artifact from the drawing layer of early versions of Microsoft Office. */ - const tools::Long nWrap100Percent = 21600; + const double nWrap100Percent = 21600; - Fraction aScaleX(rSrcSize.Width, nWrap100Percent); - Fraction aScaleY(rSrcSize.Height, nWrap100Percent); + double aScaleX(rSrcSize.Width / nWrap100Percent); + double aScaleY(rSrcSize.Height / nWrap100Percent); pResult = scale(aScaleX, aScaleY); return pResult; @@ -142,10 +141,10 @@ WrapPolygon::Pointer_t WrapPolygon::correctCrop(const awt::Size& rGraphicSize, { WrapPolygon::Pointer_t pResult; - Fraction aScaleX(rGraphicSize.Width - rGraphicCrop.Left - rGraphicCrop.Right, - rGraphicSize.Width); - Fraction aScaleY(rGraphicSize.Height - rGraphicCrop.Top - rGraphicCrop.Bottom, - rGraphicSize.Height); + double aScaleX(double(rGraphicSize.Width - rGraphicCrop.Left - rGraphicCrop.Right) + / rGraphicSize.Width); + double aScaleY(double(rGraphicSize.Height - rGraphicCrop.Top - rGraphicCrop.Bottom) + / rGraphicSize.Height); pResult = scale(aScaleX, aScaleY); awt::Point aMove(rGraphicCrop.Left, rGraphicCrop.Top); diff --git a/sw/source/writerfilter/dmapper/WrapPolygonHandler.hxx b/sw/source/writerfilter/dmapper/WrapPolygonHandler.hxx index 8d3e1a3d8493..5af555682fdf 100644 --- a/sw/source/writerfilter/dmapper/WrapPolygonHandler.hxx +++ b/sw/source/writerfilter/dmapper/WrapPolygonHandler.hxx @@ -21,7 +21,6 @@ #include #include "LoggedResources.hxx" -#include #include namespace com::sun::star::text @@ -51,7 +50,7 @@ public: Points_t::const_iterator end() const; WrapPolygon::Pointer_t move(const css::awt::Point& rMove) const; - WrapPolygon::Pointer_t scale(const Fraction& rFractionX, const Fraction& rFractionY) const; + WrapPolygon::Pointer_t scale(double scaleX, double scaleY) const; WrapPolygon::Pointer_t correctWordWrapPolygon(const css::awt::Size& rSrcSize) const; WrapPolygon::Pointer_t correctWordWrapPolygonPixel(const css::awt::Size& rSrcSize) const; WrapPolygon::Pointer_t correctCrop(const css::awt::Size& rGraphicSize, From 291c380fcf220880cd59d30bbdabc34bb871f228 Mon Sep 17 00:00:00 2001 From: Mike Kaganski Date: Sat, 29 Jun 2024 13:42:37 +0500 Subject: [PATCH 141/194] warning C6011: Dereferencing NULL pointer 'pArgs' C:\lo\core\sw\source\uibase\uiview\viewsrch.cxx(237) : warning C6011: Dereferencing NULL pointer 'pArgs'. : Lines: 132, 134, 135, 136, 137, 140, 141, 149, 151, 196, 198, 200, 204, 205, 219, 228, 229, 237 Change-Id: Id06d08b310dffa15823b1d40996467888ff4ea7f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169750 Reviewed-by: Mike Kaganski Tested-by: Jenkins --- sw/source/uibase/uiview/viewsrch.cxx | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/sw/source/uibase/uiview/viewsrch.cxx b/sw/source/uibase/uiview/viewsrch.cxx index 849122fe0e94..c03492adfc30 100644 --- a/sw/source/uibase/uiview/viewsrch.cxx +++ b/sw/source/uibase/uiview/viewsrch.cxx @@ -234,11 +234,14 @@ void SwView::ExecSearch(SfxRequest& rReq) } // tdf#115665 Format in the CTRL+H search affects the CTRL+F search - if (const SfxBoolItem* pUseAttrItemListItem - = pArgs->GetItemIfSet(SID_SEARCH_USE_ATTR_ITEM_LIST, false)) + if (pArgs) { - if (!pUseAttrItemListItem->GetValue()) - s_xSearchList.reset(); + if (const SfxBoolItem* pUseAttrItemListItem + = pArgs->GetItemIfSet(SID_SEARCH_USE_ATTR_ITEM_LIST, false)) + { + if (!pUseAttrItemListItem->GetValue()) + s_xSearchList.reset(); + } } SvxSearchCmd eCommand = s_pSrchItem->GetCommand(); From 11ad465075d7f99627997dcc2b6c50117a549562 Mon Sep 17 00:00:00 2001 From: Mike Kaganski Date: Sat, 29 Jun 2024 13:46:14 +0500 Subject: [PATCH 142/194] Simplify a use of convertTwipToMm100 a bit For some reason, MSVC fails to find the o3tl::convert overload for Size defined in , unless the call to convert is unqualified, accompanied by a 'using namespace o3tl' in convertTwipToMm100. Change-Id: I7100ef55156b6944b5adc5aefa52eee38b3fe69e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169751 Reviewed-by: Mike Kaganski Tested-by: Jenkins --- include/tools/UnitConversion.hxx | 3 ++- sw/source/uibase/shells/grfsh.cxx | 3 +-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/include/tools/UnitConversion.hxx b/include/tools/UnitConversion.hxx index 43237e0514c5..29ebf5dd873c 100644 --- a/include/tools/UnitConversion.hxx +++ b/include/tools/UnitConversion.hxx @@ -92,7 +92,8 @@ inline Fraction conversionFract(o3tl::Length from, o3tl::Length to) template constexpr auto convertTwipToMm100(N n) { - return o3tl::convert(n, o3tl::Length::twip, o3tl::Length::mm100); + using namespace o3tl; // Allow ADL find overloads e.g. in + return convert(n, o3tl::Length::twip, o3tl::Length::mm100); } constexpr sal_Int64 sanitiseMm100ToTwip(sal_Int64 n) diff --git a/sw/source/uibase/shells/grfsh.cxx b/sw/source/uibase/shells/grfsh.cxx index ca4e48b179d1..d7d53292a80a 100644 --- a/sw/source/uibase/shells/grfsh.cxx +++ b/sw/source/uibase/shells/grfsh.cxx @@ -189,8 +189,7 @@ void SwGrfShell::Execute(SfxRequest &rReq) if( pGraphic ) { Size aSize ( - convertTwipToMm100(rSh.GetAnyCurRect(CurRectType::FlyEmbedded).Width()), - convertTwipToMm100(rSh.GetAnyCurRect(CurRectType::FlyEmbedded).Height())); + convertTwipToMm100(rSh.GetAnyCurRect(CurRectType::FlyEmbedded).SSize())); SfxItemSetFixed aSet( rSh.GetAttrPool() ); rSh.GetCurAttr( aSet ); From 0748844975b1b241b9e80e82605177f7d31a724f Mon Sep 17 00:00:00 2001 From: Mike Kaganski Date: Sat, 29 Jun 2024 16:22:24 +0500 Subject: [PATCH 143/194] Simplify some uses of convertTwipToMm100 Change-Id: I073ac7358c1bcb82992ec7746f4b3986d6d35633 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169755 Tested-by: Jenkins Reviewed-by: Mike Kaganski --- editeng/source/items/textitem.cxx | 2 +- sc/source/ui/unoobj/cellsuno.cxx | 6 ++---- sc/source/ui/view/drawview.cxx | 9 +++------ svx/source/tbxctrls/fontworkgallery.cxx | 5 +---- 4 files changed, 7 insertions(+), 15 deletions(-) diff --git a/editeng/source/items/textitem.cxx b/editeng/source/items/textitem.cxx index dcce4924092a..638948e747de 100644 --- a/editeng/source/items/textitem.cxx +++ b/editeng/source/items/textitem.cxx @@ -839,7 +839,7 @@ static sal_uInt32 lcl_GetRealHeight_Impl(sal_uInt32 nHeight, sal_uInt16 nProp, M short nTemp = static_cast(nProp); nDiff = nTemp * 20; if(!bCoreInTwip) - nDiff = static_cast(convertTwipToMm100(static_cast(nDiff))); + nDiff = static_cast(convertTwipToMm100(nDiff)); break; } case MapUnit::Map100thMM: diff --git a/sc/source/ui/unoobj/cellsuno.cxx b/sc/source/ui/unoobj/cellsuno.cxx index 9e1b77732c41..a3338bba3496 100644 --- a/sc/source/ui/unoobj/cellsuno.cxx +++ b/sc/source/ui/unoobj/cellsuno.cxx @@ -8386,8 +8386,7 @@ void ScTableColumnObj::GetOnePropertyValue( const SfxItemPropertyMapEntry* pEntr // for hidden column, return original height sal_uInt16 nWidth = rDoc.GetOriginalWidth( nCol, nTab ); // property is 1/100mm, column width is twips - nWidth = static_cast(convertTwipToMm100(nWidth)); - rAny <<= static_cast(nWidth); + rAny <<= static_cast(convertTwipToMm100(nWidth)); } else if ( pEntry->nWID == SC_WID_UNO_CELLVIS ) { @@ -8532,8 +8531,7 @@ void ScTableRowObj::GetOnePropertyValue( const SfxItemPropertyMapEntry* pEntry, // for hidden row, return original height sal_uInt16 nHeight = rDoc.GetOriginalHeight( nRow, nTab ); // property is 1/100mm, row height is twips - nHeight = static_cast(convertTwipToMm100(nHeight)); - rAny <<= static_cast(nHeight); + rAny <<= static_cast(convertTwipToMm100(nHeight)); } else if ( pEntry->nWID == SC_WID_UNO_CELLVIS ) { diff --git a/sc/source/ui/view/drawview.cxx b/sc/source/ui/view/drawview.cxx index 1c96d86facf0..8a6670d4f419 100644 --- a/sc/source/ui/view/drawview.cxx +++ b/sc/source/ui/view/drawview.cxx @@ -952,8 +952,7 @@ void ScDrawView::SyncForGrid( SdrObject* pObj ) MapMode aDrawMode = pGridWin->GetDrawMapMode(); // find pos anchor position Point aOldPos( rDoc.GetColOffset( aOldStt.Col(), aOldStt.Tab() ), rDoc.GetRowOffset( aOldStt.Row(), aOldStt.Tab() ) ); - aOldPos.setX(convertTwipToMm100(aOldPos.X())); - aOldPos.setY(convertTwipToMm100(aOldPos.Y())); + aOldPos = convertTwipToMm100(aOldPos); // find position of same point on the screen ( e.g. grid ) Point aCurPos = pViewData->GetScrPos( aOldStt.Col(), aOldStt.Row(), eWhich, true ); Point aCurPosHmm = pGridWin->PixelToLogic(aCurPos, aDrawMode ); @@ -1029,8 +1028,7 @@ bool ScDrawView::calculateGridOffsetForSdrObject( // find pos anchor position Point aOldPos(rDoc.GetColOffset(aOldStt.Col(), aOldStt.Tab()), rDoc.GetRowOffset(aOldStt.Row(), aOldStt.Tab())); - aOldPos.setX(convertTwipToMm100(aOldPos.X())); - aOldPos.setY(convertTwipToMm100(aOldPos.Y())); + aOldPos = convertTwipToMm100(aOldPos); // find position of same point on the screen ( e.g. grid ) ScSplitPos eWhich(pViewData->GetActivePart()); @@ -1080,8 +1078,7 @@ bool ScDrawView::calculateGridOffsetForB2DRange( // find pos anchor position Point aOldPos(rDoc.GetColOffset(aOldStt.Col(), aOldStt.Tab()), rDoc.GetRowOffset(aOldStt.Row(), aOldStt.Tab())); - aOldPos.setX(convertTwipToMm100(aOldPos.X())); - aOldPos.setY(convertTwipToMm100(aOldPos.Y())); + aOldPos = convertTwipToMm100(aOldPos); // find position of same point on the screen ( e.g. grid ) ScSplitPos eWhich(pViewData->GetActivePart()); diff --git a/svx/source/tbxctrls/fontworkgallery.cxx b/svx/source/tbxctrls/fontworkgallery.cxx index 7e54f1a3f932..c7cbec22e647 100644 --- a/svx/source/tbxctrls/fontworkgallery.cxx +++ b/svx/source/tbxctrls/fontworkgallery.cxx @@ -229,10 +229,7 @@ void FontWorkGalleryDialog::insertSelectedFontwork() SfxViewShell::Current() : nullptr; if (pKitViewShell) { - aPagePos = pKitViewShell->getLOKVisibleArea().Center(); - - aPagePos.setX(convertTwipToMm100(aPagePos.X())); - aPagePos.setY(convertTwipToMm100(aPagePos.Y())); + aPagePos = convertTwipToMm100(pKitViewShell->getLOKVisibleArea().Center()); sal_Int32 nLOKViewWidth = 0.8 * convertTwipToMm100(pKitViewShell->getLOKVisibleArea().getOpenWidth()); if (aFontworkSize.getWidth() > nLOKViewWidth) From ccff60b4ae951f28be8bc10f9621ed75b3097d7b Mon Sep 17 00:00:00 2001 From: Mike Kaganski Date: Sat, 29 Jun 2024 16:35:45 +0500 Subject: [PATCH 144/194] Decrease rounding errors a bit Change-Id: If9f078c96d03046aba4db19125a17fcf7fd68a81 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169756 Tested-by: Jenkins Reviewed-by: Mike Kaganski --- sd/source/ui/annotations/annotationmanager.cxx | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/sd/source/ui/annotations/annotationmanager.cxx b/sd/source/ui/annotations/annotationmanager.cxx index 64262a233471..b07a79932b5d 100644 --- a/sd/source/ui/annotations/annotationmanager.cxx +++ b/sd/source/ui/annotations/annotationmanager.cxx @@ -94,6 +94,7 @@ #include #include +#include #include using namespace css; @@ -428,13 +429,13 @@ void AnnotationManagerImpl::ExecuteEditAnnotation(SfxRequest const & rReq) SdrObject* pObject = xAnnotation->findAnnotationObject(); if (pObject && nPositionX >= 0 && nPositionY >= 0) { - double fX = convertTwipToMm100(nPositionX); - double fY = convertTwipToMm100(nPositionY); + double fX = convertTwipToMm100(nPositionX); + double fY = convertTwipToMm100(nPositionY); - double deltaX = fX - (pSdAnnotation->getPosition().X * 100.0); - double deltaY = fY - (pSdAnnotation->getPosition().Y * 100.0); + ::tools::Long deltaX = std::round(fX - (pSdAnnotation->getPosition().X * 100.0)); + ::tools::Long deltaY = std::round(fY - (pSdAnnotation->getPosition().Y * 100.0)); - pObject->Move({::tools::Long(deltaX), ::tools::Long(deltaY)}); + pObject->Move({ deltaX, deltaY }); } if (!sText.isEmpty()) From 6756a753e933135c6ed033137153f4c1c9255655 Mon Sep 17 00:00:00 2001 From: Mike Kaganski Date: Sat, 29 Jun 2024 16:40:52 +0500 Subject: [PATCH 145/194] Use a matching type here Change-Id: I23dbadd27838a3cacad51a6b67aef10faed71640 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169757 Reviewed-by: Mike Kaganski Tested-by: Jenkins --- sw/source/core/unocore/unosett.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sw/source/core/unocore/unosett.cxx b/sw/source/core/unocore/unosett.cxx index a28fc1f1b4c4..2ad966a57b78 100644 --- a/sw/source/core/unocore/unosett.cxx +++ b/sw/source/core/unocore/unosett.cxx @@ -932,7 +932,7 @@ Any SwXLineNumberingProperties::getPropertyValue(const OUString& rPropertyName) break; case WID_DISTANCE : { - sal_uInt32 nPos = rInfo.GetPosFromLeft(); + sal_uInt16 nPos = rInfo.GetPosFromLeft(); if(USHRT_MAX == nPos) nPos = 0; aRet <<= static_cast < sal_Int32 >(convertTwipToMm100(nPos)); From dfe1f8fddeab73a75d9849aa59a95e8d52e55af4 Mon Sep 17 00:00:00 2001 From: Heiko Tietze Date: Sat, 29 Jun 2024 11:48:43 +0200 Subject: [PATCH 146/194] Related tdf#64028 - COPYDELETE must not update references in order to behave like cut Change-Id: Ia30428edee00950e2874c0f615e4033167c1031b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169754 Reviewed-by: Heiko Tietze Tested-by: Jenkins --- sc/source/ui/view/cellsh1.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sc/source/ui/view/cellsh1.cxx b/sc/source/ui/view/cellsh1.cxx index ed879ecb62f9..995d0cd2dfff 100644 --- a/sc/source/ui/view/cellsh1.cxx +++ b/sc/source/ui/view/cellsh1.cxx @@ -1461,7 +1461,7 @@ void ScCellShell::ExecuteEdit( SfxRequest& rReq ) case SID_COPYDELETE: // for graphs in DrawShell { weld::WaitObject aWait( GetViewData().GetDialogParent() ); - pTabViewShell->CopyToClip( nullptr, false, false, true ); + pTabViewShell->CopyToClip( nullptr, true, false, true ); pTabViewShell->DeleteContents( InsertDeleteFlags::CONTENTS ); rReq.Done(); GetViewData().SetPasteMode( ScPasteFlags::Mode | ScPasteFlags::Border ); From 819194eb3b60ce53533678d6dd57bebed58996c0 Mon Sep 17 00:00:00 2001 From: Mike Kaganski Date: Sat, 29 Jun 2024 16:43:59 +0500 Subject: [PATCH 147/194] Use better types here Change-Id: Icc9c6fdea2c3d10db51728389187589a26a887c7 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169758 Reviewed-by: Mike Kaganski Tested-by: Jenkins --- sd/source/ui/view/drviews2.cxx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sd/source/ui/view/drviews2.cxx b/sd/source/ui/view/drviews2.cxx index 5b6b797fe025..fc2cfa046b83 100644 --- a/sd/source/ui/view/drviews2.cxx +++ b/sd/source/ui/view/drviews2.cxx @@ -1489,9 +1489,9 @@ void DrawViewShell::FuTemporary(SfxRequest& rReq) const SfxUInt32Item* newPosYTwips = rReq.GetArg(FN_PARAM_3); const SfxInt32Item* OrdNum = rReq.GetArg(FN_PARAM_4); - const sal_uLong handleNum = handleNumItem->GetValue(); - const sal_uLong newPosX = convertTwipToMm100(newPosXTwips->GetValue()); - const sal_uLong newPosY = convertTwipToMm100(newPosYTwips->GetValue()); + const sal_uInt32 handleNum = handleNumItem->GetValue(); + const ::tools::Long newPosX = convertTwipToMm100(newPosXTwips->GetValue()); + const ::tools::Long newPosY = convertTwipToMm100(newPosYTwips->GetValue()); mpDrawView->MoveShapeHandle(handleNum, Point(newPosX, newPosY), OrdNum ? OrdNum->GetValue() : -1); Cancel(); From 36d898b3bc635e996cad074fc81341d43a650a3f Mon Sep 17 00:00:00 2001 From: Andrea Gelmini Date: Sat, 29 Jun 2024 15:39:00 +0200 Subject: [PATCH 148/194] Fix "lets" -> "let's" Change-Id: I3f55e97561323cff8a4148d8388ecd3a5550c704 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169753 Tested-by: Jenkins Reviewed-by: Andrea Gelmini --- desktop/source/app/app.cxx | 2 +- filter/source/msfilter/mstoolbar.cxx | 2 +- filter/source/xsltdialog/xmlfiltersettingsdialog.cxx | 4 ++-- libreofficekit/source/gtk/tilebuffer.hxx | 2 +- sc/source/core/data/formulacell.cxx | 6 +++--- sc/source/core/data/validat.cxx | 2 +- sc/source/core/tool/interpr4.cxx | 2 +- sc/source/core/tool/interpr5.cxx | 2 +- 8 files changed, 11 insertions(+), 11 deletions(-) diff --git a/desktop/source/app/app.cxx b/desktop/source/app/app.cxx index d30bd0e582f3..2a52f9843f75 100644 --- a/desktop/source/app/app.cxx +++ b/desktop/source/app/app.cxx @@ -454,7 +454,7 @@ void Desktop::Init() // We need to have service factory before going further, but see fdo#37195. // Doing this will mmap common.rdb, making it not overwritable on windows, - // so this can't happen before the synchronization above. Lets rework this + // so this can't happen before the synchronization above. Let's rework this // so that the above is called *from* CreateApplicationServiceManager or // something to enforce this gotcha try diff --git a/filter/source/msfilter/mstoolbar.cxx b/filter/source/msfilter/mstoolbar.cxx index 8b7396da2465..9db38c4bd030 100644 --- a/filter/source/msfilter/mstoolbar.cxx +++ b/filter/source/msfilter/mstoolbar.cxx @@ -279,7 +279,7 @@ void TBCData::ImportToolBarControl( CustomToolBarImportHelper& helper, std::vect TBCBSpecific* pSpecificInfo = dynamic_cast< TBCBSpecific* >( controlSpecificInfo.get() ); if ( pSpecificInfo ) { - // if we have an icon then lets set it for the command + // if we have an icon then let's set it for the command OUString sCommand; for (auto const& property : props) { diff --git a/filter/source/xsltdialog/xmlfiltersettingsdialog.cxx b/filter/source/xsltdialog/xmlfiltersettingsdialog.cxx index d5bff6dccf78..a6e793a3a855 100644 --- a/filter/source/xsltdialog/xmlfiltersettingsdialog.cxx +++ b/filter/source/xsltdialog/xmlfiltersettingsdialog.cxx @@ -595,7 +595,7 @@ bool XMLFilterSettingsDialog::insertOrEdit( filter_info_impl* pNewInfo, const fi if( !bOk ) { - // we failed to add the type, so lets remove the filter + // we failed to add the type, so let's remove the filter try { mxFilterContainer->removeByName( pFilterEntry->maFilterName ); @@ -622,7 +622,7 @@ bool XMLFilterSettingsDialog::insertOrEdit( filter_info_impl* pNewInfo, const fi if( !bOk ) { - // we failed to add the filter, so lets remove the type + // we failed to add the filter, so let's remove the type try { mxTypeDetection->removeByName( pFilterEntry->maType ); diff --git a/libreofficekit/source/gtk/tilebuffer.hxx b/libreofficekit/source/gtk/tilebuffer.hxx index 239482e34625..e1bd2ce49c93 100644 --- a/libreofficekit/source/gtk/tilebuffer.hxx +++ b/libreofficekit/source/gtk/tilebuffer.hxx @@ -18,7 +18,7 @@ #define LOK_TILEBUFFER_ERROR (LOKTileBufferErrorQuark()) -// Lets use a square of side 256 pixels for each tile. +// Let's use a square of side 256 pixels for each tile. const int nTileSizePixels = 256; /** diff --git a/sc/source/core/data/formulacell.cxx b/sc/source/core/data/formulacell.cxx index 810a2c9984a5..e7ebdb305d72 100644 --- a/sc/source/core/data/formulacell.cxx +++ b/sc/source/core/data/formulacell.cxx @@ -4499,7 +4499,7 @@ struct ScDependantsCalculator // The dependency evaluator evaluates all arguments of IF/IFS/SWITCH irrespective // of the result of the condition expression. // This is a perf problem if we *don't* intent on recalc'ing all dirty cells - // in the document. So lets disable threading and stop dependency evaluation if + // in the document. So let's disable threading and stop dependency evaluation if // the call did not originate from ScDocShell::DoRecalc()/ScDocShell::DoHardRecalc() // for formulae with IF/IFS/SWITCH OpCode nOpCode = p->GetOpCode(); @@ -4636,7 +4636,7 @@ struct ScDependantsCalculator } // Compute dependencies irrespective of the presence of any self references. - // These dependencies would get computed via InterpretTail anyway when we disable group calc, so lets do it now. + // These dependencies would get computed via InterpretTail anyway when we disable group calc, so let's do it now. // The advantage is that the FG's get marked for cycles early if present, and can avoid lots of complications. for (size_t i = 0; i < aRangeList.size(); ++i) { @@ -4770,7 +4770,7 @@ bool ScFormulaCell::CheckComputeDependencies(sc::FormulaLogger::GroupScope& rSco // to avoid writing during the calculation if (bCalcDependencyOnly) { - // Lets not use "ScFormulaGroupDependencyComputeGuard" here as there is no corresponding + // Let's not use "ScFormulaGroupDependencyComputeGuard" here as there is no corresponding // "ScFormulaGroupCycleCheckGuard" for this formula-group. // (We can only reach here from a multi-group dependency evaluation attempt). // (These two have to be in pairs always for any given formula-group) diff --git a/sc/source/core/data/validat.cxx b/sc/source/core/data/validat.cxx index 55cb345a88bc..6a4a4aed064e 100644 --- a/sc/source/core/data/validat.cxx +++ b/sc/source/core/data/validat.cxx @@ -906,7 +906,7 @@ bool ScValidationData::GetSelectionFromFormula( /* XL artificially limits things to a single col or row in the UI but does * not list the constraint in MOOXml. If a defined name or INDIRECT * resulting in 1D is entered in the UI and the definition later modified - * to 2D, it is evaluated fine and also stored and loaded. Lets get ahead + * to 2D, it is evaluated fine and also stored and loaded. Let's get ahead * of the curve and support 2d. In XL, values are listed row-wise, do the * same. */ for( nRow = 0; nRow < nRows ; nRow++ ) diff --git a/sc/source/core/tool/interpr4.cxx b/sc/source/core/tool/interpr4.cxx index bea16130257f..c6045ad57362 100644 --- a/sc/source/core/tool/interpr4.cxx +++ b/sc/source/core/tool/interpr4.cxx @@ -3874,7 +3874,7 @@ ScInterpreter::ScInterpreter( ScFormulaCell* pCell, ScDocument& rDoc, ScInterpre else bMatrixFormula = false; - // Lets not use the global stack while formula-group-threading. + // Let's not use the global stack while formula-group-threading. // as it complicates its life-cycle mgmt since for threading formula-groups, // ScInterpreter is preallocated (in main thread) for each worker thread. if (!bGlobalStackInUse && !bForGroupThreading) diff --git a/sc/source/core/tool/interpr5.cxx b/sc/source/core/tool/interpr5.cxx index dce3f25819ea..2f4fe0f19fa1 100644 --- a/sc/source/core/tool/interpr5.cxx +++ b/sc/source/core/tool/interpr5.cxx @@ -317,7 +317,7 @@ ScMatrixRef ScInterpreter::CreateMatrixFromDoubleRef( const FormulaToken* pToken { // Clamp the size of the matrix area to rows which actually contain data. // For e.g. SUM(IF over an entire column, this can make a big difference, - // But lets not trim the empty space from the top or left as this matters + // But let's not trim the empty space from the top or left as this matters // at least in matrix formulas involving IF(). // Refer ScCompiler::AnnotateTrimOnDoubleRefs() where double-refs are // flagged for trimming. From 102cbf4626dc80191a21af53c65f4817a0baef9b Mon Sep 17 00:00:00 2001 From: Andrea Gelmini Date: Sat, 29 Jun 2024 15:56:05 +0200 Subject: [PATCH 149/194] Fix "lets" -> "let's" Change-Id: I01968fc18b093dbbc27213f01c3da38ae151c62c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169748 Reviewed-by: Andrea Gelmini Tested-by: Jenkins --- basic/source/classes/sbunoobj.cxx | 5 +++-- basic/source/classes/sbxmod.cxx | 2 +- basic/source/runtime/runtime.cxx | 4 ++-- compilerplugins/clang/cstylecast.cxx | 2 +- compilerplugins/clang/unsignedcompare.cxx | 2 +- configure.ac | 2 +- dbaccess/source/core/inc/ModelImpl.hxx | 2 +- include/systools/curlinit.hxx | 2 +- oox/source/drawingml/textrun.cxx | 2 +- oox/source/helper/propertymap.cxx | 2 +- .../libreoffice/report/pentaho/output/StyleUtilities.java | 2 +- .../output/spreadsheet/SpreadsheetRawReportTarget.java | 2 +- .../report/pentaho/output/text/TextRawReportTarget.java | 2 +- sw/qa/extras/ooxmlexport/ooxmlexport14.cxx | 4 ++-- vcl/README.lifecycle.md | 2 +- vcl/source/bitmap/dibtools.cxx | 2 +- vcl/unx/generic/app/i18n_im.cxx | 2 +- vcl/unx/generic/fontmanager/fontconfig.cxx | 2 +- xmloff/source/draw/ximppage.cxx | 2 +- xmloff/source/style/xmlexppr.cxx | 2 +- 20 files changed, 24 insertions(+), 23 deletions(-) diff --git a/basic/source/classes/sbunoobj.cxx b/basic/source/classes/sbunoobj.cxx index 419b2bb31a84..463d11b95fbf 100644 --- a/basic/source/classes/sbunoobj.cxx +++ b/basic/source/classes/sbunoobj.cxx @@ -1697,8 +1697,9 @@ bool checkUnoObjectType(SbUnoObject& rUnoObj, const OUString& rClass) OUString aInterfaceName = xClass->getName(); if ( aInterfaceName == "com.sun.star.bridge.oleautomation.XAutomationObject" ) { - // there is a hack in the extensions/source/ole/oleobj.cxx to return the typename of the automation object, lets check if it - // matches + // there is a hack in the extensions/source/ole/oleobj.cxx + // to return the typename of the automation object, let's + // check if it matches Reference< XInvocation > xInv( aToInspectObj, UNO_QUERY ); if ( xInv.is() ) { diff --git a/basic/source/classes/sbxmod.cxx b/basic/source/classes/sbxmod.cxx index f3551bc1b425..95d751bb0202 100644 --- a/basic/source/classes/sbxmod.cxx +++ b/basic/source/classes/sbxmod.cxx @@ -1744,7 +1744,7 @@ bool SbModule::HasExeCode() { // And empty Image always has the Global Chain set up static const unsigned char pEmptyImage[] = { 0x45, 0x0 , 0x0, 0x0, 0x0 }; - // lets be stricter for the moment than VBA + // let's be stricter for the moment than VBA if (!IsCompiled()) { diff --git a/basic/source/runtime/runtime.cxx b/basic/source/runtime/runtime.cxx index 90b40cb8adc8..b692c66de698 100644 --- a/basic/source/runtime/runtime.cxx +++ b/basic/source/runtime/runtime.cxx @@ -1641,7 +1641,7 @@ static bool checkUnoStructCopy( bool bVBA, SbxVariableRef const & refVal, SbxVar // There are some circumstances when calling GetObject // will trigger an error, we need to squash those here. // Alternatively it is possible that the same scenario - // could overwrite and existing error. Lets prevent that + // could overwrite and existing error. Let's prevent that SbxObjectRef xVarObj = static_cast(refVar->GetObject()); if ( eOldErr != ERRCODE_NONE ) SbxBase::SetError( eOldErr ); @@ -3698,7 +3698,7 @@ SbxVariable* SbiRuntime::FindElement( SbxObject* pObj, sal_uInt32 nOp1, sal_uInt } // consider index-access for UnoObjects // definitely we want this for VBA where properties are often - // collections ( which need index access ), but lets only do + // collections ( which need index access ), but let's only do // this if we actually have params following else if( bVBAEnabled && dynamic_cast( pElem) != nullptr && pElem->GetParameters() ) { diff --git a/compilerplugins/clang/cstylecast.cxx b/compilerplugins/clang/cstylecast.cxx index a516144a6141..f548b1fd8123 100644 --- a/compilerplugins/clang/cstylecast.cxx +++ b/compilerplugins/clang/cstylecast.cxx @@ -139,7 +139,7 @@ bool isLiteralLike(Expr const * expr) { } bool canBeUsedForFunctionalCast(TypeSourceInfo const * info) { - // Must be or , lets approximate that here: + // Must be or , let's approximate that here: assert(info != nullptr); auto const type = info->getType(); if (type.hasLocalQualifiers()) { diff --git a/compilerplugins/clang/unsignedcompare.cxx b/compilerplugins/clang/unsignedcompare.cxx index 5b55edea2843..9b1ed684a90f 100644 --- a/compilerplugins/clang/unsignedcompare.cxx +++ b/compilerplugins/clang/unsignedcompare.cxx @@ -122,7 +122,7 @@ public: // actually meant to e.g. clamp from a large signed type to a small unsigned type. The // assumption is that this will only be likely the case for BO_EQ (==) and BO_NE (!=) // comparisons, so filter these out here (not sure what case BO_Cmp (<=>) will turn out to - // be, so lets keep it here at least for now): + // be, so let's keep it here at least for now): switch (expr->getOpcode()) { case BO_Cmp: diff --git a/configure.ac b/configure.ac index 50f26eba6611..eb6e1f3e9853 100644 --- a/configure.ac +++ b/configure.ac @@ -13312,7 +13312,7 @@ AC_SUBST(SYSTEM_RHINO) AC_SUBST(RHINO_JAR) # This is only used in Qt5/Qt6/KF5/KF6 checks to determine if /usr/lib64 -# paths should be added to library search path. So lets put all 64-bit +# paths should be added to library search path. So let's put all 64-bit # platforms there. supports_multilib= case "$host_cpu" in diff --git a/dbaccess/source/core/inc/ModelImpl.hxx b/dbaccess/source/core/inc/ModelImpl.hxx index b59371125cbc..2ddd1889dc2f 100644 --- a/dbaccess/source/core/inc/ModelImpl.hxx +++ b/dbaccess/source/core/inc/ModelImpl.hxx @@ -431,7 +431,7 @@ public: css::uno::Reference< css::script::XStorageBasedLibraryContainer > getLibraryContainer( bool _bScript ); - /** lets our library containers store themself into the given root storage + /** lets our library containers store themselves into the given root storage */ void storeLibraryContainersTo( const css::uno::Reference< css::embed::XStorage >& _rxToRootStorage ); diff --git a/include/systools/curlinit.hxx b/include/systools/curlinit.hxx index 7c6f8d07deaf..7fe72370c858 100644 --- a/include/systools/curlinit.hxx +++ b/include/systools/curlinit.hxx @@ -14,7 +14,7 @@ #include // curl is built with --with-secure-transport on macOS and iOS so doesn't need these -// certs. Windows doesn't need them either, but lets assume everything else does +// certs. Windows doesn't need them either, but let's assume everything else does #if !defined(SYSTEM_OPENSSL) && !defined(_WIN32) && !defined(MACOSX) && !defined(IOS) #include diff --git a/oox/source/drawingml/textrun.cxx b/oox/source/drawingml/textrun.cxx index faee78f78244..1160e36e4cf4 100644 --- a/oox/source/drawingml/textrun.cxx +++ b/oox/source/drawingml/textrun.cxx @@ -72,7 +72,7 @@ sal_Int32 TextRun::insertAt( TextCharacterProperties aTextCharacterProps( rTextCharacterStyle ); - // If no text color specified lets anyway initialize it as default: + // If no text color specified let's anyway initialize it as default: // this will help to recover after hyperlink if (!aTextCharacterProps.maFillProperties.maFillColor.isUsed()) aTextCharacterProps.maFillProperties.moFillType = XML_solidFill; diff --git a/oox/source/helper/propertymap.cxx b/oox/source/helper/propertymap.cxx index d93fb41209bf..d2db24d75d5a 100644 --- a/oox/source/helper/propertymap.cxx +++ b/oox/source/helper/propertymap.cxx @@ -538,7 +538,7 @@ static const char *lclGetEnhancedParameterType( sal_uInt16 nType ) static void printParameterPairData(int level, EnhancedCustomShapeParameterPair const &pp) { - // These are always sal_Int32s so lets depend on that for our packing ... + // These are always sal_Int32s so let's depend on that for our packing... sal_Int32 nFirstValue = {}; sal_Int32 nSecondValue = {}; // spurious -Werror=maybe-uninitialized if (!(pp.First.Value >>= nFirstValue)) diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/output/StyleUtilities.java b/reportbuilder/java/org/libreoffice/report/pentaho/output/StyleUtilities.java index 98af0c3fa076..6e7339171fd9 100644 --- a/reportbuilder/java/org/libreoffice/report/pentaho/output/StyleUtilities.java +++ b/reportbuilder/java/org/libreoffice/report/pentaho/output/StyleUtilities.java @@ -138,7 +138,7 @@ public class StyleUtilities } // There is no automatic style either. Now this means that someone - // messed up the fileformat. Lets create a new empty style for this. + // messed up the fileformat. Let's create a new empty style for this. final OfficeStyle autostyle = new OfficeStyle(); autostyle.setNamespace(OfficeNamespaces.STYLE_NS); autostyle.setType(STYLE); diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/output/spreadsheet/SpreadsheetRawReportTarget.java b/reportbuilder/java/org/libreoffice/report/pentaho/output/spreadsheet/SpreadsheetRawReportTarget.java index b1d979e7b788..4987184ee9bd 100644 --- a/reportbuilder/java/org/libreoffice/report/pentaho/output/spreadsheet/SpreadsheetRawReportTarget.java +++ b/reportbuilder/java/org/libreoffice/report/pentaho/output/spreadsheet/SpreadsheetRawReportTarget.java @@ -374,7 +374,7 @@ public class SpreadsheetRawReportTarget extends OfficeDocumentReportTarget { // a new row means our column counter gets reset columnCounter = 0; - // Lets make sure the color of the table is ok .. + // Let's make sure the color of the table is ok... if (tableBackgroundColor != null) { final String styleName = (String) attrs.getAttribute(OfficeNamespaces.TABLE_NS, OfficeToken.STYLE_NAME); diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/output/text/TextRawReportTarget.java b/reportbuilder/java/org/libreoffice/report/pentaho/output/text/TextRawReportTarget.java index d8e50d2d4991..302e6908914b 100644 --- a/reportbuilder/java/org/libreoffice/report/pentaho/output/text/TextRawReportTarget.java +++ b/reportbuilder/java/org/libreoffice/report/pentaho/output/text/TextRawReportTarget.java @@ -642,7 +642,7 @@ public class TextRawReportTarget extends OfficeDocumentReportTarget if (style == null) { style = deriveStyle(OfficeToken.PARAGRAPH, styleName); - // Lets set the 'keep-together' flag... + // Let's set the 'keep-together' flag... Element paragraphProps = style.getParagraphProperties(); if (paragraphProps == null) diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx index 9a19ca827700..76a7c11a310e 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx @@ -742,8 +742,8 @@ DECLARE_OOXMLEXPORT_TEST(testTdf83309, "tdf83309.docx") CPPUNIT_ASSERT_EQUAL(2, getPages()); // First paragraph does not have tab before - // (same applies to all paragraphs in doc, but lets assume they are - // behave same way) + // (same applies to all paragraphs in doc, but let's assume they are + // behaving same way) OUString sNodeType = parseDump("(/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/child::*)[1]"_ostr, "type"_ostr); CPPUNIT_ASSERT_EQUAL(u"PortionType::Text"_ustr, sNodeType); diff --git a/vcl/README.lifecycle.md b/vcl/README.lifecycle.md index 8b0e5de2d0fd..4f9c99d516fd 100644 --- a/vcl/README.lifecycle.md +++ b/vcl/README.lifecycle.md @@ -120,7 +120,7 @@ pointer for you. ### How does my familiar code change ? -Lets tweak the exemplary code above to fit the new model: +Let's tweak the exemplary code above to fit the new model: ``` - Dialog aDialog(... dialog params ... ); diff --git a/vcl/source/bitmap/dibtools.cxx b/vcl/source/bitmap/dibtools.cxx index 483da0d89e2c..c4b15f79e76b 100644 --- a/vcl/source/bitmap/dibtools.cxx +++ b/vcl/source/bitmap/dibtools.cxx @@ -944,7 +944,7 @@ bool ImplReadDIBBody(SvStream& rIStm, Bitmap& rBmp, AlphaMask* pBmpAlpha, sal_uI // tdf#122958 invalid compression value used if (aHeader.nCompression & 0x000F) { - // lets assume that there was an error in the generating application + // let's assume that there was an error in the generating application // and allow through as COMPRESS_NONE if the bottom byte is 0 SAL_WARN( "vcl", "bad bmp compression scheme: " << aHeader.nCompression << ", rejecting bmp"); return false; diff --git a/vcl/unx/generic/app/i18n_im.cxx b/vcl/unx/generic/app/i18n_im.cxx index e3767b175d1d..16ac1d583483 100644 --- a/vcl/unx/generic/app/i18n_im.cxx +++ b/vcl/unx/generic/app/i18n_im.cxx @@ -253,7 +253,7 @@ SalI18N_InputMethod::~SalI18N_InputMethod() } // XXX -// debug routine: lets have a look at the provided method styles +// debug routine: let's have a look at the provided method styles #if OSL_DEBUG_LEVEL > 1 diff --git a/vcl/unx/generic/fontmanager/fontconfig.cxx b/vcl/unx/generic/fontmanager/fontconfig.cxx index 17191372bbaf..a189ab3f1161 100644 --- a/vcl/unx/generic/fontmanager/fontconfig.cxx +++ b/vcl/unx/generic/fontmanager/fontconfig.cxx @@ -889,7 +889,7 @@ namespace //returns true if the given code-point couldn't possibly be in rLangTag. bool isImpossibleCodePointForLang(const LanguageTag &rLangTag, sal_uInt32 currentChar) { - //a non-default script is set, lets believe it + //a non-default script is set, let's believe it if (rLangTag.hasScript()) return false; diff --git a/xmloff/source/draw/ximppage.cxx b/xmloff/source/draw/ximppage.cxx index 36ad16ebcb00..cb1ded1de477 100644 --- a/xmloff/source/draw/ximppage.cxx +++ b/xmloff/source/draw/ximppage.cxx @@ -170,7 +170,7 @@ css::uno::Reference< css::xml::sax::XFastContextHandler > DrawAnnotationContext: } } - // if we have a text cursor, lets try to import some text + // if we have a text cursor, let's try to import some text if( mxCursor.is() ) { auto p = GetImport().GetTextImport()->CreateTextChildContext( GetImport(), nElement, xAttrList ); diff --git a/xmloff/source/style/xmlexppr.cxx b/xmloff/source/style/xmlexppr.cxx index 0c54958421e1..42170c371e4d 100644 --- a/xmloff/source/style/xmlexppr.cxx +++ b/xmloff/source/style/xmlexppr.cxx @@ -904,7 +904,7 @@ void SvXMLExportPropertyMapper::_exportXML( rPropTypeFlags |= (1 << nEPType); if( nEPType == nPropType ) { - // we have a valid map entry here, so lets use it... + // we have a valid map entry here, so let's use it... if( ( nEFlags & MID_FLAG_ELEMENT_ITEM_EXPORT ) != 0 ) { // element items do not add any properties, From 2adf50be3df057e36562af1bf69ffc26c012d1f1 Mon Sep 17 00:00:00 2001 From: Mike Kaganski Date: Sat, 29 Jun 2024 18:00:51 +0500 Subject: [PATCH 150/194] Rename some ConversionHelper functions Make their names more explicit. This avoids ambiguity; previously, convertTwipToMM100 was very similar to tools' convertTwipToMm100, provoking the former function's use where the latter is better. Drop convertTwipToMM100WithoutLimit, and use the unconstrained function from tools directly instead. Change-Id: Icdd1a67721cdd8a578bc786fda67c341b07ec84a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169759 Reviewed-by: Mike Kaganski Tested-by: Jenkins --- sw/qa/writerfilter/misc/misc.cxx | 28 ++++---- .../writerfilter/dmapper/BorderHandler.cxx | 2 +- .../dmapper/CellMarginHandler.cxx | 2 +- .../writerfilter/dmapper/ConversionHelper.cxx | 24 +++---- .../writerfilter/dmapper/ConversionHelper.hxx | 7 +- .../writerfilter/dmapper/DomainMapper.cxx | 70 +++++++++---------- .../dmapper/DomainMapperTableManager.cxx | 4 +- .../dmapper/DomainMapper_Impl.cxx | 17 ++--- .../writerfilter/dmapper/GraphicImport.cxx | 28 ++++---- .../writerfilter/dmapper/MeasureHandler.cxx | 2 +- .../writerfilter/dmapper/NumberingManager.cxx | 8 +-- .../writerfilter/dmapper/PropertyMap.cxx | 6 +- .../dmapper/SectionColumnHandler.cxx | 6 +- .../writerfilter/dmapper/SettingsTable.cxx | 2 +- .../dmapper/TablePositionHandler.cxx | 16 +++-- 15 files changed, 113 insertions(+), 109 deletions(-) diff --git a/sw/qa/writerfilter/misc/misc.cxx b/sw/qa/writerfilter/misc/misc.cxx index 1063cfd7fadc..506fc282999d 100644 --- a/sw/qa/writerfilter/misc/misc.cxx +++ b/sw/qa/writerfilter/misc/misc.cxx @@ -37,22 +37,22 @@ public: void WriterfilterMiscTest::testTwipConversions() { - using writerfilter::dmapper::ConversionHelper::convertTwipToMM100; - using writerfilter::dmapper::ConversionHelper::convertTwipToMM100Unsigned; + using writerfilter::dmapper::ConversionHelper::convertTwipToMm100_Limited; + using writerfilter::dmapper::ConversionHelper::convertTwipToMm100_LimitedUnsigned; - CPPUNIT_ASSERT_EQUAL(sal_Int32(-2), convertTwipToMM100(-1)); - CPPUNIT_ASSERT_EQUAL(sal_Int32(-17639), convertTwipToMM100(-10000)); - CPPUNIT_ASSERT_EQUAL(sal_Int32(-70556), convertTwipToMM100(-40000)); - CPPUNIT_ASSERT_EQUAL(sal_Int32(2), convertTwipToMM100(1)); - CPPUNIT_ASSERT_EQUAL(sal_Int32(17639), convertTwipToMM100(10000)); - CPPUNIT_ASSERT_EQUAL(sal_Int32(0), convertTwipToMM100(40000)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(-2), convertTwipToMm100_Limited(-1)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(-17639), convertTwipToMm100_Limited(-10000)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(-70556), convertTwipToMm100_Limited(-40000)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), convertTwipToMm100_Limited(1)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(17639), convertTwipToMm100_Limited(10000)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), convertTwipToMm100_Limited(40000)); - CPPUNIT_ASSERT_EQUAL(sal_uInt32(0), convertTwipToMM100Unsigned(-1)); - CPPUNIT_ASSERT_EQUAL(sal_uInt32(0), convertTwipToMM100Unsigned(-10000)); - CPPUNIT_ASSERT_EQUAL(sal_uInt32(0), convertTwipToMM100Unsigned(-40000)); - CPPUNIT_ASSERT_EQUAL(sal_uInt32(2), convertTwipToMM100Unsigned(1)); - CPPUNIT_ASSERT_EQUAL(sal_uInt32(17639), convertTwipToMM100Unsigned(10000)); - CPPUNIT_ASSERT_EQUAL(sal_uInt32(0), convertTwipToMM100Unsigned(40000)); + CPPUNIT_ASSERT_EQUAL(sal_uInt32(0), convertTwipToMm100_LimitedUnsigned(-1)); + CPPUNIT_ASSERT_EQUAL(sal_uInt32(0), convertTwipToMm100_LimitedUnsigned(-10000)); + CPPUNIT_ASSERT_EQUAL(sal_uInt32(0), convertTwipToMm100_LimitedUnsigned(-40000)); + CPPUNIT_ASSERT_EQUAL(sal_uInt32(2), convertTwipToMm100_LimitedUnsigned(1)); + CPPUNIT_ASSERT_EQUAL(sal_uInt32(17639), convertTwipToMm100_LimitedUnsigned(10000)); + CPPUNIT_ASSERT_EQUAL(sal_uInt32(0), convertTwipToMm100_LimitedUnsigned(40000)); } void WriterfilterMiscTest::testFieldParameters() diff --git a/sw/source/writerfilter/dmapper/BorderHandler.cxx b/sw/source/writerfilter/dmapper/BorderHandler.cxx index ad37a1d46c35..c007ecf5e515 100644 --- a/sw/source/writerfilter/dmapper/BorderHandler.cxx +++ b/sw/source/writerfilter/dmapper/BorderHandler.cxx @@ -69,7 +69,7 @@ void BorderHandler::lcl_attribute(Id rName, Value & rVal) appendGrabBag(u"color"_ustr, msfilter::util::ConvertColorOU(Color(ColorTransparency, nIntValue))); break; case NS_ooxml::LN_CT_Border_space: // border distance in points - m_nLineDistance = ConversionHelper::convertTwipToMM100( nIntValue * 20 ); + m_nLineDistance = ConversionHelper::convertTwipToMm100_Limited(nIntValue * 20); appendGrabBag(u"space"_ustr, OUString::number(nIntValue)); break; case NS_ooxml::LN_CT_Border_shadow: diff --git a/sw/source/writerfilter/dmapper/CellMarginHandler.cxx b/sw/source/writerfilter/dmapper/CellMarginHandler.cxx index 8c014c093cf2..4f4b3011663a 100644 --- a/sw/source/writerfilter/dmapper/CellMarginHandler.cxx +++ b/sw/source/writerfilter/dmapper/CellMarginHandler.cxx @@ -55,7 +55,7 @@ void CellMarginHandler::lcl_attribute(Id rName, Value & rVal) { case NS_ooxml::LN_CT_TblWidth_w: m_nWidth = nIntValue; - m_nValue = ConversionHelper::convertTwipToMM100Unsigned( nIntValue ); + m_nValue = ConversionHelper::convertTwipToMm100_LimitedUnsigned(nIntValue); break; case NS_ooxml::LN_CT_TblWidth_type: SAL_WARN_IF(NS_ooxml::LN_Value_ST_TblWidth_dxa != sal::static_int_cast(nIntValue), "writerfilter", "CellMarginHandler: cell margins work for absolute values only"); diff --git a/sw/source/writerfilter/dmapper/ConversionHelper.cxx b/sw/source/writerfilter/dmapper/ConversionHelper.cxx index 7f3f11544c85..a4a784dccab0 100644 --- a/sw/source/writerfilter/dmapper/ConversionHelper.cxx +++ b/sw/source/writerfilter/dmapper/ConversionHelper.cxx @@ -16,6 +16,11 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ + +#include + +#include + #include "ConversionHelper.hxx" #include #include @@ -266,7 +271,7 @@ void MakeBorderLine( sal_Int32 nLineThickness, sal_Int32 nLineToken, double const fConverted( (SvxBorderLineStyle::NONE == nLineStyle) ? 0.0 : ::editeng::ConvertBorderWidthFromWord(nLineStyle, nLineThickness, nLineType)); - rToFill.LineWidth = convertTwipToMM100(fConverted); + rToFill.LineWidth = convertTwipToMm100_Limited(fConverted); rToFill.Color = nLineColor; } @@ -415,7 +420,7 @@ OUString ConvertMSFormatStringToSO( } -sal_Int32 convertTwipToMM100(sal_Int32 _t) +sal_Int32 convertTwipToMm100_Limited(sal_Int32 _t) { // It appears that MSO handles large twip values specially, probably legacy 16bit handling, // anything that's bigger than 32767 appears to be simply ignored. @@ -424,25 +429,20 @@ sal_Int32 convertTwipToMM100(sal_Int32 _t) return ::convertTwipToMm100( _t ); } -sal_Int32 convertTwipToMM100WithoutLimit(sal_Int32 _t) -{ - return ::convertTwipToMm100(_t); -} - -double convertTwipToMM100Double(sal_Int32 _t) +sal_Int32 convertTwipToMm100_LimitedRoundUp(sal_Int32 _t) { // It appears that MSO handles large twip values specially, probably legacy 16bit handling, // anything that's bigger than 32767 appears to be simply ignored. if( _t >= 0x8000 ) - return 0.0; - return o3tl::convert(_t, o3tl::Length::twip, o3tl::Length::mm100); + return 0; + return std::ceil(::convertTwipToMm100(_t)); } -sal_uInt32 convertTwipToMM100Unsigned(sal_Int32 _t) +sal_uInt32 convertTwipToMm100_LimitedUnsigned(sal_Int32 _t) { if( _t < 0 ) return 0; - return convertTwipToMM100( _t ); + return convertTwipToMm100_Limited(_t); } text::RubyAdjust convertRubyAlign( sal_Int32 nIntValue ) diff --git a/sw/source/writerfilter/dmapper/ConversionHelper.hxx b/sw/source/writerfilter/dmapper/ConversionHelper.hxx index c14c8033ea58..a4c67ce8d2b1 100644 --- a/sw/source/writerfilter/dmapper/ConversionHelper.hxx +++ b/sw/source/writerfilter/dmapper/ConversionHelper.hxx @@ -45,10 +45,9 @@ namespace writerfilter::dmapper::ConversionHelper{ //convert the number format string form MS format to SO format OUString ConvertMSFormatStringToSO(const OUString& rFormat, css::lang::Locale& rLocale, bool bHijri); // export just for test - SAL_DLLPUBLIC_EXPORT sal_Int32 convertTwipToMM100(sal_Int32 _t); - sal_Int32 convertTwipToMM100WithoutLimit(sal_Int32 _t); - double convertTwipToMM100Double(sal_Int32 _t); - SAL_DLLPUBLIC_EXPORT sal_uInt32 convertTwipToMM100Unsigned(sal_Int32 _t); + SAL_DLLPUBLIC_EXPORT sal_Int32 convertTwipToMm100_Limited(sal_Int32 _t); + sal_Int32 convertTwipToMm100_LimitedRoundUp(sal_Int32 _t); + SAL_DLLPUBLIC_EXPORT sal_uInt32 convertTwipToMm100_LimitedUnsigned(sal_Int32 _t); sal_Int16 convertTableJustification( sal_Int32 nIntValue ); css::text::RubyAdjust convertRubyAlign( sal_Int32 nIntValue ); sal_Int16 ConvertNumberingType(const sal_Int32 nFmt, const sal_Int16 nDefault = css::style::NumberingType::ARABIC); diff --git a/sw/source/writerfilter/dmapper/DomainMapper.cxx b/sw/source/writerfilter/dmapper/DomainMapper.cxx index 71760a6e3b56..6b60dd3bdffe 100644 --- a/sw/source/writerfilter/dmapper/DomainMapper.cxx +++ b/sw/source/writerfilter/dmapper/DomainMapper.cxx @@ -410,7 +410,7 @@ void DomainMapper::lcl_attribute(Id nName, Value & val) m_pImpl->m_aCurrentTabStop.FillChar = getFillCharFromValue(nIntValue); break; case NS_ooxml::LN_CT_TabStop_pos: - m_pImpl->m_aCurrentTabStop.Position = ConversionHelper::convertTwipToMM100(nIntValue); + m_pImpl->m_aCurrentTabStop.Position = ConversionHelper::convertTwipToMm100_Limited(nIntValue); break; case NS_ooxml::LN_CT_Fonts_ascii: @@ -480,14 +480,14 @@ void DomainMapper::lcl_attribute(Id nName, Value & val) // NS_ooxml::LN_CT_Spacing_before in parent styles before style // sheet support can be enabled. if (m_pImpl->GetTopContext() && !IsStyleSheetImport()) - m_pImpl->GetTopContext()->Insert(PROP_PARA_TOP_MARGIN, uno::Any(ConversionHelper::convertTwipToMM100(nIntValue * nSingleLineSpacing / 100)), false); + m_pImpl->GetTopContext()->Insert(PROP_PARA_TOP_MARGIN, uno::Any(ConversionHelper::convertTwipToMm100_Limited(nIntValue * nSingleLineSpacing / 100)), false); break; case NS_ooxml::LN_CT_Spacing_after: m_pImpl->appendGrabBag(m_pImpl->m_aSubInteropGrabBag, u"after"_ustr, OUString::number(nIntValue)); if (m_pImpl->GetTopContext()) { // Don't overwrite NS_ooxml::LN_CT_Spacing_afterAutospacing. - m_pImpl->GetTopContext()->Insert(PROP_PARA_BOTTOM_MARGIN, uno::Any( ConversionHelper::convertTwipToMM100( nIntValue ) ), false); + m_pImpl->GetTopContext()->Insert(PROP_PARA_BOTTOM_MARGIN, uno::Any( ConversionHelper::convertTwipToMm100_Limited( nIntValue ) ), false); uno::Any aContextualSpacingFromStyle = m_pImpl->GetPropertyFromParaStyleSheet(PROP_PARA_CONTEXT_MARGIN); if (aContextualSpacingFromStyle.hasValue()) @@ -502,7 +502,7 @@ void DomainMapper::lcl_attribute(Id nName, Value & val) // NS_ooxml::LN_CT_Spacing_after in parent styles before style // sheet support can be enabled. if (m_pImpl->GetTopContext() && !IsStyleSheetImport()) - m_pImpl->GetTopContext()->Insert(PROP_PARA_BOTTOM_MARGIN, uno::Any(ConversionHelper::convertTwipToMM100(nIntValue * nSingleLineSpacing / 100)), false); + m_pImpl->GetTopContext()->Insert(PROP_PARA_BOTTOM_MARGIN, uno::Any(ConversionHelper::convertTwipToMm100_Limited(nIntValue * nSingleLineSpacing / 100)), false); break; case NS_ooxml::LN_CT_Spacing_line: //91434 case NS_ooxml::LN_CT_Spacing_lineRule: //91435 @@ -518,7 +518,7 @@ void DomainMapper::lcl_attribute(Id nName, Value & val) { //default to single line spacing aSpacing.Mode = style::LineSpacingMode::FIX; - aSpacing.Height = sal_Int16(ConversionHelper::convertTwipToMM100( nSingleLineSpacing )); + aSpacing.Height = convertTwipToMm100(nSingleLineSpacing); } if( nName == NS_ooxml::LN_CT_Spacing_line ) { @@ -527,7 +527,7 @@ void DomainMapper::lcl_attribute(Id nName, Value & val) if( aSpacing.Mode == style::LineSpacingMode::PROP ) aSpacing.Height = sal_Int16(nIntValue * 100 / nSingleLineSpacing ); else - aSpacing.Height = sal_Int16(ConversionHelper::convertTwipToMM100( nIntValue )); + aSpacing.Height = sal_Int16(ConversionHelper::convertTwipToMm100_Limited( nIntValue )); } else //NS_ooxml::LN_CT_Spacing_lineRule: { @@ -539,7 +539,7 @@ void DomainMapper::lcl_attribute(Id nName, Value & val) { aSpacing.Mode = style::LineSpacingMode::PROP; //reinterpret the already set value - aSpacing.Height = sal_Int16( aSpacing.Height * 100 / ConversionHelper::convertTwipToMM100( nSingleLineSpacing )); + aSpacing.Height = sal_Int16( aSpacing.Height * 100 / ConversionHelper::convertTwipToMm100_Limited( nSingleLineSpacing )); } else { @@ -573,7 +573,7 @@ void DomainMapper::lcl_attribute(Id nName, Value & val) sal_Int32 nFirstLineIndent = m_pImpl->getCurrentNumberingProperty(u"FirstLineIndent"_ustr); sal_Int32 nIndentAt = m_pImpl->getCurrentNumberingProperty(u"IndentAt"_ustr); - sal_Int32 nParaLeftMargin = ConversionHelper::convertTwipToMM100(nIntValue); + sal_Int32 nParaLeftMargin = ConversionHelper::convertTwipToMm100_Limited(nIntValue); if (nParaLeftMargin != 0 && nIndentAt == nParaLeftMargin) // Avoid direct left margin when it's the same as from the // numbering. @@ -601,14 +601,14 @@ void DomainMapper::lcl_attribute(Id nName, Value & val) m_pImpl->GetTopContext()->Insert(PROP_PARA_LEFT_MARGIN, uno::Any(nParaLeftMargin), /*bOverwrite=*/false); m_pImpl->GetTopContext()->Insert( - PROP_PARA_RIGHT_MARGIN, uno::Any( ConversionHelper::convertTwipToMM100(nIntValue ) )); + PROP_PARA_RIGHT_MARGIN, uno::Any( ConversionHelper::convertTwipToMm100_Limited(nIntValue ) )); } m_pImpl->appendGrabBag(m_pImpl->m_aSubInteropGrabBag, u"right"_ustr, OUString::number(nIntValue)); break; case NS_ooxml::LN_CT_Ind_hanging: if (m_pImpl->GetTopContext()) { - sal_Int32 nValue = ConversionHelper::convertTwipToMM100( nIntValue ); + sal_Int32 nValue = ConversionHelper::convertTwipToMm100_Limited(nIntValue); m_pImpl->GetTopContext()->Insert( PROP_PARA_FIRST_LINE_INDENT, uno::Any( - nValue )); @@ -623,7 +623,7 @@ void DomainMapper::lcl_attribute(Id nName, Value & val) { sal_Int32 nFirstLineIndent = m_pImpl->getCurrentNumberingProperty(u"FirstLineIndent"_ustr); - sal_Int32 nParaFirstLineIndent = ConversionHelper::convertTwipToMM100(nIntValue); + sal_Int32 nParaFirstLineIndent = ConversionHelper::convertTwipToMm100_Limited(nIntValue); if (nParaFirstLineIndent != 0 && nFirstLineIndent == nParaFirstLineIndent) // Avoid direct first margin when it's the same as from the // numbering. @@ -667,7 +667,7 @@ void DomainMapper::lcl_attribute(Id nName, Value & val) break; case NS_ooxml::LN_CT_PageSz_h: { - sal_Int32 nHeight = ConversionHelper::convertTwipToMM100WithoutLimit(nIntValue); + sal_Int32 nHeight = convertTwipToMm100(nIntValue); CT_PageSz.h = PaperInfo::sloppyFitPageDimension(nHeight); } break; @@ -676,7 +676,7 @@ void DomainMapper::lcl_attribute(Id nName, Value & val) break; case NS_ooxml::LN_CT_PageSz_w: { - sal_Int32 nWidth = ConversionHelper::convertTwipToMM100WithoutLimit(nIntValue); + sal_Int32 nWidth = convertTwipToMm100(nIntValue); CT_PageSz.w = PaperInfo::sloppyFitPageDimension(nWidth); } break; @@ -759,43 +759,43 @@ void DomainMapper::lcl_attribute(Id nName, Value & val) // See SwWW8ImplReader::GetParagraphAutoSpace() on why these are 100 and 280 case NS_ooxml::LN_CT_Spacing_beforeAutospacing: { - sal_Int32 default_spacing = -1; + sal_Int32 default_spacing = convertTwipToMm100(-1); if (nIntValue) { m_pImpl->SetParaAutoBefore(true); - default_spacing = 100; + default_spacing = convertTwipToMm100(100); if (!m_pImpl->GetSettingsTable()->GetDoNotUseHTMLParagraphAutoSpacing()) { // 49 is just the old value that should be removed, once the // root cause in SwTabFrm::MakeAll() is fixed. if (m_pImpl->GetSettingsTable()->GetView() == NS_ooxml::LN_Value_doc_ST_View_web) - default_spacing = 49; + default_spacing = convertTwipToMm100(49); else - default_spacing = 280; + default_spacing = convertTwipToMm100(280); } // required at export (here mainly for StyleSheets) to determine if the setting has changed from grab_bag - m_pImpl->GetTopContext()->Insert(PROP_PARA_TOP_MARGIN, uno::Any(ConversionHelper::convertTwipToMM100(default_spacing))); + m_pImpl->GetTopContext()->Insert(PROP_PARA_TOP_MARGIN, uno::Any(default_spacing)); } - m_pImpl->GetTopContext()->Insert( PROP_PARA_TOP_MARGIN_BEFORE_AUTO_SPACING, uno::Any( ConversionHelper::convertTwipToMM100(default_spacing) ),true, PARA_GRAB_BAG ); + m_pImpl->GetTopContext()->Insert( PROP_PARA_TOP_MARGIN_BEFORE_AUTO_SPACING, uno::Any( default_spacing ),true, PARA_GRAB_BAG ); } break; case NS_ooxml::LN_CT_Spacing_afterAutospacing: { - sal_Int32 default_spacing = -1; + sal_Int32 default_spacing = convertTwipToMm100(-1); if (nIntValue) { - default_spacing = 100; + default_spacing = convertTwipToMm100(100); if (!m_pImpl->GetSettingsTable()->GetDoNotUseHTMLParagraphAutoSpacing()) { if (m_pImpl->GetSettingsTable()->GetView() == NS_ooxml::LN_Value_doc_ST_View_web) - default_spacing = 49; + default_spacing = convertTwipToMm100(49); else - default_spacing = 280; + default_spacing = convertTwipToMm100(280); } - m_pImpl->GetTopContext()->Insert(PROP_PARA_BOTTOM_MARGIN, uno::Any(ConversionHelper::convertTwipToMM100(default_spacing))); + m_pImpl->GetTopContext()->Insert(PROP_PARA_BOTTOM_MARGIN, uno::Any(default_spacing)); } - m_pImpl->GetTopContext()->Insert( PROP_PARA_BOTTOM_MARGIN_AFTER_AUTO_SPACING, uno::Any( ConversionHelper::convertTwipToMM100(default_spacing) ),true, PARA_GRAB_BAG ); + m_pImpl->GetTopContext()->Insert( PROP_PARA_BOTTOM_MARGIN_AFTER_AUTO_SPACING, uno::Any( default_spacing ),true, PARA_GRAB_BAG ); } break; case NS_ooxml::LN_CT_SmartTagRun_uri: @@ -906,7 +906,7 @@ void DomainMapper::lcl_attribute(Id nName, Value & val) break; case NS_ooxml::LN_CT_FramePr_x: pParaProperties->props().Setx( - ConversionHelper::convertTwipToMM100(nIntValue )); + ConversionHelper::convertTwipToMm100_Limited(nIntValue)); pParaProperties->props().SetxAlign( text::HoriOrientation::NONE ); break; case NS_ooxml::LN_CT_FramePr_xAlign: @@ -923,7 +923,7 @@ void DomainMapper::lcl_attribute(Id nName, Value & val) break; case NS_ooxml::LN_CT_FramePr_y: pParaProperties->props().Sety( - ConversionHelper::convertTwipToMM100(nIntValue )); + ConversionHelper::convertTwipToMm100_Limited(nIntValue)); pParaProperties->props().SetyAlign( text::VertOrientation::NONE ); break; case NS_ooxml::LN_CT_FramePr_yAlign: @@ -996,19 +996,19 @@ void DomainMapper::lcl_attribute(Id nName, Value & val) break; case NS_ooxml::LN_CT_FramePr_w: pParaProperties->props().Setw( - ConversionHelper::convertTwipToMM100(nIntValue)); + ConversionHelper::convertTwipToMm100_Limited(nIntValue)); break; case NS_ooxml::LN_CT_FramePr_h: pParaProperties->props().Seth( - ConversionHelper::convertTwipToMM100(nIntValue)); + ConversionHelper::convertTwipToMm100_Limited(nIntValue)); break; case NS_ooxml::LN_CT_FramePr_hSpace: pParaProperties->props().SethSpace( - ConversionHelper::convertTwipToMM100(nIntValue )); + ConversionHelper::convertTwipToMm100_Limited(nIntValue)); break; case NS_ooxml::LN_CT_FramePr_vSpace: pParaProperties->props().SetvSpace( - ConversionHelper::convertTwipToMM100(nIntValue )); + ConversionHelper::convertTwipToMm100_Limited(nIntValue)); break; default:; } @@ -1059,7 +1059,7 @@ void DomainMapper::lcl_attribute(Id nName, Value & val) pSectionContext->SetLnnMin( nIntValue ); break; case NS_ooxml::LN_CT_LineNumber_distance: - aSettings.nDistance = ConversionHelper::convertTwipToMM100( nIntValue ); + aSettings.nDistance = ConversionHelper::convertTwipToMm100_Limited(nIntValue); OSL_ENSURE(pSectionContext, "SectionContext unavailable!"); if( pSectionContext ) pSectionContext->SetdxaLnn( nIntValue ); @@ -1087,7 +1087,7 @@ void DomainMapper::lcl_attribute(Id nName, Value & val) OSL_ENSURE(pSectionContext, "SectionContext unavailable!"); if(pSectionContext) { - pSectionContext->SetGridLinePitch( ConversionHelper::convertTwipToMM100( nIntValue ) ); + pSectionContext->SetGridLinePitch( ConversionHelper::convertTwipToMm100_Limited( nIntValue ) ); } } break; @@ -2195,7 +2195,7 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, const PropertyMapPtr& rContext ) //Kerning half point values //TODO: there are two kerning values - // in ww8par6.cxx NS_sprm::LN_CHpsKern is used as boolean AutoKerning - sal_Int16 nResult = static_cast(ConversionHelper::convertTwipToMM100(nIntValue)); + sal_Int16 nResult = static_cast(ConversionHelper::convertTwipToMm100_Limited(nIntValue)); if (m_pImpl->IsInComments()) { nResult = static_cast(nIntValue); @@ -2280,7 +2280,7 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, const PropertyMapPtr& rContext ) case 165: { //page height, rounded to default values, default: 0x3dc0 twip - sal_Int32 nHeight = ConversionHelper::convertTwipToMM100( nIntValue ); + sal_Int32 nHeight = ConversionHelper::convertTwipToMm100_Limited(nIntValue); rContext->Insert( PROP_HEIGHT, uno::Any( PaperInfo::sloppyFitPageDimension( nHeight ) ) ); } break; diff --git a/sw/source/writerfilter/dmapper/DomainMapperTableManager.cxx b/sw/source/writerfilter/dmapper/DomainMapperTableManager.cxx index c38b6ae09e46..1ccdc5533645 100644 --- a/sw/source/writerfilter/dmapper/DomainMapperTableManager.cxx +++ b/sw/source/writerfilter/dmapper/DomainMapperTableManager.cxx @@ -621,7 +621,7 @@ void DomainMapperTableManager::endOfRowAction() } if (m_nTableWidth) // convert sum of grid twip values to 1/100 mm with rounding up to avoid table width loss - m_nTableWidth = static_cast(ceil(ConversionHelper::convertTwipToMM100Double(m_nTableWidth))); + m_nTableWidth = ConversionHelper::convertTwipToMm100_LimitedRoundUp(m_nTableWidth); if (m_nTableWidth > 0 && !m_bTableSizeTypeInserted) { @@ -780,7 +780,7 @@ void DomainMapperTableManager::endOfRowAction() * If table width property set earlier is smaller than the current table row width, * then replace the TABLE_WIDTH property, set earlier. */ - sal_Int32 nFullWidth = static_cast(ceil(ConversionHelper::convertTwipToMM100Double(nFullWidthRelative))); + sal_Int32 nFullWidth = ConversionHelper::convertTwipToMm100_LimitedRoundUp(nFullWidthRelative); sal_Int32 nTableWidth(0); sal_Int32 nTableWidthType(text::SizeType::VARIABLE); pTablePropMap->getValue(TablePropertyMap::TABLE_WIDTH, nTableWidth); diff --git a/sw/source/writerfilter/dmapper/DomainMapper_Impl.cxx b/sw/source/writerfilter/dmapper/DomainMapper_Impl.cxx index 4053baee1164..0f864625dc75 100644 --- a/sw/source/writerfilter/dmapper/DomainMapper_Impl.cxx +++ b/sw/source/writerfilter/dmapper/DomainMapper_Impl.cxx @@ -100,6 +100,7 @@ #include #include #include +#include #include #include #include @@ -2345,7 +2346,7 @@ void DomainMapper_Impl::finishParagraph( const PropertyMapPtr& pPropertyMap, con GetAnyProperty(PROP_PARA_TOP_MARGIN_BEFORE_AUTO_SPACING, pPropertyMap) >>= nBeforeAutospacing; // tdf#137655 only w:beforeAutospacing=0 was specified, but not PARA_TOP_MARGIN // (see default_spacing = -1 in processing of LN_CT_Spacing_beforeAutospacing) - if ( bNoTopmargin && nBeforeAutospacing == ConversionHelper::convertTwipToMM100(-1) ) + if (bNoTopmargin && nBeforeAutospacing == convertTwipToMm100(-1)) { sal_Int32 nStyleAuto = -1; GetPropertyFromParaStyleSheet(PROP_PARA_TOP_MARGIN_BEFORE_AUTO_SPACING) >>= nStyleAuto; @@ -2379,7 +2380,7 @@ void DomainMapper_Impl::finishParagraph( const PropertyMapPtr& pPropertyMap, con if (bIsAutoSet || bNoBottomMargin) { GetAnyProperty(PROP_PARA_BOTTOM_MARGIN_AFTER_AUTO_SPACING, pPropertyMap) >>= nAfterAutospacing; - if (bNoBottomMargin && nAfterAutospacing == ConversionHelper::convertTwipToMM100(-1)) + if (bNoBottomMargin && nAfterAutospacing == convertTwipToMm100(-1)) { sal_Int32 nStyleAuto = -1; GetPropertyFromParaStyleSheet(PROP_PARA_BOTTOM_MARGIN_AFTER_AUTO_SPACING) >>= nStyleAuto; @@ -9457,7 +9458,7 @@ void DomainMapper_Impl::SetLineNumbering( sal_Int32 nLnnMod, sal_uInt32 nLnc, sa xProperties->setPropertyValue( getPropertyName( PROP_COUNT_EMPTY_LINES ), aTrue ); xProperties->setPropertyValue( getPropertyName( PROP_COUNT_LINES_IN_FRAMES ), uno::Any( false ) ); xProperties->setPropertyValue( getPropertyName( PROP_INTERVAL ), uno::Any( static_cast< sal_Int16 >( nLnnMod ))); - xProperties->setPropertyValue( getPropertyName( PROP_DISTANCE ), uno::Any( ConversionHelper::convertTwipToMM100(ndxaLnn) )); + xProperties->setPropertyValue( getPropertyName( PROP_DISTANCE ), uno::Any( ConversionHelper::convertTwipToMm100_Limited(ndxaLnn) )); xProperties->setPropertyValue( getPropertyName( PROP_NUMBER_POSITION ), uno::Any( style::LineNumberPosition::LEFT)); xProperties->setPropertyValue( getPropertyName( PROP_NUMBERING_TYPE ), uno::Any( style::NumberingType::ARABIC)); xProperties->setPropertyValue( getPropertyName( PROP_RESTART_AT_EACH_PAGE ), uno::Any( nLnc == NS_ooxml::LN_Value_ST_LineNumberRestart_newPage )); @@ -9476,7 +9477,7 @@ void DomainMapper_Impl::SetLineNumbering( sal_Int32 nLnnMod, sal_uInt32 nLnc, sa void DomainMapper_Impl::SetPageMarginTwip( PageMarElement eElement, sal_Int32 nValue ) { - nValue = ConversionHelper::convertTwipToMM100(nValue); + nValue = ConversionHelper::convertTwipToMm100_Limited(nValue); switch(eElement) { case PAGE_MAR_TOP : m_aPageMargins.top = nValue; break; @@ -9501,13 +9502,13 @@ void DomainMapper_Impl::SetPaperSource(PaperSourceElement eElement, sal_Int32 nV PageMar::PageMar() - : top(ConversionHelper::convertTwipToMM100( sal_Int32(1440))) + : top(convertTwipToMm100(1440)) // This is strange, the RTF spec says it's 1800, but it's clearly 1440 in Word // OOXML seems not to specify a default value - , right(ConversionHelper::convertTwipToMM100( sal_Int32(1440))) + , right(convertTwipToMm100(1440)) , bottom(top) , left(right) - , header(ConversionHelper::convertTwipToMM100(sal_Int32(720))) + , header(convertTwipToMm100(720)) , footer(header) , gutter(0) { @@ -9701,7 +9702,7 @@ void DomainMapper_Impl::ApplySettingsTable() if (m_pSettingsTable->GetLinkStyles()) { // If linked styles are enabled, set paragraph defaults from Word's default template - xTextDefaults->setPropertyValue(getPropertyName(PROP_PARA_BOTTOM_MARGIN), uno::Any(ConversionHelper::convertTwipToMM100(200))); + xTextDefaults->setPropertyValue(getPropertyName(PROP_PARA_BOTTOM_MARGIN), uno::Any(sal_Int32(convertTwipToMm100(200)))); style::LineSpacing aSpacing; aSpacing.Mode = style::LineSpacingMode::PROP; aSpacing.Height = sal_Int16(115); diff --git a/sw/source/writerfilter/dmapper/GraphicImport.cxx b/sw/source/writerfilter/dmapper/GraphicImport.cxx index b05e3f2334d5..d516d59c2120 100644 --- a/sw/source/writerfilter/dmapper/GraphicImport.cxx +++ b/sw/source/writerfilter/dmapper/GraphicImport.cxx @@ -795,12 +795,12 @@ void GraphicImport::lcl_attribute(Id nName, Value& rValue) } break; case NS_ooxml::LN_CT_Point2D_x: - m_pImpl->m_nLeftPosition = ConversionHelper::convertTwipToMM100(nIntValue); + m_pImpl->m_nLeftPosition = ConversionHelper::convertTwipToMm100_Limited(nIntValue); m_pImpl->m_nHoriRelation = text::RelOrientation::PAGE_FRAME; m_pImpl->m_nHoriOrient = text::HoriOrientation::NONE; break; case NS_ooxml::LN_CT_Point2D_y: - m_pImpl->m_nTopPosition = ConversionHelper::convertTwipToMM100(nIntValue); + m_pImpl->m_nTopPosition = ConversionHelper::convertTwipToMm100_Limited(nIntValue); m_pImpl->m_nVertRelation = text::RelOrientation::PAGE_FRAME; m_pImpl->m_nVertOrient = text::VertOrientation::NONE; break; @@ -1029,10 +1029,10 @@ void GraphicImport::lcl_attribute(Id nName, Value& rValue) if(pShape && pShape->IsGroupObject()) { tools::Rectangle aSnapRect = pShape->GetSnapRect(); // Twips - m_pImpl->m_nLeftPosition = ConversionHelper::convertTwipToMM100(aSnapRect.Left()); - m_pImpl->m_nTopPosition = ConversionHelper::convertTwipToMM100(aSnapRect.Top()); - aLOSize.Width = ConversionHelper::convertTwipToMM100(aSnapRect.getOpenWidth()); - aLOSize.Height = ConversionHelper::convertTwipToMM100(aSnapRect.getOpenHeight()); + m_pImpl->m_nLeftPosition = ConversionHelper::convertTwipToMm100_Limited(aSnapRect.Left()); + m_pImpl->m_nTopPosition = ConversionHelper::convertTwipToMm100_Limited(aSnapRect.Top()); + aLOSize.Width = ConversionHelper::convertTwipToMm100_Limited(aSnapRect.getOpenWidth()); + aLOSize.Height = ConversionHelper::convertTwipToMm100_Limited(aSnapRect.getOpenHeight()); } else { @@ -1097,10 +1097,10 @@ void GraphicImport::lcl_attribute(Id nName, Value& rValue) if (pShape) { tools::Rectangle aSnapRect = pShape->GetSnapRect(); // Twip - aLOSnapRect.X = ConversionHelper::convertTwipToMM100(aSnapRect.Left()); - aLOSnapRect.Y = ConversionHelper::convertTwipToMM100(aSnapRect.Top()); - aLOSnapRect.Width = ConversionHelper::convertTwipToMM100(aSnapRect.getOpenWidth()); - aLOSnapRect.Height = ConversionHelper::convertTwipToMM100(aSnapRect.getOpenHeight()); + aLOSnapRect.X = ConversionHelper::convertTwipToMm100_Limited(aSnapRect.Left()); + aLOSnapRect.Y = ConversionHelper::convertTwipToMm100_Limited(aSnapRect.Top()); + aLOSnapRect.Width = ConversionHelper::convertTwipToMm100_Limited(aSnapRect.getOpenWidth()); + aLOSnapRect.Height = ConversionHelper::convertTwipToMm100_Limited(aSnapRect.getOpenHeight()); } m_pImpl->m_nLeftMargin += aLOSnapRect.X - aMSOBaseLeftTop.X; @@ -1139,10 +1139,10 @@ void GraphicImport::lcl_attribute(Id nName, Value& rValue) if (pShape) { tools::Rectangle aBoundRect = pShape->GetCurrentBoundRect(); // Twip - aLOBoundRect.X = ConversionHelper::convertTwipToMM100(aBoundRect.Left()); - aLOBoundRect.Y = ConversionHelper::convertTwipToMM100(aBoundRect.Top()); - aLOBoundRect.Width = ConversionHelper::convertTwipToMM100(aBoundRect.getOpenWidth()); - aLOBoundRect.Height = ConversionHelper::convertTwipToMM100(aBoundRect.getOpenHeight()); + aLOBoundRect.X = ConversionHelper::convertTwipToMm100_Limited(aBoundRect.Left()); + aLOBoundRect.Y = ConversionHelper::convertTwipToMm100_Limited(aBoundRect.Top()); + aLOBoundRect.Width = ConversionHelper::convertTwipToMm100_Limited(aBoundRect.getOpenWidth()); + aLOBoundRect.Height = ConversionHelper::convertTwipToMm100_Limited(aBoundRect.getOpenHeight()); } m_pImpl->m_nLeftMargin += aLOBoundRect.X - aMSOBaseLeftTop.X; diff --git a/sw/source/writerfilter/dmapper/MeasureHandler.cxx b/sw/source/writerfilter/dmapper/MeasureHandler.cxx index 85aae7602732..63b719b790f5 100644 --- a/sw/source/writerfilter/dmapper/MeasureHandler.cxx +++ b/sw/source/writerfilter/dmapper/MeasureHandler.cxx @@ -109,7 +109,7 @@ sal_Int32 MeasureHandler::getMeasureValue() const // TODO m_nUnit 3 - twip, other values unknown :-( if( m_nUnit == 3 || sal::static_int_cast(m_nUnit) == NS_ooxml::LN_Value_ST_TblWidth_dxa) { - nRet = ConversionHelper::convertTwipToMM100( m_nMeasureValue ); + nRet = ConversionHelper::convertTwipToMm100_Limited(m_nMeasureValue); } //todo: handle additional width types: //NS_ooxml::LN_Value_ST_TblWidth_nil, NS_ooxml::LN_Value_ST_TblWidth_pct, diff --git a/sw/source/writerfilter/dmapper/NumberingManager.cxx b/sw/source/writerfilter/dmapper/NumberingManager.cxx index 3c4c89f156e5..726ba50dbdc0 100644 --- a/sw/source/writerfilter/dmapper/NumberingManager.cxx +++ b/sw/source/writerfilter/dmapper/NumberingManager.cxx @@ -780,17 +780,17 @@ void ListsManager::lcl_attribute( Id nName, Value& rVal ) case NS_ooxml::LN_CT_Ind_left: if ( pCurrentLvl ) pCurrentLvl->Insert( - PROP_INDENT_AT, uno::Any( ConversionHelper::convertTwipToMM100( nIntValue ) )); + PROP_INDENT_AT, uno::Any( ConversionHelper::convertTwipToMm100_Limited( nIntValue ) )); break; case NS_ooxml::LN_CT_Ind_hanging: if ( pCurrentLvl ) pCurrentLvl->Insert( - PROP_FIRST_LINE_INDENT, uno::Any( - ConversionHelper::convertTwipToMM100( nIntValue ) )); + PROP_FIRST_LINE_INDENT, uno::Any( - ConversionHelper::convertTwipToMm100_Limited( nIntValue ) )); break; case NS_ooxml::LN_CT_Ind_firstLine: if ( pCurrentLvl ) pCurrentLvl->Insert( - PROP_FIRST_LINE_INDENT, uno::Any( ConversionHelper::convertTwipToMM100( nIntValue ) )); + PROP_FIRST_LINE_INDENT, uno::Any( ConversionHelper::convertTwipToMm100_Limited( nIntValue ) )); break; case NS_ooxml::LN_CT_Lvl_tplc: //template code - unsupported case NS_ooxml::LN_CT_Lvl_tentative: //marks level as unused in the document - unsupported @@ -800,7 +800,7 @@ void ListsManager::lcl_attribute( Id nName, Value& rVal ) //no paragraph attributes in ListTable char style sheets if ( pCurrentLvl ) pCurrentLvl->SetValue( nName, - ConversionHelper::convertTwipToMM100( nIntValue ) ); + ConversionHelper::convertTwipToMm100_Limited( nIntValue ) ); } break; case NS_ooxml::LN_CT_TabStop_val: diff --git a/sw/source/writerfilter/dmapper/PropertyMap.cxx b/sw/source/writerfilter/dmapper/PropertyMap.cxx index 91d7acc7f4ca..3eeaf79ce4f8 100644 --- a/sw/source/writerfilter/dmapper/PropertyMap.cxx +++ b/sw/source/writerfilter/dmapper/PropertyMap.cxx @@ -1825,7 +1825,7 @@ void SectionPropertyMap::CloseSectionGroup( DomainMapper_Impl& rDM_Impl ) { double fHeight = 0; if ( pPropHeight->second >>= fHeight ) - nCharWidth = ConversionHelper::convertTwipToMM100( static_cast(fHeight * 20.0 + 0.5) ); + nCharWidth = ConversionHelper::convertTwipToMm100_Limited( static_cast(fHeight * 20.0 + 0.5) ); } } @@ -1836,11 +1836,11 @@ void SectionPropertyMap::CloseSectionGroup( DomainMapper_Impl& rDM_Impl ) //main lives in top 20 bits, and is signed. sal_Int32 nMain = (nCharSpace & 0xFFFFF000); nMain /= 0x1000; - nCharWidth += ConversionHelper::convertTwipToMM100( nMain * 20 ); + nCharWidth += ConversionHelper::convertTwipToMm100_Limited(nMain * 20); sal_Int32 nFraction = (nCharSpace & 0x00000FFF); nFraction = (nFraction * 20) / 0xFFF; - nCharWidth += ConversionHelper::convertTwipToMM100( nFraction ); + nCharWidth += ConversionHelper::convertTwipToMm100_Limited(nFraction); } if ( m_nPageNumberType >= 0 ) diff --git a/sw/source/writerfilter/dmapper/SectionColumnHandler.cxx b/sw/source/writerfilter/dmapper/SectionColumnHandler.cxx index 9fed9c34a68e..363eee499d62 100644 --- a/sw/source/writerfilter/dmapper/SectionColumnHandler.cxx +++ b/sw/source/writerfilter/dmapper/SectionColumnHandler.cxx @@ -46,7 +46,7 @@ void SectionColumnHandler::lcl_attribute(Id rName, Value& rVal) m_bEqualWidth = (nIntValue != 0); break; case NS_ooxml::LN_CT_Columns_space: - m_nSpace = ConversionHelper::convertTwipToMM100(nIntValue); + m_nSpace = ConversionHelper::convertTwipToMm100_Limited(nIntValue); break; case NS_ooxml::LN_CT_Columns_num: m_nNum = nIntValue; @@ -56,10 +56,10 @@ void SectionColumnHandler::lcl_attribute(Id rName, Value& rVal) break; case NS_ooxml::LN_CT_Column_w: - m_aTempColumn.nWidth = ConversionHelper::convertTwipToMM100(nIntValue); + m_aTempColumn.nWidth = ConversionHelper::convertTwipToMm100_Limited(nIntValue); break; case NS_ooxml::LN_CT_Column_space: - m_aTempColumn.nSpace = ConversionHelper::convertTwipToMM100(nIntValue); + m_aTempColumn.nSpace = ConversionHelper::convertTwipToMm100_Limited(nIntValue); break; default: OSL_FAIL("SectionColumnHandler: unknown attribute"); diff --git a/sw/source/writerfilter/dmapper/SettingsTable.cxx b/sw/source/writerfilter/dmapper/SettingsTable.cxx index fa67518ced65..dcf42d370371 100644 --- a/sw/source/writerfilter/dmapper/SettingsTable.cxx +++ b/sw/source/writerfilter/dmapper/SettingsTable.cxx @@ -468,7 +468,7 @@ void SettingsTable::lcl_entry(const writerfilter::Reference::Pointer //returns default TabStop in 1/100th mm int SettingsTable::GetDefaultTabStop() const { - return ConversionHelper::convertTwipToMM100( m_pImpl->m_nDefaultTabStop ); + return ConversionHelper::convertTwipToMm100_Limited(m_pImpl->m_nDefaultTabStop); } bool SettingsTable::GetLinkStyles() const diff --git a/sw/source/writerfilter/dmapper/TablePositionHandler.cxx b/sw/source/writerfilter/dmapper/TablePositionHandler.cxx index 97b531d2f9af..176dea0a877f 100644 --- a/sw/source/writerfilter/dmapper/TablePositionHandler.cxx +++ b/sw/source/writerfilter/dmapper/TablePositionHandler.cxx @@ -80,12 +80,14 @@ uno::Sequence TablePositionHandler::getTablePosition() con aFrameProperties[u"TopBorderDistance"_ustr] <<= sal_Int32(0); aFrameProperties[u"BottomBorderDistance"_ustr] <<= sal_Int32(0); - aFrameProperties[u"LeftMargin"_ustr] <<= ConversionHelper::convertTwipToMM100(m_nLeftFromText); + aFrameProperties[u"LeftMargin"_ustr] + <<= ConversionHelper::convertTwipToMm100_Limited(m_nLeftFromText); aFrameProperties[u"RightMargin"_ustr] - <<= ConversionHelper::convertTwipToMM100(m_nRightFromText); - aFrameProperties[u"TopMargin"_ustr] <<= ConversionHelper::convertTwipToMM100(m_nTopFromText); + <<= ConversionHelper::convertTwipToMm100_Limited(m_nRightFromText); + aFrameProperties[u"TopMargin"_ustr] + <<= ConversionHelper::convertTwipToMm100_Limited(m_nTopFromText); aFrameProperties[u"BottomMargin"_ustr] - <<= ConversionHelper::convertTwipToMM100(m_nBottomFromText); + <<= ConversionHelper::convertTwipToMm100_Limited(m_nBottomFromText); table::BorderLine2 aEmptyBorder; aFrameProperties[u"TopBorder"_ustr] <<= aEmptyBorder; @@ -116,7 +118,8 @@ uno::Sequence TablePositionHandler::getTablePosition() con aFrameProperties[u"HoriOrient"_ustr] <<= nHoriOrient; aFrameProperties[u"HoriOrientRelation"_ustr] <<= nHoriOrientRelation; - aFrameProperties[u"HoriOrientPosition"_ustr] <<= ConversionHelper::convertTwipToMM100(m_nX); + aFrameProperties[u"HoriOrientPosition"_ustr] + <<= ConversionHelper::convertTwipToMm100_Limited(m_nX); // Vertical positioning sal_Int16 nVertOrient = text::VertOrientation::NONE; @@ -138,7 +141,8 @@ uno::Sequence TablePositionHandler::getTablePosition() con aFrameProperties[u"VertOrient"_ustr] <<= nVertOrient; aFrameProperties[u"VertOrientRelation"_ustr] <<= nVertOrientRelation; - aFrameProperties[u"VertOrientPosition"_ustr] <<= ConversionHelper::convertTwipToMM100(m_nY); + aFrameProperties[u"VertOrientPosition"_ustr] + <<= ConversionHelper::convertTwipToMm100_Limited(m_nY); aFrameProperties[u"FillTransparence"_ustr] <<= sal_Int32(100); if (m_nTableOverlap == NS_ooxml::LN_Value_ST_TblOverlap_never) From 63f36e4b76992b0ecb568cf2f61d953caa2834c4 Mon Sep 17 00:00:00 2001 From: Mike Kaganski Date: Sat, 29 Jun 2024 21:01:07 +0500 Subject: [PATCH 151/194] Move MapToO3tlLength and FieldToO3tlLength to respective enums' headers Decreases dependency on a bit. Change-Id: Ia469c08ca2844c522f508a724ddc879120d0b50d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169761 Reviewed-by: Mike Kaganski Tested-by: Jenkins --- include/tools/UnitConversion.hxx | 70 -------------------------------- include/tools/fldunit.hxx | 40 ++++++++++++++++++ include/tools/mapunit.hxx | 34 ++++++++++++++++ 3 files changed, 74 insertions(+), 70 deletions(-) diff --git a/include/tools/UnitConversion.hxx b/include/tools/UnitConversion.hxx index 29ebf5dd873c..b7756343252c 100644 --- a/include/tools/UnitConversion.hxx +++ b/include/tools/UnitConversion.hxx @@ -12,77 +12,7 @@ #include #include -#include #include -#include - -constexpr o3tl::Length FieldToO3tlLength(FieldUnit eU, o3tl::Length ePixelValue = o3tl::Length::px) -{ - switch (eU) - { - case FieldUnit::MM: - return o3tl::Length::mm; - case FieldUnit::CM: - return o3tl::Length::cm; - case FieldUnit::M: - return o3tl::Length::m; - case FieldUnit::KM: - return o3tl::Length::km; - case FieldUnit::TWIP: - return o3tl::Length::twip; - case FieldUnit::POINT: - return o3tl::Length::pt; - case FieldUnit::PICA: - return o3tl::Length::pc; - case FieldUnit::INCH: - return o3tl::Length::in; - case FieldUnit::FOOT: - return o3tl::Length::ft; - case FieldUnit::MILE: - return o3tl::Length::mi; - case FieldUnit::CHAR: - return o3tl::Length::ch; - case FieldUnit::LINE: - return o3tl::Length::line; - case FieldUnit::MM_100TH: - return o3tl::Length::mm100; - case FieldUnit::PIXEL: - return ePixelValue; - default: - return o3tl::Length::invalid; - } -} - -constexpr o3tl::Length MapToO3tlLength(MapUnit eU, o3tl::Length ePixelValue = o3tl::Length::px) -{ - switch (eU) - { - case MapUnit::Map100thMM: - return o3tl::Length::mm100; - case MapUnit::Map10thMM: - return o3tl::Length::mm10; - case MapUnit::MapMM: - return o3tl::Length::mm; - case MapUnit::MapCM: - return o3tl::Length::cm; - case MapUnit::Map1000thInch: - return o3tl::Length::in1000; - case MapUnit::Map100thInch: - return o3tl::Length::in100; - case MapUnit::Map10thInch: - return o3tl::Length::in10; - case MapUnit::MapInch: - return o3tl::Length::in; - case MapUnit::MapPoint: - return o3tl::Length::pt; - case MapUnit::MapTwip: - return o3tl::Length::twip; - case MapUnit::MapPixel: - return ePixelValue; - default: - return o3tl::Length::invalid; - } -} inline Fraction conversionFract(o3tl::Length from, o3tl::Length to) { diff --git a/include/tools/fldunit.hxx b/include/tools/fldunit.hxx index a2838c32ff25..72ab9ad92d87 100644 --- a/include/tools/fldunit.hxx +++ b/include/tools/fldunit.hxx @@ -19,6 +19,9 @@ #ifndef INCLUDED_TOOLS_FLDUNIT_HXX #define INCLUDED_TOOLS_FLDUNIT_HXX +#include + +#include #include // Corresponds to offapi/com/sun/star/awt/FieldUnit.idl @@ -46,6 +49,43 @@ enum class FieldUnit : sal_uInt16 MILLISECOND, }; +constexpr o3tl::Length FieldToO3tlLength(FieldUnit eU, o3tl::Length ePixelValue = o3tl::Length::px) +{ + switch (eU) + { + case FieldUnit::MM: + return o3tl::Length::mm; + case FieldUnit::CM: + return o3tl::Length::cm; + case FieldUnit::M: + return o3tl::Length::m; + case FieldUnit::KM: + return o3tl::Length::km; + case FieldUnit::TWIP: + return o3tl::Length::twip; + case FieldUnit::POINT: + return o3tl::Length::pt; + case FieldUnit::PICA: + return o3tl::Length::pc; + case FieldUnit::INCH: + return o3tl::Length::in; + case FieldUnit::FOOT: + return o3tl::Length::ft; + case FieldUnit::MILE: + return o3tl::Length::mi; + case FieldUnit::CHAR: + return o3tl::Length::ch; + case FieldUnit::LINE: + return o3tl::Length::line; + case FieldUnit::MM_100TH: + return o3tl::Length::mm100; + case FieldUnit::PIXEL: + return ePixelValue; + default: + return o3tl::Length::invalid; + } +} + #endif /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/tools/mapunit.hxx b/include/tools/mapunit.hxx index 881a90713cd0..a79950f0d264 100644 --- a/include/tools/mapunit.hxx +++ b/include/tools/mapunit.hxx @@ -18,6 +18,9 @@ */ #pragma once +#include + +#include #include enum class MapUnit : sal_uInt8 @@ -32,4 +35,35 @@ enum class MapUnit : sal_uInt8 LASTENUMDUMMY // used as an error return }; +constexpr o3tl::Length MapToO3tlLength(MapUnit eU, o3tl::Length ePixelValue = o3tl::Length::px) +{ + switch (eU) + { + case MapUnit::Map100thMM: + return o3tl::Length::mm100; + case MapUnit::Map10thMM: + return o3tl::Length::mm10; + case MapUnit::MapMM: + return o3tl::Length::mm; + case MapUnit::MapCM: + return o3tl::Length::cm; + case MapUnit::Map1000thInch: + return o3tl::Length::in1000; + case MapUnit::Map100thInch: + return o3tl::Length::in100; + case MapUnit::Map10thInch: + return o3tl::Length::in10; + case MapUnit::MapInch: + return o3tl::Length::in; + case MapUnit::MapPoint: + return o3tl::Length::pt; + case MapUnit::MapTwip: + return o3tl::Length::twip; + case MapUnit::MapPixel: + return ePixelValue; + default: + return o3tl::Length::invalid; + } +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ From c910d8cd67a042ce722c416f879f566bca5bdd81 Mon Sep 17 00:00:00 2001 From: Andrea Gelmini Date: Sat, 29 Jun 2024 11:28:52 +0200 Subject: [PATCH 152/194] Fix typo Change-Id: Ic80446b21443a025a4d4877730ef097ba39ca66d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169752 Tested-by: Jenkins Reviewed-by: Julien Nabet --- cppu/source/threadpool/threadpool.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cppu/source/threadpool/threadpool.cxx b/cppu/source/threadpool/threadpool.cxx index 5a6127dabcf7..7084978a93d0 100644 --- a/cppu/source/threadpool/threadpool.cxx +++ b/cppu/source/threadpool/threadpool.cxx @@ -106,7 +106,7 @@ namespace cppu_threadpool } /****************** - * This methods lets the thread wait a certain amount of time. If within this timespan + * This method lets the thread wait a certain amount of time. If within this timespan * a new request comes in, this thread is reused. This is done only to improve performance, * it is not required for threadpool functionality. ******************/ From 203bd3f6744649638703d1b4f7f9d517226557ce Mon Sep 17 00:00:00 2001 From: Mike Kaganski Date: Sat, 29 Jun 2024 22:37:09 +0500 Subject: [PATCH 153/194] Fix VBA get*Padding, which returns a floating-point value Introduced in commit f3234f4f14702da71528561418f07ee6670a8c2a (VBA Add Padding properties to XTable, 2022-08-05). The unit test is edited to test that the value returned by the methods is equal to the initially set value, with precision of 0.1 pt. Change-Id: I24144cd0e3c1e72bd2664a2a052ac3c7006595ff Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169762 Reviewed-by: Mike Kaganski Tested-by: Jenkins --- sw/qa/core/data/docm/testTables.docm | Bin 28077 -> 27711 bytes sw/qa/core/macros-test.cxx | 5 ++--- sw/source/ui/vba/vbatable.cxx | 8 ++++---- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/sw/qa/core/data/docm/testTables.docm b/sw/qa/core/data/docm/testTables.docm index 5d4502ade0558bbc0046b5458c821f0abcced5cb..d78f9a0abcfaeac09462e28f7387c9c6eb42e3ca 100644 GIT binary patch delta 21924 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 kfie8u1_{%+1shtjKOGzf_ xPropertySet( mxTextTable, uno::UNO_QUERY_THROW); table::TableBorderDistances aTableBorderDistances; xPropertySet->getPropertyValue(u"TableBorderDistances"_ustr) >>= aTableBorderDistances; - return convertMm100ToPoint(aTableBorderDistances.BottomDistance); + return convertMm100ToPoint(aTableBorderDistances.BottomDistance); } void SAL_CALL @@ -120,7 +120,7 @@ SwVbaTable::getLeftPadding() uno::Reference< beans::XPropertySet > xPropertySet( mxTextTable, uno::UNO_QUERY_THROW); table::TableBorderDistances aTableBorderDistances; xPropertySet->getPropertyValue(u"TableBorderDistances"_ustr) >>= aTableBorderDistances; - return convertMm100ToPoint(aTableBorderDistances.LeftDistance); + return convertMm100ToPoint(aTableBorderDistances.LeftDistance); } void SAL_CALL @@ -139,7 +139,7 @@ SwVbaTable::getRightPadding() uno::Reference< beans::XPropertySet > xPropertySet( mxTextTable, uno::UNO_QUERY_THROW); table::TableBorderDistances aTableBorderDistances; xPropertySet->getPropertyValue(u"TableBorderDistances"_ustr) >>= aTableBorderDistances; - return convertMm100ToPoint(aTableBorderDistances.RightDistance); + return convertMm100ToPoint(aTableBorderDistances.RightDistance); } void SAL_CALL @@ -158,7 +158,7 @@ SwVbaTable::getTopPadding() uno::Reference< beans::XPropertySet > xPropertySet( mxTextTable, uno::UNO_QUERY_THROW); table::TableBorderDistances aTableBorderDistances; xPropertySet->getPropertyValue(u"TableBorderDistances"_ustr) >>= aTableBorderDistances; - return convertMm100ToPoint(aTableBorderDistances.TopDistance); + return convertMm100ToPoint(aTableBorderDistances.TopDistance); } void SAL_CALL From eb56caec68477d11f281090a09c130a416626d88 Mon Sep 17 00:00:00 2001 From: Mike Kaganski Date: Sat, 29 Jun 2024 23:01:21 +0500 Subject: [PATCH 154/194] Fix VBA Table's *Padding properties type In VBA, it is Single, not Double. See VBA documentation: https://learn.microsoft.com/en-us/office/vba/api/word.table.bottompadding https://learn.microsoft.com/en-us/office/vba/api/word.table.leftpadding https://learn.microsoft.com/en-us/office/vba/api/word.table.rightpadding https://learn.microsoft.com/en-us/office/vba/api/word.table.toppadding Change-Id: I9262462424fc11b5c062a61754ab0fab9103f549 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169763 Reviewed-by: Mike Kaganski Tested-by: Jenkins --- oovbaapi/ooo/vba/word/XTable.idl | 8 ++++---- sw/source/ui/vba/vbatable.cxx | 16 ++++++++-------- sw/source/ui/vba/vbatable.hxx | 16 ++++++++-------- 3 files changed, 20 insertions(+), 20 deletions(-) diff --git a/oovbaapi/ooo/vba/word/XTable.idl b/oovbaapi/ooo/vba/word/XTable.idl index 683e859e4040..42b05950785c 100644 --- a/oovbaapi/ooo/vba/word/XTable.idl +++ b/oovbaapi/ooo/vba/word/XTable.idl @@ -55,10 +55,10 @@ interface XTable any Rows([in] any aIndex ); any Columns([in] any aIndex ); - [attribute] double BottomPadding; - [attribute] double LeftPadding; - [attribute] double RightPadding; - [attribute] double TopPadding; + [attribute] float BottomPadding; + [attribute] float LeftPadding; + [attribute] float RightPadding; + [attribute] float TopPadding; }; }; }; }; diff --git a/sw/source/ui/vba/vbatable.cxx b/sw/source/ui/vba/vbatable.cxx index 599991a8564b..12825a7fadde 100644 --- a/sw/source/ui/vba/vbatable.cxx +++ b/sw/source/ui/vba/vbatable.cxx @@ -95,7 +95,7 @@ SwVbaTable::Borders( const uno::Any& index ) return uno::Any( xCol ); } -double SAL_CALL +float SAL_CALL SwVbaTable::getBottomPadding() { uno::Reference< beans::XPropertySet > xPropertySet( mxTextTable, uno::UNO_QUERY_THROW); @@ -105,7 +105,7 @@ SwVbaTable::getBottomPadding() } void SAL_CALL -SwVbaTable::setBottomPadding( double fValue ) +SwVbaTable::setBottomPadding( float fValue ) { uno::Reference< beans::XPropertySet > xPropertySet( mxTextTable, uno::UNO_QUERY_THROW); table::TableBorderDistances aTableBorderDistances; @@ -114,7 +114,7 @@ SwVbaTable::setBottomPadding( double fValue ) xPropertySet->setPropertyValue( u"TableBorderDistances"_ustr, uno::Any( aTableBorderDistances ) ); } -double SAL_CALL +float SAL_CALL SwVbaTable::getLeftPadding() { uno::Reference< beans::XPropertySet > xPropertySet( mxTextTable, uno::UNO_QUERY_THROW); @@ -124,7 +124,7 @@ SwVbaTable::getLeftPadding() } void SAL_CALL -SwVbaTable::setLeftPadding( double fValue ) +SwVbaTable::setLeftPadding( float fValue ) { uno::Reference< beans::XPropertySet > xPropertySet( mxTextTable, uno::UNO_QUERY_THROW); table::TableBorderDistances aTableBorderDistances; @@ -133,7 +133,7 @@ SwVbaTable::setLeftPadding( double fValue ) xPropertySet->setPropertyValue( u"TableBorderDistances"_ustr, uno::Any( aTableBorderDistances ) ); } -double SAL_CALL +float SAL_CALL SwVbaTable::getRightPadding() { uno::Reference< beans::XPropertySet > xPropertySet( mxTextTable, uno::UNO_QUERY_THROW); @@ -143,7 +143,7 @@ SwVbaTable::getRightPadding() } void SAL_CALL -SwVbaTable::setRightPadding( double fValue ) +SwVbaTable::setRightPadding( float fValue ) { uno::Reference< beans::XPropertySet > xPropertySet( mxTextTable, uno::UNO_QUERY_THROW); table::TableBorderDistances aTableBorderDistances; @@ -152,7 +152,7 @@ SwVbaTable::setRightPadding( double fValue ) xPropertySet->setPropertyValue( u"TableBorderDistances"_ustr, uno::Any( aTableBorderDistances ) ); } -double SAL_CALL +float SAL_CALL SwVbaTable::getTopPadding() { uno::Reference< beans::XPropertySet > xPropertySet( mxTextTable, uno::UNO_QUERY_THROW); @@ -162,7 +162,7 @@ SwVbaTable::getTopPadding() } void SAL_CALL -SwVbaTable::setTopPadding( double fValue ) +SwVbaTable::setTopPadding( float fValue ) { uno::Reference< beans::XPropertySet > xPropertySet( mxTextTable, uno::UNO_QUERY_THROW); table::TableBorderDistances aTableBorderDistances; diff --git a/sw/source/ui/vba/vbatable.hxx b/sw/source/ui/vba/vbatable.hxx index 2bb802b5c605..0cd2502e07b0 100644 --- a/sw/source/ui/vba/vbatable.hxx +++ b/sw/source/ui/vba/vbatable.hxx @@ -39,14 +39,14 @@ public: virtual void SAL_CALL Delete( ) override; virtual OUString SAL_CALL getName( ) override; virtual css::uno::Any SAL_CALL Borders( const css::uno::Any& aIndex ) override; - virtual double SAL_CALL getBottomPadding( ) override; - virtual void SAL_CALL setBottomPadding( double fValue ) override; - virtual double SAL_CALL getLeftPadding( ) override; - virtual void SAL_CALL setLeftPadding( double fValue ) override; - virtual double SAL_CALL getRightPadding( ) override; - virtual void SAL_CALL setRightPadding( double fValue ) override; - virtual double SAL_CALL getTopPadding( ) override; - virtual void SAL_CALL setTopPadding( double fValue ) override; + virtual float SAL_CALL getBottomPadding( ) override; + virtual void SAL_CALL setBottomPadding( float fValue ) override; + virtual float SAL_CALL getLeftPadding( ) override; + virtual void SAL_CALL setLeftPadding( float fValue ) override; + virtual float SAL_CALL getRightPadding( ) override; + virtual void SAL_CALL setRightPadding( float fValue ) override; + virtual float SAL_CALL getTopPadding( ) override; + virtual void SAL_CALL setTopPadding( float fValue ) override; virtual css::uno::Any SAL_CALL Rows( const css::uno::Any& aIndex ) override; virtual css::uno::Any SAL_CALL Columns( const css::uno::Any& aIndex ) override; From e6b974fd699dcef28a7c26a96c74f3b9a8df9cab Mon Sep 17 00:00:00 2001 From: Tibor Nagy Date: Mon, 22 Apr 2024 16:09:04 +0200 Subject: [PATCH 155/194] tdf#157216 PPTX: add "glue points" to flowchart shapes Change-Id: I1595c3ddcca08e4e95da608edbe18edc57b41362 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/166457 Tested-by: Jenkins Reviewed-by: Nagy Tibor --- .../customshapes/oox-drawingml-cs-presets | 56 +++++++++--------- sd/qa/unit/data/pptx/tdf157216.pptx | Bin 0 -> 33660 bytes sd/qa/unit/import-tests.cxx | 29 +++++++++ 3 files changed, 57 insertions(+), 28 deletions(-) create mode 100644 sd/qa/unit/data/pptx/tdf157216.pptx diff --git a/oox/source/drawingml/customshapes/oox-drawingml-cs-presets b/oox/source/drawingml/customshapes/oox-drawingml-cs-presets index a88d3004006d..004bf6abfadd 100644 --- a/oox/source/drawingml/customshapes/oox-drawingml-cs-presets +++ b/oox/source/drawingml/customshapes/oox-drawingml-cs-presets @@ -1132,7 +1132,7 @@ false MirroredY false Path -([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 10 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 11 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 12 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 13 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 9 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 14 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 15 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 8 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 16 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 17 }, Type = (short) 1 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 17, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 17, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 17, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 17, Count = (short) 1 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } +([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 10 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 11 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 12 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 13 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 9 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 14 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 15 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 8 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 16 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 17 }, Type = (short) 1 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "GluePoints", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 7 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 8 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 9 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 7 }, Type = (short) 1 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 17, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 17, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 17, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 17, Count = (short) 1 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } Type "ooxml-non-primitive" ViewBox @@ -1149,7 +1149,7 @@ false MirroredY false Path -([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 5 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "SubViewSize", Handle = (long) 0, Value = (any) { ([]com.sun.star.awt.Size) { { Width = (long) 2, Height = (long) 2 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 1 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } +([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "GluePoints", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 5 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "SubViewSize", Handle = (long) 0, Value = (any) { ([]com.sun.star.awt.Size) { { Width = (long) 2, Height = (long) 2 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 1 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } Type "ooxml-non-primitive" ViewBox @@ -1166,7 +1166,7 @@ false MirroredY false Path -([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 7 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 12 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 13 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 14 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 15 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 16 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 17 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 18 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 19 }, Type = (short) 1 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 17, Count = (short) 4 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 8 }, Type = (short) 1 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 9 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } +([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 7 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 12 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 13 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 14 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 15 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 16 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 17 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 18 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 19 }, Type = (short) 1 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "GluePoints", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 8 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 7 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 9 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 10 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 9 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 11 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 7 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 8 }, Type = (short) 1 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 17, Count = (short) 4 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 8 }, Type = (short) 1 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 9 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } Type "ooxml-non-primitive" ViewBox @@ -1183,7 +1183,7 @@ false MirroredY false Path -([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 0 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 3 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "SubViewSize", Handle = (long) 0, Value = (any) { ([]com.sun.star.awt.Size) { { Width = (long) 2, Height = (long) 2 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 7 }, Type = (short) 1 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } +([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 0 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "GluePoints", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 3 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "SubViewSize", Handle = (long) 0, Value = (any) { ([]com.sun.star.awt.Size) { { Width = (long) 2, Height = (long) 2 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 7 }, Type = (short) 1 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } Type "ooxml-non-primitive" ViewBox @@ -1200,7 +1200,7 @@ false MirroredY false Path -([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 11 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 12 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 9 }, Type = (short) 1 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 17, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 7 }, Type = (short) 1 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 8 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } +([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 11 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 12 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 9 }, Type = (short) 1 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "GluePoints", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 9 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 10 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 17, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 7 }, Type = (short) 1 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 8 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } Type "ooxml-non-primitive" ViewBox @@ -1217,7 +1217,7 @@ false MirroredY false Path -([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 7 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 0 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 2 }, { Command = (short) 17, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "SubViewSize", Handle = (long) 0, Value = (any) { ([]com.sun.star.awt.Size) { { Width = (long) 6, Height = (long) 6 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } +([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 7 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 0 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "GluePoints", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 2 }, { Command = (short) 17, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "SubViewSize", Handle = (long) 0, Value = (any) { ([]com.sun.star.awt.Size) { { Width = (long) 6, Height = (long) 6 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } Type "ooxml-non-primitive" ViewBox @@ -1234,7 +1234,7 @@ false MirroredY false Path -([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 21600 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 21600 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 17322 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 10800 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 17322 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 10800 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 23922 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 20172 }, Type = (short) 0 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 2 }, { Command = (short) 3, Count = (short) 1 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "SubViewSize", Handle = (long) 0, Value = (any) { ([]com.sun.star.awt.Size) { { Width = (long) 21600, Height = (long) 21600 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } +([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 21600 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 21600 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 17322 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 10800 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 17322 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 10800 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 23922 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 20172 }, Type = (short) 0 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "GluePoints", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 2 }, { Command = (short) 3, Count = (short) 1 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "SubViewSize", Handle = (long) 0, Value = (any) { ([]com.sun.star.awt.Size) { { Width = (long) 21600, Height = (long) 21600 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } Type "ooxml-non-primitive" ViewBox @@ -1251,7 +1251,7 @@ false MirroredY false Path -([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 0 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 2 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "SubViewSize", Handle = (long) 0, Value = (any) { ([]com.sun.star.awt.Size) { { Width = (long) 2, Height = (long) 2 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } +([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 0 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "GluePoints", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 2 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "SubViewSize", Handle = (long) 0, Value = (any) { ([]com.sun.star.awt.Size) { { Width = (long) 2, Height = (long) 2 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } Type "ooxml-non-primitive" ViewBox @@ -1268,7 +1268,7 @@ false MirroredY false Path -([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 3 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "SubViewSize", Handle = (long) 0, Value = (any) { ([]com.sun.star.awt.Size) { { Width = (long) 5, Height = (long) 5 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 8 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 7 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } +([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "GluePoints", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 7 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 7 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 1 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 3 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "SubViewSize", Handle = (long) 0, Value = (any) { ([]com.sun.star.awt.Size) { { Width = (long) 5, Height = (long) 5 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 8 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 7 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } Type "ooxml-non-primitive" ViewBox @@ -1285,7 +1285,7 @@ false MirroredY false Path -([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 8 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 8 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 3 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 7, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 }, { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 6, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 }, { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 3 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 6, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "SubViewSize", Handle = (long) 0, Value = (any) { ([]com.sun.star.awt.Size) { { Width = (long) 1, Height = (long) 1 }, { Width = (long) 8, Height = (long) 8 }, { Width = (long) 1, Height = (long) 1 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } +([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 8 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 8 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "GluePoints", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 1 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 3 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 7, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 }, { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 6, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 }, { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 3 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 6, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "SubViewSize", Handle = (long) 0, Value = (any) { ([]com.sun.star.awt.Size) { { Width = (long) 1, Height = (long) 1 }, { Width = (long) 8, Height = (long) 8 }, { Width = (long) 1, Height = (long) 1 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } Type "ooxml-non-primitive" ViewBox @@ -1302,7 +1302,7 @@ false MirroredY false Path -([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 7 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 8 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 9 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 10 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 11 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 12 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 13 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 14 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 15 }, Type = (short) 1 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 17, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 17, Count = (short) 1 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 7, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 }, { Command = (short) 1, Count = (short) 1 }, { Command = (short) 17, Count = (short) 1 }, { Command = (short) 6, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 }, { Command = (short) 1, Count = (short) 1 }, { Command = (short) 17, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 17, Count = (short) 1 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 6, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "SubViewSize", Handle = (long) 0, Value = (any) { ([]com.sun.star.awt.Size) { { Width = (long) 6, Height = (long) 6 }, { Width = (long) 6, Height = (long) 6 }, { Width = (long) 6, Height = (long) 6 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } +([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 7 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 8 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 9 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 10 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 11 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 12 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 13 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 14 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 15 }, Type = (short) 1 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "GluePoints", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 17, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 17, Count = (short) 1 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 7, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 }, { Command = (short) 1, Count = (short) 1 }, { Command = (short) 17, Count = (short) 1 }, { Command = (short) 6, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 }, { Command = (short) 1, Count = (short) 1 }, { Command = (short) 17, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 17, Count = (short) 1 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 6, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "SubViewSize", Handle = (long) 0, Value = (any) { ([]com.sun.star.awt.Size) { { Width = (long) 6, Height = (long) 6 }, { Width = (long) 6, Height = (long) 6 }, { Width = (long) 6, Height = (long) 6 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } Type "ooxml-non-primitive" ViewBox @@ -1319,7 +1319,7 @@ false MirroredY false Path -([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 7 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 8 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 9 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 10 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 11 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 12 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 13 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 14 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 15 }, Type = (short) 1 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 17, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 17, Count = (short) 1 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 7, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 }, { Command = (short) 1, Count = (short) 1 }, { Command = (short) 17, Count = (short) 1 }, { Command = (short) 6, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 }, { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 17, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 17, Count = (short) 1 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 6, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "SubViewSize", Handle = (long) 0, Value = (any) { ([]com.sun.star.awt.Size) { { Width = (long) 6, Height = (long) 6 }, { Width = (long) 6, Height = (long) 6 }, { Width = (long) 6, Height = (long) 6 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } +([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 7 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 8 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 9 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 10 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 11 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 12 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 13 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 14 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 15 }, Type = (short) 1 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "GluePoints", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 17, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 17, Count = (short) 1 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 7, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 }, { Command = (short) 1, Count = (short) 1 }, { Command = (short) 17, Count = (short) 1 }, { Command = (short) 6, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 }, { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 17, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 17, Count = (short) 1 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 6, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "SubViewSize", Handle = (long) 0, Value = (any) { ([]com.sun.star.awt.Size) { { Width = (long) 6, Height = (long) 6 }, { Width = (long) 6, Height = (long) 6 }, { Width = (long) 6, Height = (long) 6 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } Type "ooxml-non-primitive" ViewBox @@ -1336,7 +1336,7 @@ false MirroredY false Path -([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 11 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 13 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 14 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 15 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 16 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 17 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 18 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 19 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 20 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 12 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 9 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 12 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 11 }, Type = (short) 1 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 17, Count = (short) 4 }, { Command = (short) 2, Count = (short) 2 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 8 }, Type = (short) 1 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 9 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } +([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 11 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 13 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 14 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 15 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 16 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 17 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 18 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 19 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 20 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 12 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 9 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 12 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 11 }, Type = (short) 1 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "GluePoints", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 10 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 10 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 17, Count = (short) 4 }, { Command = (short) 2, Count = (short) 2 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 8 }, Type = (short) 1 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 9 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } Type "ooxml-non-primitive" ViewBox @@ -1353,7 +1353,7 @@ false MirroredY false Path -([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 3 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "SubViewSize", Handle = (long) 0, Value = (any) { ([]com.sun.star.awt.Size) { { Width = (long) 5, Height = (long) 5 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } +([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "GluePoints", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 3 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "SubViewSize", Handle = (long) 0, Value = (any) { ([]com.sun.star.awt.Size) { { Width = (long) 5, Height = (long) 5 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } Type "ooxml-non-primitive" ViewBox @@ -1370,7 +1370,7 @@ false MirroredY false Path -([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 3 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "SubViewSize", Handle = (long) 0, Value = (any) { ([]com.sun.star.awt.Size) { { Width = (long) 5, Height = (long) 5 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } +([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "GluePoints", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 3 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "SubViewSize", Handle = (long) 0, Value = (any) { ([]com.sun.star.awt.Size) { { Width = (long) 5, Height = (long) 5 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } Type "ooxml-non-primitive" ViewBox @@ -1387,7 +1387,7 @@ false MirroredY false Path -([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 0 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 2 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "SubViewSize", Handle = (long) 0, Value = (any) { ([]com.sun.star.awt.Size) { { Width = (long) 2, Height = (long) 2 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } +([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 0 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "GluePoints", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 2 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "SubViewSize", Handle = (long) 0, Value = (any) { ([]com.sun.star.awt.Size) { { Width = (long) 2, Height = (long) 2 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } Type "ooxml-non-primitive" ViewBox @@ -1404,7 +1404,7 @@ false MirroredY false Path -([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 20782 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 9298 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 23542 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 9298 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 18022 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 18595 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 18022 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 18595 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3675 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3675 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1532 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3675 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1532 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1815 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 20000 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1815 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 20000 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 16252 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 19298 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 16252 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 18595 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 16352 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 18595 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 16352 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 18595 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3675 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2972 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1815 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2972 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 21600 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 21600 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 14392 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 20800 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 14392 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 20000 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 14467 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 20000 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 14467 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 20000 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1815 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3675 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 18595 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3675 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 18595 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 18022 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 9298 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 18022 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 9298 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 23542 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 20782 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1532 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3675 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1532 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1815 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 20000 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1815 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 20000 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 16252 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 19298 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 16252 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 18595 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 16352 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 18595 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 16352 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2972 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1815 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2972 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 21600 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 21600 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 14392 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 20800 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 14392 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 20000 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 14467 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 20000 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 14467 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 20782 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 9298 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 23542 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 9298 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 18022 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 18595 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 18022 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 18595 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 16352 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 18595 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 16352 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 19298 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 16252 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 20000 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 16252 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 20000 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 14467 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 20000 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 14467 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 20800 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 14392 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 21600 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 14392 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 21600 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2972 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2972 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1815 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1532 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1815 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1532 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3675 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3675 }, Type = (short) 0 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 3, Count = (short) 1 }, { Command = (short) 2, Count = (short) 2 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 3 }, { Command = (short) 3, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 3 }, { Command = (short) 3, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 7, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 }, { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 2 }, { Command = (short) 3, Count = (short) 1 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 3 }, { Command = (short) 3, Count = (short) 1 }, { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 3 }, { Command = (short) 3, Count = (short) 1 }, { Command = (short) 6, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 }, { Command = (short) 1, Count = (short) 1 }, { Command = (short) 3, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 3, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 3, Count = (short) 1 }, { Command = (short) 2, Count = (short) 6 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 6, Count = (short) 0 }, { Command = (short) 7, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "SubViewSize", Handle = (long) 0, Value = (any) { ([]com.sun.star.awt.Size) { { Width = (long) 21600, Height = (long) 21600 }, { Width = (long) 21600, Height = (long) 21600 }, { Width = (long) 21600, Height = (long) 21600 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } +([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 20782 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 9298 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 23542 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 9298 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 18022 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 18595 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 18022 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 18595 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3675 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3675 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1532 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3675 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1532 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1815 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 20000 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1815 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 20000 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 16252 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 19298 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 16252 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 18595 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 16352 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 18595 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 16352 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 18595 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3675 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2972 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1815 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2972 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 21600 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 21600 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 14392 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 20800 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 14392 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 20000 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 14467 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 20000 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 14467 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 20000 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1815 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3675 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 18595 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3675 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 18595 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 18022 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 9298 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 18022 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 9298 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 23542 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 20782 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1532 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3675 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1532 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1815 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 20000 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1815 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 20000 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 16252 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 19298 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 16252 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 18595 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 16352 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 18595 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 16352 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2972 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1815 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2972 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 21600 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 21600 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 14392 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 20800 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 14392 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 20000 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 14467 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 20000 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 14467 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 20782 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 9298 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 23542 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 9298 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 18022 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 18595 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 18022 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 18595 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 16352 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 18595 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 16352 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 19298 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 16252 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 20000 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 16252 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 20000 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 14467 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 20000 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 14467 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 20800 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 14392 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 21600 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 14392 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 21600 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2972 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2972 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1815 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1532 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1815 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1532 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3675 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3675 }, Type = (short) 0 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "GluePoints", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 3, Count = (short) 1 }, { Command = (short) 2, Count = (short) 2 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 3 }, { Command = (short) 3, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 3 }, { Command = (short) 3, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 7, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 }, { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 2 }, { Command = (short) 3, Count = (short) 1 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 3 }, { Command = (short) 3, Count = (short) 1 }, { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 3 }, { Command = (short) 3, Count = (short) 1 }, { Command = (short) 6, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 }, { Command = (short) 1, Count = (short) 1 }, { Command = (short) 3, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 3, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 3, Count = (short) 1 }, { Command = (short) 2, Count = (short) 6 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 6, Count = (short) 0 }, { Command = (short) 7, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "SubViewSize", Handle = (long) 0, Value = (any) { ([]com.sun.star.awt.Size) { { Width = (long) 21600, Height = (long) 21600 }, { Width = (long) 21600, Height = (long) 21600 }, { Width = (long) 21600, Height = (long) 21600 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } Type "ooxml-non-primitive" ViewBox @@ -1438,7 +1438,7 @@ false MirroredY false Path -([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 10 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 10 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 8 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 10 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 8 }, Type = (short) 0 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 4 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "SubViewSize", Handle = (long) 0, Value = (any) { ([]com.sun.star.awt.Size) { { Width = (long) 10, Height = (long) 10 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } +([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 10 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 10 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 8 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 10 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 8 }, Type = (short) 0 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "GluePoints", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 4 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "SubViewSize", Handle = (long) 0, Value = (any) { ([]com.sun.star.awt.Size) { { Width = (long) 10, Height = (long) 10 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } Type "ooxml-non-primitive" ViewBox @@ -1455,7 +1455,7 @@ false MirroredY false Path -([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 7 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 8 }, Type = (short) 1 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 17, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 17, Count = (short) 1 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "SubViewSize", Handle = (long) 0, Value = (any) { ([]com.sun.star.awt.Size) { { Width = (long) 6, Height = (long) 6 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } +([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 7 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 8 }, Type = (short) 1 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "GluePoints", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 17, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 17, Count = (short) 1 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "SubViewSize", Handle = (long) 0, Value = (any) { ([]com.sun.star.awt.Size) { { Width = (long) 6, Height = (long) 6 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } Type "ooxml-non-primitive" ViewBox @@ -1472,7 +1472,7 @@ false MirroredY false Path -([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 7 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 12 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 13 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 14 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 15 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 16 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 17 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 18 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 19 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 10 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 7 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 11 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 7 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 7 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 20 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 21 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 22 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 23 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 24 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 25 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 26 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 27 }, Type = (short) 1 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 17, Count = (short) 4 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 7, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 }, { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 6, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 }, { Command = (short) 1, Count = (short) 1 }, { Command = (short) 17, Count = (short) 4 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 6, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 8 }, Type = (short) 1 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 9 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } +([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 7 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 12 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 13 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 14 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 15 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 16 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 17 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 18 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 19 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 10 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 7 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 11 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 7 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 7 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 20 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 21 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 22 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 23 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 24 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 25 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 26 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 27 }, Type = (short) 1 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "GluePoints", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 8 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 7 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 9 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 10 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 9 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 11 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 7 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 8 }, Type = (short) 1 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 17, Count = (short) 4 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 7, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 }, { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 6, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 }, { Command = (short) 1, Count = (short) 1 }, { Command = (short) 17, Count = (short) 4 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 6, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 8 }, Type = (short) 1 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 9 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } Type "ooxml-non-primitive" ViewBox @@ -1489,7 +1489,7 @@ false MirroredY false Path -([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 8 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 7 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 7 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 8 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 3 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 7, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 }, { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 6, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 }, { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 3 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 6, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "SubViewSize", Handle = (long) 0, Value = (any) { ([]com.sun.star.awt.Size) { { Width = (long) 1, Height = (long) 1 }, { Width = (long) 8, Height = (long) 8 }, { Width = (long) 1, Height = (long) 1 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } +([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 8 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 7 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 7 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 8 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "GluePoints", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 3 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 7, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 }, { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 6, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 }, { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 3 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 6, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "SubViewSize", Handle = (long) 0, Value = (any) { ([]com.sun.star.awt.Size) { { Width = (long) 1, Height = (long) 1 }, { Width = (long) 8, Height = (long) 8 }, { Width = (long) 1, Height = (long) 1 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } Type "ooxml-non-primitive" ViewBox @@ -1506,7 +1506,7 @@ false MirroredY false Path -([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 8 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 10 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 8 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 10 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 10 }, Type = (short) 0 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 5 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "SubViewSize", Handle = (long) 0, Value = (any) { ([]com.sun.star.awt.Size) { { Width = (long) 10, Height = (long) 10 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } +([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 8 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 10 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 8 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 10 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 10 }, Type = (short) 0 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "GluePoints", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 5 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "SubViewSize", Handle = (long) 0, Value = (any) { ([]com.sun.star.awt.Size) { { Width = (long) 10, Height = (long) 10 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } Type "ooxml-non-primitive" ViewBox @@ -1523,7 +1523,7 @@ false MirroredY false Path -([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 3 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "SubViewSize", Handle = (long) 0, Value = (any) { ([]com.sun.star.awt.Size) { { Width = (long) 1, Height = (long) 1 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } +([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "GluePoints", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 1 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 3 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "SubViewSize", Handle = (long) 0, Value = (any) { ([]com.sun.star.awt.Size) { { Width = (long) 1, Height = (long) 1 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } Type "ooxml-non-primitive" ViewBox @@ -1540,7 +1540,7 @@ false MirroredY false Path -([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 4 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "SubViewSize", Handle = (long) 0, Value = (any) { ([]com.sun.star.awt.Size) { { Width = (long) 5, Height = (long) 5 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } +([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "GluePoints", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 1 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 4 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "SubViewSize", Handle = (long) 0, Value = (any) { ([]com.sun.star.awt.Size) { { Width = (long) 5, Height = (long) 5 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } Type "ooxml-non-primitive" ViewBox @@ -1557,7 +1557,7 @@ false MirroredY false Path -([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 7 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 8 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 9 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 10 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 20 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 18 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 11 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 12 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 13 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 14 }, Type = (short) 1 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 17, Count = (short) 2 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 17, Count = (short) 2 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "SubViewSize", Handle = (long) 0, Value = (any) { ([]com.sun.star.awt.Size) { { Width = (long) 20, Height = (long) 20 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 1 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } +([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 7 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 8 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 9 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 10 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 20 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 18 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 11 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 12 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 13 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 14 }, Type = (short) 1 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "GluePoints", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 17, Count = (short) 2 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 17, Count = (short) 2 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "SubViewSize", Handle = (long) 0, Value = (any) { ([]com.sun.star.awt.Size) { { Width = (long) 20, Height = (long) 20 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 1 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } Type "ooxml-non-primitive" ViewBox @@ -1574,7 +1574,7 @@ false MirroredY false Path -([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 0 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 3 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 7, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 }, { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 6, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 }, { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 3 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 6, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "SubViewSize", Handle = (long) 0, Value = (any) { ([]com.sun.star.awt.Size) { { Width = (long) 2, Height = (long) 2 }, { Width = (long) 2, Height = (long) 2 }, { Width = (long) 2, Height = (long) 2 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 7 }, Type = (short) 1 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } +([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 0 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "GluePoints", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 3 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 7, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 }, { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 6, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 }, { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 3 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 6, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "SubViewSize", Handle = (long) 0, Value = (any) { ([]com.sun.star.awt.Size) { { Width = (long) 2, Height = (long) 2 }, { Width = (long) 2, Height = (long) 2 }, { Width = (long) 2, Height = (long) 2 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 7 }, Type = (short) 1 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } Type "ooxml-non-primitive" ViewBox @@ -1591,7 +1591,7 @@ false MirroredY false Path -([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 7 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 12 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 13 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 14 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 15 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 16 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 17 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 18 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 19 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 8 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 9 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 8 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 9 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 7 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 20 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 21 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 22 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 23 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 24 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 25 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 26 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 27 }, Type = (short) 1 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 17, Count = (short) 4 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 7, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 }, { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 6, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 }, { Command = (short) 1, Count = (short) 1 }, { Command = (short) 17, Count = (short) 4 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 6, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 8 }, Type = (short) 1 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 9 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } +([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 7 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 12 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 13 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 14 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 15 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 16 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 17 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 18 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 19 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 8 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 9 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 8 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 9 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 7 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 20 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 21 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 22 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 23 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 24 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 25 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 26 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 27 }, Type = (short) 1 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "GluePoints", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 8 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 7 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 9 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 10 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 9 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 11 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 7 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 8 }, Type = (short) 1 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 17, Count = (short) 4 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 7, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 }, { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 6, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 }, { Command = (short) 1, Count = (short) 1 }, { Command = (short) 17, Count = (short) 4 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 6, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 8 }, Type = (short) 1 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 9 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } Type "ooxml-non-primitive" ViewBox @@ -1608,7 +1608,7 @@ false MirroredY false Path -([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3475 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 18125 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3475 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 10800 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 8 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 9 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3475 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 21600 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3475 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 10800 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 10 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 11 }, Type = (short) 1 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 17, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 17, Count = (short) 1 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "SubViewSize", Handle = (long) 0, Value = (any) { ([]com.sun.star.awt.Size) { { Width = (long) 21600, Height = (long) 21600 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } +([]com.sun.star.beans.PropertyValue) { { Name = "Coordinates", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3475 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 18125 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3475 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 10800 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 8 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 9 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3475 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 21600 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3475 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 10800 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 10 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 11 }, Type = (short) 1 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "GluePoints", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeParameterPair) { { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 0 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 4 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 6 }, Type = (short) 1 } }, { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 7 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 5 }, Type = (short) 1 } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "Segments", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeSegment) { { Command = (short) 1, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 17, Count = (short) 1 }, { Command = (short) 2, Count = (short) 1 }, { Command = (short) 17, Count = (short) 1 }, { Command = (short) 4, Count = (short) 0 }, { Command = (short) 5, Count = (short) 0 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "SubViewSize", Handle = (long) 0, Value = (any) { ([]com.sun.star.awt.Size) { { Width = (long) 21600, Height = (long) 21600 } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE }, { Name = "TextFrames", Handle = (long) 0, Value = (any) { ([]com.sun.star.drawing.EnhancedCustomShapeTextFrame) { { TopLeft = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 0 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 2 }, Type = (short) 1 } }, BottomRight = (com.sun.star.drawing.EnhancedCustomShapeParameterPair) { First = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 1 }, Type = (short) 1 }, Second = (com.sun.star.drawing.EnhancedCustomShapeParameter) { Value = (any) { (long) 3 }, Type = (short) 1 } } } } }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE } } Type "ooxml-non-primitive" ViewBox diff --git a/sd/qa/unit/data/pptx/tdf157216.pptx b/sd/qa/unit/data/pptx/tdf157216.pptx new file mode 100644 index 0000000000000000000000000000000000000000..ad53887b844a3b46ad8ad7fbac4a14dab153bcbc GIT binary patch literal 33660 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 xFlowchartShape(getShapeFromPage(0, 0)); + uno::Sequence aProps; + xFlowchartShape->getPropertyValue(u"CustomShapeGeometry"_ustr) >>= aProps; + + uno::Sequence aPathProps; + for (beans::PropertyValue const& rProp : aProps) + { + if (rProp.Name == "Path") + aPathProps = rProp.Value.get>(); + } + + uno::Sequence seqGluePoints; + for (beans::PropertyValue const& rProp : aPathProps) + { + if (rProp.Name == "GluePoints") + { + seqGluePoints + = rProp.Value.get>(); + } + } + + sal_Int32 nCountGluePoints = seqGluePoints.getLength(); + // The Flowchart: Punched Tape has 4 glue points. + CPPUNIT_ASSERT_EQUAL(sal_Int32(4), nCountGluePoints); +} + CPPUNIT_TEST_FIXTURE(SdImportTest, testTableStyle) { createSdImpressDoc("pptx/tdf156718.pptx"); From b0b691aa32719aa0d41bc0f72480cc455bc414ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1szl=C3=B3=20N=C3=A9meth?= Date: Fri, 28 Jun 2024 18:43:25 +0200 Subject: [PATCH 156/194] tdf#161563 sw: fix invisible light gray underline for No Break MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Light gray underline visualization depended on IsShowHiddenChar() instead of the correct IsViewMetaChar() (Show Formatting Marks). Follow-up to commit 2f0c7d5691acd4010443856788a54b0abc03098b "tdf#161563 tdf#161565 sw: add No Break to word context menu & visualize" and commit 41916d9fb045654fa19b4eac90a3099550a890f7 "tdf#161563 sw: show "No Break" context menu only on a whole word". Change-Id: I3d10011962732ab3730e5f833e95252e9fe6bfee Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169721 Tested-by: Jenkins Reviewed-by: László Németh --- sw/source/core/text/atrstck.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sw/source/core/text/atrstck.cxx b/sw/source/core/text/atrstck.cxx index eafce865e9ed..85689a2c82a8 100644 --- a/sw/source/core/text/atrstck.cxx +++ b/sw/source/core/text/atrstck.cxx @@ -696,7 +696,7 @@ void SwAttrHandler::FontChg(const SfxPoolItem& rItem, SwFont& rFnt, bool bPush ) break; case RES_CHRATR_NOHYPHEN : if ( m_pShell && m_pShell->GetWin() && - m_pShell->GetViewOptions()->IsShowHiddenChar() ) + m_pShell->GetViewOptions()->IsViewMetaChars() ) { if ( rItem.StaticWhichCast(RES_CHRATR_NOHYPHEN).GetValue() ) { From 8e035840d18cb29cca9f2304891054f58c64e9d0 Mon Sep 17 00:00:00 2001 From: Bogdan Buzea Date: Thu, 27 Jun 2024 18:14:55 +0200 Subject: [PATCH 157/194] Resave with newer Glade version Change-Id: Ia6374adeb4ef15f6d3d0d3bca365b269562bb640 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169597 Tested-by: Jenkins Reviewed-by: Taichi Haradaguchi <20001722@ymail.ne.jp> --- xmlsecurity/uiconfig/ui/certdetails.ui | 28 +-- xmlsecurity/uiconfig/ui/certgeneral.ui | 90 +++---- xmlsecurity/uiconfig/ui/certpage.ui | 86 +++---- .../uiconfig/ui/digitalsignaturesdialog.ui | 238 +++++++++--------- .../uiconfig/ui/macrosecuritydialog.ui | 107 +++----- xmlsecurity/uiconfig/ui/securitytrustpage.ui | 146 +++++------ xmlsecurity/uiconfig/ui/viewcertdialog.ui | 129 ++-------- 7 files changed, 349 insertions(+), 475 deletions(-) diff --git a/xmlsecurity/uiconfig/ui/certdetails.ui b/xmlsecurity/uiconfig/ui/certdetails.ui index cc4ba219932b..54a29e626ce1 100644 --- a/xmlsecurity/uiconfig/ui/certdetails.ui +++ b/xmlsecurity/uiconfig/ui/certdetails.ui @@ -1,5 +1,5 @@ - + @@ -14,31 +14,31 @@ True - False + False True True - 6 + 6 vertical 12 True True - True + True True True - external - in + external + in True - True - True + True + True True True liststore3 - 0 - False + 0 + False @@ -85,15 +85,15 @@ True - True + True True True - never - in + never + in True - True + True True True diff --git a/xmlsecurity/uiconfig/ui/certgeneral.ui b/xmlsecurity/uiconfig/ui/certgeneral.ui index e0c0b48acd59..d17ba09a5044 100644 --- a/xmlsecurity/uiconfig/ui/certgeneral.ui +++ b/xmlsecurity/uiconfig/ui/certgeneral.ui @@ -1,23 +1,23 @@ - + True - False - 6 + False + 6 vertical 6 True - False + False 6 True - False - xmlsecurity/res/certificate_40x56.png + False + xmlsecurity/res/certificate_40x56.png False @@ -29,7 +29,7 @@ True - False + False Certificate Information @@ -57,7 +57,7 @@ True - False + False False @@ -68,10 +68,10 @@ True - False + False 36 36 - 108 + 108 This certificate is validated. 0 @@ -87,7 +87,7 @@ True - False + False False @@ -96,16 +96,16 @@ - + True - False - 6 - 6 + False + 6 + 6 True - False + False Issued to: 0 @@ -113,26 +113,26 @@ - 0 - 0 + 0 + 0 True - False + False True 0 - 1 - 0 + 1 + 0 True - False + False Issued by: 0 @@ -140,25 +140,25 @@ - 0 - 1 + 0 + 1 True - False + False 0 - 1 - 1 + 1 + 1 True - False + False Valid from: 0 @@ -166,20 +166,20 @@ - 0 - 2 + 0 + 2 True - False + False 6 True - False - xmlsecurity/res/key_12.png + False + xmlsecurity/res/key_12.png False @@ -190,7 +190,7 @@ True - False + False You have a private key that corresponds to this certificate. @@ -201,15 +201,15 @@ - 0 - 4 + 0 + 4 2 True - False + False Valid to: 0 @@ -217,30 +217,30 @@ - 0 - 3 + 0 + 3 True - False + False 0 - 1 - 2 + 1 + 2 True - False + False 0 - 1 - 3 + 1 + 3 diff --git a/xmlsecurity/uiconfig/ui/certpage.ui b/xmlsecurity/uiconfig/ui/certpage.ui index 03a92c8cbbae..167d0c93a69e 100644 --- a/xmlsecurity/uiconfig/ui/certpage.ui +++ b/xmlsecurity/uiconfig/ui/certpage.ui @@ -1,5 +1,5 @@ - + @@ -12,66 +12,66 @@ True - False + False True True - 6 + 6 vertical 12 - + True - False + False True True - 6 + 6 True - False + False Certificate Path - True - signatures + True + signatures 0 - 0 - 0 + 0 + 0 View Certificate... True - True - True + True + True end - True + True - 0 - 2 + 0 + 2 True - True + True True True - in + in True - True - True + True + True True True liststore3 - False - 0 - True + False + 0 + True @@ -96,8 +96,8 @@ - 0 - 1 + 0 + 1 @@ -108,39 +108,39 @@ - + True - False + False True True - 6 + 6 True - False + False Certificate status - True - status + True + status 0 - 0 - 0 + 0 + 0 True - True + True True True - never - in + never + in True - True + True True True @@ -152,8 +152,8 @@ - 0 - 1 + 0 + 1 @@ -165,8 +165,8 @@ - False - True + False + True The certificate is OK. @@ -177,8 +177,8 @@ - False - True + False + True The certificate could not be validated. diff --git a/xmlsecurity/uiconfig/ui/digitalsignaturesdialog.ui b/xmlsecurity/uiconfig/ui/digitalsignaturesdialog.ui index f701468e62b6..7602a83d7858 100644 --- a/xmlsecurity/uiconfig/ui/digitalsignaturesdialog.ui +++ b/xmlsecurity/uiconfig/ui/digitalsignaturesdialog.ui @@ -1,5 +1,5 @@ - + @@ -21,26 +21,26 @@ - False - 6 + False + 6 Digital Signatures True - dialog + dialog - False + False vertical 12 - False - end + False + end _Help True - True - True + True + True True @@ -54,10 +54,10 @@ _Close True - True - True - True - True + True + True + True + True True @@ -70,47 +70,47 @@ False True - end + end 0 - + True - False + False True True - 6 + 6 - False - True + False + True The following have signed the document content: 0 - 0 - 0 + 0 + 0 True - True + True True True - in + in True - True - True + True + True True True liststore3 - 0 - False + 0 + False @@ -200,23 +200,23 @@ - 0 - 4 + 0 + 4 True - False + False 12 True - end + end View Certificate... True - True - True + True + True Opens the View Certificate dialog. @@ -233,9 +233,9 @@ Sign Document... True - True - True - True + True + True + True Opens the Select Certificate dialog. @@ -252,8 +252,8 @@ Remove True - True - True + True + True Removes the selected signature from the list. Removes all subsequent signatures as well, in case of PDF. @@ -270,8 +270,8 @@ Start Certificate Manager... True - True - True + True + True True @@ -281,208 +281,211 @@ - 0 - 7 + 0 + 7 - + True - False + False True - 12 + 12 - False - True + False + True True - 0 - 0 + 0 + 0 - False - True + False + True True - 1 - 0 + 1 + 0 - False - True + False + True True - 2 - 0 + 2 + 0 - False - True + False + True - 3 - 0 + 3 + 0 - False - True + False + True - 4 - 0 + 4 + 0 - 0 - 3 + 0 + 3 - False - True + False + True The following have signed the document macro: 0 - 0 - 1 + 0 + 1 - False - True + False + True The following have signed this package: 0 - 0 - 2 + 0 + 2 - + True - False - 12 + False + 12 - False - True + False + True True The signatures in this document are valid 0 - 1 - 0 + 1 + 0 - False - True - xmlsecurity/res/signet_11x16.png + False + True + xmlsecurity/res/signet_11x16.png - 0 - 0 + 0 + 0 - False - True + False + True True The signatures in this document are invalid 0 - 1 - 2 + 1 + 2 - False - True + False + True True At least one signature has problems: the document is only partially signed. 0 - 1 - 1 + 1 + 1 - False - True + False + True True At least one signature has problems: the certificate could not be validated. 0 - 1 - 3 + 1 + 3 - False - True - svx/res/caution_11x16.png + False + True + svx/res/caution_11x16.png - 0 - 2 + 0 + 2 - False - True - svx/res/caution_11x16.png + False + True + svx/res/caution_11x16.png - 0 - 1 + 0 + 1 - False - True - xmlsecurity/res/notcertificate_16.png + False + True + xmlsecurity/res/notcertificate_16.png - 0 - 3 + 0 + 3 - 0 - 5 + 0 + 5 + + + True @@ -496,9 +499,6 @@ help close - - - Adds and removes digital signatures to and from your document. You can also use the dialog to view certificates. diff --git a/xmlsecurity/uiconfig/ui/macrosecuritydialog.ui b/xmlsecurity/uiconfig/ui/macrosecuritydialog.ui index 06699d588f44..c04d84f35b63 100644 --- a/xmlsecurity/uiconfig/ui/macrosecuritydialog.ui +++ b/xmlsecurity/uiconfig/ui/macrosecuritydialog.ui @@ -1,33 +1,30 @@ - + - False - 6 + False + 6 Macro Security True - 0 - 0 - dialog - - - + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _Reset True - True - True + True + True True @@ -40,10 +37,10 @@ _OK True - True - True - True - True + True + True + True + True True @@ -56,8 +53,8 @@ _Cancel True - True - True + True + True True @@ -70,8 +67,8 @@ _Help True - True - True + True + True True @@ -85,47 +82,23 @@ False True - end + end 0 True - True + True True True True - True + True True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -134,42 +107,18 @@ True - False + False Security Level - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -181,12 +130,12 @@ True - False + False Trusted Sources 1 - False + False diff --git a/xmlsecurity/uiconfig/ui/securitytrustpage.ui b/xmlsecurity/uiconfig/ui/securitytrustpage.ui index 267efa8f08bd..07293517c170 100644 --- a/xmlsecurity/uiconfig/ui/securitytrustpage.ui +++ b/xmlsecurity/uiconfig/ui/securitytrustpage.ui @@ -1,5 +1,5 @@ - + @@ -24,45 +24,45 @@ True - False + False True True - 6 + 6 vertical 12 True - False + False True True - 0 - none + 0 + none - + True - False - True - True - 6 - 6 + False 12 6 + True + True + 6 + 6 True - False + False True 12 - end + end _View... True - True - True - True + True + True + True Opens the View Certificate dialog for the selected certificate. @@ -79,8 +79,8 @@ _Remove True - True - True + True + True True @@ -96,27 +96,27 @@ - 1 - 1 + 1 + 1 True - True + True True True - in + in True - True - True + True + True True True liststore3 - 0 - False + 0 + False @@ -168,21 +168,21 @@ - 1 - 0 + 1 + 0 - False - True + False + True center center - res/lock.png + res/lock.png - 0 - 0 + 0 + 0 @@ -193,7 +193,7 @@ True - False + False Trusted Certificates @@ -210,50 +210,50 @@ True - False + False True True - 0 - none + 0 + none - + True - False - True - True - 12 - 6 + False 12 6 + True + True + 12 + 6 True - False + False Document macros are always executed if they have been opened from one of the following locations. True - 56 - 56 + 56 + 56 0 - 1 - 0 + 1 + 0 True - False + False 12 - end + end A_dd... True - True - True - True + True + True + True Opens a folder selection dialog. Select a folder from which all macros are allowed to execute. @@ -270,8 +270,8 @@ _Remove True - True - True + True + True True @@ -287,28 +287,28 @@ - 1 - 2 + 1 + 2 True - True + True True True - in + in True - True - True + True + True True True liststore2 - False - 0 - False + False + 0 + False @@ -333,21 +333,21 @@ - 1 - 1 + 1 + 1 - False - True + False + True center center - res/lock.png + res/lock.png - 0 - 0 + 0 + 0 @@ -361,7 +361,7 @@ True - False + False Trusted File Locations diff --git a/xmlsecurity/uiconfig/ui/viewcertdialog.ui b/xmlsecurity/uiconfig/ui/viewcertdialog.ui index 44ff70ec74f6..9af0b89676e8 100644 --- a/xmlsecurity/uiconfig/ui/viewcertdialog.ui +++ b/xmlsecurity/uiconfig/ui/viewcertdialog.ui @@ -1,36 +1,33 @@ - + - False - 6 + False + 6 View Certificate False True - 0 - 0 - dialog - - - + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _OK True - True - True - True - True + True + True + True + True True @@ -43,8 +40,8 @@ _Help True - True - True + True + True True @@ -58,47 +55,23 @@ False True - end + end 0 True - True + True True True True - True + True True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -107,42 +80,18 @@ True - False + False General - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -154,43 +103,19 @@ True - False + False Details 1 - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -202,12 +127,12 @@ True - False + False Certificate Path 2 - False + False From 02a536fa7642b01fb486f69a18c2e509702a5db0 Mon Sep 17 00:00:00 2001 From: Bogdan Buzea Date: Thu, 27 Jun 2024 18:49:12 +0200 Subject: [PATCH 158/194] Resave with newer Glade version Change-Id: I9e8672e92648359ff8ec7e3f7b667e785b51f0d9 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169602 Reviewed-by: Taichi Haradaguchi <20001722@ymail.ne.jp> Tested-by: Jenkins --- vcl/uiconfig/ui/aboutbox.ui | 40 ++++---- vcl/uiconfig/ui/cupspassworddialog.ui | 113 ++++++++++----------- vcl/uiconfig/ui/editmenu.ui | 36 +++---- vcl/uiconfig/ui/errornocontentdialog.ui | 18 ++-- vcl/uiconfig/ui/errornoprinterdialog.ui | 21 ++-- vcl/uiconfig/ui/interimdockparent.ui | 15 ++- vcl/uiconfig/ui/interimtearableparent.ui | 13 +-- vcl/uiconfig/ui/menutogglebutton3.ui | 20 ++-- vcl/uiconfig/ui/printerpaperpage.ui | 90 ++++++++-------- vcl/uiconfig/ui/printerpropertiesdialog.ui | 99 +++++------------- vcl/uiconfig/ui/printprogressdialog.ui | 46 ++++----- vcl/uiconfig/ui/querydialog.ui | 61 ++++++----- vcl/uiconfig/ui/screenshotparent.ui | 25 ++--- 13 files changed, 264 insertions(+), 333 deletions(-) diff --git a/vcl/uiconfig/ui/aboutbox.ui b/vcl/uiconfig/ui/aboutbox.ui index c97ed6b9703a..0c3fe7fb821f 100644 --- a/vcl/uiconfig/ui/aboutbox.ui +++ b/vcl/uiconfig/ui/aboutbox.ui @@ -1,10 +1,10 @@ - + True - False + False True True vertical @@ -12,7 +12,7 @@ @@ -24,15 +24,15 @@ True - False + False True True vertical 12 - False - True + False + True center @@ -45,21 +45,21 @@ True - False + False True True - True + True True False - word + word center - False + False - 0 - 0 + 0 + 0 @@ -73,8 +73,8 @@ See Log: $GITHASH True - True - True + True + True none @@ -86,11 +86,11 @@ True - False + False True center True - 62 + 62 False @@ -102,12 +102,12 @@ True - False + False True True - False + False 12 12 True @@ -115,8 +115,8 @@ True - 0 - 0 + 0 + 0 diff --git a/vcl/uiconfig/ui/cupspassworddialog.ui b/vcl/uiconfig/ui/cupspassworddialog.ui index f01691ba745c..2b79230a1aa8 100644 --- a/vcl/uiconfig/ui/cupspassworddialog.ui +++ b/vcl/uiconfig/ui/cupspassworddialog.ui @@ -1,35 +1,32 @@ - + - False - 6 + False + 6 Authentication Request True - 0 - 0 - normal - - - + 0 + 0 + normal - False + False vertical 12 - False - end + False + end _OK True - True - True - True - True + True + True + True + True True @@ -42,8 +39,8 @@ _Cancel True - True - True + True + True True @@ -56,116 +53,116 @@ False True - end + end 0 - + True - False + False True True - 6 - 12 + 6 + 12 True - False + False _User: - True - user + True + user 1 - 0 - 2 + 0 + 2 True - False + False _Password: - True - pass + True + pass 1 - 0 - 3 + 0 + 3 True - False + False Please enter your authentication data for server “%s” - True + True True - 56 + 56 0 - 0 - 0 + 0 + 0 2 True - True + True True + True True - True - 1 - 2 + 1 + 2 True - True + True True False - True + True True - password + password - 1 - 3 + 1 + 3 - False - True + False + True _Domain: - True - domain + True + domain 1 - 0 - 1 + 0 + 1 - True - True + True + True True + True True - True - 1 - 1 + 1 + 1 diff --git a/vcl/uiconfig/ui/editmenu.ui b/vcl/uiconfig/ui/editmenu.ui index e0d55fb8cca0..eb13f6ffeaa8 100644 --- a/vcl/uiconfig/ui/editmenu.ui +++ b/vcl/uiconfig/ui/editmenu.ui @@ -1,75 +1,75 @@ - + True - False + False True - False + False _Undo - True + True True - False + False True - False + False Cu_t - True + True True - False + False _Copy - True + True True - False + False _Paste - True + True True - False + False _Delete - True + True True - False + False True - False + False Select _All - True + True True - False - True + False + True diff --git a/vcl/uiconfig/ui/errornocontentdialog.ui b/vcl/uiconfig/ui/errornocontentdialog.ui index 2cd22a410890..393b266b0edf 100644 --- a/vcl/uiconfig/ui/errornocontentdialog.ui +++ b/vcl/uiconfig/ui/errornocontentdialog.ui @@ -1,31 +1,31 @@ - + - False + False %PRODUCTNAME False True - dialog - True - error + dialog + True + error ok There are no pages to be printed. - Please check your document for ranges relevant to printing. + Please check your document for ranges relevant to printing. - False + False vertical 12 - False + False False True - end + end 0 diff --git a/vcl/uiconfig/ui/errornoprinterdialog.ui b/vcl/uiconfig/ui/errornoprinterdialog.ui index 313aa9d171a0..8256d2d7a5bf 100644 --- a/vcl/uiconfig/ui/errornoprinterdialog.ui +++ b/vcl/uiconfig/ui/errornoprinterdialog.ui @@ -1,38 +1,35 @@ - + - False + False %PRODUCTNAME False True - dialog - True - error + dialog + True + error ok No default printer found. - Please choose a printer and try again. + Please choose a printer and try again. - False + False vertical 12 - False + False False True - end + end 0 - - - diff --git a/vcl/uiconfig/ui/interimdockparent.ui b/vcl/uiconfig/ui/interimdockparent.ui index 146973b6c134..c4d033343dd4 100644 --- a/vcl/uiconfig/ui/interimdockparent.ui +++ b/vcl/uiconfig/ui/interimdockparent.ui @@ -1,23 +1,20 @@ - + - False + False True True - 4 + 4 False - True - popup-menu + True + popup-menu False - - - True - False + False vertical 6 diff --git a/vcl/uiconfig/ui/interimtearableparent.ui b/vcl/uiconfig/ui/interimtearableparent.ui index 4ab25d2e9b3e..f309723c1343 100644 --- a/vcl/uiconfig/ui/interimtearableparent.ui +++ b/vcl/uiconfig/ui/interimtearableparent.ui @@ -1,18 +1,18 @@ - + - False + False True True - 4 + 4 False - True + True True - False + False vertical 6 @@ -20,8 +20,5 @@ - - - diff --git a/vcl/uiconfig/ui/menutogglebutton3.ui b/vcl/uiconfig/ui/menutogglebutton3.ui index 158c5afe9bec..88abac929d9d 100644 --- a/vcl/uiconfig/ui/menutogglebutton3.ui +++ b/vcl/uiconfig/ui/menutogglebutton3.ui @@ -1,18 +1,18 @@ - + True - False - True + False + True True - True - True - True - True + True + True + True + True True @@ -23,9 +23,9 @@ True - True - True - True + True + True + True False diff --git a/vcl/uiconfig/ui/printerpaperpage.ui b/vcl/uiconfig/ui/printerpaperpage.ui index 9b2ef1e04d20..fd81b0bb3c43 100644 --- a/vcl/uiconfig/ui/printerpaperpage.ui +++ b/vcl/uiconfig/ui/printerpaperpage.ui @@ -1,129 +1,129 @@ - + - + True - False + False center True True - 6 - 6 - 12 - True + 6 + 6 + 12 + True True - False + False _Paper size: - True - paperlb + True + paperlb 1 - 0 - 1 + 0 + 1 True - False + False _Orientation: - True - orientlb + True + orientlb 1 - 0 - 2 + 0 + 2 True - False + False _Duplex: - True - duplexlb + True + duplexlb 1 - 0 - 3 + 0 + 3 True - False + False Paper tray: - True - slotlb + True + slotlb 1 - 0 - 4 + 0 + 4 True - False + False - 1 - 1 + 1 + 1 True - False + False Portrait Landscape - 1 - 2 + 1 + 2 True - False + False - 1 - 3 + 1 + 3 True - False + False - 1 - 4 + 1 + 4 Use only paper size from printer preferences - True - False - True - True + True + False + True + True - 0 - 0 + 0 + 0 2 diff --git a/vcl/uiconfig/ui/printerpropertiesdialog.ui b/vcl/uiconfig/ui/printerpropertiesdialog.ui index d305fee35888..46efd9d20d62 100644 --- a/vcl/uiconfig/ui/printerpropertiesdialog.ui +++ b/vcl/uiconfig/ui/printerpropertiesdialog.ui @@ -1,32 +1,32 @@ - + - False - 6 + False + 6 Properties of %s True - 0 - 0 - dialog + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _OK True - True - True - True - True + True + True + True + True True @@ -39,8 +39,8 @@ _Cancel True - True - True + True + True True @@ -53,47 +53,23 @@ False True - end + end 0 True - True + True True True True - True + True True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -102,43 +78,19 @@ True - False + False Paper 1 - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -150,12 +102,12 @@ True - False + False Device 2 - False + False @@ -171,8 +123,5 @@ ok cancel - - - diff --git a/vcl/uiconfig/ui/printprogressdialog.ui b/vcl/uiconfig/ui/printprogressdialog.ui index fe17fbd3f18b..64a21310c843 100644 --- a/vcl/uiconfig/ui/printprogressdialog.ui +++ b/vcl/uiconfig/ui/printprogressdialog.ui @@ -1,30 +1,30 @@ - + - False - 6 + False + 6 Printing False - dialog + dialog - False + False vertical 12 - False - end + False + end _Cancel True - True - True - True - True + True + True + True + True True @@ -37,39 +37,39 @@ False True - end + end 0 - + True - False + False True - 6 + 6 True - False + False Page %p of %n - True - progressbar + True + progressbar - 0 - 0 + 0 + 0 True - False + False True - 0 - 1 + 0 + 1 diff --git a/vcl/uiconfig/ui/querydialog.ui b/vcl/uiconfig/ui/querydialog.ui index d472022bdb50..acbe2409f283 100644 --- a/vcl/uiconfig/ui/querydialog.ui +++ b/vcl/uiconfig/ui/querydialog.ui @@ -1,32 +1,32 @@ - + - False - 6 + False + 6 New Data Type True - 0 - 0 - normal + 0 + 0 + normal - False + False vertical 12 - False - end + False + end _OK True - True - True - True - True + True + True + True + True True @@ -39,8 +39,8 @@ _Cancel True - True - True + True + True True @@ -53,44 +53,44 @@ False True - end + end 0 - + True - False + False start True True - 6 - 12 + 6 + 12 True - False - True - entry + False + True + entry 0 - 0 - 0 + 0 + 0 True - True + True True + True True - True - 0 - 1 + 0 + 1 @@ -106,8 +106,5 @@ ok cancel - - - diff --git a/vcl/uiconfig/ui/screenshotparent.ui b/vcl/uiconfig/ui/screenshotparent.ui index 629b1741b5de..43f1e41a1418 100644 --- a/vcl/uiconfig/ui/screenshotparent.ui +++ b/vcl/uiconfig/ui/screenshotparent.ui @@ -1,32 +1,29 @@ - + - False - 6 + False + 6 True - 0 - 0 - dialog - - - + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _Cancel True - True - True + True + True True From 786ed5c3ad3048d638df5f19d4bf6b8f28271e69 Mon Sep 17 00:00:00 2001 From: Bogdan Buzea Date: Sun, 23 Jun 2024 20:51:12 +0200 Subject: [PATCH 159/194] Resave with newer Glade version Change-Id: I062f3dc2671beb0c82b43905f2b9afb5050f9e59 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169429 Reviewed-by: Taichi Haradaguchi <20001722@ymail.ne.jp> Tested-by: Jenkins --- cui/uiconfig/ui/querydeletelineenddialog.ui | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/cui/uiconfig/ui/querydeletelineenddialog.ui b/cui/uiconfig/ui/querydeletelineenddialog.ui index 6917fc62422a..7150df60c0b0 100644 --- a/cui/uiconfig/ui/querydeletelineenddialog.ui +++ b/cui/uiconfig/ui/querydeletelineenddialog.ui @@ -1,31 +1,31 @@ - + - False + False Delete Arrow Style? False True - dialog - True - question + dialog + True + question yes-no Do you really want to delete the arrow style? - This action cannot be undone. + This action cannot be undone. - False + False vertical 12 - False + False False True - end + end 0 From 696eb4b4e55ce26cee9aee2c76a7125df91ae0d6 Mon Sep 17 00:00:00 2001 From: Aron Budea Date: Fri, 28 Jun 2024 06:09:33 +0200 Subject: [PATCH 160/194] tdf#161310 Translate My AutoText in Insert toolbar Use same pattern as 42e6e26255b21c1bfde893f5aaf23d4a37ecee91 and dffdc0b1995e2b24304ce0651ca886bbf9cf4f95 Change-Id: If36ecdcbb771bfcde9836203e84586045d039c8e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169693 Tested-by: Jenkins Reviewed-by: Mike Kaganski --- sw/source/uibase/ribbar/workctrl.cxx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sw/source/uibase/ribbar/workctrl.cxx b/sw/source/uibase/ribbar/workctrl.cxx index 050c4f7bf840..be2039c3246b 100644 --- a/sw/source/uibase/ribbar/workctrl.cxx +++ b/sw/source/uibase/ribbar/workctrl.cxx @@ -91,6 +91,8 @@ void SwTbxAutoTextCtrl::CreatePopupWindow() for(size_t i = 1; i <= nGroupCount; ++i) { OUString sTitle = pGlossaryList->GetGroupTitle(i - 1); + if (sTitle == "My AutoText") + sTitle = SwResId(STR_MY_AUTOTEXT); const sal_uInt16 nBlockCount = pGlossaryList->GetBlockCount(i -1); auto const [it, _] = titles.insert(sTitle); size_t const menuIndex(::std::distance(titles.begin(), it)); From 58ed26938f254e1952dfaed4b208ad5a89b89387 Mon Sep 17 00:00:00 2001 From: Mike Kaganski Date: Sun, 30 Jun 2024 10:28:43 +0500 Subject: [PATCH 161/194] tdf#161844: AbsoluteScreenPixelRectangle is a closed interval Change-Id: If52fd8e97b6b9c3eed72720b8dc7151b278a0183 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169766 Reviewed-by: Mike Kaganski Tested-by: Jenkins --- toolkit/source/awt/vclxtoolkit.cxx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/toolkit/source/awt/vclxtoolkit.cxx b/toolkit/source/awt/vclxtoolkit.cxx index b9d479e685fc..ecf3605c9e9c 100644 --- a/toolkit/source/awt/vclxtoolkit.cxx +++ b/toolkit/source/awt/vclxtoolkit.cxx @@ -987,8 +987,8 @@ css::awt::Rectangle VCLXToolkit::getWorkArea( ) css::awt::Rectangle aNotherRect; aNotherRect.X = aWorkRect.Left(); aNotherRect.Y = aWorkRect.Top(); - aNotherRect.Width = aWorkRect.getOpenWidth(); - aNotherRect.Height = aWorkRect.getOpenHeight(); + aNotherRect.Width = aWorkRect.GetWidth(); + aNotherRect.Height = aWorkRect.GetHeight(); return aNotherRect; } From 2ffd958fcdd17ccffb6394e3515c83458464775b Mon Sep 17 00:00:00 2001 From: Bogdan Buzea Date: Thu, 27 Jun 2024 18:36:21 +0200 Subject: [PATCH 162/194] Resave with newer Glade version Change-Id: I502cda571288fa8b4a1aeaffe78705e47de5d379 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169601 Tested-by: Jenkins Reviewed-by: Taichi Haradaguchi <20001722@ymail.ne.jp> --- uui/uiconfig/ui/authfallback.ui | 115 ++++++++-------- uui/uiconfig/ui/filterselect.ui | 53 ++++---- uui/uiconfig/ui/logindialog.ui | 173 ++++++++++++------------ uui/uiconfig/ui/masterpassworddlg.ui | 55 ++++---- uui/uiconfig/ui/setmasterpassworddlg.ui | 63 ++++----- uui/uiconfig/ui/simplenameclash.ui | 51 ++++--- uui/uiconfig/ui/sslwarndialog.ui | 36 ++--- uui/uiconfig/ui/unknownauthdialog.ui | 72 +++++----- 8 files changed, 300 insertions(+), 318 deletions(-) diff --git a/uui/uiconfig/ui/authfallback.ui b/uui/uiconfig/ui/authfallback.ui index 85113cfadbe5..02b7c8f77632 100644 --- a/uui/uiconfig/ui/authfallback.ui +++ b/uui/uiconfig/ui/authfallback.ui @@ -1,36 +1,33 @@ - + - False - 6 + False + 6 Authentication Code True - 0 - 0 - dialog - True - - - + 0 + 0 + dialog + True - False + False vertical 12 - False - end + False + end _OK True - True - True - True - True + True + True + True + True True @@ -43,8 +40,8 @@ _Cancel True - True - True + True + True True @@ -57,30 +54,30 @@ False True - end + end 0 - + True - False + False - + True - False - 6 + False + 6 True - False + False center - False - G- + False + G- False @@ -91,11 +88,11 @@ True - True - 6 - True + True + 6 + True + 6 True - 6 False @@ -105,81 +102,81 @@ - 0 - 1 + 0 + 1 True - False + False Enter the 6 digit PIN: 0 - 0 - 0 + 0 + 0 - 0 - 1 + 0 + 1 - + True - False + False True True - 6 + 6 True - True - True + True + True + 0 True - 0 - 0 - 1 + 0 + 1 True - True + True False + True True - True - 0 - 2 + 0 + 2 True - False + False True - word-char - 70 - 70 + word-char + 70 + 70 0 - 0 - 0 + 0 + 0 - 0 - 0 + 0 + 0 diff --git a/uui/uiconfig/ui/filterselect.ui b/uui/uiconfig/ui/filterselect.ui index 48f85e8727ad..1d283dd67c71 100644 --- a/uui/uiconfig/ui/filterselect.ui +++ b/uui/uiconfig/ui/filterselect.ui @@ -1,5 +1,5 @@ - + @@ -11,30 +11,30 @@ - False - 6 + False + 6 Filter Selection True - 0 - 0 - dialog + 0 + 0 + dialog - False + False True True vertical 12 - False - end + False + end _OK True - True - True + True + True True @@ -47,8 +47,8 @@ _Cancel True - True - True + True + True True @@ -61,8 +61,8 @@ _Help True - True - True + True + True True @@ -76,14 +76,14 @@ False True - end + end 0 True - False + False True True vertical @@ -91,7 +91,7 @@ True - False + False start True 0 @@ -105,20 +105,20 @@ True - True + True True True - in + in True - True + True True liststore1 - False - False - 0 - False + False + False + 0 + False @@ -160,8 +160,5 @@ cancel help - - - diff --git a/uui/uiconfig/ui/logindialog.ui b/uui/uiconfig/ui/logindialog.ui index 2b4b2a39124b..b787560ffc7b 100644 --- a/uui/uiconfig/ui/logindialog.ui +++ b/uui/uiconfig/ui/logindialog.ui @@ -1,32 +1,32 @@ - + - False - 6 + False + 6 Authentication Required True - 0 - 0 - dialog + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _OK True - True - True - True - True + True + True + True + True True @@ -39,8 +39,8 @@ _Cancel True - True - True + True + True True @@ -53,8 +53,8 @@ _Help True - True - True + True + True True @@ -68,29 +68,29 @@ False True - end + end 0 - + True - False - 6 - 12 + False + 6 + 12 _Use system credentials True - True - False - True - True + True + False + True + True - 0 - 9 + 0 + 9 2 @@ -98,181 +98,181 @@ _Remember password True - True - False - True - True + True + False + True + True - 0 - 8 + 0 + 8 2 True - True + True True + True True - True - 1 - 7 + 1 + 7 True - False + False A_ccount: - True - accounted + True + accounted 0 - 0 - 7 + 0 + 7 True - False + False Pass_word: - True - passworded + True + passworded 0 - 0 - 6 + 0 + 6 True - True + True True False + True True - True - 1 - 6 + 1 + 6 True - True + True True + True True - True - 1 - 5 + 1 + 5 True - False + False _User name: - True - nameed + True + nameed 0 - 0 - 5 + 0 + 5 - False - True + False + True Enter user name and password for: “%2” on %1 0 - 0 - 3 + 0 + 3 2 - False - True + False + True Wrong user name and password for: “%2” on %1 0 - 0 - 3 + 0 + 3 2 - False - True + False + True Wrong user name and password for: %1 0 - 0 - 3 + 0 + 3 2 True - False + False Enter user name and password for: %1 0 - 0 - 2 + 0 + 2 2 True - False + False Message from server: - True - errorinfo + True + errorinfo 0 - 0 - 0 + 0 + 0 2 True - False + False True - 56 + 56 0 - 0 - 1 + 0 + 1 2 @@ -296,8 +296,5 @@ cancel help - - - diff --git a/uui/uiconfig/ui/masterpassworddlg.ui b/uui/uiconfig/ui/masterpassworddlg.ui index f5d2c5415dfb..bab8e93bc5ee 100644 --- a/uui/uiconfig/ui/masterpassworddlg.ui +++ b/uui/uiconfig/ui/masterpassworddlg.ui @@ -1,31 +1,31 @@ - + - False - 6 + False + 6 Enter Master Password True - 0 - 0 - dialog + 0 + 0 + dialog - False + False vertical 12 - False + False True - end + end _Help True - True - True + True + True True @@ -39,10 +39,10 @@ _OK True - True - True - True - True + True + True + True + True True @@ -55,8 +55,8 @@ _Cancel True - True - True + True + True True @@ -69,24 +69,24 @@ False True - end + end 0 True - False + False end vertical 6 True - False + False _Enter password: - True - password + True + password 0 0.5 @@ -99,12 +99,12 @@ True - True + True False - True - 35 - password + True + 35 True + password Type a password. A password is case sensitive. @@ -131,9 +131,6 @@ ok cancel - - - Enter the master password to continue. diff --git a/uui/uiconfig/ui/setmasterpassworddlg.ui b/uui/uiconfig/ui/setmasterpassworddlg.ui index 1fd06e0e5c57..0e5daab33ac4 100644 --- a/uui/uiconfig/ui/setmasterpassworddlg.ui +++ b/uui/uiconfig/ui/setmasterpassworddlg.ui @@ -1,30 +1,30 @@ - + - False - 6 + False + 6 Set Master Password True - 0 - 0 - dialog + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _Help True - True - True + True + True 6 True @@ -39,10 +39,10 @@ _OK True - True - True - True - True + True + True + True + True True @@ -55,8 +55,8 @@ _Cancel True - True - True + True + True True @@ -69,23 +69,23 @@ False True - end + end 0 True - False + False vertical 6 True - False + False Passwords for web connections are protected by a master password. You will be asked to enter it once per session, if %PRODUCTNAME retrieves a password from the protected password list. True - 62 + 62 0 @@ -142,10 +142,10 @@ True - True + True False - password True + password Enter the master password. @@ -188,11 +188,11 @@ True - True + True False - True - password + True True + password Enter the master password again. @@ -208,14 +208,14 @@ True - False - 6 + False + 6 Caution: If you forget the master password, you will be unable to access any of the information protected by it. Passwords are case sensitive. True - 62 + 62 0 - + @@ -238,9 +238,6 @@ ok cancel - - - Assign a master password to protect the access to a saved password. diff --git a/uui/uiconfig/ui/simplenameclash.ui b/uui/uiconfig/ui/simplenameclash.ui index 39a5aae5cab7..981a60bb1faf 100644 --- a/uui/uiconfig/ui/simplenameclash.ui +++ b/uui/uiconfig/ui/simplenameclash.ui @@ -1,33 +1,30 @@ - + - False - 6 + False + 6 File Exists True - 0 - 0 - dialog - - - + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _Help True - True - True + True + True True @@ -41,8 +38,8 @@ Replace True - True - True + True + True False @@ -54,10 +51,10 @@ Rename True - True - True - True - True + True + True + True + True False @@ -69,8 +66,8 @@ _Cancel True - True - True + True + True True @@ -83,20 +80,20 @@ False True - end + end 0 True - False + False vertical 6 True - False + False start True 0 @@ -110,10 +107,10 @@ True - True + True True + True True - True False diff --git a/uui/uiconfig/ui/sslwarndialog.ui b/uui/uiconfig/ui/sslwarndialog.ui index 01a7fd0d24f5..a9426c0fabd3 100644 --- a/uui/uiconfig/ui/sslwarndialog.ui +++ b/uui/uiconfig/ui/sslwarndialog.ui @@ -1,32 +1,32 @@ - + - False - 6 + False + 6 Security Warning: False True - dialog - True - warning + dialog + True + warning - False + False vertical 12 - False - end + False + end Continue True - True - True - True + True + True + True False @@ -38,9 +38,9 @@ Cancel Connection True - True - True - True + True + True + True False @@ -52,8 +52,8 @@ View Certificate True - True - True + True + True 6 @@ -67,7 +67,7 @@ False True - end + end 0 diff --git a/uui/uiconfig/ui/unknownauthdialog.ui b/uui/uiconfig/ui/unknownauthdialog.ui index fe44ae2b983a..5c5d5bf27bdc 100644 --- a/uui/uiconfig/ui/unknownauthdialog.ui +++ b/uui/uiconfig/ui/unknownauthdialog.ui @@ -1,31 +1,31 @@ - + - False - 6 + False + 6 Website Certified by an Unknown Authority False True - dialog - True - warning + dialog + True + warning - False + False vertical 12 - False - end + False + end _OK True - True - True + True + True True @@ -38,8 +38,8 @@ _Cancel True - True - True + True + True True @@ -52,8 +52,8 @@ _Help True - True - True + True + True True @@ -67,58 +67,58 @@ False True - end + end 0 - + True - False - 6 + False + 6 Accept this certificate temporarily for this session True - True - False - True + True + False + True True - True + True - 0 - 1 + 0 + 1 Do not accept this certificate and do not connect to this Web site True - True - False - True - True + True + False + True + True accept - 0 - 2 + 0 + 2 Examine Certificate… True - True - True + True + True start - True + True - 0 - 0 + 0 + 0 From a597b52b76855d91f147a4483139997a25082524 Mon Sep 17 00:00:00 2001 From: Mike Kaganski Date: Sun, 30 Jun 2024 14:11:43 +0500 Subject: [PATCH 163/194] Make SystemWindow::mbIsDeferredInit private This optimizes its layout a bit, deduplicates, and exposes less guts Change-Id: If522747fdc2c666ac7876b39e72cc689f3c5c89f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169767 Reviewed-by: Mike Kaganski Tested-by: Jenkins --- include/vcl/syswin.hxx | 6 ++++-- include/vcl/toolkit/dialog.hxx | 2 +- include/vcl/toolkit/floatwin.hxx | 2 +- vcl/source/window/dialog.cxx | 8 ++------ vcl/source/window/floatwin.cxx | 6 +----- vcl/source/window/syswin.cxx | 12 ++++++++++-- 6 files changed, 19 insertions(+), 17 deletions(-) diff --git a/include/vcl/syswin.hxx b/include/vcl/syswin.hxx index dc3f3d9fd393..13706028f7a1 100644 --- a/include/vcl/syswin.hxx +++ b/include/vcl/syswin.hxx @@ -104,13 +104,13 @@ private: bool mbIsCalculatingInitialLayoutSize; bool mbInitialLayoutSizeCalculated; bool mbPaintComplete; + bool mbIsDeferredInit; MenuBarMode mnMenuBarMode; sal_uInt16 mnIcon; std::unique_ptr mpImplData; Idle maLayoutIdle; OUString maNotebookBarUIFile; protected: - bool mbIsDeferredInit; VclPtr mpDialogParent; public: using Window::ImplIsInTaskPaneList; @@ -144,6 +144,8 @@ protected: SAL_DLLPRIVATE void DoInitialLayout(); + virtual void ImplDeferredInit(vcl::Window* pParent, WinBits nBits); + public: virtual ~SystemWindow() override; virtual void dispose() override; @@ -239,7 +241,7 @@ public: SAL_DLLPRIVATE bool hasPendingLayout() const { return maLayoutIdle.IsActive(); } - virtual void doDeferredInit(WinBits nBits); + void doDeferredInit(WinBits nBits); // Screenshot interface VclPtr createScreenshot(); diff --git a/include/vcl/toolkit/dialog.hxx b/include/vcl/toolkit/dialog.hxx index 5e11d2f783b5..7b61ed4c68c7 100644 --- a/include/vcl/toolkit/dialog.hxx +++ b/include/vcl/toolkit/dialog.hxx @@ -79,13 +79,13 @@ private: protected: void ImplInitDialog( vcl::Window* pParent, WinBits nStyle, InitFlag eFlag = InitFlag::Default ); + virtual void ImplDeferredInit(vcl::Window* pParent, WinBits nBits) override; /// Find and set the LOK notifier according to the pParent. void ImplLOKNotifier(vcl::Window* pParent); public: SAL_DLLPRIVATE bool IsInClose() const { return mbInClose; } - virtual void doDeferredInit(WinBits nBits) override; SAL_DLLPRIVATE void disposeOwnedButtons(); SAL_DLLPRIVATE static vcl::Window* GetDefDialogParent(); diff --git a/include/vcl/toolkit/floatwin.hxx b/include/vcl/toolkit/floatwin.hxx index f266b745375e..d2dcca050599 100644 --- a/include/vcl/toolkit/floatwin.hxx +++ b/include/vcl/toolkit/floatwin.hxx @@ -83,6 +83,7 @@ private: protected: SAL_DLLPRIVATE void ImplInitFloating( vcl::Window* pParent, WinBits nStyle ); + virtual void ImplDeferredInit(vcl::Window* pParent, WinBits nBits) override; SAL_DLLPRIVATE void ImplInitSettings(); virtual void ApplySettings(vcl::RenderContext& rRenderContext) override; @@ -102,7 +103,6 @@ public: SAL_DLLPRIVATE void ImplEndPopupMode( FloatWinPopupEndFlags nFlags, const VclPtr& xFocusId ); SAL_DLLPRIVATE AbsoluteScreenPixelRectangle ImplGetItemEdgeClipRect(); SAL_DLLPRIVATE bool ImplIsInPrivatePopupMode() const { return mbInPopupMode; } - virtual void doDeferredInit(WinBits nBits) override; void PixelInvalidate(const tools::Rectangle* pRectangle) override; public: diff --git a/vcl/source/window/dialog.cxx b/vcl/source/window/dialog.cxx index aa8f3d1d4b4c..da3ac79345c6 100644 --- a/vcl/source/window/dialog.cxx +++ b/vcl/source/window/dialog.cxx @@ -561,14 +561,10 @@ OUString AllSettings::GetUIRootDir() return sShareLayer; } -//we can't change sizeable after the fact, so need to defer until we know and then -//do the init. Find the real parent stashed in mpDialogParent. -void Dialog::doDeferredInit(WinBits nBits) +//we can't change sizeable after the fact, so need to defer until we know and then do the init. +void Dialog::ImplDeferredInit(vcl::Window* pParent, WinBits nBits) { - VclPtr pParent = mpDialogParent; - mpDialogParent = nullptr; ImplInitDialog(pParent, nBits | WB_BORDER, mnInitFlag); - mbIsDeferredInit = false; } Dialog::Dialog(vcl::Window* pParent, const OUString& rID, const OUString& rUIXMLDescription) diff --git a/vcl/source/window/floatwin.cxx b/vcl/source/window/floatwin.cxx index 5c576a0fd358..bf68500d6a70 100644 --- a/vcl/source/window/floatwin.cxx +++ b/vcl/source/window/floatwin.cxx @@ -173,13 +173,9 @@ FloatingWindow::FloatingWindow(vcl::Window* pParent, const OUString& rID, const loadUI(pParent, rID, rUIXMLDescription, rFrame); } -//Find the real parent stashed in mpDialogParent. -void FloatingWindow::doDeferredInit(WinBits nBits) +void FloatingWindow::ImplDeferredInit(vcl::Window* pParent, WinBits nBits) { - vcl::Window *pParent = mpDialogParent; - mpDialogParent = nullptr; ImplInitFloating(pParent, nBits); - mbIsDeferredInit = false; } void FloatingWindow::ApplySettings(vcl::RenderContext& rRenderContext) diff --git a/vcl/source/window/syswin.cxx b/vcl/source/window/syswin.cxx index 75b27a49a04c..ecb19f0b9fe9 100644 --- a/vcl/source/window/syswin.cxx +++ b/vcl/source/window/syswin.cxx @@ -72,11 +72,11 @@ SystemWindow::SystemWindow(WindowType nType, const char* pIdleDebugName) , mbIsCalculatingInitialLayoutSize(false) , mbInitialLayoutSizeCalculated(false) , mbPaintComplete(false) + , mbIsDeferredInit(false) , mnMenuBarMode(MenuBarMode::Normal) , mnIcon(0) , mpImplData(new ImplData) , maLayoutIdle( pIdleDebugName ) - , mbIsDeferredInit(false) { mpWindowImpl->mbSysWin = true; mpWindowImpl->mnActivateMode = ActivateModeFlags::GrabFocus; @@ -1110,7 +1110,15 @@ void SystemWindow::DoInitialLayout() } } -void SystemWindow::doDeferredInit(WinBits /*nBits*/) +void SystemWindow::doDeferredInit(WinBits nBits) +{ + VclPtr pParent = mpDialogParent; + mpDialogParent.reset(); + ImplDeferredInit(pParent, nBits); + mbIsDeferredInit = false; +} + +void SystemWindow::ImplDeferredInit(vcl::Window* /*pParent*/, WinBits /*nBits*/) { SAL_WARN("vcl.layout", "SystemWindow in layout without doDeferredInit impl"); } From 76a52cb698801d9689a9bd92995a2a792a11639a Mon Sep 17 00:00:00 2001 From: Mike Kaganski Date: Sun, 30 Jun 2024 16:21:46 +0500 Subject: [PATCH 164/194] Optimize SystemWindow layout a bit And simplify its ctor, using default member initializers. Change-Id: I08f06182c51d38299956cdf7ad2705c926c937d9 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169770 Tested-by: Jenkins Reviewed-by: Mike Kaganski --- include/vcl/syswin.hxx | 24 ++++++++++++------------ vcl/source/window/syswin.cxx | 9 --------- 2 files changed, 12 insertions(+), 21 deletions(-) diff --git a/include/vcl/syswin.hxx b/include/vcl/syswin.hxx index 13706028f7a1..f8a70d2be2a4 100644 --- a/include/vcl/syswin.hxx +++ b/include/vcl/syswin.hxx @@ -96,20 +96,20 @@ class VCL_DLLPUBLIC SystemWindow class ImplData; private: - VclPtr mpMenuBar; - Size maMinOutSize; - bool mbDockBtn; - bool mbHideBtn; - bool mbSysChild; - bool mbIsCalculatingInitialLayoutSize; - bool mbInitialLayoutSizeCalculated; - bool mbPaintComplete; - bool mbIsDeferredInit; - MenuBarMode mnMenuBarMode; - sal_uInt16 mnIcon; std::unique_ptr mpImplData; - Idle maLayoutIdle; + VclPtr mpMenuBar; OUString maNotebookBarUIFile; + Size maMinOutSize; + MenuBarMode mnMenuBarMode = MenuBarMode::Normal; + sal_uInt16 mnIcon = 0; + bool mbDockBtn : 1 = false; + bool mbHideBtn : 1 = false; + bool mbSysChild : 1 = false; + bool mbIsCalculatingInitialLayoutSize : 1 = false; + bool mbInitialLayoutSizeCalculated : 1 = false; + bool mbPaintComplete : 1 = false; + bool mbIsDeferredInit : 1 = false; + Idle maLayoutIdle; protected: VclPtr mpDialogParent; public: diff --git a/vcl/source/window/syswin.cxx b/vcl/source/window/syswin.cxx index ecb19f0b9fe9..e37cb548daf1 100644 --- a/vcl/source/window/syswin.cxx +++ b/vcl/source/window/syswin.cxx @@ -66,15 +66,6 @@ SystemWindow::ImplData::ImplData() SystemWindow::SystemWindow(WindowType nType, const char* pIdleDebugName) : Window(nType) - , mbDockBtn(false) - , mbHideBtn(false) - , mbSysChild(false) - , mbIsCalculatingInitialLayoutSize(false) - , mbInitialLayoutSizeCalculated(false) - , mbPaintComplete(false) - , mbIsDeferredInit(false) - , mnMenuBarMode(MenuBarMode::Normal) - , mnIcon(0) , mpImplData(new ImplData) , maLayoutIdle( pIdleDebugName ) { From 0e3394f7123b6d63b91c1c55f227253f21cba343 Mon Sep 17 00:00:00 2001 From: Mike Kaganski Date: Sun, 30 Jun 2024 18:45:58 +0500 Subject: [PATCH 165/194] vs-ide-integration: set correct solution / project platform This allows the IDE to show active #ifdef conditions, type sizes, alignment, memory layout, selected overloads, and so on. Change-Id: Idd1211df3b3745658f1996a494929b07cf7aa573 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169772 Tested-by: Jenkins Reviewed-by: Mike Kaganski --- bin/gbuild-to-ide | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/bin/gbuild-to-ide b/bin/gbuild-to-ide index ef1e27dd6748..b3f8b9fbd371 100755 --- a/bin/gbuild-to-ide +++ b/bin/gbuild-to-ide @@ -866,6 +866,12 @@ class VisualStudioIntegrationGenerator(IdeIntegrationGenerator): def __init__(self, gbuildparser, ide): IdeIntegrationGenerator.__init__(self, gbuildparser, ide) self.toolset = os.environ['VCTOOLSET'] + if os.environ['CPUNAME'] == 'X86_64': + self.platform = 'x64' + elif os.environ['CPUNAME'] == 'AARCH64': + self.platform = 'ARM' + else: # 'INTEL' + self.platform = 'Win32' self.solution_directory = self.gbuildparser.builddir self.configurations = { 'Build': { @@ -995,7 +1001,7 @@ class VisualStudioIntegrationGenerator(IdeIntegrationGenerator): f.write('EndProject\n') # end Folders to group tests/libraries/executables f.write('Global\n') - platform = 'Win32' + platform = self.platform f.write('\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n') for cfg in self.configurations: f.write('\t\t%(cfg)s|%(platform)s = %(cfg)s|%(platform)s\n' % {'cfg': cfg, 'platform': platform}) @@ -1071,7 +1077,7 @@ class VisualStudioIntegrationGenerator(IdeIntegrationGenerator): ET.register_namespace('', self.ns) proj_node = ET.Element('{%s}Project' % self.ns, DefaultTargets='Build', ToolsVersion='4.0') proj_confs_node = ET.SubElement(proj_node, '{%s}ItemGroup' % self.ns, Label='ProjectConfigurations') - platform = 'Win32' + platform = self.platform for configuration in self.configurations: proj_conf_node = ET.SubElement(proj_confs_node, '{%s}ProjectConfiguration' % self.ns, From 5bf58785ba2831de4efc2afe9df463b4a753ccb1 Mon Sep 17 00:00:00 2001 From: Michael Weghorn Date: Fri, 21 Jun 2024 09:22:07 +0200 Subject: [PATCH 166/194] gtk4: Require GTK >= 4.10 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit For the gtk4 VCL plugin, require GTK version >= 4.10 and drop code for older versions. This simplifies maintenance, in particular since requiring 4.10 ensures that the basic GtkAccessible API is available. GTK 4.10 was released on 2023-03-04 [1], so it will be almost 2 years by the time that LO 25.2 will be released. Given that the gtk4 VCL plugin is still experimental, providing support for older GTK 4 releases shouldn't have to be a concern. [1] https://gitlab.gnome.org/GNOME/gtk/-/blob/4.10.0/NEWS?ref_type=tags Change-Id: I6f361b533391225d0e74c174e0479b767b9d827a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169324 Tested-by: Caolán McNamara Reviewed-by: Caolán McNamara Tested-by: Jenkins --- avmedia/source/gtk/gtkplayer.cxx | 4 ---- configure.ac | 2 +- vcl/unx/gtk3/gtkframe.cxx | 4 ---- vcl/unx/gtk3/gtkinst.cxx | 13 ++++--------- vcl/unx/gtk4/a11y.cxx | 12 ------------ vcl/unx/gtk4/gtkaccessibleeventlistener.cxx | 4 ---- vcl/unx/gtk4/gtkaccessibleregistry.cxx | 4 ---- 7 files changed, 5 insertions(+), 38 deletions(-) diff --git a/avmedia/source/gtk/gtkplayer.cxx b/avmedia/source/gtk/gtkplayer.cxx index 4dca3e202a24..617991fecce2 100644 --- a/avmedia/source/gtk/gtkplayer.cxx +++ b/avmedia/source/gtk/gtkplayer.cxx @@ -343,11 +343,7 @@ uno::Reference<::media::XPlayerWindow> return nullptr; m_pVideo = gtk_picture_new_for_paintable(GDK_PAINTABLE(m_pStream)); -#if GTK_CHECK_VERSION(4, 7, 2) gtk_picture_set_content_fit(GTK_PICTURE(m_pVideo), GTK_CONTENT_FIT_FILL); -#else - gtk_picture_set_keep_aspect_ratio(GTK_PICTURE(m_pVideo), false); -#endif gtk_widget_set_can_target(m_pVideo, false); gtk_widget_set_vexpand(m_pVideo, true); gtk_widget_set_hexpand(m_pVideo, true); diff --git a/configure.ac b/configure.ac index eb6e1f3e9853..38dd927c6c47 100644 --- a/configure.ac +++ b/configure.ac @@ -12125,7 +12125,7 @@ if test "$test_gtk4" = yes -a "x$enable_gtk4" = "xyes"; then add_warning 'Non-system cairo combined with gtk4 is assumed to cause trouble; proceed at your own risk.' fi : ${with_system_cairo:=yes} - PKG_CHECK_MODULES(GTK4, gtk4 gmodule-no-export-2.0 glib-2.0 >= 2.38 cairo atk) + PKG_CHECK_MODULES(GTK4, gtk4 >= 4.10 gmodule-no-export-2.0 glib-2.0 >= 2.38 cairo atk) GTK4_CFLAGS=$(printf '%s' "$GTK4_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g") GTK4_CFLAGS="$GTK4_CFLAGS -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED" FilterLibs "${GTK4_LIBS}" diff --git a/vcl/unx/gtk3/gtkframe.cxx b/vcl/unx/gtk3/gtkframe.cxx index a1b7f619983d..7e39bd784b97 100644 --- a/vcl/unx/gtk3/gtkframe.cxx +++ b/vcl/unx/gtk3/gtkframe.cxx @@ -992,11 +992,7 @@ void GtkSalFrame::InitCommon() m_pDrawingArea = m_pFixedContainer; #else m_pOverlay = GTK_OVERLAY(gtk_overlay_new()); -#if GTK_CHECK_VERSION(4,9,0) m_pFixedContainer = GTK_FIXED(g_object_new( ooo_fixed_get_type(), nullptr )); -#else - m_pFixedContainer = GTK_FIXED(gtk_fixed_new()); -#endif m_pDrawingArea = GTK_DRAWING_AREA(gtk_drawing_area_new()); #endif if (GTK_IS_WINDOW(m_pWindow)) diff --git a/vcl/unx/gtk3/gtkinst.cxx b/vcl/unx/gtk3/gtkinst.cxx index 9ad11bb3103a..58137be49195 100644 --- a/vcl/unx/gtk3/gtkinst.cxx +++ b/vcl/unx/gtk3/gtkinst.cxx @@ -11236,15 +11236,10 @@ public: } g_list_free(pChildren); #else - GtkWidget* pChild; - if (gtk_check_version(4, 5, 0) == nullptr) - { - pChild = gtk_widget_get_first_child(GTK_WIDGET(m_pMenuButton)); - pChild = gtk_widget_get_first_child(pChild); - pChild = gtk_widget_get_first_child(pChild); - } - else - pChild = gtk_widget_get_last_child(GTK_WIDGET(m_pMenuButton)); + GtkWidget* pChild = gtk_widget_get_first_child(GTK_WIDGET(m_pMenuButton)); + pChild = gtk_widget_get_first_child(pChild); + pChild = gtk_widget_get_first_child(pChild); + g_object_ref(pChild); gtk_widget_unparent(pChild); gtk_button_set_child(GTK_BUTTON(m_pToggleButton), pChild); diff --git a/vcl/unx/gtk4/a11y.cxx b/vcl/unx/gtk4/a11y.cxx index 1beba84ed67a..afa6905de553 100644 --- a/vcl/unx/gtk4/a11y.cxx +++ b/vcl/unx/gtk4/a11y.cxx @@ -19,8 +19,6 @@ #include #include -#if GTK_CHECK_VERSION(4, 9, 0) - #include "a11y.hxx" #include "gtkaccessibleeventlistener.hxx" #include "gtkaccessibleregistry.hxx" @@ -465,10 +463,8 @@ struct LoAccessibleClass GObjectClass parent_class; }; -#if GTK_CHECK_VERSION(4, 10, 0) static void lo_accessible_range_init(gpointer iface_, gpointer); static gboolean lo_accessible_range_set_current_value(GtkAccessibleRange* self, double fNewValue); -#endif extern "C" { typedef GType (*GetGIfaceType)(); @@ -484,10 +480,8 @@ const struct { "Text", lo_accessible_text_init, gtk_accessible_text_get_type, cppu::UnoType::get }, #endif -#if GTK_CHECK_VERSION(4, 10, 0) { "Value", lo_accessible_range_init, gtk_accessible_range_get_type, cppu::UnoType::get }, -#endif }; static bool isOfType(css::uno::XInterface* xInterface, const css::uno::Type& rType) @@ -628,13 +622,11 @@ static void lo_accessible_accessible_init(GtkAccessibleInterface* iface) iface->get_platform_state = lo_accessible_get_platform_state; } -#if GTK_CHECK_VERSION(4, 10, 0) static void lo_accessible_range_init(gpointer iface_, gpointer) { auto const iface = static_cast(iface_); iface->set_current_value = lo_accessible_range_set_current_value; } -#endif // silence loplugin:unreffun #ifdef __GNUC__ @@ -815,7 +807,6 @@ static gboolean lo_accessible_get_platform_state(GtkAccessible* self, return false; } -#if GTK_CHECK_VERSION(4, 10, 0) static gboolean lo_accessible_range_set_current_value(GtkAccessibleRange* self, double fNewValue) { // return 'true' in any case, since otherwise no proper AT-SPI DBus reply gets sent @@ -856,7 +847,6 @@ static gboolean lo_accessible_range_set_current_value(GtkAccessibleRange* self, xValue->setCurrentValue(aValue); return true; } -#endif static void lo_accessible_init(LoAccessible* /*iface*/) {} @@ -930,6 +920,4 @@ static void ooo_fixed_init(OOoFixed* /*area*/) {} GtkWidget* ooo_fixed_new() { return GTK_WIDGET(g_object_new(OOO_TYPE_FIXED, nullptr)); } -#endif - /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/vcl/unx/gtk4/gtkaccessibleeventlistener.cxx b/vcl/unx/gtk4/gtkaccessibleeventlistener.cxx index 6e50b854d16e..aacf2191f8be 100644 --- a/vcl/unx/gtk4/gtkaccessibleeventlistener.cxx +++ b/vcl/unx/gtk4/gtkaccessibleeventlistener.cxx @@ -15,8 +15,6 @@ #include "gtkaccessibleeventlistener.hxx" #include "gtkaccessibleregistry.hxx" -#if GTK_CHECK_VERSION(4, 9, 0) - GtkAccessibleEventListener::GtkAccessibleEventListener(LoAccessible* pLoAccessible) : m_pLoAccessible(pLoAccessible) { @@ -107,6 +105,4 @@ void GtkAccessibleEventListener::notifyEvent( } } -#endif - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/unx/gtk4/gtkaccessibleregistry.cxx b/vcl/unx/gtk4/gtkaccessibleregistry.cxx index 6288a99f2fed..c8086ec4b13e 100644 --- a/vcl/unx/gtk4/gtkaccessibleregistry.cxx +++ b/vcl/unx/gtk4/gtkaccessibleregistry.cxx @@ -12,8 +12,6 @@ #include -#if GTK_CHECK_VERSION(4, 9, 0) - std::map GtkAccessibleRegistry::m_aMapping = {}; LoAccessible* @@ -56,6 +54,4 @@ void GtkAccessibleRegistry::remove(css::uno::Reference Date: Sun, 30 Jun 2024 19:26:15 +0900 Subject: [PATCH 167/194] Fix typo Follow-up to 1f3c82e3b0171bac89cbc7d1ec1ca89fac1c7eec See https://www.unicode.org/charts/PDF/U1400.pdf Change-Id: Iece91e51f1eea21495849368950747f3056f197d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169769 Tested-by: Jenkins Reviewed-by: Adolfo Jayme Barrientos --- include/svx/strings.hrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/svx/strings.hrc b/include/svx/strings.hrc index 8c61f7714e09..c9c1c899998b 100644 --- a/include/svx/strings.hrc +++ b/include/svx/strings.hrc @@ -1570,7 +1570,7 @@ #define RID_SUBSETSTR_THAANA NC_("RID_SUBSETMAP", "Thaana") #define RID_SUBSETSTR_ETHIOPIC NC_("RID_SUBSETMAP", "Ethiopic") #define RID_SUBSETSTR_CHEROKEE NC_("RID_SUBSETMAP", "Cherokee") -#define RID_SUBSETSTR_CANADIAN_ABORIGINAL NC_("RID_SUBSETMAP", "Unified Canadian Aboriginal Syllables") +#define RID_SUBSETSTR_CANADIAN_ABORIGINAL NC_("RID_SUBSETMAP", "Unified Canadian Aboriginal Syllabics") #define RID_SUBSETSTR_MONGOLIAN NC_("RID_SUBSETMAP", "Mongolian") #define RID_SUBSETSTR_MISC_MATH_SYMS_A NC_("RID_SUBSETMAP", "Miscellaneous Mathematical Symbols-A") #define RID_SUBSETSTR_SUPPL_ARROWS_A NC_("RID_SUBSETMAP", "Supplemental Arrows-A") From 26ae64ae9f1feafac0219de75d6c23b54ceefaae Mon Sep 17 00:00:00 2001 From: Noel Grandin Date: Sun, 30 Jun 2024 20:11:18 +0200 Subject: [PATCH 168/194] remove hashCode from SvxBorderLine because they are unused and incorrect. They are incorrect because hashCode and operator== are not mutually consistent, as I found out when I tried to use them. They were introduced in commit c39e4f6b8a942680bc7250177c34fd034a0605e0 Author: Oliver Specht Date: Wed May 22 12:26:46 2024 +0200 Add SfxItemType to SfxPoolItem but were not used in that commit. Change-Id: I1c3c67e904823117401a0f72a49c80f4bb6398a3 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169773 Tested-by: Jenkins Reviewed-by: Noel Grandin --- include/editeng/borderline.hxx | 15 --------------- include/svtools/borderline.hxx | 9 --------- 2 files changed, 24 deletions(-) diff --git a/include/editeng/borderline.hxx b/include/editeng/borderline.hxx index 86c6be8161be..05b76a05070d 100644 --- a/include/editeng/borderline.hxx +++ b/include/editeng/borderline.hxx @@ -254,21 +254,6 @@ public: static Color threeDDarkColor( Color aMain ); static BorderWidthImpl getWidthImpl( SvxBorderLineStyle nStyle ); - - std::size_t getHash() const - { - std::size_t seed = 0; - o3tl::hash_combine(seed, m_nWidth); - o3tl::hash_combine(seed, m_nMult); - o3tl::hash_combine(seed, m_nDiv); - o3tl::hash_combine(seed, m_aWidthImpl.getHash()); - o3tl::hash_combine(seed, m_aColor.operator::sal_uInt32()); - o3tl::hash_combine(seed, m_aComplexColor.getHash()); - o3tl::hash_combine(seed, m_nStyle); - o3tl::hash_combine(seed, m_bMirrorWidths); - o3tl::hash_combine(seed, m_bUseLeftTop); - return seed; - } }; EDITENG_DLLPUBLIC bool operator!=( const SvxBorderLine& rLeft, const SvxBorderLine& rRight ); diff --git a/include/svtools/borderline.hxx b/include/svtools/borderline.hxx index 90ecee6512f5..f5b2b56093fa 100644 --- a/include/svtools/borderline.hxx +++ b/include/svtools/borderline.hxx @@ -74,15 +74,6 @@ public: bool IsEmpty( ) const { return (0 == m_nRate1) && (0 == m_nRate2); } bool IsDouble( ) const { return (0 != m_nRate1) && (0 != m_nRate2); } - std::size_t getHash() const - { - std::size_t seed = 0; - o3tl::hash_combine(seed, m_nFlags); - o3tl::hash_combine(seed, m_nRate1); - o3tl::hash_combine(seed, m_nRate2); - o3tl::hash_combine(seed, m_nRateGap); - return seed; - } }; From 4637bad647b15892cb954731ad8fd8ff6533a4eb Mon Sep 17 00:00:00 2001 From: Noel Grandin Date: Sun, 30 Jun 2024 21:27:23 +0200 Subject: [PATCH 169/194] call fillDecimal() in SvxTabStop constructor otherwise we get the weird behaviour where two SvxTabStop instances which are constructed the same, return false from operator== because one instance has had getDecimal() called on it, and the other not. Change-Id: I1f708c1b1e03efcd9fc554eaf2777c4c3e8a80b8 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169774 Reviewed-by: Noel Grandin Tested-by: Jenkins --- editeng/source/items/paraitem.cxx | 4 +++- include/editeng/tstpitem.hxx | 9 ++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/editeng/source/items/paraitem.cxx b/editeng/source/items/paraitem.cxx index 07a927947bdd..a63f73c25335 100644 --- a/editeng/source/items/paraitem.cxx +++ b/editeng/source/items/paraitem.cxx @@ -802,6 +802,7 @@ SvxTabStop::SvxTabStop() eAdjustment = SvxTabAdjust::Left; m_cDecimal = cDfltDecimalChar; cFill = cDfltFillChar; + fillDecimal(); } @@ -812,9 +813,10 @@ SvxTabStop::SvxTabStop( const sal_Int32 nPos, const SvxTabAdjust eAdjst, eAdjustment = eAdjst; m_cDecimal = cDec; cFill = cFil; + fillDecimal(); } -void SvxTabStop::fillDecimal() const +void SvxTabStop::fillDecimal() { if ( cDfltDecimalChar == m_cDecimal ) m_cDecimal = SvtSysLocale().GetLocaleData().getNumDecimalSep()[0]; diff --git a/include/editeng/tstpitem.hxx b/include/editeng/tstpitem.hxx index 037e76636641..f0f99ce9cc86 100644 --- a/include/editeng/tstpitem.hxx +++ b/include/editeng/tstpitem.hxx @@ -37,11 +37,10 @@ class EDITENG_DLLPUBLIC SvxTabStop private: sal_Int32 nTabPos; SvxTabAdjust eAdjustment; - mutable sal_Unicode - m_cDecimal; + sal_Unicode m_cDecimal; sal_Unicode cFill; - void fillDecimal() const; + void fillDecimal(); public: SvxTabStop(); @@ -56,8 +55,8 @@ public: SvxTabAdjust& GetAdjustment() { return eAdjustment; } SvxTabAdjust GetAdjustment() const { return eAdjustment; } - sal_Unicode& GetDecimal() { fillDecimal(); return m_cDecimal; } - sal_Unicode GetDecimal() const { fillDecimal(); return m_cDecimal; } + sal_Unicode& GetDecimal() { return m_cDecimal; } + sal_Unicode GetDecimal() const { return m_cDecimal; } sal_Unicode& GetFill() { return cFill; } sal_Unicode GetFill() const { return cFill; } From 09c5cdfed1a9f7a690f6b4d8bfff98ca4ab1911c Mon Sep 17 00:00:00 2001 From: Samuel Mehrbrodt Date: Thu, 27 Jun 2024 15:27:59 +0200 Subject: [PATCH 170/194] Use correct config option to keep changes info copy/paste error Change-Id: Iaccd96aced4ac0aa9bd93265aee34b66b6e23a77 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169648 Tested-by: Jenkins Reviewed-by: Samuel Mehrbrodt --- sw/source/filter/ww8/rtfexport.cxx | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/sw/source/filter/ww8/rtfexport.cxx b/sw/source/filter/ww8/rtfexport.cxx index 4eb04d4f8bbf..41a9cc4b9908 100644 --- a/sw/source/filter/ww8/rtfexport.cxx +++ b/sw/source/filter/ww8/rtfexport.cxx @@ -273,10 +273,9 @@ void RtfExport::WriteRevTab() GetRedline(SW_MOD()->GetRedlineAuthor(pRedl->GetAuthor())); } - bool bRemoveCommentAuthorDates + bool bRemoveChangesInfo = SvtSecurityOptions::IsOptionSet(SvtSecurityOptions::EOption::DocWarnRemovePersonalInfo) - && !SvtSecurityOptions::IsOptionSet( - SvtSecurityOptions::EOption::DocWarnKeepNoteAuthorDateInfo); + && !SvtSecurityOptions::IsOptionSet(SvtSecurityOptions::EOption::DocWarnKeepRedlineInfo); // Now write the table Strm() @@ -290,9 +289,8 @@ void RtfExport::WriteRevTab() Strm().WriteChar('{'); if (pAuthor) { - OUString sAuthor(bRemoveCommentAuthorDates - ? "Author" + OUString::number(GetInfoID(*pAuthor)) - : *pAuthor); + OUString sAuthor(bRemoveChangesInfo ? "Author" + OUString::number(GetInfoID(*pAuthor)) + : *pAuthor); Strm().WriteOString(msfilter::rtfutil::OutString(sAuthor, m_eDefaultEncoding)); } Strm().WriteOString(";}"); From 21120ae0ed8025bca68dc05a359b175b3ff9b980 Mon Sep 17 00:00:00 2001 From: Samuel Mehrbrodt Date: Thu, 27 Jun 2024 16:09:56 +0200 Subject: [PATCH 171/194] doc: Don't export changes author/date when in privacy mode Change-Id: I48c5688b76d895eac3850bf69ff1a08cf6c0879f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169650 Tested-by: Jenkins Reviewed-by: Samuel Mehrbrodt --- sw/source/filter/ww8/wrtw8nds.cxx | 12 ++++++++++-- sw/source/filter/ww8/wrtww8.cxx | 9 ++++++++- sw/source/filter/ww8/wrtww8.hxx | 2 ++ 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/sw/source/filter/ww8/wrtw8nds.cxx b/sw/source/filter/ww8/wrtw8nds.cxx index a42fc133ebb3..c2f47666ba23 100644 --- a/sw/source/filter/ww8/wrtw8nds.cxx +++ b/sw/source/filter/ww8/wrtw8nds.cxx @@ -50,6 +50,7 @@ #include #include #include +#include #include #include #include @@ -3668,6 +3669,11 @@ void WW8AttributeOutput::Redline( const SwRedlineData* pRedline ) NS_sprm::CFRMarkDel::val, NS_sprm::CIbstRMarkDel::val, NS_sprm::CDttmRMarkDel::val, }; + bool bRemovePersonalInfo + = SvtSecurityOptions::IsOptionSet(SvtSecurityOptions::EOption::DocWarnRemovePersonalInfo) + && !SvtSecurityOptions::IsOptionSet( + SvtSecurityOptions::EOption::DocWarnKeepRedlineInfo); + const sal_uInt16* pSprmIds = nullptr; switch( pRedline->GetType() ) { @@ -3684,7 +3690,8 @@ void WW8AttributeOutput::Redline( const SwRedlineData* pRedline ) m_rWW8Export.m_pO->push_back( 7 ); // len m_rWW8Export.m_pO->push_back( 1 ); m_rWW8Export.InsUInt16( m_rWW8Export.AddRedlineAuthor( pRedline->GetAuthor() ) ); - m_rWW8Export.InsUInt32( sw::ms::DateTime2DTTM( pRedline->GetTimeStamp() )); + m_rWW8Export.InsUInt32(sw::ms::DateTime2DTTM( + bRemovePersonalInfo ? DateTime(DateTime::EMPTY) : pRedline->GetTimeStamp())); break; default: OSL_ENSURE(false, "Unhandled redline type for export"); @@ -3700,7 +3707,8 @@ void WW8AttributeOutput::Redline( const SwRedlineData* pRedline ) m_rWW8Export.InsUInt16( m_rWW8Export.AddRedlineAuthor( pRedline->GetAuthor() ) ); m_rWW8Export.InsUInt16( pSprmIds[2] ); - m_rWW8Export.InsUInt32( sw::ms::DateTime2DTTM( pRedline->GetTimeStamp() )); + m_rWW8Export.InsUInt32(sw::ms::DateTime2DTTM( + bRemovePersonalInfo ? DateTime(DateTime::EMPTY) : pRedline->GetTimeStamp())); } } diff --git a/sw/source/filter/ww8/wrtww8.cxx b/sw/source/filter/ww8/wrtww8.cxx index 467a7c18949a..a8404aa61396 100644 --- a/sw/source/filter/ww8/wrtww8.cxx +++ b/sw/source/filter/ww8/wrtww8.cxx @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -1680,7 +1681,12 @@ sal_uInt16 WW8Export::AddRedlineAuthor( std::size_t nId ) m_pRedlAuthors.reset(new WW8_WrtRedlineAuthor); m_pRedlAuthors->AddName(u"Unknown"_ustr); } - return m_pRedlAuthors->AddName( SW_MOD()->GetRedlineAuthor( nId ) ); + bool bRemovePersonalInfo + = SvtSecurityOptions::IsOptionSet(SvtSecurityOptions::EOption::DocWarnRemovePersonalInfo) + && !SvtSecurityOptions::IsOptionSet(SvtSecurityOptions::EOption::DocWarnKeepRedlineInfo); + OUString sName(SW_MOD()->GetRedlineAuthor(nId)); + return m_pRedlAuthors->AddName( + bRemovePersonalInfo ? "Author" + OUString::number(mpAuthorIDs->GetInfoID(sName)) : sName); } void WW8Export::WriteAsStringTable(const std::vector& rStrings, @@ -4040,6 +4046,7 @@ WW8Export::WW8Export( SwWW8Writer *pWriter, , m_bDot(bDot) , m_pWriter(pWriter) , m_pAttrOutput(new WW8AttributeOutput(*this)) + , mpAuthorIDs(new SvtSecurityMapPersonalInfo) { } diff --git a/sw/source/filter/ww8/wrtww8.hxx b/sw/source/filter/ww8/wrtww8.hxx index 000ea3580b20..af58e081f6ca 100644 --- a/sw/source/filter/ww8/wrtww8.hxx +++ b/sw/source/filter/ww8/wrtww8.hxx @@ -1024,6 +1024,8 @@ protected: private: rtl::Reference m_xEscherStg; /// memory leak #i120098#, to hold the reference to unnamed SotStorage obj + /// map authors to remove personal info + std::unique_ptr mpAuthorIDs; public: /// Access to the attribute output class. From c65127e5f6efcc5db93d2f80b9592f458200d596 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Guillou?= Date: Thu, 13 Jun 2024 15:31:30 +1000 Subject: [PATCH 172/194] tdf#158416: restore infobar text colours ...which were lost with de1b926fa294273caefb29a507e117b8487e882b. rMessageColor is put back into the switch, but uses the settings' warning and error colours introduced by d7fd378b533c42f51d1d363f5da30b1fa1281f67 where applicable. Colours were checked for sufficient contrast in https://gerrit.libreoffice.org/c/core/+/47825 Change-Id: Iba42020b665e35c34f09b3788bcc973b0f8531d1 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/168761 Tested-by: Jenkins Reviewed-by: Heiko Tietze --- sfx2/source/dialog/infobar.cxx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/sfx2/source/dialog/infobar.cxx b/sfx2/source/dialog/infobar.cxx index 4e1fed849680..e69fe481bccb 100644 --- a/sfx2/source/dialog/infobar.cxx +++ b/sfx2/source/dialog/infobar.cxx @@ -42,8 +42,6 @@ namespace void GetInfoBarColors(InfobarType ibType, BColor& rBackgroundColor, BColor& rForegroundColor, BColor& rMessageColor) { - rMessageColor = basegfx::BColor(0.0, 0.0, 0.0); - const StyleSettings& rSettings = Application::GetSettings().GetStyleSettings(); switch (ibType) @@ -51,18 +49,22 @@ void GetInfoBarColors(InfobarType ibType, BColor& rBackgroundColor, BColor& rFor case InfobarType::INFO: // blue; #004785/0,71,133; #BDE5F8/189,229,248 rBackgroundColor = basegfx::BColor(0.741, 0.898, 0.973); rForegroundColor = basegfx::BColor(0.0, 0.278, 0.522); + rMessageColor = basegfx::BColor(0.0, 0.278, 0.522); break; case InfobarType::SUCCESS: // green; #32550C/50,85,12; #DFF2BF/223,242,191 rBackgroundColor = basegfx::BColor(0.874, 0.949, 0.749); rForegroundColor = basegfx::BColor(0.196, 0.333, 0.047); + rMessageColor = basegfx::BColor(0.196, 0.333, 0.047); break; case InfobarType::WARNING: // orange; #704300/112,67,0; #FEEFB3/254,239,179 rBackgroundColor = rSettings.GetWarningColor().getBColor(); rForegroundColor = rSettings.GetWarningTextColor().getBColor(); + rMessageColor = rSettings.GetWarningTextColor().getBColor(); break; case InfobarType::DANGER: // red; #7A0006/122,0,6; #FFBABA/255,186,186 rBackgroundColor = rSettings.GetErrorColor().getBColor(); rForegroundColor = rSettings.GetErrorTextColor().getBColor(); + rMessageColor = rSettings.GetErrorTextColor().getBColor(); break; } From 4b3995bf5d0058ec70e35679abf1940a5c0e2f69 Mon Sep 17 00:00:00 2001 From: Heiko Tietze Date: Thu, 27 Jun 2024 13:21:59 +0200 Subject: [PATCH 173/194] Resolves tdf#161796 - Add a donate button to the start center Set Common::Misc::ShowDonation to false in order to get the legacy Extensions button Icon by Muhammad Haq on freeicons.io (slightly modified) Change-Id: I83d10d7230722d38914934d59d70ece471e62599 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169628 Tested-by: Jenkins Reviewed-by: Heiko Tietze --- icon-themes/colibre/res/donate.png | Bin 0 -> 6393 bytes .../data/org/openoffice/Office/Common.xcu | 3 +++ .../schema/org/openoffice/Office/Common.xcs | 6 +++++ sfx2/inc/bitmaps.hlst | 2 ++ sfx2/source/dialog/backingwindow.cxx | 24 +++++++++++++++--- 5 files changed, 32 insertions(+), 3 deletions(-) create mode 100644 icon-themes/colibre/res/donate.png diff --git a/icon-themes/colibre/res/donate.png b/icon-themes/colibre/res/donate.png new file mode 100644 index 0000000000000000000000000000000000000000..6c93e5eeb78866dce28b5a681710e84fc637933c GIT binary patch literal 6393 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 UtQ<;)o?ZZ3%Z(O)oB8hi7c=t~NB{r; literal 0 HcmV?d00001 diff --git a/officecfg/registry/data/org/openoffice/Office/Common.xcu b/officecfg/registry/data/org/openoffice/Office/Common.xcu index de1eae2ce767..7c8bc8f15f35 100644 --- a/officecfg/registry/data/org/openoffice/Office/Common.xcu +++ b/officecfg/registry/data/org/openoffice/Office/Common.xcu @@ -457,6 +457,9 @@ true + + true + diff --git a/officecfg/registry/schema/org/openoffice/Office/Common.xcs b/officecfg/registry/schema/org/openoffice/Office/Common.xcs index 15b3a481195c..c2e0e97159d1 100644 --- a/officecfg/registry/schema/org/openoffice/Office/Common.xcs +++ b/officecfg/registry/schema/org/openoffice/Office/Common.xcs @@ -5367,6 +5367,12 @@ false + + + Determines whether to show a donation button in the start center or extension. + + true + Determines whether OpenCL can be used, when available, to speed up diff --git a/sfx2/inc/bitmaps.hlst b/sfx2/inc/bitmaps.hlst index 0484bb7e18e9..04169c38d2db 100644 --- a/sfx2/inc/bitmaps.hlst +++ b/sfx2/inc/bitmaps.hlst @@ -95,4 +95,6 @@ inline constexpr OUString BMP_MENU_RENAME = u"cmd/sc_editdoc.png"_ustr; inline constexpr OUString BMP_MENU_DELETE = u"cmd/sc_delete.png"_ustr; inline constexpr OUString BMP_MENU_EXPORT = u"cmd/sc_exportto.png"_ustr; +inline constexpr OUString BMP_DONATE = u"res/donate.png"_ustr; + /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/sfx2/source/dialog/backingwindow.cxx b/sfx2/source/dialog/backingwindow.cxx index e3761327ee60..b4a5f112f1f2 100644 --- a/sfx2/source/dialog/backingwindow.cxx +++ b/sfx2/source/dialog/backingwindow.cxx @@ -56,6 +56,11 @@ #include #include +#include +#include +#include +#include + using namespace ::com::sun::star; using namespace ::com::sun::star::beans; using namespace ::com::sun::star::frame; @@ -189,6 +194,13 @@ BackingWindow::BackingWindow(vcl::Window* i_pParent) mxHelpButton->set_label(mxAltHelpLabel->get_label()); mxHelpButton->connect_clicked(LINK(this, BackingWindow, ClickHelpHdl)); + // tdf#161796 make the extension button show the donation page + if (officecfg::Office::Common::Misc::ShowDonation::get()) + { + mxExtensionsButton->set_label(SfxResId(STR_DONATE_BUTTON)); + mxExtensionsButton->set_from_icon_name(BMP_DONATE); + } + mxDropTarget = mxAllRecentThumbnails->GetDropTarget(); try @@ -533,9 +545,15 @@ IMPL_LINK(BackingWindow, ExtLinkClickHdl, weld::Button&, rButton,void) try { - OUString sURL(officecfg::Office::Common::Menus::ExtensionsURL::get() + - "?LOvers=" + utl::ConfigManager::getProductVersion() + - "&LOlocale=" + LanguageTag(utl::ConfigManager::getUILocale()).getBcp47() ); + OUString sURL; + if (officecfg::Office::Common::Misc::ShowDonation::get()) + sURL = officecfg::Office::Common::Menus::DonationURL::get() + + "?BCP47=" + LanguageTag(utl::ConfigManager::getUILocale()).getBcp47() + + "&LOlang=" + LanguageTag(utl::ConfigManager::getUILocale()).getLanguage(); + else + sURL = officecfg::Office::Common::Menus::ExtensionsURL::get() + + "?LOvers=" + utl::ConfigManager::getProductVersion() + + "&LOlocale=" + LanguageTag(utl::ConfigManager::getUILocale()).getBcp47(); Reference const xSystemShellExecute( From fddc381856aba41b95faccaa803c7fe9cf4ec721 Mon Sep 17 00:00:00 2001 From: Bogdan Buzea Date: Thu, 27 Jun 2024 19:00:15 +0200 Subject: [PATCH 174/194] Resave with newer Glade version Change-Id: I427437cf861ea75413d5bee14cca2dba73add1a0 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169603 Tested-by: Jenkins Reviewed-by: Taichi Haradaguchi <20001722@ymail.ne.jp> --- svtools/uiconfig/ui/addresstemplatedialog.ui | 365 +++++++++---------- svtools/uiconfig/ui/calendar.ui | 28 +- svtools/uiconfig/ui/checkboxcontrol.ui | 12 +- svtools/uiconfig/ui/combocontrol.ui | 12 +- svtools/uiconfig/ui/datewindow.ui | 34 +- svtools/uiconfig/ui/editcontrol.ui | 10 +- svtools/uiconfig/ui/emptypage.ui | 6 +- svtools/uiconfig/ui/fileviewmenu.ui | 12 +- svtools/uiconfig/ui/fixedimagecontrol.ui | 6 +- svtools/uiconfig/ui/fixedtextcontrol.ui | 6 +- svtools/uiconfig/ui/graphicexport.ui | 5 +- svtools/uiconfig/ui/inputbox.ui | 63 ++-- svtools/uiconfig/ui/interimparent.ui | 4 +- svtools/uiconfig/ui/javadisableddialog.ui | 36 +- svtools/uiconfig/ui/linewindow.ui | 34 +- svtools/uiconfig/ui/listcontrol.ui | 6 +- svtools/uiconfig/ui/managedtoolbar.ui | 6 +- svtools/uiconfig/ui/placeedit.ui | 247 +++++++------ svtools/uiconfig/ui/printersetupdialog.ui | 133 ++++--- svtools/uiconfig/ui/querydeletedialog.ui | 44 +-- svtools/uiconfig/ui/spinfieldcontrol.ui | 10 +- svtools/uiconfig/ui/subtoolbar.ui | 6 +- svtools/uiconfig/ui/tabbaredit.ui | 14 +- svtools/uiconfig/ui/textviewcontrol.ui | 15 +- svtools/uiconfig/ui/thineditcontrol.ui | 50 +-- 25 files changed, 577 insertions(+), 587 deletions(-) diff --git a/svtools/uiconfig/ui/addresstemplatedialog.ui b/svtools/uiconfig/ui/addresstemplatedialog.ui index 311a59f4b355..6c067a5216ca 100644 --- a/svtools/uiconfig/ui/addresstemplatedialog.ui +++ b/svtools/uiconfig/ui/addresstemplatedialog.ui @@ -1,33 +1,33 @@ - + - False - 6 + False + 6 Templates: Address Book Assignment False True - 0 - 0 - dialog + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _OK True - True - True - True - True + True + True + True + True True @@ -40,8 +40,8 @@ _Cancel True - True - True + True + True True @@ -54,8 +54,8 @@ _Help True - True - True + True + True True @@ -69,73 +69,73 @@ False True - end + end 0 - + True - False + False True True - 12 + 12 True - False + False True - 0 - none + 0 + none - + True - False - 6 - 12 + False 12 6 + 6 + 12 True - False + False Data source: - True - datasource + True + datasource 1 - 0 - 0 + 0 + 0 True - False + False Table: - True - datatable + True + datatable 1 - 0 - 1 + 0 + 1 True - False + False True - True + True - True + True + True True - True @@ -145,21 +145,21 @@ - 1 - 0 + 1 + 0 True - False + False True - True + True - True + True + True True - True @@ -169,17 +169,17 @@ - 1 - 1 + 1 + 1 _Assign True - True - True - True + True + True + True Add a new data source to the Address Book Source list. @@ -187,8 +187,8 @@ - 2 - 0 + 2 + 0 @@ -199,7 +199,7 @@ True - False + False Address Book Source @@ -208,331 +208,331 @@ - 0 - 0 + 0 + 0 True - False + False True True - 0 - none + 0 + none True - True - True - True - never - always - in + True 12 6 + True + True + never + always + in True - False + False True - False + False - + True - False + False True - 6 - 18 - True + 6 + 18 + True - + True - False + False True True - 6 - 12 + 6 + 12 True - False - label - True - box0 + False + label + True + box0 1 - 0 - 0 + 0 + 0 True - False + False True - 1 - 0 + 1 + 0 True - False - label - True - box2 + False + label + True + box2 1 - 0 - 1 + 0 + 1 True - False - label - True - box4 + False + label + True + box4 1 - 0 - 2 + 0 + 2 True - False - label - True - box6 + False + label + True + box6 1 - 0 - 3 + 0 + 3 True - False - label - True - box8 + False + label + True + box8 1 - 0 - 4 + 0 + 4 True - False + False True - 1 - 1 + 1 + 1 True - False + False True - 1 - 2 + 1 + 2 True - False + False True - 1 - 3 + 1 + 3 True - False + False True - 1 - 4 + 1 + 4 - 0 - 0 + 0 + 0 - + True - False + False True True - 6 - 12 + 6 + 12 True - False - label - True - box1 + False + label + True + box1 1 - 0 - 0 + 0 + 0 True - False + False True - 1 - 0 + 1 + 0 True - False - label - True - box3 + False + label + True + box3 1 - 0 - 1 + 0 + 1 True - False - label - True - box5 + False + label + True + box5 1 - 0 - 2 + 0 + 2 True - False - label - True - box7 + False + label + True + box7 1 - 0 - 3 + 0 + 3 True - False - label - True - box9 + False + label + True + box9 1 - 0 - 4 + 0 + 4 True - False + False True - 1 - 1 + 1 + 1 True - False + False True - 1 - 2 + 1 + 2 True - False + False True - 1 - 3 + 1 + 3 True - False + False True - 1 - 4 + 1 + 4 - 1 - 0 + 1 + 0 - 0 - 0 + 0 + 0 @@ -544,7 +544,7 @@ True - False + False Field Assignment @@ -558,8 +558,8 @@ - 0 - 1 + 0 + 1 @@ -576,9 +576,6 @@ cancel help - - - Edit the field assignments and the data source for your address book. diff --git a/svtools/uiconfig/ui/calendar.ui b/svtools/uiconfig/ui/calendar.ui index 1273369878c6..976a311def23 100644 --- a/svtools/uiconfig/ui/calendar.ui +++ b/svtools/uiconfig/ui/calendar.ui @@ -1,16 +1,16 @@ - + True - False + False vertical 6 True - True + True 2019 1 14 @@ -24,7 +24,7 @@ True - False + False False @@ -35,17 +35,17 @@ True - False + False 6 - spread + spread Today - True - True - True - True - True + True + True + True + True + True True @@ -56,9 +56,9 @@ None - True - True - True + True + True + True True diff --git a/svtools/uiconfig/ui/checkboxcontrol.ui b/svtools/uiconfig/ui/checkboxcontrol.ui index 2dcc79fac6e6..aeeb59ba2f05 100644 --- a/svtools/uiconfig/ui/checkboxcontrol.ui +++ b/svtools/uiconfig/ui/checkboxcontrol.ui @@ -1,24 +1,24 @@ - + True - False + False True True vertical True - True - False + True + False center center True True - True - True + True + True True diff --git a/svtools/uiconfig/ui/combocontrol.ui b/svtools/uiconfig/ui/combocontrol.ui index 38a0d6af1206..d68dd4cf9903 100644 --- a/svtools/uiconfig/ui/combocontrol.ui +++ b/svtools/uiconfig/ui/combocontrol.ui @@ -1,22 +1,22 @@ - + True - False + False vertical True - False + False True - True + True - True - True + True False + True - 0 - 1 + 0 + 1 2 - True - True + True + True True True - False - True + False + True + 1 True - 1 - 0 - 0 + 0 + 0 - True - True - True + True + True + True end - image7 1 - True + image7 + True Pick Date @@ -77,8 +77,8 @@ - 1 - 0 + 1 + 0 From d30ecb5fb07f005ebd944e864f0a15678289a4ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= Date: Sun, 30 Jun 2024 21:28:00 +0100 Subject: [PATCH 175/194] ofz#69809 Integer-overflow MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: Ie4e19b4f1d12de7b8f71b50dac56e4559ea0027b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169775 Tested-by: Caolán McNamara Reviewed-by: Caolán McNamara --- filter/source/graphicfilter/icgm/cgm.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/filter/source/graphicfilter/icgm/cgm.cxx b/filter/source/graphicfilter/icgm/cgm.cxx index d1baf965da78..eeeb763ede49 100644 --- a/filter/source/graphicfilter/icgm/cgm.cxx +++ b/filter/source/graphicfilter/icgm/cgm.cxx @@ -227,7 +227,7 @@ double CGM::ImplGetFloat( RealPrecision eRealPrecision, sal_uInt32 nRealSize ) else { sal_Int32* pLong = static_cast(pPtr); - nRetValue = static_cast(abs( pLong[ nSwitch ] )); + nRetValue = fabs(static_cast(pLong[nSwitch])); nRetValue *= 65536; nVal = static_cast( pLong[ nSwitch ^ 1 ] ); nVal >>= 16; From 743796b2a94fbbb6fd79b1880734c5fdf9f8953e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= Date: Sun, 30 Jun 2024 21:18:36 +0100 Subject: [PATCH 176/194] upgrade to tiff-4.6.0t MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I6e521a84dc6d08d754c42200094ebec214637de2 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169777 Reviewed-by: Caolán McNamara Tested-by: Jenkins --- download.lst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/download.lst b/download.lst index 1b4ebfb4bbe9..87ced0ddd036 100644 --- a/download.lst +++ b/download.lst @@ -538,8 +538,8 @@ LIBPNG_TARBALL := libpng-1.6.43.tar.xz # three static lines # so that git cherry-pick # will not run into conflicts -LIBTIFF_SHA256SUM := e178649607d1e22b51cf361dd20a3753f244f022eefab1f2f218fc62ebaf87d2 -LIBTIFF_TARBALL := tiff-4.6.0.tar.xz +LIBTIFF_SHA256SUM := d6da35c9986a4ec845eb96258b3693f8df515f7eb4c1e597ceb03e22788f305b +LIBTIFF_TARBALL := tiff-4.6.0t.tar.xz # three static lines # so that git cherry-pick # will not run into conflicts From 463c3739c697cf824c87720caaa2520f7f83837c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= Date: Sun, 30 Jun 2024 22:00:41 +0100 Subject: [PATCH 177/194] ofz#69444 Integer-overflow MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I86b612ec964915084ba207aa0be120cdf4ede389 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169778 Tested-by: Jenkins Reviewed-by: Caolán McNamara --- sc/source/core/tool/address.cxx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/sc/source/core/tool/address.cxx b/sc/source/core/tool/address.cxx index cbd32ae3c849..54236396ec5d 100644 --- a/sc/source/core/tool/address.cxx +++ b/sc/source/core/tool/address.cxx @@ -960,8 +960,11 @@ static const sal_Unicode* lcl_a1_get_row( const ScDocument& rDoc, return p; } - sal_Int64 n = sal_Unicode_strtol( p, &pEnd ) - 1; - if( nullptr == pEnd || p == pEnd || n < 0 || n > rDoc.MaxRow() ) + sal_Int64 n = sal_Unicode_strtol(p, &pEnd); + if (nullptr == pEnd || p == pEnd || n < 1) + return nullptr; + n -= 1; + if (n > rDoc.MaxRow()) return nullptr; *nFlags |= ScRefFlags::ROW_VALID; From b6cdd1d7ffff87d16b3a5767ad33ac178f73cd34 Mon Sep 17 00:00:00 2001 From: Samuel Mehrbrodt Date: Thu, 27 Jun 2024 15:15:13 +0200 Subject: [PATCH 178/194] doc: Don't export notes author/date when in privacy mode Change-Id: I54459ed5f556f2dbe88d149ea859105db35f1cd0 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169647 Tested-by: Jenkins Reviewed-by: Samuel Mehrbrodt --- sw/source/filter/ww8/wrtw8sty.cxx | 31 +++++++++++++++++++++++-------- sw/source/filter/ww8/wrtww8.hxx | 6 +++++- 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/sw/source/filter/ww8/wrtw8sty.cxx b/sw/source/filter/ww8/wrtw8sty.cxx index 28309d9546d7..6cbc2702e02d 100644 --- a/sw/source/filter/ww8/wrtw8sty.cxx +++ b/sw/source/filter/ww8/wrtw8sty.cxx @@ -31,6 +31,7 @@ #include #include #include +#include #include #include "wrtww8.hxx" @@ -2193,27 +2194,41 @@ void WW8_WrPlcFootnoteEdn::Append( WW8_CP nCp, const SwFormatFootnote& rFootnote WW8_Annotation::WW8_Annotation(const SwPostItField* pPostIt, WW8_CP nRangeStart, WW8_CP nRangeEnd) : - maDateTime( DateTime::EMPTY ), m_nRangeStart(nRangeStart), - m_nRangeEnd(nRangeEnd) + m_nRangeEnd(nRangeEnd), + mpAuthorIDs(new SvtSecurityMapPersonalInfo) { mpRichText = pPostIt->GetTextObject(); if (!mpRichText) msSimpleText = pPostIt->GetText(); - msOwner = pPostIt->GetPar1(); - m_sInitials = pPostIt->GetInitials(); - maDateTime = DateTime(pPostIt->GetDate(), pPostIt->GetTime()); + initPersonalInfo(pPostIt->GetPar1(), pPostIt->GetInitials(), + DateTime(pPostIt->GetDate(), pPostIt->GetTime())); } WW8_Annotation::WW8_Annotation(const SwRedlineData* pRedline) : mpRichText(nullptr), msSimpleText(pRedline->GetComment()), - msOwner(SW_MOD()->GetRedlineAuthor(pRedline->GetAuthor())), - maDateTime(pRedline->GetTimeStamp()), m_nRangeStart(0), - m_nRangeEnd(0) + m_nRangeEnd(0), + mpAuthorIDs(new SvtSecurityMapPersonalInfo) { + initPersonalInfo(SW_MOD()->GetRedlineAuthor(pRedline->GetAuthor()), u""_ustr, + pRedline->GetTimeStamp()); +} + +void WW8_Annotation::initPersonalInfo(const OUString& sAuthor, const OUString& sInitials, + DateTime aDateTime) +{ + bool bRemovePersonalInfo + = SvtSecurityOptions::IsOptionSet(SvtSecurityOptions::EOption::DocWarnRemovePersonalInfo) + && !SvtSecurityOptions::IsOptionSet( + SvtSecurityOptions::EOption::DocWarnKeepNoteAuthorDateInfo); + msOwner = bRemovePersonalInfo ? "Author" + OUString::number(mpAuthorIDs->GetInfoID(sAuthor)) + : sAuthor; + m_sInitials = bRemovePersonalInfo ? "A" + OUString::number(mpAuthorIDs->GetInfoID(sAuthor)) + : sInitials; + maDateTime = bRemovePersonalInfo ? DateTime(DateTime::EMPTY) : aDateTime; } bool WW8_Annotation::HasRange() const diff --git a/sw/source/filter/ww8/wrtww8.hxx b/sw/source/filter/ww8/wrtww8.hxx index af58e081f6ca..94a7b56dc07b 100644 --- a/sw/source/filter/ww8/wrtww8.hxx +++ b/sw/source/filter/ww8/wrtww8.hxx @@ -27,6 +27,7 @@ #include #include #include +#include #include @@ -1273,13 +1274,16 @@ struct WW8_Annotation OUString msSimpleText; OUString msOwner; OUString m_sInitials; - DateTime maDateTime; + DateTime maDateTime = DateTime(DateTime::EMPTY); WW8_CP m_nRangeStart, m_nRangeEnd; bool m_bIgnoreEmpty = true; + /// map authors to remove personal info + std::unique_ptr mpAuthorIDs; WW8_Annotation(const SwPostItField* pPostIt, WW8_CP nRangeStart, WW8_CP nRangeEnd); explicit WW8_Annotation(const SwRedlineData* pRedline); /// An annotation has a range if start != end or the m_bIgnoreEmpty flag is cleared. bool HasRange() const; + void initPersonalInfo(const OUString& sAuthor, const OUString& sInitials, DateTime aDateTime); }; class WW8_WrPlcAnnotations : public WW8_WrPlcSubDoc // double Plc for Postits From 263dc5c171af8ef77f44c2295a21bdb65fea641b Mon Sep 17 00:00:00 2001 From: Mike Kaganski Date: Mon, 1 Jul 2024 13:03:26 +0500 Subject: [PATCH 179/194] Fix the warning description Change-Id: I355e4ab73f58303c3b423ec4230bd55ded95da05 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169785 Tested-by: Jenkins Reviewed-by: Mike Kaganski --- solenv/gbuild/platform/com_MSC_defs.mk | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/solenv/gbuild/platform/com_MSC_defs.mk b/solenv/gbuild/platform/com_MSC_defs.mk index ce1a1ed7ea5e..bdae8925fd83 100644 --- a/solenv/gbuild/platform/com_MSC_defs.mk +++ b/solenv/gbuild/platform/com_MSC_defs.mk @@ -82,8 +82,7 @@ gb_AFLAGS := $(AFLAGS) # C4201: nonstandard extension used : nameless struct/union -# C4244: nonstandard extension used : formal parameter 'identifier' -# was previously defined as a type +# C4244: 'argument' : conversion from 'type1' to 'type2', possible loss of data # C4250: 'class1' : inherits 'class2::member' via dominance From 7b428b160780c1a60a947ecc99b148456d9f4eea Mon Sep 17 00:00:00 2001 From: Mike Kaganski Date: Mon, 1 Jul 2024 12:38:03 +0500 Subject: [PATCH 180/194] Only use -Wv:18 in Visual Studio 2019 And fix the warnings discovered in Visual Studio 2022: C:/lo/core/cli_ure/source/uno_bridge/cli_proxy.cxx(714): warning C4456: declaration of 'numMethods' hides previous local declaration C:/lo/core/cli_ure/source/uno_bridge/cli_proxy.cxx(681): note: see declaration of 'numMethods' C:/lo/core/cli_ure/source/uno_bridge/cli_proxy.cxx(1032): warning C4457: declaration of 'pUnoI' hides function parameter C:/lo/core/cli_ure/source/uno_bridge/cli_proxy.cxx(918): note: see declaration of 'pUnoI' C:/lo/core/cli_ure/source/uno_bridge/cli_uno.cxx(109): warning C4456: declaration of 'param' hides previous local declaration C:/lo/core/cli_ure/source/uno_bridge/cli_uno.cxx(84): note: see declaration of 'param' C:/lo/core/cli_ure/source/uno_bridge/cli_uno.cxx(256): warning C4456: declaration of 'param' hides previous local declaration C:/lo/core/cli_ure/source/uno_bridge/cli_uno.cxx(240): note: see declaration of 'param' Change-Id: I99abcf17c7c431a403a488c53b65ef34d66d0940 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169782 Reviewed-by: Mike Kaganski Tested-by: Jenkins --- cli_ure/source/uno_bridge/cli_proxy.cxx | 8 ++++---- cli_ure/source/uno_bridge/cli_uno.cxx | 12 ++++++------ solenv/gbuild/platform/com_MSC_defs.mk | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/cli_ure/source/uno_bridge/cli_proxy.cxx b/cli_ure/source/uno_bridge/cli_proxy.cxx index 35d9a02cbd44..e37a33a1069b 100644 --- a/cli_ure/source/uno_bridge/cli_proxy.cxx +++ b/cli_ure/source/uno_bridge/cli_proxy.cxx @@ -711,7 +711,7 @@ void CliProxy::makeMethodInfos() { sr::InterfaceMapping mapInherited = objType->GetInterfaceMap( arInheritedIfaces[nArLength - 1]); - int numMethods = mapInherited.TargetMethods->Length; + numMethods = mapInherited.TargetMethods->Length; m_arInterfaceMethodCount[nArLength - 1] = numMethods; for (int i = 0; i < numMethods; i++, index++) { @@ -1029,11 +1029,11 @@ void SAL_CALL cli_proxy_dispatch( OSL_ENSURE(usOid.equals( proxy->m_usOid ), "### different oids!"); #endif - uno_Interface* pUnoI = bridge->map_cli2uno( + uno_Interface* pUnoI2 = bridge->map_cli2uno( proxy->m_cliI, demanded_td.get() ); uno_any_construct( - (uno_Any *)uno_ret, &pUnoI, demanded_td.get(), 0 ); - (*pUnoI->release)( pUnoI ); + (uno_Any *)uno_ret, &pUnoI2, demanded_td.get(), 0 ); + (*pUnoI2->release)( pUnoI2 ); } else // object does not support demanded interface { diff --git a/cli_ure/source/uno_bridge/cli_uno.cxx b/cli_ure/source/uno_bridge/cli_uno.cxx index 6af17e065505..bb396eb6df0f 100644 --- a/cli_ure/source/uno_bridge/cli_uno.cxx +++ b/cli_ure/source/uno_bridge/cli_uno.cxx @@ -106,10 +106,10 @@ System::Object^ Bridge::call_uno(uno_Interface * pUnoI, // cleanup uno in args for (sal_Int32 n = 0; n < nPos; ++n) { - typelib_MethodParameter const & param = pParams[n]; - if (param.bIn) + typelib_MethodParameter const & param2 = pParams[n]; + if (param2.bIn) { - uno_type_destructData(uno_args[n], param.pTypeRef, 0); + uno_type_destructData(uno_args[n], param2.pTypeRef, 0); } } throw; @@ -253,9 +253,9 @@ void Bridge::call_cli( // cleanup uno pure out for ( sal_Int32 n = 0; n < nPos; ++n ) { - typelib_MethodParameter const & param = params[ n ]; - if (! param.bIn) - uno_type_destructData( uno_args[ n ], param.pTypeRef, 0 ); + typelib_MethodParameter const & param2 = params[ n ]; + if (! param2.bIn) + uno_type_destructData( uno_args[ n ], param2.pTypeRef, 0 ); } throw; } diff --git a/solenv/gbuild/platform/com_MSC_defs.mk b/solenv/gbuild/platform/com_MSC_defs.mk index bdae8925fd83..4c6a7e25a885 100644 --- a/solenv/gbuild/platform/com_MSC_defs.mk +++ b/solenv/gbuild/platform/com_MSC_defs.mk @@ -271,7 +271,7 @@ gb_CXXCLRFLAGS := \ -AI $(INSTDIR)/$(LIBO_URE_LIB_FOLDER) \ -EHa \ -clr \ - -Wv:18 \ + $(if $(filter 16.0,$(VCVER)),-Wv:18) \ -Zc:twoPhase- \ ifeq ($(COM_IS_CLANG),TRUE) From 830ba03622b89992b1aef6fb8bf25680a68d5fdf Mon Sep 17 00:00:00 2001 From: Hossein Date: Mon, 17 Jun 2024 11:16:19 +0200 Subject: [PATCH 181/194] Fix unwanted code behavior change in sc/ While changing the code to use std::optional instead of bool, some unwanted code behavior changes were introduced in this commit: commit fbe8071e4f6be57d3e372d69a4c7cc4d37a83eb9 Date: Sat Oct 15 14:20:31 2022 +0200 refactor functions: return optional instead of bool Part of those unwanted changes are fixed in this commit: commit 243e811abc441ec7f55e1395f23343dfa6f7c812 Date: Wed Jun 5 10:14:49 2024 +0100 cid#1603200 Uninitialized scalar variable cid#1603199 Uninitialized scalar variable This commit undoes changes in the above (second) commit, and tries to fix the problems by making the code look closer to what it was before the first commit. Change-Id: I47d692a5cf46abad582d7f162e2180e6c26b7e5d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169037 Tested-by: Jenkins Reviewed-by: Hossein --- sc/source/filter/excel/xeformula.cxx | 52 ++++------ sc/source/filter/excel/xelink.cxx | 149 +++++++++++++-------------- sc/source/filter/inc/xelink.hxx | 18 +++- 3 files changed, 106 insertions(+), 113 deletions(-) diff --git a/sc/source/filter/excel/xeformula.cxx b/sc/source/filter/excel/xeformula.cxx index 16bd88715d54..162f8f2968b7 100644 --- a/sc/source/filter/excel/xeformula.cxx +++ b/sc/source/filter/excel/xeformula.cxx @@ -452,13 +452,6 @@ private: void AppendExt( double fData ); void AppendExt( const OUString& rString ); - std::optional> InsertDde(const OUString& rApplic, const OUString& rTopic, const OUString& rItem) - { - if (!mxData->mpLinkMgr) - return {}; - return mxData->mpLinkMgr->InsertDde(rApplic, rTopic, rItem); - } - private: typedef std::map< XclFormulaType, XclExpCompConfig > XclExpCompConfigMap; typedef std::shared_ptr< XclExpCompData > XclExpCompDataRef; @@ -1299,14 +1292,15 @@ void XclExpFmlaCompImpl::ProcessDdeLink( const XclExpScToken& rTokData ) if( mxData->mbOk ) mxData->mbOk = !aApplic.isEmpty() && !aTopic.isEmpty() && !aItem.isEmpty(); if( mxData->mbOk ) { - const auto oResult = InsertDde(aApplic, aTopic, aItem); - - if ( oResult ) { - AppendNameXToken( oResult->first, oResult->second, rTokData.mnSpaces ); - } - else { - AppendErrorToken( EXC_ERR_NA, rTokData.mnSpaces ); + if ( mxData->mpLinkMgr ) + { + if( const auto& rResult = mxData->mpLinkMgr->InsertDde( aApplic, aTopic, aItem ) ) + AppendNameXToken( rResult->mnSupbook, rResult->mnSBTab, rTokData.mnSpaces ); + else + AppendErrorToken( EXC_ERR_NA, rTokData.mnSpaces ); } + else + AppendErrorToken( EXC_ERR_NA, rTokData.mnSpaces ); } } @@ -2225,12 +2219,12 @@ void XclExpFmlaCompImpl::ProcessExternalName( const XclExpScToken& rTokData ) } // insert the new external name and create the tNameX token - if (const OUString* pFile = rExtRefMgr.getExternalFileName( nFileId )) { - - - const auto oResult = mxData->mpLinkMgr->InsertExtName( *pFile, aName, xArray ); - if( oResult ) { - AppendNameXToken( oResult->first, oResult->second, rTokData.mnSpaces ); + const OUString* pFile = rExtRefMgr.getExternalFileName( nFileId ); + if ( pFile ) + { + if ( const auto& rResult = mxData->mpLinkMgr->InsertExtName( *pFile, aName, xArray ) ) + { + AppendNameXToken( rResult->mnSupbook, rResult->mnSBTab, rTokData.mnSpaces ); return; } } @@ -2441,10 +2435,9 @@ void XclExpFmlaCompImpl::AppendAddInCallToken( const XclExpExtFuncData& rExtFunc OUString aXclFuncName; if( mxData->mpLinkMgr && ScGlobal::GetAddInCollection()->GetExcelName( rExtFuncData.maFuncName, GetUILanguage(), aXclFuncName ) ) { - const auto oResult = mxData->mpLinkMgr->InsertAddIn( aXclFuncName ); - if (oResult) + if ( const auto& rResult = mxData->mpLinkMgr->InsertAddIn( aXclFuncName ) ) { - AppendNameXToken(oResult->first, oResult->second); + AppendNameXToken( rResult->mnSupbook, rResult->mnSBTab ); return; } } @@ -2455,14 +2448,13 @@ void XclExpFmlaCompImpl::AppendEuroToolCallToken( const XclExpExtFuncData& rExtF { if ( mxData->mpLinkMgr ) { - const auto oResult = mxData->mpLinkMgr->InsertEuroTool( rExtFuncData.maFuncName ); - if ( oResult ) - { - AppendNameXToken( oResult->first, oResult->second ); - return; - } + if( const auto& rResult = mxData->mpLinkMgr->InsertEuroTool( rExtFuncData.maFuncName ) ) + AppendNameXToken( rResult->mnSupbook, rResult->mnSBTab ); + else + AppendMacroCallToken( rExtFuncData ); } - AppendMacroCallToken( rExtFuncData ); + else + AppendMacroCallToken( rExtFuncData ); } void XclExpFmlaCompImpl::AppendOperatorTokenId( sal_uInt8 nTokenId, const XclExpOperandListRef& rxOperands, sal_uInt8 nSpaces ) diff --git a/sc/source/filter/excel/xelink.cxx b/sc/source/filter/excel/xelink.cxx index 47217e2d775c..db68b16770c2 100644 --- a/sc/source/filter/excel/xelink.cxx +++ b/sc/source/filter/excel/xelink.cxx @@ -413,23 +413,21 @@ public: void StoreCellRange( sal_uInt16 nFileId, const OUString& rTabName, const ScRange& rRange ); /** Finds or inserts an EXTERNNAME record for an add-in function name. - * @return an optional pair, containing [rnSupbook, rnExtName] + * @return an optional struct, containing [mnSupbook, mnExtName] rnSupbook Returns the index of the SUPBOOK record which contains the DDE link. rnExtName Returns the 1-based EXTERNNAME record index. */ - std::optional> InsertAddIn(const OUString& rName); + std::optional InsertAddIn(const OUString& rName); /** InsertEuroTool */ - std::optional> InsertEuroTool(const OUString& rName); + std::optional InsertEuroTool(const OUString& rName); /** Finds or inserts an EXTERNNAME record for DDE links. - * @return an optional pair, containing [rnSupbook, rnExtName] + * @return an optional struct, containing [mnSupbook, mnExtName] * rnSupbook Returns the index of the SUPBOOK record which contains the DDE link. rnExtName Returns the 1-based EXTERNNAME record index. */ - std::optional> - InsertDde(const OUString& rApplic, const OUString& rTopic, const OUString& rItem); + std::optional InsertDde(const OUString& rApplic, const OUString& rTopic, const OUString& rItem); - std::optional> - InsertExtName(const OUString& rUrl, const OUString& rName, + std::optional InsertExtName(const OUString& rUrl, const OUString& rName, const ScExternalRefCache::TokenArrayRef& rArray); XclExpXti GetXti( sal_uInt16 nFileId, const OUString& rTabName, sal_uInt16 nXclTabSpan, @@ -444,14 +442,6 @@ public: /** Whether we need to write externalReferences or not. */ bool HasExternalReferences() const; - struct XclExpSBIndex - { - sal_uInt16 mnSupbook; /// SUPBOOK index for an Excel sheet. - sal_uInt16 mnSBTab; /// Sheet name index in SUPBOOK for an Excel sheet. - void Set( sal_uInt16 nSupbook, sal_uInt16 nSBTab ) - { mnSupbook = nSupbook; mnSBTab = nSBTab; } - }; - private: typedef XclExpRecordList< XclExpSupbook > XclExpSupbookList; typedef XclExpSupbookList::RecordRefType XclExpSupbookRef; @@ -508,17 +498,15 @@ public: virtual void StoreCellRange( sal_uInt16 nFileId, const OUString& rTabName, const ScRange& rRange ) = 0; /** Derived classes find or insert an EXTERNNAME record for an add-in function name. */ - virtual std::optional> InsertAddIn(const OUString& rName) = 0; + virtual std::optional InsertAddIn(const OUString& rName) = 0; /** InsertEuroTool */ - virtual std::optional> InsertEuroTool(const OUString& rName) + virtual std::optional InsertEuroTool(const OUString& rName) = 0; /** Derived classes find or insert an EXTERNNAME record for DDE links. */ - virtual std::optional> - InsertDde(const OUString& rApplic, const OUString& rTopic, const OUString& rItem) = 0; + virtual std::optional InsertDde(const OUString& rApplic, const OUString& rTopic, const OUString& rItem) = 0; - virtual std::optional> - InsertExtName(const OUString& rUrl, const OUString& rName, + virtual std::optional InsertExtName(const OUString& rUrl, const OUString& rName, const ScExternalRefCache::TokenArrayRef& rArray) = 0; @@ -555,18 +543,14 @@ public: virtual void StoreCell( sal_uInt16 nFileId, const OUString& rTabName, const ScAddress& rPos ) override; virtual void StoreCellRange( sal_uInt16 nFileId, const OUString& rTabName, const ScRange& rRange ) override; - virtual std::optional> - InsertAddIn(const OUString& rName) override; + virtual std::optional InsertAddIn(const OUString& rName) override; /** InsertEuroTool */ - virtual std::optional> - InsertEuroTool(const OUString& rName) override; + virtual std::optional InsertEuroTool(const OUString& rName) override; - virtual std::optional> - InsertDde(const OUString& rApplic, const OUString& rTopic, const OUString& rItem) override; + virtual std::optional InsertDde(const OUString& rApplic, const OUString& rTopic, const OUString& rItem) override; - virtual std::optional> - InsertExtName(const OUString& rUrl, const OUString& rName, + virtual std::optional InsertExtName(const OUString& rUrl, const OUString& rName, const ScExternalRefCache::TokenArrayRef& rArray) override; virtual void Save( XclExpStream& rStrm ) override; @@ -622,17 +606,13 @@ public: virtual void StoreCell( sal_uInt16 nFileId, const OUString& rTabName, const ScAddress& rPos ) override; virtual void StoreCellRange( sal_uInt16 nFileId, const OUString& rTabName, const ScRange& rRange ) override; - virtual std::optional> - InsertAddIn(const OUString& rName) override; + virtual std::optional InsertAddIn(const OUString& rName) override; /** InsertEuroTool */ - virtual std::optional> - InsertEuroTool(const OUString& rName) override; + virtual std::optional InsertEuroTool(const OUString& rName) override; - virtual std::optional> - InsertDde(const OUString& rApplic, const OUString& rTopic, const OUString& rItem) override; + virtual std::optional InsertDde(const OUString& rApplic, const OUString& rTopic, const OUString& rItem) override; - virtual std::optional> - InsertExtName(const OUString& rUrl, const OUString& rName, + virtual std::optional InsertExtName(const OUString& rUrl, const OUString& rName, const ScExternalRefCache::TokenArrayRef& rArray) override; virtual void Save( XclExpStream& rStrm ) override; @@ -1856,7 +1836,7 @@ public: explicit FindSBIndexEntry(sal_uInt16 nSupbookId, sal_uInt16 nTabId) : mnSupbookId(nSupbookId), mnTabId(nTabId) {} - bool operator()(const XclExpSupbookBuffer::XclExpSBIndex& r) const + bool operator()(const XclExpSBIndex& r) const { return mnSupbookId == r.mnSupbook && mnTabId == r.mnSBTab; } @@ -1965,7 +1945,7 @@ void XclExpSupbookBuffer::StoreCellRange( sal_uInt16 nFileId, const OUString& rT } } -std::optional> XclExpSupbookBuffer::InsertAddIn(const OUString& rName ) +std::optional XclExpSupbookBuffer::InsertAddIn(const OUString& rName ) { XclExpSupbookRef xSupbook; if( mnAddInSB == SAL_MAX_UINT16 ) @@ -1977,57 +1957,57 @@ std::optional> XclExpSupbookBuffer::InsertAddI xSupbook = maSupbookList.GetRecord( mnAddInSB ); OSL_ENSURE( xSupbook, "XclExpSupbookBuffer::InsertAddin - missing add-in supbook" ); - auto nExtName = xSupbook->InsertAddIn( rName ); + sal_uInt16 nExtName = xSupbook->InsertAddIn( rName ); if( nExtName > 0) { - return std::make_pair(mnAddInSB, nExtName); + return XclExpSBIndex( mnAddInSB, nExtName ); } return {}; } -std::optional> XclExpSupbookBuffer::InsertEuroTool( const OUString& rName ) +std::optional XclExpSupbookBuffer::InsertEuroTool( const OUString& rName ) { XclExpSupbookRef xSupbook; OUString aUrl( u"\001\010EUROTOOL.XLA"_ustr ); auto nSupbookId = GetSupbookUrl(xSupbook, aUrl); - if (!nSupbookId) + if ( !nSupbookId ) { xSupbook = new XclExpSupbook( GetRoot(), aUrl, XclSupbookType::Eurotool ); - nSupbookId = Append(xSupbook); + nSupbookId = Append( xSupbook ); } auto nExtName = xSupbook->InsertEuroTool( rName ); if( nExtName > 0) { - return std::make_pair(*nSupbookId, nExtName); + return XclExpSBIndex( *nSupbookId, nExtName ); } return {}; } -std::optional> XclExpSupbookBuffer::InsertDde( +std::optional XclExpSupbookBuffer::InsertDde( const OUString& rApplic, const OUString& rTopic, const OUString& rItem ) { XclExpSupbookRef xSupbook; - auto nSupbookDde = GetSupbookDde( xSupbook, rApplic, rTopic ); - if (!nSupbookDde) + auto nSupbook = GetSupbookDde( xSupbook, rApplic, rTopic ); + if( !nSupbook ) { xSupbook = new XclExpSupbook( GetRoot(), rApplic, rTopic ); - nSupbookDde = Append(xSupbook); + nSupbook = Append( xSupbook ); } auto nExtName = xSupbook->InsertDde( rItem ); if (nExtName > 0) { - return std::make_pair(*nSupbookDde, nExtName); + return XclExpSBIndex(*nSupbook, nExtName); } return {}; } -std::optional> XclExpSupbookBuffer::InsertExtName( const OUString& rUrl, +std::optional XclExpSupbookBuffer::InsertExtName( const OUString& rUrl, const OUString& rName, const ScExternalRefCache::TokenArrayRef& rArray ) { XclExpSupbookRef xSupbook; auto nSupbookId = GetSupbookUrl(xSupbook, rUrl); - if (!nSupbookId) + if ( !nSupbookId ) { xSupbook = new XclExpSupbook(GetRoot(), rUrl); nSupbookId = Append(xSupbook); @@ -2036,7 +2016,7 @@ std::optional> XclExpSupbookBuffer::InsertExtN auto nExtName = xSupbook->InsertExtName(rName, rArray); if (nExtName > 0) { - return std::make_pair(*nSupbookId, nExtName); + return XclExpSBIndex( *nSupbookId, nExtName ); } return {}; } @@ -2262,7 +2242,7 @@ void XclExpLinkManagerImpl5::StoreCellRange( sal_uInt16 /*nFileId*/, const OUStr // not implemented } -std::optional> XclExpLinkManagerImpl5::InsertAddIn( const OUString& rName ) +std::optional XclExpLinkManagerImpl5::InsertAddIn( const OUString& rName ) { sal_uInt16 nExtSheet, nExtName; XclExpExtSheetRef xExtSheet = FindInternal( nExtSheet, EXC_EXTSH_ADDIN ); @@ -2271,25 +2251,25 @@ std::optional> XclExpLinkManagerImpl5::InsertA nExtName = xExtSheet->InsertAddIn( rName ); if(nExtName > 0) { - return std::make_pair(nExtSheet, nExtName); + return XclExpSBIndex( nExtSheet, nExtName ); } } return {}; } -std::optional> XclExpLinkManagerImpl5::InsertEuroTool( const OUString& /*rName*/ ) +std::optional XclExpLinkManagerImpl5::InsertEuroTool( const OUString& /*rName*/ ) { return {}; } -std::optional> XclExpLinkManagerImpl5::InsertDde( +std::optional XclExpLinkManagerImpl5::InsertDde( const OUString& /*rApplic*/, const OUString& /*rTopic*/, const OUString& /*rItem*/ ) { // not implemented return {}; } -std::optional> XclExpLinkManagerImpl5::InsertExtName( const OUString& /*rUrl*/, +std::optional XclExpLinkManagerImpl5::InsertExtName( const OUString& /*rUrl*/, const OUString& /*rName*/, const ScExternalRefCache::TokenArrayRef& /*rArray*/ ) { // not implemented @@ -2461,37 +2441,48 @@ void XclExpLinkManagerImpl8::StoreCellRange( sal_uInt16 nFileId, const OUString& maSBBuffer.StoreCellRange(nFileId, rTabName, rRange); } -std::optional> XclExpLinkManagerImpl8::InsertAddIn( const OUString& rName ) +std::optional XclExpLinkManagerImpl8::InsertAddIn( const OUString& rName ) { - const auto& rResult = maSBBuffer.InsertAddIn(rName); - if (rResult) - return std::make_pair(InsertXti( XclExpXti( rResult->first, EXC_TAB_EXTERNAL, EXC_TAB_EXTERNAL ) ), rResult->second); + const auto & rResult = maSBBuffer.InsertAddIn( rName ); + if( rResult ) + { + return XclExpSBIndex(InsertXti( XclExpXti( rResult->mnSupbook, EXC_TAB_EXTERNAL, EXC_TAB_EXTERNAL ) ), rResult->mnSBTab); + } return {}; } -std::optional> XclExpLinkManagerImpl8::InsertEuroTool( const OUString& rName ) +std::optional XclExpLinkManagerImpl8::InsertEuroTool( const OUString& rName ) { - const auto& rResult = maSBBuffer.InsertEuroTool(rName); - if (rResult) - return std::make_pair(InsertXti( XclExpXti( rResult->first, EXC_TAB_EXTERNAL, EXC_TAB_EXTERNAL ) ), rResult->second); + const auto & rResult = maSBBuffer.InsertEuroTool( rName ); + if( rResult ) + { + return XclExpSBIndex(InsertXti( XclExpXti( rResult->mnSupbook, EXC_TAB_EXTERNAL, EXC_TAB_EXTERNAL ) ), + rResult->mnSBTab); + } return {}; } -std::optional> XclExpLinkManagerImpl8::InsertDde( +std::optional XclExpLinkManagerImpl8::InsertDde( const OUString& rApplic, const OUString& rTopic, const OUString& rItem ) { - const auto& rResult = maSBBuffer.InsertDde(rApplic, rTopic, rItem); - if (rResult) - return std::make_pair(InsertXti( XclExpXti( rResult->first, EXC_TAB_EXTERNAL, EXC_TAB_EXTERNAL ) ), rResult->second); + const auto & rResult = maSBBuffer.InsertDde( rApplic, rTopic, rItem ); + if( rResult ) + { + return XclExpSBIndex(InsertXti( XclExpXti( rResult->mnSupbook, EXC_TAB_EXTERNAL, EXC_TAB_EXTERNAL ) ), + rResult->mnSBTab); + } return {}; } -std::optional> XclExpLinkManagerImpl8::InsertExtName( const OUString& rUrl, const OUString& rName, +std::optional XclExpLinkManagerImpl8::InsertExtName( const OUString& rUrl, const OUString& rName, const ScExternalRefCache::TokenArrayRef& rArray ) { - const auto& rResult = maSBBuffer.InsertExtName(rUrl, rName, rArray); - if (rResult) - return std::make_pair(InsertXti( XclExpXti( rResult->first, EXC_TAB_EXTERNAL, EXC_TAB_EXTERNAL ) ), rResult->second); + const auto & rResult = maSBBuffer.InsertExtName( rUrl, rName, rArray ); + if( rResult ) + { + return XclExpSBIndex(InsertXti( XclExpXti( rResult->mnSupbook, EXC_TAB_EXTERNAL, EXC_TAB_EXTERNAL ) ), + rResult->mnSBTab); + } return {}; } @@ -2611,23 +2602,23 @@ void XclExpLinkManager::StoreCellRange( sal_uInt16 nFileId, const OUString& rTab mxImpl->StoreCellRange(nFileId, rTabName, rRange); } -std::optional> XclExpLinkManager::InsertAddIn( const OUString& rName ) +std::optional XclExpLinkManager::InsertAddIn( const OUString& rName ) { return mxImpl->InsertAddIn( rName ); } -std::optional> XclExpLinkManager::InsertEuroTool( const OUString& rName ) +std::optional XclExpLinkManager::InsertEuroTool( const OUString& rName ) { return mxImpl->InsertEuroTool( rName ); } -std::optional> XclExpLinkManager::InsertDde( +std::optional XclExpLinkManager::InsertDde( const OUString& rApplic, const OUString& rTopic, const OUString& rItem ) { return mxImpl->InsertDde( rApplic, rTopic, rItem ); } -std::optional> XclExpLinkManager::InsertExtName( const OUString& rUrl, const OUString& rName, +std::optional XclExpLinkManager::InsertExtName( const OUString& rUrl, const OUString& rName, const ScExternalRefCache::TokenArrayRef& rArray ) { return mxImpl->InsertExtName( rUrl, rName, rArray); diff --git a/sc/source/filter/inc/xelink.hxx b/sc/source/filter/inc/xelink.hxx index d71a732e4dcd..a4bef778b991 100644 --- a/sc/source/filter/inc/xelink.hxx +++ b/sc/source/filter/inc/xelink.hxx @@ -55,6 +55,16 @@ namespace o3tl { template<> struct typed_flags : is_typed_flags {}; } +struct XclExpSBIndex +{ + sal_uInt16 mnSupbook; /// SUPBOOK index for an Excel sheet. + sal_uInt16 mnSBTab; /// Sheet name index in SUPBOOK for an Excel sheet. + void Set( sal_uInt16 nSupbook, sal_uInt16 nSBTab ) + { mnSupbook = nSupbook; mnSBTab = nSBTab; } + XclExpSBIndex( sal_uInt16 nSupbook, sal_uInt16 nSBTab ) : mnSupbook(nSupbook), mnSBTab(nSBTab) {} + XclExpSBIndex() {} +}; + /** Stores the correct Excel sheet index for each Calc sheet. @descr The class knows all sheets which will not exported (i.e. external link sheets, scenario sheets). */ @@ -189,17 +199,17 @@ public: rnExtName Returns the 1-based EXTERNNAME record index. sc/source/filter/inc/xelink.hxx @return [rnExtSheet, rnExtName] as an optional pair. If empty, it's not supported in current BIFF.*/ - std::optional> InsertAddIn(const OUString& rName); + std::optional InsertAddIn(const OUString& rName); /** InsertEuroTool */ - std::optional> InsertEuroTool(const OUString& rName); + std::optional InsertEuroTool(const OUString& rName); /** Finds or inserts an EXTERNNAME record for DDE links. rnExtSheet Returns the index of the EXTSHEET structure for the DDE link. rnExtName Returns the 1-based EXTERNNAME record index. @return [rnExtSheet, rnExtName] as an optional pair. If empty, it's not supported in current BIFF. */ - std::optional> + std::optional InsertDde(const OUString& rApplic, const OUString& rTopic, const OUString& rItem); - std::optional> + std::optional InsertExtName(const OUString& rUrl, const OUString& rName, const ScExternalRefCache::TokenArrayRef& rArray); From 832a096cb02cf01e0b3839e959f2da43e27620b9 Mon Sep 17 00:00:00 2001 From: Noel Grandin Date: Mon, 1 Jul 2024 11:40:50 +0200 Subject: [PATCH 182/194] Call to EndListening here no longer necessary after commit 4d0ba0badeb5a83d8eb5373ba5d7ef931dcf62c9 Author: Noel Grandin Date: Wed Jun 26 11:18:47 2024 +0200 reduce number of SvxTextEditSourceImpl listeners on SdrModel Change-Id: Iba5c0e863713aa76d2b3ddafdca2bc44bc92c753 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169788 Tested-by: Jenkins Reviewed-by: Noel Grandin --- svx/source/unodraw/unoshtxt.cxx | 3 --- 1 file changed, 3 deletions(-) diff --git a/svx/source/unodraw/unoshtxt.cxx b/svx/source/unodraw/unoshtxt.cxx index 33c5a5dc0c29..afc987da6cf2 100644 --- a/svx/source/unodraw/unoshtxt.cxx +++ b/svx/source/unodraw/unoshtxt.cxx @@ -404,10 +404,7 @@ void SvxTextEditSourceImpl::dispose() } if( mpModel ) - { - EndListening( *mpModel ); mpModel = nullptr; - } if( mpView ) { From f9d10ce76f16a29969a7cae0eda4294f15699379 Mon Sep 17 00:00:00 2001 From: Bogdan Buzea Date: Thu, 27 Jun 2024 18:26:26 +0200 Subject: [PATCH 183/194] Resave with newer Glade version Change-Id: Ic9492bb1a2c94a5d47dbad8f9360aba5c4b8f8c2 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169600 Tested-by: Jenkins Reviewed-by: Taichi Haradaguchi <20001722@ymail.ne.jp> --- filter/uiconfig/ui/pdflinkspage.ui | 4 +- filter/uiconfig/ui/pdfoptionsdialog.ui | 229 +++----------- filter/uiconfig/ui/pdfsecuritypage.ui | 282 +++++++++--------- filter/uiconfig/ui/pdfuserinterfacepage.ui | 216 +++++++------- filter/uiconfig/ui/testxmlfilter.ui | 177 ++++++----- .../ui/xmlfiltertabpagetransformation.ui | 130 ++++---- 6 files changed, 444 insertions(+), 594 deletions(-) diff --git a/filter/uiconfig/ui/pdflinkspage.ui b/filter/uiconfig/ui/pdflinkspage.ui index 7e9ce16b77bf..f1229cc9681e 100644 --- a/filter/uiconfig/ui/pdflinkspage.ui +++ b/filter/uiconfig/ui/pdflinkspage.ui @@ -1,5 +1,5 @@ - + @@ -30,9 +30,9 @@ True True False + Enable the checkbox to export bookmarks in your document as named destinations in the PDF document. True True - Enable the checkbox to export bookmarks in your document as named destinations in the PDF document. Enable the checkbox to export bookmarks in your document as named destinations in the PDF document. The destinations correspond to the location of your bookmarks. Use these destinations to create URL links that point to these locations in the PDF document. diff --git a/filter/uiconfig/ui/pdfoptionsdialog.ui b/filter/uiconfig/ui/pdfoptionsdialog.ui index e47f774afbf5..63444c040824 100644 --- a/filter/uiconfig/ui/pdfoptionsdialog.ui +++ b/filter/uiconfig/ui/pdfoptionsdialog.ui @@ -1,33 +1,30 @@ - + - False - 6 + False + 6 PDF Options False True - 0 - 0 - dialog - - - + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _Reset - True - True + True + True True @@ -40,11 +37,11 @@ E_xport True - True - True - True - True - True + True + True + True + True + True False @@ -56,8 +53,8 @@ _Cancel True - True - True + True + True True @@ -70,8 +67,8 @@ _Help True - True - True + True + True True @@ -85,47 +82,23 @@ False True - end + end 0 True - True + True True True True - True + True True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -134,42 +107,18 @@ True - False + False General - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -181,43 +130,19 @@ True - False + False Initial View 1 - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -229,43 +154,19 @@ True - False + False User Interface 2 - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -277,43 +178,19 @@ True - False + False Links 3 - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -325,43 +202,19 @@ True - False + False Security 4 - False + False True - False - - - - - - - - - - - - - - - - - - - - - - - - + False @@ -373,12 +226,12 @@ True - False + False Digital Signatures 5 - False + False diff --git a/filter/uiconfig/ui/pdfsecuritypage.ui b/filter/uiconfig/ui/pdfsecuritypage.ui index 324513f1a78f..12a297ad7814 100644 --- a/filter/uiconfig/ui/pdfsecuritypage.ui +++ b/filter/uiconfig/ui/pdfsecuritypage.ui @@ -1,36 +1,36 @@ - + True - False + False True True - 6 + 6 12 True - False - 0 - none + False + 0 + none True - False - vertical - 12 + False 12 6 + vertical + 12 Set _Passwords… True - True - True + True + True start - True + True Click to open a dialog where you enter the passwords. @@ -44,32 +44,32 @@ - + - False - True + False + True True - False + False Open password set 0 - 0 - 0 + 0 + 0 True - False + False PDF document will be encrypted 0 - 0 - 1 + 0 + 1 @@ -80,32 +80,32 @@ - + True - False + False True - False + False No open password set 0 - 0 - 0 + 0 + 0 True - False + False PDF document will not be encrypted 0 - 0 - 1 + 0 + 1 @@ -118,19 +118,19 @@ - False - True + False + True True - False + False PDF document will not be encrypted due to PDF/A export. True 0 - 0 - 0 + 0 + 0 @@ -141,32 +141,32 @@ - + - False - True + False + True True - False + False Permission password set 0 - 0 - 0 + 0 + 0 True - False + False PDF document will be restricted 0 - 0 - 1 + 0 + 1 @@ -177,32 +177,32 @@ - + True - False + False True - False + False No permission password set 0 - 0 - 0 + 0 + 0 True - False + False PDF document will be unrestricted 0 - 0 - 1 + 0 + 1 @@ -215,19 +215,19 @@ - False - True + False + True True - False + False PDF document will not be restricted due to PDF/A export. True 0 - 0 - 0 + 0 + 0 @@ -239,8 +239,8 @@ - False - True + False + True Set Passwords 0 @@ -255,7 +255,7 @@ True - False + False File Encryption and Permission @@ -272,31 +272,31 @@ True - False + False vertical 12 True - False - 0 - none + False + 0 + none - + True - False - 6 + False 12 6 + 6 _Not permitted True - True - False - True - True + True + False + True + True printhigh @@ -305,18 +305,18 @@ - 0 - 0 + 0 + 0 _Low resolution (150 dpi) True - True - False - True - True + True + False + True + True printhigh @@ -325,19 +325,19 @@ - 0 - 1 + 0 + 1 _High resolution True - True - False - True + True + False + True True - True + True The document can be printed in high resolution. @@ -345,8 +345,8 @@ - 0 - 2 + 0 + 2 @@ -354,7 +354,7 @@ True - False + False Printing @@ -371,25 +371,25 @@ True - False - 0 - none + False + 0 + none - + True - False - 6 + False 12 6 + 6 No_t permitted True - True - False - True - True + True + False + True + True changeany @@ -398,18 +398,18 @@ - 0 - 0 + 0 + 0 _Inserting, deleting, and rotating pages True - True - False - True - True + True + False + True + True changeany @@ -418,18 +418,18 @@ - 0 - 1 + 0 + 1 _Filling in form fields True - True - False - True - True + True + False + True + True changeany @@ -438,18 +438,18 @@ - 0 - 2 + 0 + 2 _Commenting, filling in form fields True - True - False - True - True + True + False + True + True changeany @@ -458,19 +458,19 @@ - 0 - 3 + 0 + 3 _Any except extracting pages True - True - False - True + True + False + True True - True + True All changes are permitted, except extracting pages. @@ -478,8 +478,8 @@ - 0 - 4 + 0 + 4 @@ -487,7 +487,7 @@ True - False + False Changes @@ -504,26 +504,26 @@ True - False - 0 - none + False + 0 + none - + True - False - 6 + False 12 6 + 6 Ena_ble copying of content True - True - False - True + True + False + True True - True + True Select to enable copying of content to the clipboard. @@ -531,19 +531,19 @@ - 0 - 0 + 0 + 0 Enable text access for acce_ssibility tools True - True - False - True + True + False + True True - True + True Select to enable text access for accessibility tools. @@ -551,8 +551,8 @@ - 0 - 1 + 0 + 1 @@ -560,7 +560,7 @@ True - False + False Content diff --git a/filter/uiconfig/ui/pdfuserinterfacepage.ui b/filter/uiconfig/ui/pdfuserinterfacepage.ui index 8a26abc85ac4..15e0e4507d9d 100644 --- a/filter/uiconfig/ui/pdfuserinterfacepage.ui +++ b/filter/uiconfig/ui/pdfuserinterfacepage.ui @@ -1,51 +1,51 @@ - + 1 10 1 - 1 - 10 + 1 + 10 True - False + False True True - 6 + 6 vertical 6 - + True - False - 12 - 12 + False + 12 + 12 True - False - 0 - none + False + 0 + none - + True - False - 6 + False 12 6 + 6 _Center window on screen True - True - False - True - True + True + False + True + True Select to generate a PDF file that is shown in a reader window centered on screen. @@ -53,18 +53,18 @@ - 0 - 1 + 0 + 1 _Resize window to initial page True - True - False - True - True + True + False + True + True Select to generate a PDF file that is shown in a window displaying the whole initial page. @@ -72,18 +72,18 @@ - 0 - 0 + 0 + 0 _Open in full screen mode True - True - False - True - True + True + False + True + True Select to generate a PDF file that is shown in a full screen reader window in front of all other windows. @@ -91,18 +91,18 @@ - 0 - 2 + 0 + 2 _Display document title True - True - False - True - True + True + False + True + True Select to generate a PDF file that is shown with the document title in the reader's title bar. @@ -110,8 +110,8 @@ - 0 - 3 + 0 + 3 @@ -119,7 +119,7 @@ True - False + False Window Options @@ -128,32 +128,32 @@ - 0 - 0 + 0 + 0 True - False - 0 - none + False + 0 + none - + True - False - 6 + False 12 6 + 6 Hide _toolbar True - True - False - True - True + True + False + True + True Select to hide the reader's toolbar when the document is active. @@ -161,18 +161,18 @@ - 0 - 1 + 0 + 1 Hide _menubar True - True - False - True - True + True + False + True + True Select to hide the reader's menu bar when the document is active. @@ -180,18 +180,18 @@ - 0 - 0 + 0 + 0 Hide _window controls True - True - False - True - True + True + False + True + True Select to hide the reader's controls when the document is active. @@ -199,8 +199,8 @@ - 0 - 2 + 0 + 2 @@ -208,7 +208,7 @@ True - False + False User Interface Options @@ -217,31 +217,31 @@ - 1 - 0 + 1 + 0 True - False - 0 - none + False + 0 + none True - False + False 12 6 _Use transition effects True - True - False - True - True + True + False + True + True Select to export Impress slide transition effects to respective PDF effects. @@ -249,8 +249,8 @@ - 0 - 0 + 0 + 0 @@ -258,7 +258,7 @@ True - False + False Transitions @@ -267,34 +267,34 @@ - 0 - 1 + 0 + 1 True - False - 0 - none + False + 0 + none - + True - False - 6 - 12 + False 12 6 + 6 + 12 Show _All True - True - False - True + True + False + True True - True + True Select to show all bookmark levels when the reader opens the PDF file. @@ -302,18 +302,18 @@ - 0 - 0 + 0 + 0 _Visible levels: True - True - False - True - True + True + False + True + True allbookmarks @@ -325,19 +325,19 @@ - 0 - 1 + 0 + 1 True - True + True + True adjustment1 - True Select to show bookmark levels down to the selected level when the reader opens the PDF file. @@ -345,8 +345,8 @@ - 1 - 1 + 1 + 1 @@ -357,7 +357,7 @@ True - False + False Collapse Outlines @@ -366,8 +366,8 @@ - 1 - 1 + 1 + 1 diff --git a/filter/uiconfig/ui/testxmlfilter.ui b/filter/uiconfig/ui/testxmlfilter.ui index b9a5b7188266..a1ccf4c88862 100644 --- a/filter/uiconfig/ui/testxmlfilter.ui +++ b/filter/uiconfig/ui/testxmlfilter.ui @@ -1,33 +1,33 @@ - + - False - 6 + False + 6 Test XML Filter: %s False True - 0 - 0 - dialog + 0 + 0 + dialog - False + False vertical 12 - False - end + False + end _Close True - True - True - True - True + True + True + True + True True @@ -40,8 +40,8 @@ _Help True - True - True + True + True True @@ -55,63 +55,63 @@ False True - end + end 0 True - False + False vertical 12 True - False - 0 - none + False + 0 + none - + True - False - 6 - 12 + False 12 6 + 6 + 12 True - False + False True XSLT for export 0 - 0 - 0 + 0 + 0 True - False + False True Transform document 0 - 0 - 1 + 0 + 1 Browse... True - True - True + True + True Locate the file that you want to apply the XML export filter to. The XML code of the transformed file is opened in your default XML editor after transformation. @@ -119,16 +119,16 @@ - 1 - 1 + 1 + 1 Current Document True - True - True + True + True The front-most open file that matches the XML filter criteria will be used to test the filter. The current XML export filter transforms the file and the resulting XML code is displayed in the XML Filter output window. @@ -136,14 +136,14 @@ - 1 - 2 + 1 + 2 True - False + False 0 @@ -152,15 +152,15 @@ - 1 - 0 + 1 + 0 True - False - 52 + False + 52 1 @@ -169,8 +169,8 @@ - 0 - 3 + 0 + 3 2 @@ -182,7 +182,7 @@ True - False + False Export @@ -199,37 +199,37 @@ True - False - 0 - none + False + 0 + none - + True - False - 6 - 12 + False 12 6 + 6 + 12 True - False + False True XSLT for import 0 - 0 - 0 + 0 + 0 Browse... True - True - True + True + True Opens a file selection dialog. The selected file is opened using the current XML import filter. @@ -237,16 +237,16 @@ - 1 - 3 + 1 + 3 Recent File True - True - True + True + True Re-opens the document that was last opened with this dialog. @@ -254,27 +254,27 @@ - 1 - 4 + 1 + 4 True - False + False True Template for import 0 - 0 - 1 + 0 + 1 True - False + False 0 @@ -283,18 +283,18 @@ - 1 - 0 + 1 + 0 Display source True - True - False - True - True + True + False + True + True Opens the XML source of the selected document in your default XML editor after importing. @@ -302,27 +302,27 @@ - 1 - 2 + 1 + 2 True - False + False True Transform file 0 - 0 - 2 + 0 + 2 True - False + False 0 @@ -331,15 +331,15 @@ - 1 - 1 + 1 + 1 True - False - 52 + False + 52 1 @@ -348,8 +348,8 @@ - 0 - 5 + 0 + 5 2 @@ -364,7 +364,7 @@ True - False + False Import @@ -391,9 +391,6 @@ close help - - - Tests the XSLT stylesheets used by the selected XML filter. diff --git a/filter/uiconfig/ui/xmlfiltertabpagetransformation.ui b/filter/uiconfig/ui/xmlfiltertabpagetransformation.ui index 7f5bbbc0930c..f816f90e7d93 100644 --- a/filter/uiconfig/ui/xmlfiltertabpagetransformation.ui +++ b/filter/uiconfig/ui/xmlfiltertabpagetransformation.ui @@ -1,43 +1,43 @@ - + True - False - 6 + False + 6 vertical 12 - + True - False + False True True - 6 - 12 + 6 + 12 True - False + False _DocType: - True - doc + True + doc 1 - 0 - 0 + 0 + 0 True - True + True True - True - 32 + True + 32 True @@ -46,31 +46,31 @@ - 1 - 0 + 1 + 0 True - False + False _XSLT for export: - True - xsltexport + True + xsltexport 1 - 0 - 1 + 0 + 1 Brows_e... True - True - True - True + True + True + True Opens a file selection dialog. @@ -78,31 +78,31 @@ - 2 - 1 + 2 + 1 True - False + False XSLT _for import: - True - xsltimport + True + xsltimport 1 - 0 - 2 + 0 + 2 B_rowse... True - True - True - True + True + True + True Opens a file selection dialog. @@ -110,30 +110,30 @@ - 2 - 2 + 2 + 2 True - False + False Template for _import: - True - tempimport + True + tempimport 1 - 0 - 3 + 0 + 3 Browse... True - True - True + True + True Opens a file selection dialog. @@ -141,20 +141,20 @@ - 2 - 3 + 2 + 3 True - False + False True - True + True + True True - True @@ -164,20 +164,20 @@ - 1 - 1 + 1 + 1 True - False + False True - True + True + True True - True @@ -187,20 +187,20 @@ - 1 - 2 + 1 + 2 True - False + False True - True + True + True True - True @@ -210,8 +210,8 @@ - 1 - 3 + 1 + 3 @@ -228,10 +228,10 @@ The filter needs XSLT 2.0 processor True - True - False - True - True + True + False + True + True False From 7575946c8dac10d755411ff88563f356bc6681d6 Mon Sep 17 00:00:00 2001 From: Ilmari Lauhakangas Date: Mon, 1 Jul 2024 14:13:22 +0300 Subject: [PATCH 184/194] Update git submodules * Update helpcontent2 from branch 'master' to 5e39c70b93559a266ba9f68344fe8c4c3f2feacf - Update menu item path to Field Hidden Paragraphs Change-Id: I6f89dcd355ac8cea53b8e94137a6c3b2faade74b Reviewed-on: https://gerrit.libreoffice.org/c/help/+/169801 Tested-by: Jenkins Reviewed-by: Olivier Hallot --- helpcontent2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helpcontent2 b/helpcontent2 index 8351b4003000..5e39c70b9355 160000 --- a/helpcontent2 +++ b/helpcontent2 @@ -1 +1 @@ -Subproject commit 8351b40030008eec294de3712fc1b67d99d00931 +Subproject commit 5e39c70b93559a266ba9f68344fe8c4c3f2feacf From 17d7694fd9951e3ae50958ca073bf4edb30b85fe Mon Sep 17 00:00:00 2001 From: Andrea Gelmini Date: Mon, 1 Jul 2024 09:57:33 +0200 Subject: [PATCH 185/194] Remove duplicated include Change-Id: I9042bd1573e97164233ae9289193301ed01fc3c4 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169783 Tested-by: Jenkins Reviewed-by: Julien Nabet --- sfx2/source/dialog/backingwindow.cxx | 1 - 1 file changed, 1 deletion(-) diff --git a/sfx2/source/dialog/backingwindow.cxx b/sfx2/source/dialog/backingwindow.cxx index b4a5f112f1f2..4d166d61f424 100644 --- a/sfx2/source/dialog/backingwindow.cxx +++ b/sfx2/source/dialog/backingwindow.cxx @@ -56,7 +56,6 @@ #include #include -#include #include #include #include From 39ece7a6a44b83e50a442a7bf88251951c121ba8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= Date: Mon, 1 Jul 2024 10:39:55 +0100 Subject: [PATCH 186/194] cid#1604132 Identical code for different branches MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit revealed after commit 50f3443d59d457da8dd19e0520f317851f050469 Date: Wed Jun 19 15:21:12 2024 +0900 pdf: remove CHECK_RETURN macro from code Change-Id: I35b7c5493e377f691e783ac09a56b72b8463868c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169787 Reviewed-by: Caolán McNamara Tested-by: Jenkins --- vcl/source/gdi/pdfwriter_impl.cxx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/vcl/source/gdi/pdfwriter_impl.cxx b/vcl/source/gdi/pdfwriter_impl.cxx index 7fc600c40d0f..65325a0c938d 100644 --- a/vcl/source/gdi/pdfwriter_impl.cxx +++ b/vcl/source/gdi/pdfwriter_impl.cxx @@ -5675,8 +5675,7 @@ bool PDFWriterImpl::finalizeSignature() if (m_aFile.write(aByteRangeNo.getStr(), aByteRangeNo.getLength(), nWritten) != osl::File::E_None) { - if (osl::File::E_None != m_aFile.setPos(osl_Pos_Absolut, nOffset)) - return false; + (void)m_aFile.setPos(osl_Pos_Absolut, nOffset); return false; } From a18c31569c281cb8b3e7dcc8e545a698c5e86df3 Mon Sep 17 00:00:00 2001 From: Bogdan Buzea Date: Sun, 23 Jun 2024 16:28:48 +0200 Subject: [PATCH 187/194] Resave with newer Glade version Change-Id: Ia6e4011bff54f8c471def8f2b4d764beb462c05d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169384 Tested-by: Christian Lohmaier Reviewed-by: Taichi Haradaguchi <20001722@ymail.ne.jp> --- cui/uiconfig/ui/eventassigndialog.ui | 32 ++++++++++++++-------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/cui/uiconfig/ui/eventassigndialog.ui b/cui/uiconfig/ui/eventassigndialog.ui index 2ce22196d113..b2f79cc0dc10 100644 --- a/cui/uiconfig/ui/eventassigndialog.ui +++ b/cui/uiconfig/ui/eventassigndialog.ui @@ -1,30 +1,30 @@ - + - False - 6 + False + 6 Assign Macro False - normal + normal - False + False vertical 12 - False - end + False + end _OK True - True - True - True - True + True + True + True + True True @@ -37,8 +37,8 @@ _Cancel True - True - True + True + True True @@ -51,8 +51,8 @@ _Help True - True - True + True + True True @@ -66,7 +66,7 @@ False True - end + end 0 From 4b3ecc330b4e68769ad0b96a9a2859fcd1bdc9f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= Date: Mon, 1 Jul 2024 10:42:37 +0100 Subject: [PATCH 188/194] cid#1604129 Uninitialized scalar field MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: Id75a73a8fc4cb06bdc1cbccab8921e1794e13382 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169789 Tested-by: Caolán McNamara Reviewed-by: Caolán McNamara --- codemaker/source/netmaker/netproduce.hxx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/codemaker/source/netmaker/netproduce.hxx b/codemaker/source/netmaker/netproduce.hxx index c7c47c4b390c..4b90fff427f3 100644 --- a/codemaker/source/netmaker/netproduce.hxx +++ b/codemaker/source/netmaker/netproduce.hxx @@ -23,6 +23,8 @@ class NetProducer public: NetProducer() : m_manager(new TypeManager()) + , m_verbose(false) + , m_dryRun(false) { } From 3c93be675990190513ee379812d79896236c1aec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= Date: Mon, 1 Jul 2024 10:47:18 +0100 Subject: [PATCH 189/194] cid#1604130 Dereference null return value MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: Icd6bf3bc72ac9728b4a7f3c602cb919bfdef18e6 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169790 Tested-by: Caolán McNamara Reviewed-by: Caolán McNamara --- editeng/source/editeng/impedit2.cxx | 44 ++++++++++++++++------------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/editeng/source/editeng/impedit2.cxx b/editeng/source/editeng/impedit2.cxx index fbf28b41c4dd..d0a49d86ac67 100644 --- a/editeng/source/editeng/impedit2.cxx +++ b/editeng/source/editeng/impedit2.cxx @@ -3684,30 +3684,34 @@ sal_Int32 ImpEditEngine::GetLineNumberAtIndex( sal_Int32 nPara, sal_Int32 nIndex { if (!IsFormatted()) FormatDoc(); - sal_Int32 nLineNo = -1; const ContentNode* pNode = GetEditDoc().GetObject( nPara ); OSL_ENSURE( pNode, "GetLineNumberAtIndex: invalid paragraph index" ); - if (pNode) + if (!pNode) + return -1; + // we explicitly allow for the index to point at the character right behind the text + const bool bValidIndex = /*0 <= nIndex &&*/ nIndex <= pNode->Len(); + OSL_ENSURE( bValidIndex, "GetLineNumberAtIndex: invalid index" ); + const ParaPortion* pPPortion = maParaPortionList.SafeGetObject(nPara); + if (!pPPortion) { - // we explicitly allow for the index to point at the character right behind the text - const bool bValidIndex = /*0 <= nIndex &&*/ nIndex <= pNode->Len(); - OSL_ENSURE( bValidIndex, "GetLineNumberAtIndex: invalid index" ); - const ParaPortion* pPPortion = maParaPortionList.SafeGetObject(nPara); - const EditLineList& rLineList = pPPortion->GetLines(); - const sal_Int32 nLineCount = rLineList.Count(); - if (nIndex == pNode->Len()) - nLineNo = nLineCount > 0 ? nLineCount - 1 : 0; - else if (bValidIndex) // nIndex < pNode->Len() + SAL_WARN( "editeng", "ImpEditEngine::GetLineNumberAtIndex missing ParaPortion"); + return -1; + } + const EditLineList& rLineList = pPPortion->GetLines(); + const sal_Int32 nLineCount = rLineList.Count(); + sal_Int32 nLineNo = -1; + if (nIndex == pNode->Len()) + nLineNo = nLineCount > 0 ? nLineCount - 1 : 0; + else if (bValidIndex) // nIndex < pNode->Len() + { + sal_Int32 nStart = -1, nEnd = -1; + for (sal_Int32 i = 0; i < nLineCount && nLineNo == -1; ++i) { - sal_Int32 nStart = -1, nEnd = -1; - for (sal_Int32 i = 0; i < nLineCount && nLineNo == -1; ++i) - { - const EditLine& rLine = rLineList[i]; - nStart = rLine.GetStart(); - nEnd = rLine.GetEnd(); - if (nStart >= 0 && nStart <= nIndex && nEnd >= 0 && nIndex < nEnd) - nLineNo = i; - } + const EditLine& rLine = rLineList[i]; + nStart = rLine.GetStart(); + nEnd = rLine.GetEnd(); + if (nStart >= 0 && nStart <= nIndex && nEnd >= 0 && nIndex < nEnd) + nLineNo = i; } } return nLineNo; From f02d75147e69b7010e642e9e32de08ee873cf480 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= Date: Mon, 1 Jul 2024 10:48:35 +0100 Subject: [PATCH 190/194] cid#1604131 Dereference null return value MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: Id790c9f8433e7dd780aeaec1a1dd614c6ab3daa9 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169791 Reviewed-by: Caolán McNamara Tested-by: Jenkins --- editeng/source/editeng/impedit3.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/editeng/source/editeng/impedit3.cxx b/editeng/source/editeng/impedit3.cxx index 5014f8c03576..66ecfb814774 100644 --- a/editeng/source/editeng/impedit3.cxx +++ b/editeng/source/editeng/impedit3.cxx @@ -646,7 +646,7 @@ void ImpEditEngine::CheckPageOverflow() if (nParaCount == 1) { const ParaPortion* pPPortion = GetParaPortions().SafeGetObject(0); - bOnlyOneEmptyPara = pPPortion->GetLines().Count() == 1 + bOnlyOneEmptyPara = pPPortion && pPPortion->GetLines().Count() == 1 && pPPortion->GetLines()[0].GetLen() == 0; } From af2175bb87b8e8a7184916e110e2b22ec542357d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= Date: Mon, 1 Jul 2024 11:43:51 +0100 Subject: [PATCH 191/194] crashtesting: divide by zero MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit since: commit 7b807a6b793198c00db9b2c2c3a5eb3ebfe16ad9 Date: Fri Jun 21 12:28:30 2024 +0200 tdf#161086 bitmap location wrong with SVG with an embedded PNG bodge it by using the requested width/height and not the possibly zero on fail actual sizes Change-Id: Ic55ba6ce3cc14fa598299cdd1f844ee7c63fb174 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169800 Reviewed-by: Caolán McNamara Tested-by: Jenkins --- drawinglayer/source/processor2d/vclpixelprocessor2d.cxx | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx b/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx index 394b18ca7162..f09131b04c30 100644 --- a/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx +++ b/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx @@ -1091,8 +1091,7 @@ void VclPixelProcessor2D::processPatternFillPrimitive2D( mpOutputDevice->IntersectClipRegion(vcl::Region(aMask)); Wallpaper aWallpaper(aTileImage); aWallpaper.SetColor(COL_TRANSPARENT); - Point aPaperPt(aMaskRect.getX() % aTileImage.GetSizePixel().Width(), - aMaskRect.getY() % aTileImage.GetSizePixel().Height()); + Point aPaperPt(aMaskRect.getX() % nTileWidth, aMaskRect.getY() % nTileHeight); tools::Rectangle aPaperRect(aPaperPt, aTileImage.GetSizePixel()); aWallpaper.SetRect(aPaperRect); mpOutputDevice->DrawWallpaper(aMaskRect, aWallpaper); @@ -1121,8 +1120,7 @@ void VclPixelProcessor2D::processPatternFillPrimitive2D( { Wallpaper aWallpaper(aTileImage); aWallpaper.SetColor(COL_TRANSPARENT); - Point aPaperPt(aMaskRect.getX() % aTileImage.GetSizePixel().Width(), - aMaskRect.getY() % aTileImage.GetSizePixel().Height()); + Point aPaperPt(aMaskRect.getX() % nTileWidth, aMaskRect.getY() % nTileHeight); tools::Rectangle aPaperRect(aPaperPt, aTileImage.GetSizePixel()); aWallpaper.SetRect(aPaperRect); mpOutputDevice->DrawWallpaper(aMaskRect, aWallpaper); From 001d8041aebfaf460bf8420af311e240a9d42183 Mon Sep 17 00:00:00 2001 From: Noel Grandin Date: Mon, 1 Jul 2024 12:32:42 +0200 Subject: [PATCH 192/194] move global item pool to own source file Change-Id: I91365c844370ef423630d5679cadd91cbf0597b0 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169799 Tested-by: Jenkins Reviewed-by: Noel Grandin --- svl/Library_svl.mk | 1 + svl/source/items/globalpool.cxx | 453 ++++++++++++++++++++++++++++++++ svl/source/items/itemset.cxx | 402 ---------------------------- svl/source/items/poolitem.cxx | 10 - 4 files changed, 454 insertions(+), 412 deletions(-) create mode 100644 svl/source/items/globalpool.cxx diff --git a/svl/Library_svl.mk b/svl/Library_svl.mk index 04abb8c6cf3a..d848c2bde516 100644 --- a/svl/Library_svl.mk +++ b/svl/Library_svl.mk @@ -119,6 +119,7 @@ $(eval $(call gb_Library_add_exception_objects,svl,\ svl/source/items/custritm \ svl/source/items/flagitem \ svl/source/items/globalnameitem \ + svl/source/items/globalpool \ svl/source/items/grabbagitem \ svl/source/items/ilstitem \ svl/source/items/imageitm \ diff --git a/svl/source/items/globalpool.cxx b/svl/source/items/globalpool.cxx new file mode 100644 index 000000000000..66bc650a2791 --- /dev/null +++ b/svl/source/items/globalpool.cxx @@ -0,0 +1,453 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#include +#include +#include + +static bool g_bDisableItemInstanceManager(getenv("SVL_DISABLE_ITEM_INSTANCE_MANAGER")); +static bool g_bShareImmediately(getenv("SVL_SHARE_ITEMS_GLOBALLY_INSTANTLY")); +#define NUMBER_OF_UNSHARED_INSTANCES (50) + +#ifdef DBG_UTIL + +// > +typedef std::unordered_map> HightestUsage; +static HightestUsage aHightestUsage; + +static void addUsage(const SfxPoolItem& rCandidate) +{ + HightestUsage::iterator aHit(aHightestUsage.find(rCandidate.Which())); + if (aHit == aHightestUsage.end()) + { + aHightestUsage.insert({ rCandidate.Which(), { 1, typeid(rCandidate).name() } }); + return; + } + aHit->second.first++; +} + +void listSfxPoolItemsWithHighestUsage(sal_uInt16 nNum) +{ + struct sorted + { + sal_uInt16 nWhich; + sal_uInt32 nUsage; + const char* pType; + sorted(sal_uInt16 _nWhich, sal_uInt32 _nUsage, const char* _pType) + : nWhich(_nWhich) + , nUsage(_nUsage) + , pType(_pType) + { + } + bool operator<(const sorted& rDesc) const { return nUsage > rDesc.nUsage; } + }; + std::vector aSorted; + aSorted.reserve(aHightestUsage.size()); + for (const auto& rEntry : aHightestUsage) + aSorted.emplace_back(rEntry.first, rEntry.second.first, rEntry.second.second); + std::sort(aSorted.begin(), aSorted.end()); + sal_uInt16 a(0); + SAL_INFO("svl.items", + "ITEM: List of the " << nNum << " SfxPoolItems with highest non-RefCounted usages:"); + for (const auto& rEntry : aSorted) + { + SAL_INFO("svl.items", " ITEM(" << a << "): Which: " << rEntry.nWhich + << " Uses: " << rEntry.nUsage << " Type: " << rEntry.pType); + if (++a >= nNum) + break; + } +} + +#endif + +void DefaultItemInstanceManager::add(const SfxPoolItem& rItem) +{ + maRegistered[rItem.Which()].insert(&rItem); +} + +void DefaultItemInstanceManager::remove(const SfxPoolItem& rItem) +{ + maRegistered[rItem.Which()].erase(&rItem); +} + +// Class that implements global Item sharing. It uses rtti to +// associate every Item-derivation with a possible incarnation +// of a DefaultItemInstanceManager. This is the default, it will +// give direct implementations at the Items that overload +// getItemInstanceManager() preference. These are expected to +// return static instances of a derived implementation of a +// ItemInstanceManager. +// All in all there are now the following possibilities to support +// this for individual Item derivations: +// (1) Do nothing: +// In that case, if the Item is shareable, the new mechanism +// will kick in: It will start sharing the Item globally, +// but not immediately: After a defined amount of allowed +// non-shared occurrences (look for NUMBER_OF_UNSHARED_INSTANCES) +// an instance of the default ItemInstanceManager, a +// DefaultItemInstanceManager, will be incarnated and used. +// NOTE: Mixing shared/unshared instances is not a problem (we +// might even implement a kind of 're-hash' when this kicks in, +// but is not really needed). +// (2) Overload getItemInstanceManager for SfxPoolItem in a class +// derived from SfxPoolItem and... +// (2a) Return a static incarnation of DefaultItemInstanceManager to +// immediately start global sharing of that Item derivation. +// (2b) Implement and return your own implementation and static +// incarnation of ItemInstanceManager to do something better/ +// faster that the default implementation can do. Example: +// SvxFontItem, uses hashing now. +// There are two supported ENVVARs to use: +// (a) SVL_DISABLE_ITEM_INSTANCE_MANAGER: +// This disables the mechanism of global Item sharing completely. +// This can be used to test/check speed/memory needs compared with +// using it, but also may come in handy to check if evtl. errors/ +// regressions have to do with it. +// (b) SVL_SHARE_ITEMS_GLOBALLY_INSTANTLY: +// This internally forces the NUMBER_OF_UNSHARED_INSTANCES to be +// ignored and start sharing ALL Item derivations instantly. +class InstanceManagerHelper +{ + typedef std::unordered_map> + managerTypeMap; + managerTypeMap maManagerPerType; + +public: + InstanceManagerHelper() {} + ~InstanceManagerHelper() + { + for (auto& rCandidate : maManagerPerType) + if (nullptr != rCandidate.second.second) + delete rCandidate.second.second; + } + + ItemInstanceManager* getOrCreateItemInstanceManager(const SfxPoolItem& rItem) + { + // deactivated? + if (g_bDisableItemInstanceManager) + return nullptr; + + // Item cannot be shared? + if (!rItem.isShareable()) + return nullptr; + + // Prefer getting an ItemInstanceManager directly from + // the Item: These are the extra implemented (and thus + // hopefully fastest) incarnations + ItemInstanceManager* pManager(rItem.getItemInstanceManager()); + + // Check for correct hash, there may be derivations of that class. + // Note that Managers from the Items are *not* added to local list, + // they are expected to be static instances at the Items + const std::size_t aHash(typeid(rItem).hash_code()); + if (nullptr != pManager && pManager->getClassHash() == aHash) + return pManager; + + // check local memory for existing entry + managerTypeMap::iterator aHit(maManagerPerType.find(aHash)); + + // no instance yet + if (aHit == maManagerPerType.end()) + { + // create a default one to start usage-counting + if (g_bShareImmediately) + { + // create, insert locally and immediately start sharing + DefaultItemInstanceManager* pNew(new DefaultItemInstanceManager(aHash)); + maManagerPerType.insert({ aHash, std::make_pair(0, pNew) }); + return pNew; + } + + // start countdown from NUMBER_OF_UNSHARED_INSTANCES until zero is reached + maManagerPerType.insert( + { aHash, std::make_pair(NUMBER_OF_UNSHARED_INSTANCES, nullptr) }); + return nullptr; + } + + // if there is already an ItemInstanceManager incarnated, return it + if (nullptr != aHit->second.second) + return aHit->second.second; + + if (aHit->second.first > 0) + { + // still not the needed number of hits, countdown & return nullptr + aHit->second.first--; + return nullptr; + } + + // here the countdown is zero and there is not yet a ItemInstanceManager + // incarnated. Do so, register and return it + assert(nullptr == aHit->second.second); + DefaultItemInstanceManager* pNew(new DefaultItemInstanceManager(aHash)); + aHit->second.second = pNew; + + return pNew; + } + + ItemInstanceManager* getExistingItemInstanceManager(const SfxPoolItem& rItem) + { + // deactivated? + if (g_bDisableItemInstanceManager) + return nullptr; + + // Item cannot be shared? + if (!rItem.isShareable()) + return nullptr; + + // Prefer getting an ItemInstanceManager directly from + // the Item: These are the extra implemented (and thus + // hopefully fastest) incarnations + ItemInstanceManager* pManager(rItem.getItemInstanceManager()); + + // Check for correct hash, there may be derivations of that class. + // Note that Managers from the Items are *not* added to local list, + // they are expected to be static instances at the Items + const std::size_t aHash(typeid(rItem).hash_code()); + if (nullptr != pManager && pManager->getClassHash() == aHash) + return pManager; + + // check local memory for existing entry + managerTypeMap::iterator aHit(maManagerPerType.find(aHash)); + + if (aHit == maManagerPerType.end()) + // no instance yet, return nullptr + return nullptr; + + // if there is already a ItemInstanceManager incarnated, return it + if (nullptr != aHit->second.second) + return aHit->second.second; + + // count-up needed number of hits again if item is released + if (aHit->second.first < NUMBER_OF_UNSHARED_INSTANCES) + aHit->second.first++; + + return nullptr; + } +}; + +// the single static instance that takes over that global Item sharing +static InstanceManagerHelper aInstanceManagerHelper; + +SfxPoolItem const* implCreateItemEntry(SfxItemPool& rPool, SfxPoolItem const* pSource, + bool bPassingOwnership) +{ + if (nullptr == pSource) + // SfxItemState::UNKNOWN aka current default (nullptr) + // just use/return nullptr + return nullptr; + + if (pSource->isStaticDefault()) + // static default Items can just be used without RefCounting + // NOTE: This now includes IsInvalidItem/IsDisabledItem + return pSource; + + if (0 == pSource->Which()) + { + // There should be no Items with 0 == WhichID, but there are some + // constructed for dialog return values AKA result (look for SetReturnValue) + // these need to be cloned (currently...) + if (bPassingOwnership) + return pSource; + return pSource->Clone(); + } + + if (pSource->isDynamicDefault() && rPool.GetPoolDefaultItem(pSource->Which()) == pSource) + // dynamic defaults are not allowed to 'leave' the Pool they are + // defined for. We can check by comparing the PoolDefault (the + // PoolDefaultItem) to pSource by ptr compare (instance). When + // same Item we can use without RefCount. Else it will be cloned + // below the standard way. + return pSource; + +#ifdef DBG_UTIL + // remember WhichID due to being able to assert Clone() error(s) + const sal_uInt16 nWhich(pSource->Which()); +#endif + + if (SfxItemPool::IsSlot(pSource->Which())) + { + // SlotItems were always cloned in original (even when bPassingOwnership), + // so do that here, too (but without bPassingOwnership). + // They do not need to be registered at pool (actually impossible, pools + // do not have entries for SlotItems) so handle here early + if (!bPassingOwnership) + { + pSource = pSource->Clone(rPool.GetMasterPool()); + // ARGH! Found out that *some* ::Clone implementations fail to also clone the + // WhichID set at the original Item, e.g. SfxFrameItem. Assert, this is an error +#ifdef DBG_UTIL + assert(pSource->Which() == nWhich + && "ITEM: Clone of Item did NOT copy/set WhichID (!)"); +#endif + } + + return pSource; + } + + // get the pool with which ItemSets have to work, plus get the + // pool at which the WhichID is defined, so calls to it do not + // have to do this repeatedly + SfxItemPool* pMasterPool(rPool.GetMasterPool()); + assert(nullptr != pMasterPool); + + // The Item itself is shareable when it is used/added at an instance + // that RefCounts the Item, SfxItemPool or SfxPoolItemHolder. Try + // to share items that are already shared + while (pSource->GetRefCount() > 0) + { + if (!pSource->isShareable()) + // not shareable, done + break; + + // SfxSetItems cannot be shared if they are in/use another pool + if (pSource->isSetItem() + && static_cast(pSource)->GetItemSet().GetPool() != pMasterPool) + break; + + // If we get here we can share the Item + pSource->AddRef(); + return pSource; + } + + // try to get an ItemInstanceManager for global Item instance sharing + ItemInstanceManager* pManager(aInstanceManagerHelper.getOrCreateItemInstanceManager(*pSource)); + + // check if we can globally share the Item using an ItemInstanceManager + while (nullptr != pManager) + { + const SfxPoolItem* pAlternative(pManager->find(*pSource)); + if (nullptr == pAlternative) + // no already globally shared one found, done + break; + + // Here we do *not* need to check if it is an SfxSetItem + // and cannot be shared if they are in/use another pool: + // The SfxItemSet::operator== will check for SfxItemPools + // being equal, thus when found in global share the Pool + // cannot be equal + + // need to delete evtl. handed over ownership change Item + if (bPassingOwnership) + delete pSource; + + // If we get here we can share the Item + pAlternative->AddRef(); + return pAlternative; + } + + // check if the handed over and to be directly used item is a + // SfxSetItem, that would make it pool-dependent. It then must have + // the same target-pool, ensure that by the cost of cloning it + // (should not happen) + if (bPassingOwnership && pSource->isSetItem() + && static_cast(pSource)->GetItemSet().GetPool() != pMasterPool) + { + const SfxPoolItem* pOld(pSource); + pSource = pSource->Clone(pMasterPool); +#ifdef DBG_UTIL + assert(pSource->Which() == nWhich && "ITEM: Clone of Item did NOT copy/set WhichID (!)"); +#endif + delete pOld; + } + +#ifdef DBG_UTIL + // create statistics for listSfxPoolItemsWithHighestUsage + addUsage(*pSource); +#endif + + // when we reach this line we know that we have to add/create a new item. If + // bPassingOwnership is given just use the item, else clone it + if (!bPassingOwnership) + { + pSource = pSource->Clone(pMasterPool); +#ifdef DBG_UTIL + assert(pSource->Which() == nWhich && "ITEM: Clone of Item did NOT copy/set WhichID (!)"); +#endif + } + + // increase RefCnt 0->1 + pSource->AddRef(); + + // check if we should register this Item for the global + // ItemInstanceManager mechanism (only for shareable Items) + if (nullptr != pManager) + pManager->add(*pSource); + + return pSource; +} + +void implCleanupItemEntry(const SfxPoolItem* pSource) +{ + if (nullptr == pSource) + // no entry, done + return; + + if (pSource->isStaticDefault()) + // static default Items can just be used without RefCounting + // NOTE: This now includes IsInvalidItem/IsDisabledItem + return; + + if (0 == pSource->Which()) + { + // There should be no Items with 0 == WhichID, but there are some + // constructed for dialog return values AKA result (look for SetReturnValue) + // and need to be deleted + delete pSource; + return; + } + + if (pSource->isDynamicDefault()) + // dynamic default Items can only be used without RefCounting + // when same pool. this is already checked at implCreateItemEntry, + // so it would have been cloned (and would no longer have this + // flag). So we can just return here + return; + + if (SfxItemPool::IsSlot(pSource->Which())) + { + // SlotItems are cloned, so delete + delete pSource; + return; + } + + if (1 < pSource->GetRefCount()) + { + // Still multiple references present, so just alter the RefCount + pSource->ReleaseRef(); + return; + } + + // try to get an ItemInstanceManager for global Item instance sharing + ItemInstanceManager* pManager(aInstanceManagerHelper.getExistingItemInstanceManager(*pSource)); + + // check if we should/can remove this Item from the global + // ItemInstanceManager mechanism + if (nullptr != pManager) + pManager->remove(*pSource); + + // decrease RefCnt before deleting (destructor asserts for it and that's + // good to find other errors) + pSource->ReleaseRef(); + + // delete Item + delete pSource; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/svl/source/items/itemset.cxx b/svl/source/items/itemset.cxx index b3a6dd8f68cf..523ffc857509 100644 --- a/svl/source/items/itemset.cxx +++ b/svl/source/items/itemset.cxx @@ -35,10 +35,6 @@ #include #include -static bool g_bDisableItemInstanceManager(getenv("SVL_DISABLE_ITEM_INSTANCE_MANAGER")); -static bool g_bShareImmediately(getenv("SVL_SHARE_ITEMS_GLOBALLY_INSTANTLY")); -#define NUMBER_OF_UNSHARED_INSTANCES (50) - #ifdef DBG_UTIL static size_t nAllocatedSfxItemSetCount(0); static size_t nUsedSfxItemSetCount(0); @@ -49,10 +45,6 @@ size_t getUsedSfxItemSetCount() { return nUsedSfxItemSetCount; } size_t getAllocatedSfxPoolItemHolderCount() { return nAllocatedSfxPoolItemHolderCount; } size_t getUsedSfxPoolItemHolderCount() { return nUsedSfxPoolItemHolderCount; } -// > -typedef std::unordered_map> HightestUsage; -static HightestUsage aHightestUsage; - // > typedef std::unordered_map> ItemArrayUsage; static ItemArrayUsage aItemArrayUsage; @@ -69,42 +61,6 @@ static void addArrayUsage(sal_uInt16 nCount, sal_uInt16 nTotalCount) aHit->second.second += nCount; } -static void addUsage(const SfxPoolItem& rCandidate) -{ - HightestUsage::iterator aHit(aHightestUsage.find(rCandidate.Which())); - if (aHit == aHightestUsage.end()) - { - aHightestUsage.insert({rCandidate.Which(), {1, typeid(rCandidate).name()}}); - return; - } - aHit->second.first++; -} - -void listSfxPoolItemsWithHighestUsage(sal_uInt16 nNum) -{ - struct sorted { - sal_uInt16 nWhich; - sal_uInt32 nUsage; - const char* pType; - sorted(sal_uInt16 _nWhich, sal_uInt32 _nUsage, const char* _pType) - : nWhich(_nWhich), nUsage(_nUsage), pType(_pType) {} - bool operator<(const sorted& rDesc) const { return nUsage > rDesc.nUsage; } - }; - std::vector aSorted; - aSorted.reserve(aHightestUsage.size()); - for (const auto& rEntry : aHightestUsage) - aSorted.emplace_back(rEntry.first, rEntry.second.first, rEntry.second.second); - std::sort(aSorted.begin(), aSorted.end()); - sal_uInt16 a(0); - SAL_INFO("svl.items", "ITEM: List of the " << nNum << " SfxPoolItems with highest non-RefCounted usages:"); - for (const auto& rEntry : aSorted) - { - SAL_INFO("svl.items", " ITEM(" << a << "): Which: " << rEntry.nWhich << " Uses: " << rEntry.nUsage << " Type: " << rEntry.pType); - if (++a >= nNum) - break; - } -} - SVL_DLLPUBLIC void listSfxItemSetUsage() { struct sorted { @@ -368,364 +324,6 @@ SfxItemSet::~SfxItemSet() m_aWhichRanges.reset(); } -// Class that implements global Item sharing. It uses rtti to -// associate every Item-derivation with a possible incarnation -// of a DefaultItemInstanceManager. This is the default, it will -// give direct implementations at the Items that overload -// getItemInstanceManager() preference. These are expected to -// return static instances of a derived implementation of a -// ItemInstanceManager. -// All in all there are now the following possibilities to support -// this for individual Item derivations: -// (1) Do nothing: -// In that case, if the Item is shareable, the new mechanism -// will kick in: It will start sharing the Item globally, -// but not immediately: After a defined amount of allowed -// non-shared occurrences (look for NUMBER_OF_UNSHARED_INSTANCES) -// an instance of the default ItemInstanceManager, a -// DefaultItemInstanceManager, will be incarnated and used. -// NOTE: Mixing shared/unshared instances is not a problem (we -// might even implement a kind of 're-hash' when this kicks in, -// but is not really needed). -// (2) Overload getItemInstanceManager for SfxPoolItem in a class -// derived from SfxPoolItem and... -// (2a) Return a static incarnation of DefaultItemInstanceManager to -// immediately start global sharing of that Item derivation. -// (2b) Implement and return your own implementation and static -// incarnation of ItemInstanceManager to do something better/ -// faster that the default implementation can do. Example: -// SvxFontItem, uses hashing now. -// There are two supported ENVVARs to use: -// (a) SVL_DISABLE_ITEM_INSTANCE_MANAGER: -// This disables the mechanism of global Item sharing completely. -// This can be used to test/check speed/memory needs compared with -// using it, but also may come in handy to check if evtl. errors/ -// regressions have to do with it. -// (b) SVL_SHARE_ITEMS_GLOBALLY_INSTANTLY: -// This internally forces the NUMBER_OF_UNSHARED_INSTANCES to be -// ignored and start sharing ALL Item derivations instantly. -class InstanceManagerHelper -{ - typedef std::unordered_map> managerTypeMap; - managerTypeMap maManagerPerType; - -public: - InstanceManagerHelper() {} - ~InstanceManagerHelper() - { - for (auto& rCandidate : maManagerPerType) - if (nullptr != rCandidate.second.second) - delete rCandidate.second.second; - } - - ItemInstanceManager* getOrCreateItemInstanceManager(const SfxPoolItem& rItem) - { - // deactivated? - if (g_bDisableItemInstanceManager) - return nullptr; - - // Item cannot be shared? - if (!rItem.isShareable()) - return nullptr; - - // Prefer getting an ItemInstanceManager directly from - // the Item: These are the extra implemented (and thus - // hopefully fastest) incarnations - ItemInstanceManager* pManager(rItem.getItemInstanceManager()); - - // Check for correct hash, there may be derivations of that class. - // Note that Managers from the Items are *not* added to local list, - // they are expected to be static instances at the Items - const std::size_t aHash(typeid(rItem).hash_code()); - if (nullptr != pManager && pManager->getClassHash() == aHash) - return pManager; - - // check local memory for existing entry - managerTypeMap::iterator aHit(maManagerPerType.find(aHash)); - - // no instance yet - if (aHit == maManagerPerType.end()) - { - // create a default one to start usage-counting - if (g_bShareImmediately) - { - // create, insert locally and immediately start sharing - DefaultItemInstanceManager* pNew(new DefaultItemInstanceManager(aHash)); - maManagerPerType.insert({aHash, std::make_pair(0, pNew)}); - return pNew; - } - - // start countdown from NUMBER_OF_UNSHARED_INSTANCES until zero is reached - maManagerPerType.insert({aHash, std::make_pair(NUMBER_OF_UNSHARED_INSTANCES, nullptr)}); - return nullptr; - } - - // if there is already an ItemInstanceManager incarnated, return it - if (nullptr != aHit->second.second) - return aHit->second.second; - - if (aHit->second.first > 0) - { - // still not the needed number of hits, countdown & return nullptr - aHit->second.first--; - return nullptr; - } - - // here the countdown is zero and there is not yet a ItemInstanceManager - // incarnated. Do so, register and return it - assert(nullptr == aHit->second.second); - DefaultItemInstanceManager* pNew(new DefaultItemInstanceManager(aHash)); - aHit->second.second = pNew; - - return pNew; - } - - ItemInstanceManager* getExistingItemInstanceManager(const SfxPoolItem& rItem) - { - // deactivated? - if (g_bDisableItemInstanceManager) - return nullptr; - - // Item cannot be shared? - if (!rItem.isShareable()) - return nullptr; - - // Prefer getting an ItemInstanceManager directly from - // the Item: These are the extra implemented (and thus - // hopefully fastest) incarnations - ItemInstanceManager* pManager(rItem.getItemInstanceManager()); - - // Check for correct hash, there may be derivations of that class. - // Note that Managers from the Items are *not* added to local list, - // they are expected to be static instances at the Items - const std::size_t aHash(typeid(rItem).hash_code()); - if (nullptr != pManager && pManager->getClassHash() == aHash) - return pManager; - - // check local memory for existing entry - managerTypeMap::iterator aHit(maManagerPerType.find(aHash)); - - if (aHit == maManagerPerType.end()) - // no instance yet, return nullptr - return nullptr; - - // if there is already a ItemInstanceManager incarnated, return it - if (nullptr != aHit->second.second) - return aHit->second.second; - - // count-up needed number of hits again if item is released - if (aHit->second.first < NUMBER_OF_UNSHARED_INSTANCES) - aHit->second.first++; - - return nullptr; - } -}; - -// the single static instance that takes over that global Item sharing -static InstanceManagerHelper aInstanceManagerHelper; - -SfxPoolItem const* implCreateItemEntry(SfxItemPool& rPool, SfxPoolItem const* pSource, bool bPassingOwnership) -{ - if (nullptr == pSource) - // SfxItemState::UNKNOWN aka current default (nullptr) - // just use/return nullptr - return nullptr; - - if (pSource->isStaticDefault()) - // static default Items can just be used without RefCounting - // NOTE: This now includes IsInvalidItem/IsDisabledItem - return pSource; - - if (0 == pSource->Which()) - { - // There should be no Items with 0 == WhichID, but there are some - // constructed for dialog return values AKA result (look for SetReturnValue) - // these need to be cloned (currently...) - if (bPassingOwnership) - return pSource; - return pSource->Clone(); - } - - if (pSource->isDynamicDefault() && rPool.GetPoolDefaultItem(pSource->Which()) == pSource) - // dynamic defaults are not allowed to 'leave' the Pool they are - // defined for. We can check by comparing the PoolDefault (the - // PoolDefaultItem) to pSource by ptr compare (instance). When - // same Item we can use without RefCount. Else it will be cloned - // below the standard way. - return pSource; - -#ifdef DBG_UTIL - // remember WhichID due to being able to assert Clone() error(s) - const sal_uInt16 nWhich(pSource->Which()); -#endif - - if (SfxItemPool::IsSlot(pSource->Which())) - { - // SlotItems were always cloned in original (even when bPassingOwnership), - // so do that here, too (but without bPassingOwnership). - // They do not need to be registered at pool (actually impossible, pools - // do not have entries for SlotItems) so handle here early - if (!bPassingOwnership) - { - pSource = pSource->Clone(rPool.GetMasterPool()); - // ARGH! Found out that *some* ::Clone implementations fail to also clone the - // WhichID set at the original Item, e.g. SfxFrameItem. Assert, this is an error -#ifdef DBG_UTIL - assert(pSource->Which() == nWhich && "ITEM: Clone of Item did NOT copy/set WhichID (!)"); -#endif - } - - return pSource; - } - - // get the pool with which ItemSets have to work, plus get the - // pool at which the WhichID is defined, so calls to it do not - // have to do this repeatedly - SfxItemPool* pMasterPool(rPool.GetMasterPool()); - assert(nullptr != pMasterPool); - - // The Item itself is shareable when it is used/added at an instance - // that RefCounts the Item, SfxItemPool or SfxPoolItemHolder. Try - // to share items that are already shared - while(pSource->GetRefCount() > 0) - { - if (!pSource->isShareable()) - // not shareable, done - break; - - // SfxSetItems cannot be shared if they are in/use another pool - if (pSource->isSetItem() && static_cast(pSource)->GetItemSet().GetPool() != pMasterPool) - break; - - // If we get here we can share the Item - pSource->AddRef(); - return pSource; - } - - // try to get an ItemInstanceManager for global Item instance sharing - ItemInstanceManager* pManager(aInstanceManagerHelper.getOrCreateItemInstanceManager(*pSource)); - - // check if we can globally share the Item using an ItemInstanceManager - while (nullptr != pManager) - { - const SfxPoolItem* pAlternative(pManager->find(*pSource)); - if(nullptr == pAlternative) - // no already globally shared one found, done - break; - - // Here we do *not* need to check if it is an SfxSetItem - // and cannot be shared if they are in/use another pool: - // The SfxItemSet::operator== will check for SfxItemPools - // being equal, thus when found in global share the Pool - // cannot be equal - - // need to delete evtl. handed over ownership change Item - if (bPassingOwnership) - delete pSource; - - // If we get here we can share the Item - pAlternative->AddRef(); - return pAlternative; - } - - // check if the handed over and to be directly used item is a - // SfxSetItem, that would make it pool-dependent. It then must have - // the same target-pool, ensure that by the cost of cloning it - // (should not happen) - if (bPassingOwnership - && pSource->isSetItem() - && static_cast(pSource)->GetItemSet().GetPool() != pMasterPool) - { - const SfxPoolItem* pOld(pSource); - pSource = pSource->Clone(pMasterPool); -#ifdef DBG_UTIL - assert(pSource->Which() == nWhich && "ITEM: Clone of Item did NOT copy/set WhichID (!)"); -#endif - delete pOld; - } - -#ifdef DBG_UTIL - // create statistics for listSfxPoolItemsWithHighestUsage - addUsage(*pSource); -#endif - - // when we reach this line we know that we have to add/create a new item. If - // bPassingOwnership is given just use the item, else clone it - if (!bPassingOwnership) - { - pSource = pSource->Clone(pMasterPool); -#ifdef DBG_UTIL - assert(pSource->Which() == nWhich && "ITEM: Clone of Item did NOT copy/set WhichID (!)"); -#endif - } - - // increase RefCnt 0->1 - pSource->AddRef(); - - // check if we should register this Item for the global - // ItemInstanceManager mechanism (only for shareable Items) - if (nullptr != pManager) - pManager->add(*pSource); - - return pSource; -} - -void implCleanupItemEntry(const SfxPoolItem* pSource) -{ - if (nullptr == pSource) - // no entry, done - return; - - if (pSource->isStaticDefault()) - // static default Items can just be used without RefCounting - // NOTE: This now includes IsInvalidItem/IsDisabledItem - return; - - if (0 == pSource->Which()) - { - // There should be no Items with 0 == WhichID, but there are some - // constructed for dialog return values AKA result (look for SetReturnValue) - // and need to be deleted - delete pSource; - return; - } - - if (pSource->isDynamicDefault()) - // dynamic default Items can only be used without RefCounting - // when same pool. this is already checked at implCreateItemEntry, - // so it would have been cloned (and would no longer have this - // flag). So we can just return here - return; - - if (SfxItemPool::IsSlot(pSource->Which())) - { - // SlotItems are cloned, so delete - delete pSource; - return; - } - - if (1 < pSource->GetRefCount()) - { - // Still multiple references present, so just alter the RefCount - pSource->ReleaseRef(); - return; - } - - // try to get an ItemInstanceManager for global Item instance sharing - ItemInstanceManager* pManager(aInstanceManagerHelper.getExistingItemInstanceManager(*pSource)); - - // check if we should/can remove this Item from the global - // ItemInstanceManager mechanism - if (nullptr != pManager) - pManager->remove(*pSource); - - // decrease RefCnt before deleting (destructor asserts for it and that's - // good to find other errors) - pSource->ReleaseRef(); - - // delete Item - delete pSource; -} // Delete single Items or all Items (nWhich == 0) sal_uInt16 SfxItemSet::ClearItem( sal_uInt16 nWhich ) diff --git a/svl/source/items/poolitem.cxx b/svl/source/items/poolitem.cxx index a9db94057d8a..709d7aa64a83 100644 --- a/svl/source/items/poolitem.cxx +++ b/svl/source/items/poolitem.cxx @@ -513,16 +513,6 @@ const SfxPoolItem* DefaultItemInstanceManager::find(const SfxPoolItem& rItem) co return nullptr; } -void DefaultItemInstanceManager::add(const SfxPoolItem& rItem) -{ - maRegistered[rItem.Which()].insert(&rItem); -} - -void DefaultItemInstanceManager::remove(const SfxPoolItem& rItem) -{ - maRegistered[rItem.Which()].erase(&rItem); -} - ItemInstanceManager* SfxPoolItem::getItemInstanceManager() const { return nullptr; } SfxPoolItem::SfxPoolItem(sal_uInt16 const nWhich, SfxItemType eType) From 53c027335fe272616b5ece3f7e20da8a0868a1c5 Mon Sep 17 00:00:00 2001 From: Jim Raykowski Date: Tue, 28 May 2024 08:24:16 -0800 Subject: [PATCH 193/194] SwNavigator: Add a function to delete all content of a content type and use it to delete all footnote/endnote content Done in preparation of following patches that provide the ability to delete all content of a content type. Change-Id: Ie329e60033ea10e936049d70c4654f4c6473e55e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/168173 Tested-by: Jenkins Reviewed-by: Jim Raykowski --- sw/source/uibase/inc/conttree.hxx | 4 + sw/source/uibase/utlui/content.cxx | 391 +++++++++++++++++++++++++---- 2 files changed, 346 insertions(+), 49 deletions(-) diff --git a/sw/source/uibase/inc/conttree.hxx b/sw/source/uibase/inc/conttree.hxx index d58123287e07..824de8022505 100644 --- a/sw/source/uibase/inc/conttree.hxx +++ b/sw/source/uibase/inc/conttree.hxx @@ -199,6 +199,10 @@ class SwContentTree final : public SfxListener void UpdateLastSelType(); + bool IsDeletable(const weld::TreeIter& rEntry); + bool IsDeletable(const SwContent* pContent); + void DeleteAllContentOfEntryContentType(const weld::TreeIter& rEntry); + /** Expand - Remember the state for content types */ DECL_LINK(ExpandHdl, const weld::TreeIter&, bool); /** Collapse - Remember the state for content types. */ diff --git a/sw/source/uibase/utlui/content.cxx b/sw/source/uibase/utlui/content.cxx index 5c2b934997bd..dbaed5258a8c 100644 --- a/sw/source/uibase/utlui/content.cxx +++ b/sw/source/uibase/utlui/content.cxx @@ -1833,9 +1833,7 @@ IMPL_LINK(SwContentTree, CommandHdl, const CommandEvent&, rCEvt, bool) const bool bEditable = !bReadonly && pType->IsEditable() && ((bVisible && !bProtected) || ContentTypeId::REGION == nContentType); - const bool bDeletable = !bReadonly && pType->IsDeletable() - && ((bVisible && !bProtected && !bProtectBM) - || ContentTypeId::REGION == nContentType); + const bool bDeletable = pType->IsDeletable() && IsDeletable(*xEntry); const bool bRenamable = !bReadonly && (pType->IsRenamable() @@ -1849,9 +1847,6 @@ IMPL_LINK(SwContentTree, CommandHdl, const CommandEvent&, rCEvt, bool) case ContentTypeId::OUTLINE: bRemoveDeleteChapterEntry = false; break; - case ContentTypeId::TABLE: - bRemoveDeleteTableEntry = false; - break; case ContentTypeId::FRAME: bRemoveDeleteFrameEntry = false; break; @@ -1933,11 +1928,13 @@ IMPL_LINK(SwContentTree, CommandHdl, const CommandEvent&, rCEvt, bool) bRemoveSelectEntry = false; bRemoveEditEntry = false; bRemoveUnprotectEntry = false; + bRemoveDeleteTableEntry = false; bool bFull = false; OUString sTableName = weld::fromId(m_xTreeView->get_id(*xEntry))->GetName(); bool bProt = m_pActiveShell->HasTableAnyProtection( &sTableName, &bFull ); xPop->set_sensitive(OUString::number(403), !bFull); xPop->set_sensitive(OUString::number(404), bProt); + xPop->set_sensitive(u"deletetable"_ustr, !bFull); } else if(ContentTypeId::REGION == nContentType) { @@ -4798,7 +4795,7 @@ IMPL_LINK(SwContentTree, KeyInputHdl, const KeyEvent&, rEvent, bool) && (pContentType->GetType() == ContentTypeId::FOOTNOTE || pContentType->GetType() == ContentTypeId::ENDNOTE)) { - ExecuteContextMenuAction(u"deleteallfootnotes"_ustr); + DeleteAllContentOfEntryContentType(*xEntry); } } } @@ -5098,46 +5095,7 @@ void SwContentTree::ExecuteContextMenuAction(const OUString& rSelectedPopupEntry if (rSelectedPopupEntry == "deleteallfootnotes" || rSelectedPopupEntry == "deleteallendnotes") { - if (!lcl_IsContentType(*xFirst, *m_xTreeView)) - return; - - //MakeAllOutlineContentTemporarilyVisible a(m_pActiveShell->GetDoc()); - - m_pActiveShell->AssureStdMode(); - - SwCursor* pCursor = m_pActiveShell->getShellCursor(true); - - SwContentType* pCntType = weld::fromId(m_xTreeView->get_id(*xFirst)); - const auto nCount = pCntType->GetMemberCount(); - - m_pActiveShell->StartAction(); - m_pActiveShell->EnterAddMode(); - for (size_t i = 0; i < nCount; i++) - { - const SwTextFootnoteContent* pTextFootnoteCnt = - static_cast(pCntType->GetMember(i)); - if (pTextFootnoteCnt && !pTextFootnoteCnt->IsInvisible()) - { - if (const SwTextAttr* pTextAttr = pTextFootnoteCnt->GetTextFootnote()) - { - const SwTextFootnote* pTextFootnote = pTextAttr->GetFootnote().GetTextFootnote(); - if (!pTextFootnote) - continue; - const SwTextNode& rTextNode = pTextFootnote->GetTextNode(); - auto nStart = pTextAttr->GetStart(); - pCursor->GetPoint()->Assign(rTextNode, nStart + 1); - m_pActiveShell->SetMark(); - m_pActiveShell->SttSelect(); - pCursor->GetPoint()->Assign(rTextNode, nStart); - m_pActiveShell->EndSelect(); - } - } - } - m_pActiveShell->LeaveAddMode(); - m_pActiveShell->EndAction(); - - m_pActiveShell->DelRight(); - + DeleteAllContentOfEntryContentType(*xFirst); return; } @@ -5607,8 +5565,7 @@ void SwContentTree::EditEntry(const weld::TreeIter& rEntry, EditEntryMode nMode) } else if(nMode == EditEntryMode::DELETE) { - m_pActiveShell->SelTable(); - m_pActiveShell->DeleteTable(); + nSlot = FN_TABLE_DELETE_TABLE; } else if(nMode == EditEntryMode::RENAME) { @@ -5868,6 +5825,342 @@ void SwContentTree::EditEntry(const weld::TreeIter& rEntry, EditEntryMode nMode) } } +bool SwContentTree::IsDeletable(const weld::TreeIter& rEntry) +{ + if (lcl_IsContentType(rEntry, *m_xTreeView)) + { + if (State::HIDDEN == m_eState || !m_pActiveShell) + return false; + if (m_pActiveShell->GetView().GetDocShell()->IsReadOnly()) + return false; + SwContentType* pContentType + = weld::fromId(m_xTreeView->get_id(rEntry)); + auto nCount = pContentType->GetMemberCount(); + if (nCount == 0) + return false; + for (size_t i = 0; i < nCount; i++) + { + const SwContent* pContent = pContentType->GetMember(i); + if (IsDeletable(pContent)) + return true; + } + return false; + } + return IsDeletable(weld::fromId(m_xTreeView->get_id(rEntry))); +} + +bool SwContentTree::IsDeletable(const SwContent* pContent) +{ + if (State::HIDDEN == m_eState || !m_pActiveShell) + return false; + if (m_pActiveShell->GetView().GetDocShell()->IsReadOnly()) + return false; + if (pContent->IsInvisible() || pContent->IsProtect()) + return false; + + ContentTypeId eContentTypeId = pContent->GetParent()->GetType(); + + // table + if (eContentTypeId == ContentTypeId::TABLE) + { + bool bFull; + m_pActiveShell->HasTableAnyProtection(&pContent->GetName(), &bFull); + return !bFull; + } + // bookmark + if (eContentTypeId == ContentTypeId::BOOKMARK) + return !m_pActiveShell->getIDocumentSettingAccess().get( + DocumentSettingId::PROTECT_BOOKMARKS); + // index + if (eContentTypeId == ContentTypeId::INDEX) + { + const SwTOXBase* pBase = static_cast(pContent)->GetTOXBase(); + return !SwEditShell::IsTOXBaseReadonly(*pBase); + } + + return true; +} + +void SwContentTree::DeleteAllContentOfEntryContentType(const weld::TreeIter& rEntry) +{ + weld::WaitObject aWait(m_xTreeView.get()); + + SwContentType* pContentType; + if (lcl_IsContentType(rEntry, *m_xTreeView)) + { + assert(dynamic_cast(weld::fromId(m_xTreeView->get_id(rEntry)))); + pContentType = weld::fromId(m_xTreeView->get_id(rEntry)); + } + else + { + assert(dynamic_cast(weld::fromId(m_xTreeView->get_id(rEntry)))); + pContentType = const_cast( + weld::fromId(m_xTreeView->get_id(rEntry))->GetParent()); + } + + const ContentTypeId eContentTypeId = pContentType->GetType(); + if (eContentTypeId == ContentTypeId::TABLE) + { + m_pActiveShell->AssureStdMode(); + + const auto nCount = pContentType->GetMemberCount(); + + m_pActiveShell->StartAction(); + SwRewriter aRewriter; + aRewriter.AddRule(UndoArg1, pContentType->GetName()); + m_pActiveShell->StartUndo(SwUndoId::DELETE, &aRewriter); + for (size_t i = 0; i < nCount; i++) + { + const SwContent* pContent = pContentType->GetMember(i); + m_pActiveShell->GotoTable(pContent->GetName()); + m_pActiveShell->SelTable(); + m_pActiveShell->DeleteTable(); + } + m_pActiveShell->EndUndo(); + m_pActiveShell->EndAction(); + } + else if (eContentTypeId == ContentTypeId::FRAME + || eContentTypeId == ContentTypeId::GRAPHIC + || eContentTypeId == ContentTypeId::OLE) + { + m_pActiveShell->AssureStdMode(); + + const auto nCount = pContentType->GetMemberCount(); + + m_pActiveShell->LockView(true); + SwRewriter aRewriter; + aRewriter.AddRule(UndoArg1, pContentType->GetName()); + m_pActiveShell->StartUndo(SwUndoId::DELETE, &aRewriter); + for (size_t i = 0; i < nCount; i++) + { + const OUString& rName(pContentType->GetMember(i)->GetName()); + m_pActiveShell->GotoFly(rName); + m_pActiveShell->DelRight(); + } + m_pActiveShell->EndUndo(); + m_pActiveShell->LockView(false); + } + else if (eContentTypeId == ContentTypeId::BOOKMARK) + { + m_pActiveShell->AssureStdMode(); + + const auto nCount = pContentType->GetMemberCount(); + + IDocumentMarkAccess* const pMarkAccess = m_pActiveShell->getIDocumentMarkAccess(); + + m_pActiveShell->StartAction(); + SwRewriter aRewriter; + aRewriter.AddRule(UndoArg1, pContentType->GetName()); + m_pActiveShell->StartUndo(SwUndoId::DELETE, &aRewriter); + for (size_t i = 0; i < nCount; i++) + { + const OUString& rName(pContentType->GetMember(i)->GetName()); + pMarkAccess->deleteMark(pMarkAccess->findMark(rName), false); + } + m_pActiveShell->EndUndo(); + m_pActiveShell->EndAction(); + } + else if (eContentTypeId == ContentTypeId::REGION) + { + const auto nCount = pContentType->GetMemberCount(); + + m_pActiveShell->StartAction(); + SwRewriter aRewriter; + aRewriter.AddRule(UndoArg1, pContentType->GetName()); + m_pActiveShell->StartUndo(SwUndoId::DELETE, &aRewriter); + for (size_t i = 0; i < nCount; i++) + { + const SwRegionContent* pRegionContent + = static_cast(pContentType->GetMember(i)); + SwSectionFormat* pSectionFormat + = const_cast(pRegionContent->GetSectionFormat()); + m_pActiveShell->GetDoc()->DelSectionFormat(pSectionFormat, false); + } + m_pActiveShell->EndUndo(); + m_pActiveShell->EndAction(); + } + else if (eContentTypeId == ContentTypeId::URLFIELD) // hyperlinks + { + m_pActiveShell->AssureStdMode(); + + const auto nCount = pContentType->GetMemberCount(); + + m_pActiveShell->LockView(true); + SwRewriter aRewriter; + aRewriter.AddRule(UndoArg1, pContentType->GetName()); + m_pActiveShell->StartUndo(SwUndoId::DELETE, &aRewriter); + for (size_t i = 0; i < nCount; i++) + { + if (m_pActiveShell->GotoINetAttr(*static_cast( + pContentType->GetMember(i))->GetINetAttr())) + { + m_pActiveShell->Right(SwCursorSkipMode::Chars, false, 1, false); + m_pActiveShell->SwCursorShell::SelectTextAttr(RES_TXTATR_INETFMT, true); + m_pActiveShell->DelRight(); + } + } + m_pActiveShell->EndUndo(); + m_pActiveShell->LockView(false); + } + else if (eContentTypeId == ContentTypeId::REFERENCE ) + { + m_pActiveShell->AssureStdMode(); + + const auto nCount = pContentType->GetMemberCount(); + + m_pActiveShell->StartAction(); + SwRewriter aRewriter; + aRewriter.AddRule(UndoArg1, pContentType->GetName()); + m_pActiveShell->StartUndo(SwUndoId::DELETE, &aRewriter); + for (size_t i = 0; i < nCount; i++) + { + const OUString& rName = pContentType->GetMember(i)->GetName(); + ItemSurrogates aSurrogates; + m_pActiveShell->GetDoc()->GetAttrPool().GetItemSurrogates(aSurrogates, RES_TXTATR_REFMARK); + for (const SfxPoolItem* pItem : aSurrogates) + { + assert(dynamic_cast(pItem)); + const auto pFormatRefMark = static_cast(pItem); + if (!pFormatRefMark) + continue; + const SwTextRefMark* pTextRef = pFormatRefMark->GetTextRefMark(); + if (pTextRef && &pTextRef->GetTextNode().GetNodes() == + &m_pActiveShell->GetNodes() && rName == pFormatRefMark->GetRefName()) + { + m_pActiveShell->GetDoc()->DeleteFormatRefMark(pFormatRefMark); + break; + } + } + } + m_pActiveShell->SwViewShell::UpdateFields(); + m_pActiveShell->EndUndo(); + m_pActiveShell->EndAction(); + } + else if (eContentTypeId == ContentTypeId::INDEX) + { + m_pActiveShell->AssureStdMode(); + + const auto nCount = pContentType->GetMemberCount(); + + m_pActiveShell->StartAction(); + SwRewriter aRewriter; + aRewriter.AddRule(UndoArg1, pContentType->GetName()); + m_pActiveShell->StartUndo(SwUndoId::DELETE, &aRewriter); + for (size_t i = 0; i < nCount; i++) + { + SwContent* pContent = const_cast(pContentType->GetMember(i)); + const SwTOXBase* pBase + = static_cast(pContent)->GetTOXBase(); + if (pBase) + m_pActiveShell->DeleteTOX(*pBase, true); + } + m_pActiveShell->EndUndo(); + m_pActiveShell->EndAction(); + } + else if (eContentTypeId == ContentTypeId::POSTIT) + { + m_pActiveShell->AssureStdMode(); + + const auto nCount = pContentType->GetMemberCount(); + + m_pActiveShell->StartAction(); + SwRewriter aRewriter; + aRewriter.AddRule(UndoArg1, pContentType->GetName()); + m_pActiveShell->StartUndo(SwUndoId::DELETE, &aRewriter); + for (size_t i = 0; i < nCount; i++) + { + const SwPostItContent* pPostItContent + = static_cast(pContentType->GetMember(i)); + m_pActiveShell->GotoFormatField(*pPostItContent->GetPostIt()); + m_pActiveShell->DelRight(); + } + m_pActiveShell->EndUndo(); + m_pActiveShell->EndAction(); + } + else if (eContentTypeId == ContentTypeId::DRAWOBJECT) + { + m_pActiveShell->AssureStdMode(); + + const auto nCount = pContentType->GetMemberCount(); + + m_pActiveShell->StartAction(); + SwRewriter aRewriter; + aRewriter.AddRule(UndoArg1, pContentType->GetName()); + m_pActiveShell->StartUndo(SwUndoId::DELETE, &aRewriter); + for (size_t i = 0; i < nCount; i++) + { + const OUString& rName(pContentType->GetMember(i)->GetName()); + m_pActiveShell->GotoDrawingObject(rName); + m_pActiveShell->DelRight(); + //m_pActiveShell->DelSelectedObj(); + } + m_pActiveShell->EndUndo(); + m_pActiveShell->EndAction(); + } + else if (eContentTypeId == ContentTypeId::TEXTFIELD) + { + m_pActiveShell->AssureStdMode(); + + const auto nCount = pContentType->GetMemberCount(); + + m_pActiveShell->StartAction(); + SwRewriter aRewriter; + aRewriter.AddRule(UndoArg1, pContentType->GetName()); + m_pActiveShell->StartUndo(SwUndoId::DELETE, &aRewriter); + for (size_t i = 0; i < nCount; i++) + { + const SwTextFieldContent* pTextFieldContent = + static_cast(pContentType->GetMember(i)); + const SwTextField* pTextField = pTextFieldContent->GetFormatField()->GetTextField(); + SwTextField::DeleteTextField(*pTextField); + } + m_pActiveShell->EndUndo(); + m_pActiveShell->EndAction(); + } + else if (eContentTypeId == ContentTypeId::FOOTNOTE || eContentTypeId == ContentTypeId::ENDNOTE) + { + //MakeAllOutlineContentTemporarilyVisible a(m_pActiveShell->GetDoc()); + + m_pActiveShell->AssureStdMode(); + + SwCursor* pCursor = m_pActiveShell->getShellCursor(true); + + const auto nCount = pContentType->GetMemberCount(); + + m_pActiveShell->StartAction(); + m_pActiveShell->EnterAddMode(); + for (size_t i = 0; i < nCount; i++) + { + const SwTextFootnoteContent* pTextFootnoteCnt = + static_cast(pContentType->GetMember(i)); + if (pTextFootnoteCnt && !pTextFootnoteCnt->IsInvisible()) + { + if (const SwTextAttr* pTextAttr = pTextFootnoteCnt->GetTextFootnote()) + { + const SwTextFootnote* pTextFootnote = pTextAttr->GetFootnote().GetTextFootnote(); + if (!pTextFootnote) + continue; + const SwTextNode& rTextNode = pTextFootnote->GetTextNode(); + auto nStart = pTextAttr->GetStart(); + pCursor->GetPoint()->Assign(rTextNode, nStart + 1); + m_pActiveShell->SetMark(); + m_pActiveShell->SttSelect(); + pCursor->GetPoint()->Assign(rTextNode, nStart); + m_pActiveShell->EndSelect(); + } + } + } + m_pActiveShell->LeaveAddMode(); + m_pActiveShell->EndAction(); + + SwRewriter aRewriter; + aRewriter.AddRule(UndoArg1, pContentType->GetName()); + m_pActiveShell->StartUndo(SwUndoId::DELETE, &aRewriter); + m_pActiveShell->DelRight(); + m_pActiveShell->EndUndo(); + } +} + void SwContentTree::CopyOutlineSelections() { m_pActiveShell->LockView(true); From 94891dce760817686600f3a8d25e5eb735a1a133 Mon Sep 17 00:00:00 2001 From: Jim Raykowski Date: Tue, 28 May 2024 13:19:44 -0800 Subject: [PATCH 194/194] tdf#160817 SwNavigator expose main functions for selected entry Replaces the headings/outline move action buttons in the tools area with a toolbar to expose the main functions for the selected entry in the content tree. Change-Id: Iedb5b53375088a159d640fb986bfcf9376fa2072 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/168174 Tested-by: Jenkins Reviewed-by: Jim Raykowski --- icon-themes/breeze/links.txt | 1 + icon-themes/colibre/links.txt | 1 + icon-themes/elementary/links.txt | 1 + icon-themes/karasa_jaga/links.txt | 1 + icon-themes/sifr/links.txt | 1 + icon-themes/sukapura/links.txt | 1 + .../openoffice/Office/UI/WriterCommands.xcu | 11 + sw/inc/strings.hrc | 2 + sw/qa/uitest/navigator/movechapterupdown.py | 44 +- sw/qa/uitest/navigator/tdf151051.py | 4 +- sw/qa/uitest/navigator/tdf154212.py | 8 +- sw/source/uibase/inc/conttree.hxx | 6 +- sw/source/uibase/inc/navipi.hxx | 12 + sw/source/uibase/utlui/content.cxx | 332 +++++-- sw/source/uibase/utlui/navipi.cxx | 199 +++- sw/uiconfig/swriter/ui/navigatorpanel.ui | 874 ++++++++++++++++-- 16 files changed, 1313 insertions(+), 185 deletions(-) diff --git a/icon-themes/breeze/links.txt b/icon-themes/breeze/links.txt index 23ba813b7107..03d969ae0e0d 100644 --- a/icon-themes/breeze/links.txt +++ b/icon-themes/breeze/links.txt @@ -30,6 +30,7 @@ chart2/res/selectrange.png formula/res/refinp1.png # cmd # ============================================== +cmd/sc_endnotedialog.png cmd/sc_footnotedialog.png # Add cmd/32/adddatefield.png cmd/32/datefield.png diff --git a/icon-themes/colibre/links.txt b/icon-themes/colibre/links.txt index ede4f262cddb..f7fa0cc05107 100644 --- a/icon-themes/colibre/links.txt +++ b/icon-themes/colibre/links.txt @@ -47,6 +47,7 @@ cmd/sc_insertmenulegend.png cmd/sc_legend.png # cmd # ============================================== +cmd/sc_endnotedialog.png cmd/sc_footnotedialog.png # Add cmd/32/adddatefield.png cmd/32/datefield.png diff --git a/icon-themes/elementary/links.txt b/icon-themes/elementary/links.txt index 0c320f04ccbe..cc35e834f5e9 100644 --- a/icon-themes/elementary/links.txt +++ b/icon-themes/elementary/links.txt @@ -52,6 +52,7 @@ cmd/sc_toggleaxisdescr.png cmd/sc_helplinesvisible.png # cmd # ============================================== +cmd/sc_endnotedialog.png cmd/sc_footnotedialog.png # Add cmd/32/adddatefield.png cmd/32/datefield.png diff --git a/icon-themes/karasa_jaga/links.txt b/icon-themes/karasa_jaga/links.txt index d71263a1f279..f360ac6c3ad7 100644 --- a/icon-themes/karasa_jaga/links.txt +++ b/icon-themes/karasa_jaga/links.txt @@ -1283,6 +1283,7 @@ cmd/sc_editregion.png cmd/sc_insertsection.png cmd/sc_editselectmenu.png cmd/sc_selecttables.png cmd/sc_ellipse.png cmd/sc_basicshapes.ellipse.png cmd/sc_ellipsetoolbox.png cmd/sc_basicshapes.ellipse.png +cmd/sc_endnotedialog.png cmd/sc_footnotedialog.png cmd/sc_exitsearch.png cmd/sc_closepreview.png cmd/sc_exportasgraphic.png cmd/sc_graphic.png cmd/sc_exportasmenu.png cmd/sc_exportto.png diff --git a/icon-themes/sifr/links.txt b/icon-themes/sifr/links.txt index 5733722da4cb..ae5e9021ca37 100644 --- a/icon-themes/sifr/links.txt +++ b/icon-themes/sifr/links.txt @@ -57,6 +57,7 @@ cmd/sc_insertmenulegend.png cmd/sc_legend.png # cmd # ============================================== +cmd/sc_endnotedialog.png cmd/sc_footnotedialog.png # Add cmd/32/adddatefield.png cmd/32/datefield.png diff --git a/icon-themes/sukapura/links.txt b/icon-themes/sukapura/links.txt index 9552ccb3dbf5..5bcf699978bd 100644 --- a/icon-themes/sukapura/links.txt +++ b/icon-themes/sukapura/links.txt @@ -60,6 +60,7 @@ cmd/sc_insertmenulegend.png cmd/sc_legend.png # cmd # ============================================== +cmd/sc_endnotedialog.png cmd/sc_footnotedialog.png # Add cmd/32/adddatefield.png cmd/32/datefield.png diff --git a/officecfg/registry/data/org/openoffice/Office/UI/WriterCommands.xcu b/officecfg/registry/data/org/openoffice/Office/UI/WriterCommands.xcu index c0fdc8887338..9ae5f1021926 100644 --- a/officecfg/registry/data/org/openoffice/Office/UI/WriterCommands.xcu +++ b/officecfg/registry/data/org/openoffice/Office/UI/WriterCommands.xcu @@ -1550,6 +1550,17 @@ 1 + + + ~Footnote/Endnote Settings... + + + .uno:FootnoteDialog + + + 1 + + ~Footnote/Endnote Settings... diff --git a/sw/inc/strings.hrc b/sw/inc/strings.hrc index 3a70a42cd0bd..97b7b4545054 100644 --- a/sw/inc/strings.hrc +++ b/sw/inc/strings.hrc @@ -717,6 +717,8 @@ #define STR_NEW_FILE NC_("STR_NEW_FILE", "New Document") #define STR_INSERT_TEXT NC_("STR_INSERT_TEXT", "Text") #define STR_DELETE NC_("STR_DELETE", "Delete") +#define STR_DELETE_CONTENT_TYPE NC_("STR_DELETE_CONTENT_TYPE", "Delete All %1") +#define STR_DELETE_CONTENT NC_("STR_DELETE_CONTENT", "Delete %1") #define STR_DELETE_ENTRY NC_("STR_DELETE_ENTRY", "~Delete") #define STR_UPDATE_SEL NC_("STR_UPDATE_SEL", "Selection") #define STR_UPDATE_INDEX NC_("STR_UPDATE_INDEX", "Indexes") diff --git a/sw/qa/uitest/navigator/movechapterupdown.py b/sw/qa/uitest/navigator/movechapterupdown.py index 0b4c7ef5f540..d90400ef89b8 100644 --- a/sw/qa/uitest/navigator/movechapterupdown.py +++ b/sw/qa/uitest/navigator/movechapterupdown.py @@ -62,8 +62,8 @@ class movechapterupdown(UITestCase): # Click on the 'Move chapter up' button in the Navigator tool box xNavigatorPanel = xWriterEdit.getChild("NavigatorPanel") - xToolBarContent6 = xNavigatorPanel.getChild("content6") - xToolBarContent6.executeAction("CLICK", mkPropertyValues({"POS": "4"})) + xToolBar = xNavigatorPanel.getChild("HeadingsContentFunctionButtonsToolbar") + xToolBar.executeAction("CLICK", mkPropertyValues({"POS": "2"})) # Expected chapter order: # 2. Two (H1) @@ -104,8 +104,8 @@ class movechapterupdown(UITestCase): # Click on the 'Move chapter down' button in the Navigator tool box xNavigatorPanel = xWriterEdit.getChild("NavigatorPanel") - xToolBarContent6 = xNavigatorPanel.getChild("content6") - xToolBarContent6.executeAction("CLICK", mkPropertyValues({"POS": "5"})) + xToolBar = xNavigatorPanel.getChild("HeadingsContentFunctionButtonsToolbar") + xToolBar.executeAction("CLICK", mkPropertyValues({"POS": "3"})) # Expected chapter order is the original order xNavigatorPanelContentTreeHeadings = xNavigatorPanelContentTree.getChild('0') @@ -146,8 +146,8 @@ class movechapterupdown(UITestCase): # Click on the 'Move chapter down' button in the Navigator tool box xNavigatorPanel = xWriterEdit.getChild("NavigatorPanel") - xToolBarContent6 = xNavigatorPanel.getChild("content6") - xToolBarContent6.executeAction("CLICK", mkPropertyValues({"POS": "5"})) + xToolBar = xNavigatorPanel.getChild("HeadingsContentFunctionButtonsToolbar") + xToolBar.executeAction("CLICK", mkPropertyValues({"POS": "3"})) # Expected chapter order: # 1. One (H1) @@ -188,8 +188,8 @@ class movechapterupdown(UITestCase): # Click on the 'Move chapter up' button in the Navigator tool box xNavigatorPanel = xWriterEdit.getChild("NavigatorPanel") - xToolBarContent6 = xNavigatorPanel.getChild("content6") - xToolBarContent6.executeAction("CLICK", mkPropertyValues({"POS": "4"})) + xToolBar = xNavigatorPanel.getChild("HeadingsContentFunctionButtonsToolbar") + xToolBar.executeAction("CLICK", mkPropertyValues({"POS": "2"})) # Expected chapter order is the original order xNavigatorPanelContentTreeHeadings = xNavigatorPanelContentTree.getChild('0') @@ -231,8 +231,8 @@ class movechapterupdown(UITestCase): # Click on the 'Move chapter up' button in the Navigator tool box xNavigatorPanel = xWriterEdit.getChild("NavigatorPanel") - xToolBarContent6 = xNavigatorPanel.getChild("content6") - xToolBarContent6.executeAction("CLICK", mkPropertyValues({"POS": "4"})) + xToolBar = xNavigatorPanel.getChild("HeadingsContentFunctionButtonsToolbar") + xToolBar.executeAction("CLICK", mkPropertyValues({"POS": "2"})) # Expected chapter order: # 1. One H1 @@ -275,8 +275,8 @@ class movechapterupdown(UITestCase): # Click on the 'Move chapter down' button in the Navigator tool box xNavigatorPanel = xWriterEdit.getChild("NavigatorPanel") - xToolBarContent6 = xNavigatorPanel.getChild("content6") - xToolBarContent6.executeAction("CLICK", mkPropertyValues({"POS": "5"})) + xToolBar = xNavigatorPanel.getChild("HeadingsContentFunctionButtonsToolbar") + xToolBar.executeAction("CLICK", mkPropertyValues({"POS": "3"})) # Expected chapter order: # 1. One H1 @@ -327,13 +327,13 @@ class movechapterupdown(UITestCase): # Click on the 'Move chapter up' button in the Navigator tool box xNavigatorPanel = xWriterEdit.getChild("NavigatorPanel") - xToolBarContent6 = xNavigatorPanel.getChild("content6") - xToolBarContent6.executeAction("CLICK", mkPropertyValues({"POS": "4"})) + xToolBar = xNavigatorPanel.getChild("HeadingsContentFunctionButtonsToolbar") + xToolBar.executeAction("CLICK", mkPropertyValues({"POS": "2"})) # Click on the 'Move chapter up' button in the Navigator tool box xNavigatorPanel = xWriterEdit.getChild("NavigatorPanel") - xToolBarContent6 = xNavigatorPanel.getChild("content6") - xToolBarContent6.executeAction("CLICK", mkPropertyValues({"POS": "4"})) + xToolBar = xNavigatorPanel.getChild("HeadingsContentFunctionButtonsToolbar") + xToolBar.executeAction("CLICK", mkPropertyValues({"POS": "2"})) # Expected chapter order: # 1. One H1 @@ -384,8 +384,8 @@ class movechapterupdown(UITestCase): # Click on the 'Move chapter down' button in the Navigator tool box xNavigatorPanel = xWriterEdit.getChild("NavigatorPanel") - xToolBarContent6 = xNavigatorPanel.getChild("content6") - xToolBarContent6.executeAction("CLICK", mkPropertyValues({"POS": "5"})) + xToolBar = xNavigatorPanel.getChild("HeadingsContentFunctionButtonsToolbar") + xToolBar.executeAction("CLICK", mkPropertyValues({"POS": "3"})) # Expected chapter order is the original order xNavigatorPanelContentTreeHeadings = xNavigatorPanelContentTree.getChild('0') @@ -427,8 +427,8 @@ class movechapterupdown(UITestCase): # Click on the 'Move chapter up' button in the Navigator tool box xNavigatorPanel = xWriterEdit.getChild("NavigatorPanel") - xToolBarContent6 = xNavigatorPanel.getChild("content6") - xToolBarContent6.executeAction("CLICK", mkPropertyValues({"POS": "4"})) + xToolBar = xNavigatorPanel.getChild("HeadingsContentFunctionButtonsToolbar") + xToolBar.executeAction("CLICK", mkPropertyValues({"POS": "2"})) # Expected chapter order: # 1.1. One_A (H2) @@ -470,8 +470,8 @@ class movechapterupdown(UITestCase): # Click on the 'Move chapter down' button in the Navigator tool box xNavigatorPanel = xWriterEdit.getChild("NavigatorPanel") - xToolBarContent6 = xNavigatorPanel.getChild("content6") - xToolBarContent6.executeAction("CLICK", mkPropertyValues({"POS": "5"})) + xToolBar = xNavigatorPanel.getChild("HeadingsContentFunctionButtonsToolbar") + xToolBar.executeAction("CLICK", mkPropertyValues({"POS": "3"})) # Expected chapter order is the original order xNavigatorPanelContentTreeHeadings = xNavigatorPanelContentTree.getChild('0') diff --git a/sw/qa/uitest/navigator/tdf151051.py b/sw/qa/uitest/navigator/tdf151051.py index 03889c7f49fb..2005a85414da 100644 --- a/sw/qa/uitest/navigator/tdf151051.py +++ b/sw/qa/uitest/navigator/tdf151051.py @@ -41,8 +41,8 @@ class tdf151051(UITestCase): self.assertEqual('0', get_state_as_dict(xChild)['Children']) xNavigatorPanel = xWriterEdit.getChild("NavigatorPanel") - xToolBar = xNavigatorPanel.getChild("content6") - xToolBar.executeAction("CLICK", mkPropertyValues({"POS": "2"})) # 'promote' button + xToolBar = xNavigatorPanel.getChild("HeadingsContentFunctionButtonsToolbar") + xToolBar.executeAction("CLICK", mkPropertyValues({"POS": "0"})) # 'promote' button xHeadings = xContentTree.getChild('0') xHeadings.executeAction("EXPAND", tuple()) diff --git a/sw/qa/uitest/navigator/tdf154212.py b/sw/qa/uitest/navigator/tdf154212.py index 00a39a73b980..0aaa8e04b23f 100644 --- a/sw/qa/uitest/navigator/tdf154212.py +++ b/sw/qa/uitest/navigator/tdf154212.py @@ -48,8 +48,8 @@ class tdf154212(UITestCase): # click on the 'move chapter down' button in the Navigator tool box xNavigatorPanel = xWriterEdit.getChild("NavigatorPanel") - xToolBarContent6 = xNavigatorPanel.getChild("content6") - xToolBarContent6.executeAction("CLICK", mkPropertyValues({"POS": "5"})) + xToolBar = xNavigatorPanel.getChild("HeadingsContentFunctionButtonsToolbar") + xToolBar.executeAction("CLICK", mkPropertyValues({"POS": "3"})) self.ui_test.wait_until_property_is_updated(xNavigatorPanelContentTree, "SelectEntryText", "MOVE THIS Heading level 2") @@ -62,8 +62,8 @@ class tdf154212(UITestCase): # click on the 'move chapter up' button in the Navigator tool box xNavigatorPanel = xWriterEdit.getChild("NavigatorPanel") - xToolBarContent6 = xNavigatorPanel.getChild("content6") - xToolBarContent6.executeAction("CLICK", mkPropertyValues({"POS": "4"})) + xToolBar = xNavigatorPanel.getChild("HeadingsContentFunctionButtonsToolbar") + xToolBar.executeAction("CLICK", mkPropertyValues({"POS": "2"})) self.ui_test.wait_until_property_is_updated(xNavigatorPanelContentTree, "SelectEntryText", "MOVE THIS Heading level 2") diff --git a/sw/source/uibase/inc/conttree.hxx b/sw/source/uibase/inc/conttree.hxx index 824de8022505..a06ef17c1bdf 100644 --- a/sw/source/uibase/inc/conttree.hxx +++ b/sw/source/uibase/inc/conttree.hxx @@ -88,6 +88,8 @@ public: /** TreeListBox for content indicator */ class SwContentTree final : public SfxListener { + friend class SwNavigationPI; + std::unique_ptr m_xTreeView; SwContentTreeDropTarget m_aDropTargetHelper; SwNavigationPI* m_pDialog; @@ -203,6 +205,8 @@ class SwContentTree final : public SfxListener bool IsDeletable(const SwContent* pContent); void DeleteAllContentOfEntryContentType(const weld::TreeIter& rEntry); + bool IsSelectedEntryCurrentDocCursorPosition(const weld::TreeIter& rEntry); + /** Expand - Remember the state for content types */ DECL_LINK(ExpandHdl, const weld::TreeIter&, bool); /** Collapse - Remember the state for content types. */ @@ -270,7 +274,7 @@ public: const SwWrtShell* GetActiveWrtShell() const {return m_pActiveShell;} SwWrtShell* GetHiddenWrtShell() {return m_pHiddenShell;} - void Select(); + void UpdateContentFunctionsToolbar(); void UpdateTracking(); void SelectOutlinesWithSelection(); diff --git a/sw/source/uibase/inc/navipi.hxx b/sw/source/uibase/inc/navipi.hxx index ff0731621b87..a90cbc667169 100644 --- a/sw/source/uibase/inc/navipi.hxx +++ b/sw/source/uibase/inc/navipi.hxx @@ -51,6 +51,8 @@ class SwNavigationPI final : public PanelLayout ::sfx2::sidebar::ControllerItem m_aPageStats; ::sfx2::sidebar::ControllerItem m_aNavElement; + css::uno::Reference m_xFrame; + std::unique_ptr m_xContent1ToolBox; std::unique_ptr m_xContent2ToolBox; std::unique_ptr m_xContent3ToolBox; @@ -89,6 +91,16 @@ class SwNavigationPI final : public PanelLayout weld::ComboBox* m_pNavigateByComboBox; + std::unique_ptr m_xHeadingsContentFunctionsToolbar; + std::unique_ptr m_xDeleteFunctionToolbar; + std::unordered_map> m_aContentTypeUnoToolbarMap; + std::unordered_map> m_aContentTypeToolbarUnoDispatcherMap; + std::unordered_map> m_aContentUnoToolbarMap; + std::unordered_map> m_aContentToolbarUnoDispatcherMap; + void InitContentFunctionsToolbar(); + void UpdateContentFunctionsToolbar(); + DECL_LINK(ContentFunctionsToolbarSelectHdl, const OUString&, void ); + bool IsZoomedIn() const {return m_bIsZoomedIn;} void ZoomOut(); void ZoomIn(); diff --git a/sw/source/uibase/utlui/content.cxx b/sw/source/uibase/utlui/content.cxx index dbaed5258a8c..b3e35752dde6 100644 --- a/sw/source/uibase/utlui/content.cxx +++ b/sw/source/uibase/utlui/content.cxx @@ -3043,9 +3043,9 @@ void SwContentTree::Display( bool bActive ) // set_cursor unselects all entries, makes passed entry visible, and selects it m_xTreeView->set_cursor(*xSelEntry); } - } - Select(); + UpdateContentFunctionsToolbar(); + } if (!m_bIgnoreDocChange && GetEntryCount() == nOldEntryCount) { @@ -3723,7 +3723,7 @@ void SwContentTree::Notify(SfxBroadcaster & rBC, SfxHint const& rHint) if (m_xTreeView->get_cursor(xEntry.get())) { m_xTreeView->select(*xEntry); - Select(); + UpdateContentFunctionsToolbar(); } else m_xTreeView->unselect_all(); @@ -4038,7 +4038,7 @@ static void lcl_SelectByContentTypeAndAddress(SwContentTree* pThis, weld::TreeVi if (!ptr) { rContentTree.set_cursor(-1); - pThis->Select(); + pThis->UpdateContentFunctionsToolbar(); return; } @@ -4058,7 +4058,7 @@ static void lcl_SelectByContentTypeAndAddress(SwContentTree* pThis, weld::TreeVi if (!bFoundEntry) { rContentTree.set_cursor(-1); - pThis->Select(); + pThis->UpdateContentFunctionsToolbar(); return; } @@ -4115,14 +4115,14 @@ static void lcl_SelectByContentTypeAndAddress(SwContentTree* pThis, weld::TreeVi { // unselect all entries and make passed entry visible and selected rContentTree.set_cursor(*xIter); - pThis->Select(); + pThis->UpdateContentFunctionsToolbar(); } return; } } rContentTree.set_cursor(-1); - pThis->Select(); + pThis->UpdateContentFunctionsToolbar(); return; } @@ -4155,14 +4155,15 @@ static void lcl_SelectByContentTypeAndName(SwContentTree* pThis, weld::TreeView& { // unselect all entries and make passed entry visible and selected rContentTree.set_cursor(*xIter); - pThis->Select(); + pThis->UpdateContentFunctionsToolbar(); } break; } } } -static void lcl_SelectDrawObjectByName(weld::TreeView& rContentTree, std::u16string_view rName) +static void lcl_SelectDrawObjectByName(SwContentTree* pThis, weld::TreeView& rContentTree, + std::u16string_view rName) { if (rName.empty()) return; @@ -4184,6 +4185,7 @@ static void lcl_SelectDrawObjectByName(weld::TreeView& rContentTree, std::u16str { rContentTree.select(*xIter); rContentTree.scroll_to_row(*xIter); + pThis->UpdateContentFunctionsToolbar(); } break; } @@ -4324,15 +4326,15 @@ void SwContentTree::UpdateTracking() SdrObject* pSelected = pSdrView->GetMarkedObjectList().GetMark(nIdx)->GetMarkedSdrObj(); OUString aName(pSelected->GetName()); if (!aName.isEmpty()) - lcl_SelectDrawObjectByName(*m_xTreeView, aName); + lcl_SelectDrawObjectByName(this, *m_xTreeView, aName); } } else { // clear treeview selections m_xTreeView->unselect_all(); + UpdateContentFunctionsToolbar(); } - Select(); } return; } @@ -4494,7 +4496,7 @@ void SwContentTree::UpdateTracking() } // unselect all entries, make pEntry visible, and select m_xTreeView->set_cursor(rEntry); - Select(); + UpdateContentFunctionsToolbar(); // tdf#149279 show at least two outline entries before the set cursor entry std::unique_ptr xIter(m_xTreeView->make_iterator(&rEntry)); @@ -4584,10 +4586,265 @@ void SwContentTree::UpdateTracking() { m_xTreeView->unselect_all(); m_xTreeView->set_cursor(-1); - Select(); + UpdateContentFunctionsToolbar(); } } +static bool lcl_IsSelectedCompareByContentTypeAndAddress(const weld::TreeIter& rEntry, + weld::TreeView& rContentTree, + ContentTypeId eContentType, + const void* ptr) +{ + if (!ptr) + return false; + + std::unique_ptr xIter(rContentTree.make_iterator()); + + // find content type entry + bool bFoundEntry = rContentTree.get_iter_first(*xIter); + while (bFoundEntry) + { + assert(dynamic_cast(weld::fromId(rContentTree.get_id(*xIter)))); + SwContentType* pContentType = weld::fromId(rContentTree.get_id(*xIter)); + if (eContentType == pContentType->GetType()) + break; + bFoundEntry = rContentTree.iter_next_sibling(*xIter); + } + + if (!bFoundEntry) + return false; + + // find content type content entry and compare it to the passed entry + const void* p = nullptr; + while (rContentTree.iter_next(*xIter) && lcl_IsContent(*xIter, rContentTree)) + { + assert(dynamic_cast(weld::fromId(rContentTree.get_id(*xIter)))); + SwContent* pContent = weld::fromId(rContentTree.get_id(*xIter)); + switch (eContentType) + { + case ContentTypeId::FOOTNOTE: + case ContentTypeId::ENDNOTE: + { + assert(dynamic_cast(static_cast(pContent))); + SwTextFootnoteContent* pCnt = static_cast(pContent); + p = pCnt->GetTextFootnote(); + break; + } + case ContentTypeId::URLFIELD: + { + assert(dynamic_cast(static_cast(pContent))); + SwURLFieldContent* pCnt = static_cast(pContent); + p = static_cast(pCnt->GetINetAttr()); + break; + } + case ContentTypeId::TEXTFIELD: + { + assert(dynamic_cast(static_cast(pContent))); + SwTextFieldContent* pCnt = static_cast(pContent); + p = pCnt->GetFormatField()->GetField(); + break; + } + case ContentTypeId::POSTIT: + { + assert(dynamic_cast(static_cast(pContent))); + SwPostItContent* pCnt = static_cast(pContent); + p = pCnt->GetPostIt()->GetField(); + break; + } + case ContentTypeId::INDEX: + { + assert(dynamic_cast(static_cast(pContent))); + SwTOXBaseContent* pCnt = static_cast(pContent); + p = pCnt->GetTOXBase(); + break; + } + default: + break; + } + if (ptr == p) + return rContentTree.iter_compare(*xIter, rEntry) == 0; + } + return false; +} + +static bool lcl_IsSelectedCompareByContentTypeAndName(const weld::TreeIter& rEntry, + weld::TreeView& rContentTree, + ContentTypeId eContentType, + std::u16string_view rName) +{ + std::unique_ptr xIter(rContentTree.make_iterator()); + + // find content type entry + bool bFoundEntry = rContentTree.get_iter_first(*xIter); + while (bFoundEntry) + { + assert(dynamic_cast(weld::fromId(rContentTree.get_id(*xIter)))); + SwContentType* pContentType = weld::fromId(rContentTree.get_id(*xIter)); + if (eContentType == pContentType->GetType()) + break; + bFoundEntry = rContentTree.iter_next_sibling(*xIter); + } + + if (!bFoundEntry) + return false; + + // find content type content entry and compare it to the passed entry + while (rContentTree.iter_next(*xIter)) + { + if (rName == rContentTree.get_text(*xIter)) + { + if (rContentTree.iter_compare(*xIter, rEntry) == 0) + return true; + } + } + return false; +} + +bool SwContentTree::IsSelectedEntryCurrentDocCursorPosition(const weld::TreeIter& rEntry) +{ + if (State::HIDDEN == m_eState || !m_pActiveShell) + return false; + + // table + if (m_pActiveShell->IsCursorInTable()) + { + return lcl_IsSelectedCompareByContentTypeAndName( + rEntry, *m_xTreeView, ContentTypeId::TABLE, + m_pActiveShell->GetTableFormat()->GetName()); + } + // graphic, frame, and ole + if (m_pActiveShell->GetSelectionType() + & (SelectionType::Graphic | SelectionType::Frame | SelectionType::Ole)) + { + ContentTypeId eContentTypeId; + if (m_pActiveShell->GetSelectionType() == SelectionType::Graphic) + eContentTypeId = ContentTypeId::GRAPHIC; + else if (m_pActiveShell->GetSelectionType() == SelectionType::Frame) + eContentTypeId = ContentTypeId::FRAME; + else if (m_pActiveShell->GetSelectionType() == SelectionType::Ole) + eContentTypeId = ContentTypeId::OLE; + else // to quiet compiler warning/error + return false; + return lcl_IsSelectedCompareByContentTypeAndName(rEntry, *m_xTreeView, eContentTypeId, + m_pActiveShell->GetFlyName()); + } + // hyperlinks + // not in ToxContent tdf#148312 <- does this apply here? + if (const SwSection* pSection = m_pActiveShell->GetCurrSection(); + !pSection || (pSection && pSection->GetType() != SectionType::ToxContent)) + { + if (SwContentAtPos aContentAtPos(IsAttrAtPos::InetAttr); + m_pActiveShell->GetContentAtPos(m_pActiveShell->GetCursorDocPos(), aContentAtPos)) + { + // Because hyperlink item names do not need to be unique, finding the corresponding + // item in the tree by name may result in incorrect selection. Find the item in the + // tree by comparing the SwTextINetFormat pointer at the document cursor position to + // that stored in the item SwURLFieldContent. + return lcl_IsSelectedCompareByContentTypeAndAddress( + rEntry, *m_xTreeView, ContentTypeId::URLFIELD, aContentAtPos.pFndTextAttr); + } + } + // references + if (SwContentAtPos aContentAtPos(IsAttrAtPos::RefMark); + m_pActiveShell->GetContentAtPos(m_pActiveShell->GetCursorDocPos(), aContentAtPos) + && aContentAtPos.pFndTextAttr) + { + const SwFormatRefMark& rRefMark = aContentAtPos.pFndTextAttr->GetRefMark(); + return lcl_IsSelectedCompareByContentTypeAndName( + rEntry, *m_xTreeView, ContentTypeId::REFERENCE, rRefMark.GetRefName()); + } + // indexes + if (const SwTOXBase* pTOXBase = m_pActiveShell->GetCurTOX()) + { + return lcl_IsSelectedCompareByContentTypeAndAddress(rEntry, *m_xTreeView, + ContentTypeId::INDEX, pTOXBase); + // alternatively: + // return lcl_IsSelectedCompareByContentTypeAndName(rEntry, *m_xTreeView, + // ContentTypeId::INDEX, + // pTOX->GetTOXName()); + } + // fields, comments + if (SwField* pField = m_pActiveShell->GetCurField()) + { + ContentTypeId eContentTypeId = pField->GetTypeId() == SwFieldTypesEnum::Postit + ? ContentTypeId::POSTIT + : ContentTypeId::TEXTFIELD; + return lcl_IsSelectedCompareByContentTypeAndAddress(rEntry, *m_xTreeView, eContentTypeId, + pField); + } + // drawing + if (m_pActiveShell->GetSelectionType() + & (SelectionType::DrawObject | SelectionType::DrawObjectEditMode | SelectionType::DbForm)) + { + SdrView* pSdrView = m_pActiveShell->GetDrawView(); + if (!pSdrView) + return false; + // ONLY CHECKS FIRST MARKED OBJECT + for (size_t nIdx = 0; nIdx < pSdrView->GetMarkedObjectList().GetMarkCount(); nIdx++) + { + SdrObject* pObject = pSdrView->GetMarkedObjectList().GetMark(nIdx)->GetMarkedSdrObj(); + if (lcl_IsSelectedCompareByContentTypeAndName( + rEntry, *m_xTreeView, ContentTypeId::DRAWOBJECT, pObject->GetName())) + return true; + } + return false; + } + // footnotes and endnotes + if (SwContentAtPos aContentAtPos(IsAttrAtPos::Ftn); + m_pActiveShell->GetContentAtPos(m_pActiveShell->GetCursorDocPos(), aContentAtPos) + && aContentAtPos.pFndTextAttr) + { + ContentTypeId eContentTypeId = aContentAtPos.pFndTextAttr->GetFootnote().IsEndNote() + ? ContentTypeId::ENDNOTE + : ContentTypeId::FOOTNOTE; + return lcl_IsSelectedCompareByContentTypeAndAddress(rEntry, *m_xTreeView, eContentTypeId, + aContentAtPos.pFndTextAttr); + } + // section + if (const SwSection* pSection = m_pActiveShell->GetCurrSection()) + { + return lcl_IsSelectedCompareByContentTypeAndName( + rEntry, *m_xTreeView, ContentTypeId::REGION, pSection->GetSectionName()); + } + // bookmark (unsure about this) + if (m_pActiveShell->GetSelectionType() & SelectionType::Text) + { + SwPaM* pCursor = m_pActiveShell->GetCursor(); + IDocumentMarkAccess* const pMarkAccess = m_pActiveShell->getIDocumentMarkAccess(); + IDocumentMarkAccess::const_iterator_t ppBookmark = pMarkAccess->getBookmarksBegin(); + if (pCursor && ppBookmark != pMarkAccess->getBookmarksEnd()) + { + OUString sBookmarkName; + SwPosition* pCursorPoint = pCursor->GetPoint(); + while (ppBookmark != pMarkAccess->getBookmarksEnd()) + { + if (lcl_IsUiVisibleBookmark(*ppBookmark) + && *pCursorPoint >= (*ppBookmark)->GetMarkStart() + && *pCursorPoint <= (*ppBookmark)->GetMarkEnd()) + { + sBookmarkName = (*ppBookmark)->GetName(); + // keep previously selected bookmark instead + // of selecting a different bookmark inside of it + if (sBookmarkName == m_sSelectedItem) + return lcl_IsSelectedCompareByContentTypeAndName( + rEntry, *m_xTreeView, ContentTypeId::BOOKMARK, sBookmarkName); + } + else if (!sBookmarkName.isEmpty() && *pCursorPoint < (*ppBookmark)->GetMarkStart()) + { + // don't search a different bookmark inside the + // previous one, if the starting position of the next bookmarks + // is after the cursor position (assuming that the + // bookmark iterator jumps inside the same text by positions) + return lcl_IsSelectedCompareByContentTypeAndName( + rEntry, *m_xTreeView, ContentTypeId::BOOKMARK, sBookmarkName); + } + ++ppBookmark; + } + } + } + return false; +} + void SwContentTree::SelectOutlinesWithSelection() { SwCursor* pFirstCursor = m_pActiveShell->GetCursor(); @@ -4639,7 +4896,7 @@ void SwContentTree::SelectOutlinesWithSelection() }); } - Select(); + UpdateContentFunctionsToolbar(); } void SwContentTree::MoveOutline(SwOutlineNodes::size_type nTargetPos) @@ -5034,17 +5291,6 @@ IMPL_LINK(SwContentTree, QueryTooltipHdl, const weld::TreeIter&, rEntry, OUStrin void SwContentTree::ExecuteContextMenuAction(const OUString& rSelectedPopupEntry) { - - if(rSelectedPopupEntry == "showcomments") - { - m_pActiveShell->GetView().GetViewFrame().GetDispatcher()->Execute(SID_TOGGLE_NOTES); - return; - } - if(rSelectedPopupEntry == "showresolvedcomments") - { - m_pActiveShell->GetView().GetViewFrame().GetDispatcher()->Execute(SID_TOGGLE_RESOLVED_NOTES); - return; - } if (rSelectedPopupEntry == "copy") { CopyOutlineSelections(); @@ -5477,7 +5723,7 @@ IMPL_LINK_NOARG(SwContentTree, SelectHdl, weld::TreeView&, void) ContentDoubleClickHdl(*m_xTreeView); grab_focus(); } - Select(); + UpdateContentFunctionsToolbar(); if (m_bIsRoot) return; // Select the content type in the Navigate By control @@ -5489,32 +5735,11 @@ IMPL_LINK_NOARG(SwContentTree, SelectHdl, weld::TreeView&, void) m_pDialog->SelectNavigateByContentType(m_xTreeView->get_text(*xEntry)); } -// Here the buttons for moving outlines are en-/disabled. -// The buttons for moving outlines are disabled when the Navigator is in "Zoom" mode or when -// the document is in read-only mode or when the outline content is displayed alphabetically -// sorted or when the selected entry is not outline content. -void SwContentTree::Select() +void SwContentTree::UpdateContentFunctionsToolbar() { SwNavigationPI* pNavi = GetParentWindow(); - - bool bEnable = false; - - if (!pNavi->IsZoomedIn() && !m_bIsLastReadOnly) - { - std::unique_ptr xEntry(m_xTreeView->make_iterator()); - if (m_xTreeView->get_selected(xEntry.get()) && lcl_IsContent(*xEntry, *m_xTreeView)) - { - const SwContentType* pCntType = - weld::fromId(m_xTreeView->get_id(*xEntry))->GetParent(); - if (pCntType->GetType() == ContentTypeId::OUTLINE && !pCntType->IsAlphabeticSort()) - bEnable = true; - } - } - - pNavi->m_xContent6ToolBox->set_item_sensitive(u"chapterup"_ustr, bEnable); - pNavi->m_xContent6ToolBox->set_item_sensitive(u"chapterdown"_ustr, bEnable); - pNavi->m_xContent6ToolBox->set_item_sensitive(u"promote"_ustr, bEnable); - pNavi->m_xContent6ToolBox->set_item_sensitive(u"demote"_ustr, bEnable); + if (pNavi) + pNavi->UpdateContentFunctionsToolbar(); } void SwContentTree::SetRootType(ContentTypeId nType) @@ -6308,8 +6533,7 @@ void SwContentTree::GotoContent(const SwContent* pCnt) if(m_pActiveShell->GotoINetAttr( *static_cast(pCnt)->GetINetAttr() )) { - m_pActiveShell->Right( SwCursorSkipMode::Chars, true, 1, false); - m_pActiveShell->SwCursorShell::SelectTextAttr( RES_TXTATR_INETFMT, true ); + m_pActiveShell->Right(SwCursorSkipMode::Chars, false, 1, false); } } break; @@ -6391,6 +6615,8 @@ void SwContentTree::GotoContent(const SwContent* pCnt) rView.SetVisArea(aPoint); } } + + UpdateContentFunctionsToolbar(); } NaviContentBookmark::NaviContentBookmark() : @@ -6449,7 +6675,7 @@ void SwContentTree::SelectContentType(std::u16string_view rContentTypeName) if (m_xTreeView->get_text(*xIter) == rContentTypeName) { m_xTreeView->set_cursor(*xIter); - Select(); + UpdateContentFunctionsToolbar(); break; } } while (m_xTreeView->iter_next_sibling(*xIter)); diff --git a/sw/source/uibase/utlui/navipi.cxx b/sw/source/uibase/utlui/navipi.cxx index 7db3f3d8c2df..4db946c53e5f 100644 --- a/sw/source/uibase/utlui/navipi.cxx +++ b/sw/source/uibase/utlui/navipi.cxx @@ -51,6 +51,9 @@ #include +#include +#include + using namespace ::com::sun::star::uno; using namespace ::com::sun::star::frame; @@ -273,23 +276,12 @@ IMPL_LINK(SwNavigationPI, ToolBoxSelectHdl, const OUString&, rCommand, void) { rSh.GetView().GetViewFrame().GetDispatcher()->Execute(FN_SET_REMINDER, SfxCallMode::ASYNCHRON); } - else if (rCommand == "chapterdown" || - rCommand == "movedown" || - rCommand == "chapterup" || + else if (rCommand == "movedown" || rCommand == "moveup" || - rCommand == "promote" || - rCommand == "demote" || rCommand == "edit") { if (IsGlobalMode()) m_xGlobalTree->ExecCommand(rCommand); - else - { - // Standard: sublevels are taken - // do not take sublevels with Ctrl - bool bOutlineWithChildren = (KEY_MOD1 != m_xContent6ToolBox->get_modifier_state()); - m_xContentTree->ExecCommand(rCommand, bOutlineWithChildren); - } } else if (rCommand == "contenttoggle" || rCommand == "globaltoggle") { @@ -371,7 +363,7 @@ void SwNavigationPI::ZoomOut() pNav->SetMinOutputSizePixel(aOptimalSize); pNav->SetOutputSizePixel(aNewSize); - m_xContentTree->Select(); // Enable toolbox + m_xContentTree->UpdateContentFunctionsToolbar(); // Enable toolbox m_pConfig->SetSmall(false); m_xContent6ToolBox->set_item_active(u"listbox"_ustr, true); } @@ -400,7 +392,7 @@ void SwNavigationPI::ZoomIn() pNav->SetMinOutputSizePixel(aOptimalSize); pNav->SetOutputSizePixel(aNewSize); - m_xContentTree->Select(); // Enable toolbox + m_xContentTree->UpdateContentFunctionsToolbar(); // Enable toolbox m_pConfig->SetSmall(true); m_xContent6ToolBox->set_item_active(u"listbox"_ustr, false); @@ -426,6 +418,7 @@ SwNavigationPI::SwNavigationPI(weld::Widget* pParent, , m_aDocFullName(SID_DOCFULLNAME, *_pBindings, *this) , m_aPageStats(FN_STAT_PAGE, *_pBindings, *this) , m_aNavElement(FN_NAV_ELEMENT, *_pBindings, *this) + , m_xFrame(rxFrame) , m_xContent1ToolBox(m_xBuilder->weld_toolbar(u"content1"_ustr)) , m_xContent2ToolBox(m_xBuilder->weld_toolbar(u"content2"_ustr)) , m_xContent3ToolBox(m_xBuilder->weld_toolbar(u"content3"_ustr)) @@ -454,6 +447,8 @@ SwNavigationPI::SwNavigationPI(weld::Widget* pParent, , m_bIsZoomedIn(false) , m_bGlobalMode(false) { + InitContentFunctionsToolbar(); + m_xContainer->connect_container_focus_changed(LINK(this, SwNavigationPI, SetFocusChildHdl)); Reference xController = @@ -585,6 +580,182 @@ SwNavigationPI::SwNavigationPI(weld::Widget* pParent, } } +void SwNavigationPI::InitContentFunctionsToolbar() +{ + m_xHeadingsContentFunctionsToolbar + = m_xBuilder->weld_toolbar("HeadingsContentFunctionButtonsToolbar"); + m_xDeleteFunctionToolbar = m_xBuilder->weld_toolbar("DeleteFunctionButtonToolbar"); + + const OUString sContentTypes[] + = { "Headings", "Tables", "Frames", "Images", "OLEobjects", + "Bookmarks", "Sections", "Hyperlinks", "References", "Indexes", + "Comments", "Drawingobjects", "Fields", "Footnotes", "Endnotes" }; + + for (ContentTypeId eContentTypeId : o3tl::enumrange()) + { + if (eContentTypeId == ContentTypeId::OUTLINE) + continue; + m_aContentTypeUnoToolbarMap[eContentTypeId] = m_xBuilder->weld_toolbar( + sContentTypes[static_cast(eContentTypeId)] + "ContentTypeUnoToolbar"); + m_aContentTypeToolbarUnoDispatcherMap[eContentTypeId] + = std::make_unique(*m_aContentTypeUnoToolbarMap[eContentTypeId], + *m_xBuilder, m_xFrame); + m_aContentUnoToolbarMap[eContentTypeId] = m_xBuilder->weld_toolbar( + sContentTypes[static_cast(eContentTypeId)] + "ContentUnoToolbar"); + m_aContentToolbarUnoDispatcherMap[eContentTypeId] = std::make_unique( + *m_aContentUnoToolbarMap[eContentTypeId], *m_xBuilder, m_xFrame); + } + + Link aLink + = LINK(this,SwNavigationPI, ContentFunctionsToolbarSelectHdl); + m_xHeadingsContentFunctionsToolbar->connect_clicked(aLink); + m_xDeleteFunctionToolbar->connect_clicked(aLink); +} + +namespace +{ +bool lcl_ToolbarHasItemWithIdent(weld::Toolbar& rToolbar, std::u16string_view rIdent) +{ + for (auto i = 0; i < rToolbar.get_n_items(); i++) + { + if (rToolbar.get_item_ident(i) == rIdent) + return true; + } + return false; +} +} + +void SwNavigationPI::UpdateContentFunctionsToolbar() +{ + m_xHeadingsContentFunctionsToolbar->hide(); + for (ContentTypeId eContentTypeId : o3tl::enumrange()) + { + if (eContentTypeId == ContentTypeId::OUTLINE) + continue; + m_aContentTypeUnoToolbarMap[eContentTypeId]->hide(); + m_aContentUnoToolbarMap[eContentTypeId]->hide(); + } + m_xDeleteFunctionToolbar->hide(); + + weld::TreeView& rTreeView = m_xContentTree->get_widget(); + + if (IsZoomedIn() || !rTreeView.is_visible()) + return; + + std::unique_ptr xEntry(rTreeView.make_iterator()); + if (!rTreeView.get_selected(xEntry.get())) + return; + + bool bUseDeleteFunctionsToolbar = true; + OUString aContentTypeName; // used in creation of delete button tooltip + + const bool bContentType + = weld::fromId(rTreeView.get_id(*xEntry))->GetTypeId() == 1; + + if (bContentType) + { + const SwContentType* pContentType = weld::fromId(rTreeView.get_id(*xEntry)); + + aContentTypeName = pContentType->GetName(); + + ContentTypeId eContentTypeId = pContentType->GetType(); + if (eContentTypeId == ContentTypeId::OUTLINE) + return; + weld::Toolbar& rContentTypeToolbar = *m_aContentTypeUnoToolbarMap[eContentTypeId]; + if (rContentTypeToolbar.get_n_items()) + { + if (eContentTypeId == ContentTypeId::POSTIT) + { + // prefer .uno:DeleteAllNotes over delete functions toolbar + bUseDeleteFunctionsToolbar + = !lcl_ToolbarHasItemWithIdent(rContentTypeToolbar, u".uno:DeleteAllNotes"); + } + rContentTypeToolbar.show(); + } + } + else + { + const SwContentType* pContentType + = weld::fromId(rTreeView.get_id(*xEntry))->GetParent(); + + aContentTypeName = pContentType->GetSingleName(); + + ContentTypeId eContentTypeId = pContentType->GetType(); + if (eContentTypeId == ContentTypeId::OUTLINE) + { + m_xHeadingsContentFunctionsToolbar->show(); + } + else if (m_xContentTree->IsSelectedEntryCurrentDocCursorPosition(*xEntry)) + { + weld::Toolbar& rContentTypeToolbar = *m_aContentUnoToolbarMap[eContentTypeId]; + if (rContentTypeToolbar.get_n_items()) + { + if (eContentTypeId == ContentTypeId::TABLE) + { + // prefer .uno:DeleteTable over delete functions toolbar + bUseDeleteFunctionsToolbar + = !lcl_ToolbarHasItemWithIdent(rContentTypeToolbar, u".uno:DeleteTable"); + } + else if (eContentTypeId == ContentTypeId::INDEX) + { + // prefer .uno:RemoveTableOf over delete functions toolbar + bUseDeleteFunctionsToolbar + = !lcl_ToolbarHasItemWithIdent(rContentTypeToolbar, u".uno:RemoveTableOf"); + } + rContentTypeToolbar.show(); + } + } + } + + if (bUseDeleteFunctionsToolbar && m_xContentTree->IsDeletable(*xEntry)) + { + OUString sToolTip = SwResId(bContentType ? STR_DELETE_CONTENT_TYPE : STR_DELETE_CONTENT); + sToolTip = sToolTip.replaceFirst("%1", aContentTypeName); + m_xDeleteFunctionToolbar->set_item_tooltip_text("delete", sToolTip); + m_xDeleteFunctionToolbar->show(); + } +} + +IMPL_LINK(SwNavigationPI, ContentFunctionsToolbarSelectHdl, const OUString&, rCommand, void) +{ + weld::TreeView& rTreeView = m_xContentTree->get_widget(); + + std::unique_ptr xEntry(rTreeView.make_iterator()); + if (!rTreeView.get_selected(xEntry.get())) + return; + + const bool bContentEntry + = weld::fromId(rTreeView.get_id(*xEntry))->GetTypeId() == 0; + + if (bContentEntry) + { + SwContent* pContent = weld::fromId(rTreeView.get_id(*xEntry)); + if (pContent) + m_xContentTree->GotoContent(pContent); + } + + if (rCommand == "chapterdown" || rCommand == "chapterup" || rCommand == "promote" + || rCommand == "demote") + { + // Get MouseModifier for Outline-Move + // Standard: sublevels are taken + // do not take sublevels with Ctrl + bool bOutlineWithChildren = (KEY_MOD1 != m_xContent6ToolBox->get_modifier_state()); + m_xContentTree->ExecCommand(rCommand, bOutlineWithChildren); + } + else if (rCommand == "delete") + { + if (!bContentEntry) + { + m_xContentTree->DeleteAllContentOfEntryContentType(*xEntry); + } + else + { + m_xContentTree->EditEntry(*xEntry, EditEntryMode::DELETE); + } + } +} + weld::Window* SwNavigationPI::GetFrameWeld() const { if (m_xNavigatorDlg) diff --git a/sw/uiconfig/swriter/ui/navigatorpanel.ui b/sw/uiconfig/swriter/ui/navigatorpanel.ui index afb588a7a65d..5598ef1d938d 100644 --- a/sw/uiconfig/swriter/ui/navigatorpanel.ui +++ b/sw/uiconfig/swriter/ui/navigatorpanel.ui @@ -515,116 +515,812 @@ False True - 2 + 1 - + True - True - icons + False - + True - False - List Box On/Off - sw/res/sc20233.png - - - List Box On/Off - Shows or hides the Navigator list. + True + start + start + icons + + + True + False + List Box On/Off + sw/res/sc20233.png + + + List Box On/Off + Shows or hides the Navigator list. + + + + False + False + + + + + True + False + + + False + False + False - False + True + 0 - + True False - - - False - False - - - - - True - False - False - Promote Outline Level - sw/res/sc20172.png - - - Promote Outline Level - Increases the outline level of the selected heading, and the headings that occur below the heading, by one. To only increase the outline level of the selected heading, hold down Ctrl, and then click this icon. + + + True + True + start + start + icons + False + + + True + False + Promote Outline Level + start + start + sw/res/sc20172.png + + + False + False + + + + + True + False + Demote Outline Level + start + start + sw/res/sc20173.png + + + False + False + + + + + True + False + Move Heading Up + start + start + sw/res/sc20174.png + + + False + False + + + + + True + False + Move Heading Down + start + start + sw/res/sc20171.png + + + False + False + + + + False + True + 0 + + + + + True + True + start + start + icons + False + + + False + True + 1 + + + + + True + True + start + start + icons + False + + + True + False + start + start + + + False + False + + + + + True + False + start + start + + + False + False + + + + + True + False + start + start + + + False + False + + + + + False + True + 2 + + + + + True + True + start + start + icons + False + + + False + True + 3 + + + + + True + True + start + start + icons + False + + + True + False + start + start + + + False + False + + + + + False + True + 4 + + + + + True + True + start + start + icons + False + + + False + True + 5 + + + + + True + True + start + start + icons + False + + + True + False + start + start + + + False + False + + + + + False + True + 6 + + + + + True + True + start + start + icons + False + + + False + True + 7 + + + + + True + True + start + start + icons + False + + + True + False + start + start + + + False + False + + + + + False + True + 8 + + + + + True + True + start + start + icons + False + + + False + True + 9 + + + + + True + True + start + start + icons + False + + + True + False + start + start + + + False + False + + + + + False + True + 10 + + + + + True + True + start + start + icons + False + + + False + True + 11 + + + + + True + True + start + start + icons + False + + + True + False + start + start + + + False + False + + + + + False + True + 12 + + + + + True + True + start + start + icons + False + + + False + True + 13 + + + + + True + True + start + start + icons + False + + + True + False + start + start + + + False + False + + + + + True + False + start + start + + + False + False + + + + + False + True + 14 + + + + + True + True + start + start + icons + False + + + False + True + 15 + + + + + True + True + start + start + icons + False + + + False + True + 16 + + + + + True + True + start + start + icons + False + + + True + False + start + start + + + False + False + + + + + False + True + 17 + + + + + True + True + start + start + icons + False + + + True + False + start + start + + + False + False + + + + + True + False + start + start + + + False + False + + + + + False + True + 18 + + + + + True + True + start + start + icons + False + + + True + False + start + start + + + False + False + + + + + False + True + 19 + + + + + True + True + start + start + icons + False + + + False + True + 20 + + + + + True + True + start + start + icons + False + + + False + True + 21 + + + + + True + True + start + start + icons + False + + + True + False + start + start + + + False + False + + + + + False + True + 22 + + + + + True + True + start + start + icons + False + + + True + False + start + start + + + False + False + + + + + False + True + 23 + + + + + True + True + start + start + icons + False + + + True + False + start + start + + + False + False + + + + + False + True + 24 + + + + + True + True + start + start + icons + False + + + True + False + start + start + + + False + False + + + + + False + True + 25 + + + + + True + True + start + start + icons + False + + + False + True + 26 + + + + + True + True + start + start + icons + False + + + True + False + start + start + + + False + False + + + + + False + True + 27 + + + + + True + True + start + start + icons + False + + + False + True + 28 + + + + + True + True + start + start + icons + False + + + True + False + Delete + start + start + cmd/sc_delete.png + + + False + False + + + + + False + True + 29 + False - False - - - - - True - False - False - Demote Outline Level - sw/res/sc20173.png - - - Demote Outline Level - Decreases the outline level of the selected heading, and the headings that occur below the heading, by one. To only decrease the outline level of the selected heading, hold down Ctrl, and then click this icon. - - - - - False - False - - - - - True - False - False - Move Heading Up - sw/res/sc20174.png - - - Move Heading Up - Moves the selected heading, and the text below the heading, up one heading position in the Navigator and in the document. To move only the selected heading and not the text associated with the heading, hold down Ctrl, and then click this icon. - - - - - False - False - - - - - True - False - False - Move Heading Down - sw/res/sc20171.png - - - Move Heading Down - Moves the selected heading, and the text below the heading, down one heading position in the Navigator and in the document. To move only the selected heading and not the text associated with the heading, hold down Ctrl, and then click this icon. - - - - - False - False + True + 1