diff options
-rw-r--r-- | compilerplugins/clang/referencecasting.cxx | 3 | ||||
-rw-r--r-- | toolkit/source/controls/stdtabcontroller.cxx | 16 |
2 files changed, 12 insertions, 7 deletions
diff --git a/compilerplugins/clang/referencecasting.cxx b/compilerplugins/clang/referencecasting.cxx index 33997cdb458d..f23e2f6811cd 100644 --- a/compilerplugins/clang/referencecasting.cxx +++ b/compilerplugins/clang/referencecasting.cxx @@ -44,6 +44,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 b0c6142476b0..0fa0f96f965c 100644 --- a/toolkit/source/controls/stdtabcontroller.cxx +++ b/toolkit/source/controls/stdtabcontroller.cxx @@ -306,17 +306,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. @@ -334,7 +336,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 |