summaryrefslogtreecommitdiff
path: root/sfx2/source/sidebar
diff options
context:
space:
mode:
authorMichael Stahl <mstahl@redhat.com>2015-07-13 18:54:17 +0200
committerMichael Stahl <mstahl@redhat.com>2015-07-14 11:50:44 +0200
commit9be8c4f21200aeec5b334d9536b3b7a0b72c24fa (patch)
tree43df9f096d1c16a397e56460d458406d1b9cece3 /sfx2/source/sidebar
parenta792aa2c48490e43f7460c7418048d32dc891a62 (diff)
sfx2: remove the global SidebarController::maSidebarControllerContainer
This global was crashing on exit, unsurprising as it contains UNO services that reference VCL objects. It turns out that there is already a UNO singleton framework::ContextChangeEventMultiplexer that effectively contains this mapping already, so try to hook that up without creating a public API of it, which is made quite a bit harder by framework's inexplicable multitude of libraries. Change-Id: I4baf67b42c630191fa8879d650eeb62520c331a5
Diffstat (limited to 'sfx2/source/sidebar')
-rw-r--r--sfx2/source/sidebar/SidebarController.cxx27
1 files changed, 7 insertions, 20 deletions
diff --git a/sfx2/source/sidebar/SidebarController.cxx b/sfx2/source/sidebar/SidebarController.cxx
index 403a40b443e3..38310235c7e1 100644
--- a/sfx2/source/sidebar/SidebarController.cxx
+++ b/sfx2/source/sidebar/SidebarController.cxx
@@ -35,6 +35,7 @@
#include <sfx2/sfxsids.hrc>
#include <sfx2/titledockwin.hxx>
#include "sfxlocal.hrc"
+#include <framework/ContextChangeEventMultiplexerTunnel.hxx>
#include <vcl/floatwin.hxx>
#include <vcl/fixed.hxx>
#include "splitwin.hxx"
@@ -71,8 +72,6 @@ namespace
namespace sfx2 { namespace sidebar {
-SidebarController::SidebarControllerContainer SidebarController::maSidebarControllerContainer;
-
namespace {
enum MenuId
{
@@ -150,15 +149,13 @@ SidebarController::~SidebarController()
SidebarController* SidebarController::GetSidebarControllerForFrame (
const css::uno::Reference<css::frame::XFrame>& rxFrame)
{
- SidebarControllerContainer::iterator iEntry (maSidebarControllerContainer.find(rxFrame->getController()));
- if (iEntry == maSidebarControllerContainer.end())
- return NULL;
-
- css::uno::Reference<XInterface> xController (iEntry->second.get());
- if ( ! xController.is())
- return NULL;
+ uno::Reference<ui::XContextChangeEventListener> const xListener(
+ framework::GetFirstListenerWith(rxFrame->getController(),
+ [] (uno::Reference<uno::XInterface> const& xRef)
+ { return nullptr != dynamic_cast<SidebarController*>(xRef.get()); }
+ ));
- return dynamic_cast<SidebarController*>(xController.get());
+ return dynamic_cast<SidebarController*>(xListener.get());
}
void SidebarController::registerSidebarForFrame(SidebarController* pController, css::uno::Reference<css::frame::XController> xController)
@@ -171,20 +168,10 @@ void SidebarController::registerSidebarForFrame(SidebarController* pController,
xMultiplexer->addContextChangeEventListener(
static_cast<css::ui::XContextChangeEventListener*>(pController),
xController);
-
- WeakReference<SidebarController> xWeakController (pController);
- maSidebarControllerContainer.insert(
- SidebarControllerContainer::value_type(
- xController,
- xWeakController));
}
void SidebarController::unregisterSidebarForFrame(SidebarController* pController, css::uno::Reference<css::frame::XController> xController)
{
- SidebarControllerContainer::iterator iEntry (maSidebarControllerContainer.find(xController));
- if (iEntry != maSidebarControllerContainer.end())
- maSidebarControllerContainer.erase(iEntry);
-
css::uno::Reference<css::ui::XContextChangeEventMultiplexer> xMultiplexer (
css::ui::ContextChangeEventMultiplexer::get(
::comphelper::getProcessComponentContext()));