summaryrefslogtreecommitdiff
path: root/framework/source/uielement/resourcemenucontroller.cxx
diff options
context:
space:
mode:
authorMaxim Monastirsky <momonasmon@gmail.com>2016-08-28 20:55:55 +0300
committerMaxim Monastirsky <momonasmon@gmail.com>2016-08-28 21:08:31 +0300
commit6bf7d1d0f69097b267d348d8d264e9b669f423a0 (patch)
tree8ac2a055b4395c60a53e739ff2923e94e0c7df86 /framework/source/uielement/resourcemenucontroller.cxx
parent854dfdc9446629a0721bab15fbe6c2dcdf689dac (diff)
ResourceMenuController: Better error handling
This should stop crashes in framework::MenuBarManager::FillMenu as seen in crashreport. Unfortunately no idea how to reproduce those crashes other than corrupting the installation (e.g. removing files). Change-Id: Iaed8e888dd74c4c1bb5d6fd7996ecf80f4645b68
Diffstat (limited to 'framework/source/uielement/resourcemenucontroller.cxx')
-rw-r--r--framework/source/uielement/resourcemenucontroller.cxx30
1 files changed, 22 insertions, 8 deletions
diff --git a/framework/source/uielement/resourcemenucontroller.cxx b/framework/source/uielement/resourcemenucontroller.cxx
index 47c3f1ccd0f8..cfb2d839b565 100644
--- a/framework/source/uielement/resourcemenucontroller.cxx
+++ b/framework/source/uielement/resourcemenucontroller.cxx
@@ -159,14 +159,28 @@ void ResourceMenuController::updatePopupMenu()
{}
}
- if ( !m_xMenuContainer.is() )
+ if ( !m_xMenuContainer.is() && m_xConfigManager.is() )
{
try
{
- if ( m_xConfigManager.is() && m_xConfigManager->hasSettings( m_aMenuURL ) )
- m_xMenuContainer.set( m_xConfigManager->getSettings( m_aMenuURL, false ) );
- else if ( m_xModuleConfigManager.is() && m_xModuleConfigManager->hasSettings( m_aMenuURL ) )
- m_xMenuContainer.set( m_xModuleConfigManager->getSettings( m_aMenuURL, false ) );
+ m_xMenuContainer.set( m_xConfigManager->getSettings( m_aMenuURL, false ) );
+ }
+ catch ( const css::container::NoSuchElementException& )
+ {
+ // Not an error - element may exist only in the module.
+ }
+ catch ( const css::lang::IllegalArgumentException& )
+ {
+ SAL_WARN( "fwk.uielement", "The given URL is not valid: " << m_aMenuURL );
+ return;
+ }
+ }
+
+ if ( !m_xMenuContainer.is() && m_xModuleConfigManager.is() )
+ {
+ try
+ {
+ m_xMenuContainer.set( m_xModuleConfigManager->getSettings( m_aMenuURL, false ) );
}
catch ( const css::container::NoSuchElementException& )
{
@@ -180,6 +194,9 @@ void ResourceMenuController::updatePopupMenu()
}
}
+ if ( !m_xMenuContainer.is() )
+ return;
+
// Clear previous content.
if ( m_xMenuBarManager.is() )
{
@@ -245,9 +262,6 @@ void ResourceMenuController::addVerbs( const css::uno::Sequence< css::embed::Ver
void ResourceMenuController::fillToolbarData()
{
- if ( !m_xMenuContainer.is() )
- return;
-
VCLXMenu* pAwtMenu = VCLXMenu::GetImplementation( m_xPopupMenu );
Menu* pVCLMenu = pAwtMenu->GetMenu();