diff options
-rw-r--r-- | cui/source/dialogs/scriptdlg.cxx | 54 | ||||
-rw-r--r-- | cui/source/factory/dlgfact.cxx | 4 | ||||
-rw-r--r-- | cui/source/factory/dlgfact.hxx | 2 | ||||
-rw-r--r-- | cui/source/inc/scriptdlg.hxx | 14 | ||||
-rw-r--r-- | include/sfx2/sfxdlg.hxx | 2 | ||||
-rw-r--r-- | include/svx/svxdlg.hxx | 2 | ||||
-rw-r--r-- | scripting/source/protocolhandler/scripthandler.cxx | 4 | ||||
-rw-r--r-- | sfx2/source/doc/objmisc.cxx | 4 |
8 files changed, 29 insertions, 57 deletions
diff --git a/cui/source/dialogs/scriptdlg.cxx b/cui/source/dialogs/scriptdlg.cxx index 3ce12bccf290..ed09844aa771 100644 --- a/cui/source/dialogs/scriptdlg.cxx +++ b/cui/source/dialogs/scriptdlg.cxx @@ -59,12 +59,6 @@ using namespace css::script; using namespace css::frame; using namespace css::document; -static void ShowErrorDialog( const Any& aException ) -{ - ScopedVclPtrInstance<SvxScriptErrorDialog> pDlg( aException ); - pDlg->Execute(); -} - void SvxScriptOrgDialog::delUserData(const weld::TreeIter& rIter) { SFEntry* pUserData = reinterpret_cast<SFEntry*>(m_xScriptsBox->get_id(rIter).toInt64()); @@ -626,19 +620,19 @@ IMPL_LINK(SvxScriptOrgDialog, ButtonHdl, weld::Button&, rButton, void) } catch ( reflection::InvocationTargetException& ite ) { - ShowErrorDialog(css::uno::Any(ite)); + SvxScriptErrorDialog::ShowAsyncErrorDialog(getDialog(), css::uno::Any(ite)); } catch ( provider::ScriptFrameworkErrorException& ite ) { - ShowErrorDialog(css::uno::Any(ite)); + SvxScriptErrorDialog::ShowAsyncErrorDialog(getDialog(), css::uno::Any(ite)); } catch ( RuntimeException& re ) { - ShowErrorDialog(css::uno::Any(re)); + SvxScriptErrorDialog::ShowAsyncErrorDialog(getDialog(), css::uno::Any(re)); } catch ( Exception& e ) { - ShowErrorDialog(css::uno::Any(e)); + SvxScriptErrorDialog::ShowAsyncErrorDialog(getDialog(), css::uno::Any(e)); } } StoreCurrentSelection(); @@ -1300,50 +1294,34 @@ OUString GetErrorMessage( const css::uno::Any& aException ) } -SvxScriptErrorDialog::SvxScriptErrorDialog( css::uno::Any const & aException ) - : m_sMessage() +// Show Error dialog asynchronously +void SvxScriptErrorDialog::ShowAsyncErrorDialog( weld::Window* pParent, css::uno::Any const & aException ) { SolarMutexGuard aGuard; - m_sMessage = GetErrorMessage( aException ); -} - -SvxScriptErrorDialog::~SvxScriptErrorDialog() -{ -} - -short SvxScriptErrorDialog::Execute() -{ - // Show Error dialog asynchronously + OUString sMessage = GetErrorMessage( aException ); // Pass a copy of the message to the ShowDialog method as the // SvxScriptErrorDialog may be deleted before ShowDialog is called + DialogData* pData = new DialogData; + pData->sMessage = sMessage; + pData->pParent = pParent; Application::PostUserEvent( - LINK( this, SvxScriptErrorDialog, ShowDialog ), - new OUString( m_sMessage ) ); - - return 0; + LINK( nullptr, SvxScriptErrorDialog, ShowDialog ), + pData ); } IMPL_STATIC_LINK( SvxScriptErrorDialog, ShowDialog, void*, p, void ) { - OUString* pMessage = static_cast<OUString*>(p); - OUString message; + std::unique_ptr<DialogData> xData(static_cast<DialogData*>(p)); + OUString message = xData->sMessage; - if ( pMessage && !pMessage->isEmpty() ) - { - message = *pMessage; - } - else - { + if ( message.isEmpty() ) message = CuiResId( RID_SVXSTR_ERROR_TITLE ); - } - std::unique_ptr<weld::MessageDialog> xBox(Application::CreateMessageDialog(nullptr, + std::unique_ptr<weld::MessageDialog> xBox(Application::CreateMessageDialog(xData->pParent, VclMessageType::Warning, VclButtonsType::Ok, message)); xBox->set_title(CuiResId(RID_SVXSTR_ERROR_TITLE)); xBox->run(); - - delete pMessage; } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/cui/source/factory/dlgfact.cxx b/cui/source/factory/dlgfact.cxx index 40102bae726a..5784e4e31fc1 100644 --- a/cui/source/factory/dlgfact.cxx +++ b/cui/source/factory/dlgfact.cxx @@ -1123,9 +1123,9 @@ VclPtr<VclAbstractDialog> AbstractDialogFactory_Impl::CreateActualizeProgressDia return VclPtr<CuiAbstractController_Impl>::Create(std::make_unique<ActualizeProgress>(pParent, pThm)); } -VclPtr<VclAbstractDialog> AbstractDialogFactory_Impl::CreateScriptErrorDialog(const css::uno::Any& rException) +void AbstractDialogFactory_Impl::ShowAsyncScriptErrorDialog(weld::Window* pParent, const css::uno::Any& rException) { - return VclPtr<SvxScriptErrorDialog>::Create(rException); + return SvxScriptErrorDialog::ShowAsyncErrorDialog(pParent, rException); } VclPtr<AbstractScriptSelectorDialog> AbstractDialogFactory_Impl::CreateScriptSelectorDialog(weld::Window* pParent, diff --git a/cui/source/factory/dlgfact.hxx b/cui/source/factory/dlgfact.hxx index 4f54b03f91d4..89f9ef88a824 100644 --- a/cui/source/factory/dlgfact.hxx +++ b/cui/source/factory/dlgfact.hxx @@ -930,7 +930,7 @@ public: virtual VclPtr<AbstractScriptSelectorDialog> CreateScriptSelectorDialog(weld::Window* pParent, const css::uno::Reference< css::frame::XFrame >& rxFrame) override; - virtual VclPtr<VclAbstractDialog> CreateScriptErrorDialog(const css::uno::Any& rException) override; + virtual void ShowAsyncScriptErrorDialog(weld::Window* pParent, const css::uno::Any& rException) override; virtual VclPtr<VclAbstractDialog> CreateSvxMacroAssignDlg( weld::Window* _pParent, diff --git a/cui/source/inc/scriptdlg.hxx b/cui/source/inc/scriptdlg.hxx index dc2e771b9187..8e66fed69a04 100644 --- a/cui/source/inc/scriptdlg.hxx +++ b/cui/source/inc/scriptdlg.hxx @@ -150,21 +150,19 @@ public: virtual short run() override; }; -class SvxScriptErrorDialog : public VclAbstractDialog +class SvxScriptErrorDialog { private: - - OUString m_sMessage; + struct DialogData { + weld::Window* pParent; + OUString sMessage; + }; DECL_STATIC_LINK( SvxScriptErrorDialog, ShowDialog, void*, void ); public: - SvxScriptErrorDialog( css::uno::Any const & aException ); - - virtual ~SvxScriptErrorDialog() override; - - short Execute() override; + static void ShowAsyncErrorDialog( weld::Window* pParent, css::uno::Any const & aException ); }; #endif // INCLUDED_CUI_SOURCE_INC_SCRIPTDLG_HXX diff --git a/include/sfx2/sfxdlg.hxx b/include/sfx2/sfxdlg.hxx index 6d03dc0f80b0..26378ffb754c 100644 --- a/include/sfx2/sfxdlg.hxx +++ b/include/sfx2/sfxdlg.hxx @@ -139,7 +139,7 @@ public: virtual VclPtr<AbstractScriptSelectorDialog> CreateScriptSelectorDialog(weld::Window* pParent, const css::uno::Reference< css::frame::XFrame >& rxFrame) = 0; - virtual VclPtr<VclAbstractDialog> CreateScriptErrorDialog( const css::uno::Any& rException ) = 0; + virtual void ShowAsyncScriptErrorDialog( weld::Window* pParent, const css::uno::Any& rException ) = 0; virtual VclPtr<VclAbstractDialog> CreateOptionsDialog( weld::Window* pParent, const OUString& rExtensionId ) = 0; diff --git a/include/svx/svxdlg.hxx b/include/svx/svxdlg.hxx index 7fb3767ad742..c07db29b516f 100644 --- a/include/svx/svxdlg.hxx +++ b/include/svx/svxdlg.hxx @@ -440,7 +440,7 @@ public: virtual VclPtr<AbstractScriptSelectorDialog> CreateScriptSelectorDialog(weld::Window* pParent, const css::uno::Reference< css::frame::XFrame >& rxFrame) override = 0; - virtual VclPtr<VclAbstractDialog> CreateScriptErrorDialog(const css::uno::Any& rException) override = 0; + virtual void ShowAsyncScriptErrorDialog(weld::Window* pParent, const css::uno::Any& rException) override = 0; virtual VclPtr<VclAbstractDialog> CreateSvxMacroAssignDlg( weld::Window* _pParent, diff --git a/scripting/source/protocolhandler/scripthandler.cxx b/scripting/source/protocolhandler/scripthandler.cxx index 74aecbeb1e5c..e55926952f70 100644 --- a/scripting/source/protocolhandler/scripthandler.cxx +++ b/scripting/source/protocolhandler/scripthandler.cxx @@ -261,9 +261,7 @@ void SAL_CALL ScriptProtocolHandler::dispatchWithNotification( if ( bCaughtException ) { SfxAbstractDialogFactory* pFact = SfxAbstractDialogFactory::Create(); - ScopedVclPtr<VclAbstractDialog> pDlg( - pFact->CreateScriptErrorDialog( aException )); - pDlg->Execute(); + pFact->ShowAsyncScriptErrorDialog( nullptr, aException ); } if ( !xListener.is() ) diff --git a/sfx2/source/doc/objmisc.cxx b/sfx2/source/doc/objmisc.cxx index e3e07dd5c306..e9adb018eae0 100644 --- a/sfx2/source/doc/objmisc.cxx +++ b/sfx2/source/doc/objmisc.cxx @@ -1435,9 +1435,7 @@ ErrCode SfxObjectShell::CallXScript( const Reference< XInterface >& _rxScriptCon if ( bCaughtException && bRaiseError ) { SfxAbstractDialogFactory* pFact = SfxAbstractDialogFactory::Create(); - ScopedVclPtr<VclAbstractDialog> pScriptErrDlg( pFact->CreateScriptErrorDialog( aException ) ); - if ( pScriptErrDlg ) - pScriptErrDlg->Execute(); + pFact->ShowAsyncScriptErrorDialog( nullptr, aException ); } SAL_INFO("sfx", "leaving CallXScript" ); |