On 03/08/11 11:08, Noel Power wrote:
( /me must remember to reply-all )
Hi Lubos
On 02/08/11 13:58, Lubos Lunak wrote:
Hello,
last week .docx support was broken because of a mistake during the
gbuild
changes and I wasted quite some time finding out what was wrong. As
something
similar had happened to me already
same for me ( too many times )
before I'd like to apply the attached
patches. However I have some issues with it:
- the error dialog that pops up just says 'General error. General
input/output
error.', which is completely unhelpful, however I don't feel like
digging
more for how to pass the information as far as the place where the
dialog is
shown,
hmm I think it would be nicer to handle at least the
CannotActivateFactoryException problems from the filter instatiations
and pop a dialog ( debug output to terminal especially on weirdy
windows is not the best way to see this problem ), I vaguely recall
the twisted mechanism for getting some dialogs to pop with the
interaction handler stuff, I will have a look
maybe this patch is useful to you, it has the disadvantage of creating
the needed error dialog but then it also pops up the "General Error" one
after that. I contemplated throwing ( well I actually half implemented
it but gave up ) the exception up to allow SfxBaseModel::load to handle
it but it appears there is all sorts of stuff inbetween that runs ( not
expecting an exception ). Not passing an exception but setting a new (
or reusing an existing ) ERROR_IO_xxx ( or something ) also has
problems like you can't easily ( or at all ) pass the error message,
also I suppose you could use such a new error type to suppress the
second 'General Error' but in the end it all just seemed too much
trouble for what probably is just something you want in debug ( I guess )
So.. anyway patch attached if you think it might be useful, feel free to
use/disregard/change totally etc.
Noel
diff --git sfx2/source/doc/objstor.cxx sfx2/source/doc/objstor.cxx
index 31ee8f0..0716a48 100644
--- sfx2/source/doc/objstor.cxx
+++ sfx2/source/doc/objstor.cxx
@@ -75,6 +75,8 @@
#include <com/sun/star/document/XDocumentProperties.hpp>
#include <com/sun/star/document/XDocumentPropertiesSupplier.hpp>
+#include <com/sun/star/loader/CannotActivateFactoryException.hpp>
+
#include <comphelper/processfactory.hxx>
#include <comphelper/configurationhelper.hxx>
#include <comphelper/interaction.hxx>
@@ -102,6 +104,7 @@
#include <comphelper/seqstream.hxx>
#include <comphelper/documentconstants.hxx>
#include <comphelper/string.hxx>
+#include <comphelper/interaction.hxx>
#include <vcl/bitmapex.hxx>
#include <svtools/embedhlp.hxx>
#include <rtl/logfile.hxx>
@@ -153,6 +156,33 @@ using namespace ::cppu;
namespace css = ::com::sun::star;
//=========================================================================
+class FilterActivationHandlerHelper
+{
+ uno::Reference< XInteractionHandler > mxHandler;
+public:
+ FilterActivationHandlerHelper( SfxMedium& rMedium)
+ {
+ mxHandler = rMedium.GetInteractionHandler();
+ }
+ void handleException( const loader::CannotActivateFactoryException& e )
+ {
+// not sure if we want this in non debug builds
+//#if OSL_DEBUG_LEVEL > 0
+ if ( mxHandler.is() )
+ {
+ comphelper::OInteractionRequest* pReq = new comphelper::OInteractionRequest( uno::makeAny( e ) );
+ pReq->addContinuation( new comphelper::OInteractionApprove() );
+ uno::Reference< task::XInteractionRequest > xReq( pReq );
+ mxHandler->handle( xReq );
+ }
+ else
+ {
+ OSL_TRACE("Caught CannotActivateFactoryException: %s", rtl::OUStringToOString( e.Message, RTL_TEXTENCODING_UTF8 ).getStr());
+ }
+//#endif
+ }
+};
+
void impl_addToModelCollection(const css::uno::Reference< css::frame::XModel >& xModel)
{
if (!xModel.is())
@@ -2186,7 +2216,13 @@ sal_Bool SfxObjectShell::ImportFrom( SfxMedium& rMedium, bool bInsert )
try{
xLoader = uno::Reference< document::XFilter >
( xFilterFact->createInstanceWithArguments( aFilterName, uno::Sequence < uno::Any >() ), uno::UNO_QUERY );
- }catch(const uno::Exception&)
+ }
+ catch(const loader::CannotActivateFactoryException& e )
+ {
+ FilterActivationHandlerHelper helper( rMedium );
+ helper.handleException( e );
+ }
+ catch(const uno::Exception& e)
{ xLoader.clear(); }
}
if ( xLoader.is() )
@@ -2281,6 +2317,11 @@ sal_Bool SfxObjectShell::ExportTo( SfxMedium& rMedium )
try{
xExporter = uno::Reference< document::XExporter >
( xFilterFact->createInstanceWithArguments( aFilterName, uno::Sequence < uno::Any >() ), uno::UNO_QUERY );
+ }
+ catch(const loader::CannotActivateFactoryException& e )
+ {
+ FilterActivationHandlerHelper helper( rMedium );
+ helper.handleException( e );
}catch(const uno::Exception&)
{ xExporter.clear(); }
}
_______________________________________________
LibreOffice mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/libreoffice