summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2022-12-13 13:42:10 +0100
committerStephan Bergmann <sbergman@redhat.com>2022-12-16 20:17:34 +0000
commit88b4f966202717cd4ad38a30a8eda22c3e69ed35 (patch)
tree8e6f6d482af83efb6ad830a7d6d34e9c28cf84d3
parentf1b7a69b280aefe2f1b3b0f32193494fd765f2bd (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.cxx4
-rw-r--r--include/sfx2/sidebar/SidebarController.hxx7
-rw-r--r--sfx2/source/sidebar/SidebarController.cxx16
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