sfx2/source/notebookbar/NotebookbarTabControl.cxx | 47 ++++++++++++++++------ 1 file changed, 36 insertions(+), 11 deletions(-)
New commits: commit 3a122347b9a47f1ff7103364e90b77bc605fafce Author: Szymon KÅos <eszka...@gmail.com> Date: Thu Mar 16 08:26:55 2017 +0100 Notebookbar: fixed crash after customization + removed listener + prevent from using invalid pointers Change-Id: I3a846d2344148456d3edba23296a4781496eba8b Reviewed-on: https://gerrit.libreoffice.org/35248 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Szymon KÅos <eszka...@gmail.com> diff --git a/sfx2/source/notebookbar/NotebookbarTabControl.cxx b/sfx2/source/notebookbar/NotebookbarTabControl.cxx index b4a9465..47a2300 100644 --- a/sfx2/source/notebookbar/NotebookbarTabControl.cxx +++ b/sfx2/source/notebookbar/NotebookbarTabControl.cxx @@ -53,17 +53,20 @@ public: { try { - Reference<XComponentContext> xContext = comphelper::getProcessComponentContext(); - const Reference<XModuleManager> xModuleManager = ModuleManager::create( xContext ); - Reference<XFrame> xFrame = SfxViewFrame::Current()->GetFrame().GetFrameInterface(); - OUString aModuleName = xModuleManager->identify( xFrame ); - - Reference<XUIConfigurationManager> m_xConfigManager; - Reference<XModuleUIConfigurationManagerSupplier > xModuleCfgMgrSupplier( - theModuleUIConfigurationManagerSupplier::get( xContext ) ); - m_xConfigManager.set( xModuleCfgMgrSupplier->getUIConfigurationManager( aModuleName ) ); - css::uno::Reference< css::ui::XUIConfiguration > xConfig( m_xConfigManager, css::uno::UNO_QUERY_THROW ); - xConfig->addConfigurationListener( this ); + if( SfxViewFrame::Current() ) + { + Reference<XComponentContext> xContext = comphelper::getProcessComponentContext(); + const Reference<XModuleManager> xModuleManager = ModuleManager::create( xContext ); + Reference<XFrame> xFrame = SfxViewFrame::Current()->GetFrame().GetFrameInterface(); + OUString aModuleName = xModuleManager->identify( xFrame ); + + Reference<XUIConfigurationManager> m_xConfigManager; + Reference<XModuleUIConfigurationManagerSupplier > xModuleCfgMgrSupplier( + theModuleUIConfigurationManagerSupplier::get( xContext ) ); + m_xConfigManager.set( xModuleCfgMgrSupplier->getUIConfigurationManager( aModuleName ) ); + css::uno::Reference< css::ui::XUIConfiguration > xConfig( m_xConfigManager, css::uno::UNO_QUERY_THROW ); + xConfig->addConfigurationListener( this ); + } } catch( const css::uno::RuntimeException& ) {} } @@ -90,6 +93,25 @@ public: virtual void SAL_CALL disposing(const ::css::lang::EventObject&) override { + try + { + if( SfxViewFrame::Current() ) + { + Reference<XComponentContext> xContext = comphelper::getProcessComponentContext(); + const Reference<XModuleManager> xModuleManager = ModuleManager::create( xContext ); + Reference<XFrame> xFrame = SfxViewFrame::Current()->GetFrame().GetFrameInterface(); + OUString aModuleName = xModuleManager->identify( xFrame ); + + Reference<XUIConfigurationManager> m_xConfigManager; + Reference<XModuleUIConfigurationManagerSupplier > xModuleCfgMgrSupplier( + theModuleUIConfigurationManagerSupplier::get( xContext ) ); + m_xConfigManager.set( xModuleCfgMgrSupplier->getUIConfigurationManager( aModuleName ) ); + css::uno::Reference< css::ui::XUIConfiguration > xConfig( m_xConfigManager, css::uno::UNO_QUERY_THROW ); + xConfig->removeConfigurationListener( this ); + } + } + catch( const css::uno::RuntimeException& ) {} + m_pParent.clear(); } }; @@ -130,6 +152,9 @@ void NotebookbarTabControl::StateChanged(StateChangedType nStateChange) if( m_bInitialized && m_bInvalidate && SfxViewFrame::Current() ) { ToolBox* pToolBox = GetToolBox(); + if( !pToolBox ) + return; + pToolBox->Clear(); Reference<XComponentContext> xContext = comphelper::getProcessComponentContext();
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits