summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--compilerplugins/clang/referencecasting.cxx3
-rw-r--r--toolkit/source/controls/stdtabcontroller.cxx16
2 files changed, 12 insertions, 7 deletions
diff --git a/compilerplugins/clang/referencecasting.cxx b/compilerplugins/clang/referencecasting.cxx
index 45b65d3e7f26..ea69efbd0f83 100644
--- a/compilerplugins/clang/referencecasting.cxx
+++ b/compilerplugins/clang/referencecasting.cxx
@@ -43,6 +43,9 @@ public:
// macros
if (fn == SRCDIR "/dbaccess/source/ui/browser/formadapter.cxx")
return false;
+ // UNO aggregation
+ if (fn == SRCDIR "/toolkit/source/controls/stdtabcontroller.cxx")
+ return false;
return true;
}
diff --git a/toolkit/source/controls/stdtabcontroller.cxx b/toolkit/source/controls/stdtabcontroller.cxx
index b989f3f5a8e5..858047012a7a 100644
--- a/toolkit/source/controls/stdtabcontroller.cxx
+++ b/toolkit/source/controls/stdtabcontroller.cxx
@@ -303,17 +303,19 @@ void StdTabController::activateTabOrder( )
if ( !xC.is() || !xVclContainerPeer.is() )
return;
+ // This may return a TabController, which returns desired list of controls faster
+ // (the dreaded UNO aggregration, retrieve the thing that we are part of)
+ Reference<XTabController> xTabController( static_cast<XTabController*>(this), UNO_QUERY );
+
// Get a flattened list of controls sequences
Sequence< Reference< XControlModel > > aModels = mxModel->getControlModels();
Sequence< Reference< XWindow > > aCompSeq;
Sequence< Any> aTabSeq;
- // Previously used aControls = xTabController->getControls() "for the sake of optimization",
- // but that list isn't valid during the creation phase (missing last created control) because
- // listenermultiplexer.cxx handles fmvwimp::elementinserted before formcontroller::elementInserted
- // Perhaps other places using the same optimization need to be reviewed? (tdf#125609)
- Sequence< Reference< XControl > > aCachedControls = getControls();
- Sequence< Reference< XControl > > aControls = aCachedControls;
+ // DG: For the sake of optimization, retrieve Controls from getControls(),
+ // this may sound counterproductive, but leads to performance improvements
+ // in practical scenarios (Forms)
+ Sequence< Reference< XControl > > aControls = xTabController->getControls();
// #58317# Some Models may be missing from the Container. Plus there is a
// autoTabOrder call later on.
@@ -331,7 +333,7 @@ void StdTabController::activateTabOrder( )
{
mxModel->getGroup( nG, aThisGroupModels, aName );
- aControls = aCachedControls;
+ aControls = xTabController->getControls();
// ImplCreateComponentSequence has a really strange semantics regarding it's first parameter:
// upon method entry, it expects a super set of the controls which it returns
// this means we need to completely fill this sequence with all available controls before