diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2022-12-13 13:42:10 +0100 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2022-12-16 20:17:34 +0000 |
commit | 88b4f966202717cd4ad38a30a8eda22c3e69ed35 (patch) | |
tree | 8e6f6d482af83efb6ad830a7d6d34e9c28cf84d3 | |
parent | f1b7a69b280aefe2f1b3b0f32193494fd765f2bd (diff) |
loplugin:unocast (sfx2::sidebar::SidebarController)
(See the upcoming commit introducing that loplugin:unocast on why such
dynamic_casts from UNO types are dangerous.)
Change-Id: Ib681b4eaa44c65b9da5988c74c03f1829e3a1507
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/144334
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
-rw-r--r-- | chart2/source/controller/main/ChartController.cxx | 4 | ||||
-rw-r--r-- | include/sfx2/sidebar/SidebarController.hxx | 7 | ||||
-rw-r--r-- | sfx2/source/sidebar/SidebarController.cxx | 16 |
3 files changed, 21 insertions, 6 deletions
diff --git a/chart2/source/controller/main/ChartController.cxx b/chart2/source/controller/main/ChartController.cxx index 1a59bb161ec3..2ba57aa45d33 100644 --- a/chart2/source/controller/main/ChartController.cxx +++ b/chart2/source/controller/main/ChartController.cxx @@ -377,7 +377,7 @@ void SAL_CALL ChartController::attachFrame( uno::Reference<ui::XSidebar> xSidebar = getSidebarFromModel(getChartModel()); if (xSidebar.is()) { - auto pSidebar = dynamic_cast<sfx2::sidebar::SidebarController*>(xSidebar.get()); + auto pSidebar = comphelper::getFromUnoTunnel<sfx2::sidebar::SidebarController>(xSidebar); assert(pSidebar); pSidebar->registerSidebarForFrame(this); pSidebar->updateModel(getChartModel()); @@ -761,7 +761,7 @@ void SAL_CALL ChartController::dispose() if (getModel().is()) { uno::Reference<ui::XSidebar> xSidebar = getSidebarFromModel(getChartModel()); - if (sfx2::sidebar::SidebarController* pSidebar = dynamic_cast<sfx2::sidebar::SidebarController*>(xSidebar.get())) + if (sfx2::sidebar::SidebarController* pSidebar = comphelper::getFromUnoTunnel<sfx2::sidebar::SidebarController>(xSidebar)) { pSidebar->unregisterSidebarForFrame(this); } diff --git a/include/sfx2/sidebar/SidebarController.hxx b/include/sfx2/sidebar/SidebarController.hxx index 208af98b2fc2..be0a12b3a671 100644 --- a/include/sfx2/sidebar/SidebarController.hxx +++ b/include/sfx2/sidebar/SidebarController.hxx @@ -33,6 +33,7 @@ #include <com/sun/star/beans/XPropertyChangeListener.hpp> #include <com/sun/star/frame/XStatusListener.hpp> #include <com/sun/star/frame/XFrameActionListener.hpp> +#include <com/sun/star/lang/XUnoTunnel.hpp> #include <com/sun/star/ui/XContextChangeEventListener.hpp> #include <com/sun/star/ui/XSidebar.hpp> @@ -48,7 +49,8 @@ typedef comphelper::WeakComponentImplHelper < css::beans::XPropertyChangeListener, css::ui::XSidebar, css::frame::XStatusListener, - css::frame::XFrameActionListener + css::frame::XFrameActionListener, + css::lang::XUnoTunnel > SidebarControllerInterfaceBase; class SfxSplitWindow; @@ -175,6 +177,9 @@ public: static SidebarController* GetSidebarControllerForView(const SfxViewShell* pViewShell); + sal_Int64 SAL_CALL getSomething(css::uno::Sequence<sal_Int8> const & aIdentifier) override; + static css::uno::Sequence<sal_Int8> const & getUnoTunnelId(); + private: SidebarController(SidebarDockingWindow* pParentWindow, const SfxViewFrame* pViewFrame); diff --git a/sfx2/source/sidebar/SidebarController.cxx b/sfx2/source/sidebar/SidebarController.cxx index a35bb1f7488c..550b1e8cc5d7 100644 --- a/sfx2/source/sidebar/SidebarController.cxx +++ b/sfx2/source/sidebar/SidebarController.cxx @@ -41,6 +41,7 @@ #include <vcl/svapp.hxx> #include <splitwin.hxx> #include <comphelper/diagnose_ex.hxx> +#include <comphelper/servicehelper.hxx> #include <tools/json_writer.hxx> #include <tools/link.hxx> #include <toolkit/helper/vclunohelper.hxx> @@ -186,10 +187,10 @@ SidebarController* SidebarController::GetSidebarControllerForFrame ( ::comphelper::getProcessComponentContext(), xController, [] (uno::Reference<uno::XInterface> const& xRef) - { return nullptr != dynamic_cast<SidebarController*>(xRef.get()); } + { return nullptr != comphelper::getFromUnoTunnel<SidebarController>(xRef); } )); - return dynamic_cast<SidebarController*>(xListener.get()); + return comphelper::getFromUnoTunnel<SidebarController>(xListener); } void SidebarController::registerSidebarForFrame(const css::uno::Reference<css::frame::XController>& xController) @@ -1646,7 +1647,16 @@ sfx2::sidebar::SidebarController* SidebarController::GetSidebarControllerForView if (!xSidebar.is()) return nullptr; - return dynamic_cast<sfx2::sidebar::SidebarController*>(xSidebar.get()); + return comphelper::getFromUnoTunnel<sfx2::sidebar::SidebarController>(xSidebar); +} + +sal_Int64 SidebarController::getSomething(css::uno::Sequence<sal_Int8> const & aIdentifier) { + return comphelper::getSomethingImpl(aIdentifier, this); +} + +css::uno::Sequence<sal_Int8> const & SidebarController::getUnoTunnelId() { + static comphelper::UnoIdInit const id; + return id.getSeq(); } } // end of namespace sfx2::sidebar |