[Libreoffice-commits] core.git: sfx2/source
Tomaž Vajngerl (via logerrit)
logerrit at kemper.freedesktop.org
Sun Mar 21 14:58:24 UTC 2021
sfx2/source/devtools/DocumentModelTreeHandler.cxx | 14 ++++++--------
1 file changed, 6 insertions(+), 8 deletions(-)
New commits:
commit 36b9475e7be42c904580154751aece697883a30a
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Sun Mar 21 20:49:22 2021 +0900
Commit: Tomaž Vajngerl <quikee at gmail.com>
CommitDate: Sun Mar 21 15:57:44 2021 +0100
devtools: don't store locally the object as XIndexAccess
This doesn't correctly read the IndexAccess if we remember it into
a member variable, because we can't rely that the input object is
cast to XIndexAccess, but use a getMainObject method to get a
different object and cast that to XIndexAccess. So the instance
of the object can change (object can be removed or and a new one
added) and we have no way of knowing what the implementation does.
It is possible to cache the XIndexAccess object into a member
variable (if done carefully), but it is prone to the described
problems so let's not remember any intermediate objects for
all DocumentModelTreeEntry subclasses unless we actually have a
performance problem.
Change-Id: I9d9d30d2b43846d473d118d419d407e34d0b1666
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/112836
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>
diff --git a/sfx2/source/devtools/DocumentModelTreeHandler.cxx b/sfx2/source/devtools/DocumentModelTreeHandler.cxx
index a5b14ca42ab9..e099d3d9cc9d 100644
--- a/sfx2/source/devtools/DocumentModelTreeHandler.cxx
+++ b/sfx2/source/devtools/DocumentModelTreeHandler.cxx
@@ -658,13 +658,9 @@ public:
/** Represents a list of (Calc) sheet */
class SheetsEntry : public DocumentModelTreeEntry
{
-private:
- uno::Reference<container::XIndexAccess> mxIndexAccess;
-
public:
SheetsEntry(OUString const& rString, css::uno::Reference<css::uno::XInterface> const& xObject)
: DocumentModelTreeEntry(rString, xObject)
- , mxIndexAccess(xObject, uno::UNO_QUERY)
{
}
@@ -678,18 +674,20 @@ public:
bool shouldShowExpander() override
{
- return mxIndexAccess.is() && mxIndexAccess->getCount() > 0;
+ uno::Reference<container::XIndexAccess> xIndexAccess(getMainObject(), uno::UNO_QUERY);
+ return xIndexAccess.is() && xIndexAccess->getCount() > 0;
}
void fill(std::unique_ptr<weld::TreeView>& pDocumentModelTree,
weld::TreeIter const& rParent) override
{
- if (!mxIndexAccess.is())
+ uno::Reference<container::XIndexAccess> xIndexAccesss(getMainObject(), uno::UNO_QUERY);
+ if (!xIndexAccesss.is())
return;
- for (sal_Int32 i = 0; i < mxIndexAccess->getCount(); ++i)
+ for (sal_Int32 i = 0; i < xIndexAccesss->getCount(); ++i)
{
- uno::Reference<sheet::XSpreadsheet> xSheet(mxIndexAccess->getByIndex(i),
+ uno::Reference<sheet::XSpreadsheet> xSheet(xIndexAccesss->getByIndex(i),
uno::UNO_QUERY);
OUString aString = lclGetNamed(xSheet);
if (aString.isEmpty())
More information about the Libreoffice-commits
mailing list