hi christian,
So in order to see what is giving you problems, it would be nice to catch a glimpse at the relevant code portion(s).
I have some code for my installation of the XDropTargetListener since the other problem is resolved (see attachment). This thing is really mysterious to me. If I dont install a DropTargetListener everything works fine. I would expect that after a PrintPreview, where the DropTargetListener is removed completely and destroyed (see log snippet below), everything should work too. But even with removed DropTargetListener SWriter crashes *whenever* I insert a table into a TextFrame . // some logfile with accompanying commentary ### File->PrintPreview OOoDocumentEventListener::notifyEvent OnViewClosed OOoDropTargetListener::disposing OOoDropTargetListener::disposing OOoDropTargetListener::disposing OOoDropTargetListener::disposing OOoDropTargetListener::disposing OOoDropTargetListener::disposing OOoDropTargetListener::disposing OOoDropTargetListener::disposing OOoDropTargetListener::disposing OOoDropTargetListener::~OOoDropTargetListener ### close print preview OOoDocumentEventListener::notifyEvent OnViewClosed ### Insert->TexFrame OOoDocumentEventListener::notifyEvent TitleChanged OOoDocumentEventListener::notifyEvent OnModifyChanged OOoDocumentEventListener::notifyEvent TitleChanged OOoDocumentEventListener::notifyEvent OnModifyChanged OOoDocumentEventListener::notifyEvent TitleChanged OOoDocumentEventListener::notifyEvent OnModifyChanged ### Cursor is in TextFrame ### Insert Table into TextFrame OOoDocumentEventListener::~OOoDocumentEventListener ### SWriter is gone I will try to reduce my app to a minimum example. thanks, Sascha
/****************************************************************************************** those are the relevant methods from the window class that integrates OOo (SWriter) ******************************************************************************************/ /* function to create an OOo Window */ void OOoIntegrationWindow::createOOoWindow() { /* ... snip ... */ _dropTargetListener = new OOoDropTargetListener(ctx); // class member // get the Accessible API and run through ut to install listeners ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > accessibleWindow ( _xwindow, ::com::sun::star::uno::UNO_QUERY); if( accessibleWindow.is()) _accessibilityRunner(accessibleWindow, false); /* ... snip ... */ } /* install the dropTargetListener for a specific XWindow */ void OOoIntegrationWindow::installDropTargetListenerForWindow( ::com::sun::star::uno::Reference<::com::sun::star::awt::XWindow> window) { // the Toolkit is also XDataTransferProviderAccess where we can receive the DropTarget for our window ::com::sun::star::uno::Reference< ::com::sun::star::awt::XDataTransferProviderAccess > xDataTransferPA (_xtoolkit, ::com::sun::star::uno::UNO_QUERY); // get the OleDropTarget Service for our OpenOffice.org window (_xwindow) ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::dnd::XDropTarget > xDropTarget = xDataTransferPA->getDropTarget(window); ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::dnd::XDropTargetListener> xdropTargetListener (_dropTargetListener); if( xdropTargetListener.is()) { // add DropTargetListener xDropTarget->addDropTargetListener(xdropTargetListener); xDropTarget->setActive(sal_True); } } } /* This functions runs through the accessibility tree. It calls installDropTargetListenerForWindow for each window below and including the one with the AccessibleRole SCROLL_PANE. The XWindow´s are either the XAccessible itself or if the XAccessible offers a XVclContainer interface children of it. */ void OOoIntegrationWindow::_accessibilityRunner( ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > accessible, bool install) { ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > context = accessible->getAccessibleContext(); // info about the context (name / description /childcount ) sal_Int32 childCount = context->getAccessibleChildCount(); bool doInstall = false; if( install != true) { ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > accessibleParent = context->getAccessibleParent(); /*if( accessibleParent.is()) { ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > pContext = accessibleParent->getAccessibleContext(); if( pContext->getAccessibleRole() == com::sun::star::accessibility::AccessibleRole::SCROLL_PANE) { install = true; } }*/ if ( context->getAccessibleRole() == com::sun::star::accessibility::AccessibleRole::SCROLL_PANE) { doInstall = true; } } if( doInstall == true ) { ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow > win(accessible, ::com::sun::star::uno::UNO_QUERY ); if( install == true && win.is()) { // install a DropTargetListener for the window installDropTargetListenerForWindow( win ); } ::com::sun::star::uno::Reference< ::com::sun::star::awt::XVclContainer > container( accessible, ::com::sun::star::uno::UNO_QUERY ); if( container.is()) { ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow > > theWindows = container->getWindows(); sal_Int32 winCount = theWindows.getLength(); for ( sal_Int32 i=0; i < winCount ; i++) { ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow > aWindow = theWindows[i]; // install a DropTargetListener for the window installDropTargetListenerForWindow( aWindow ); } } } // children for( sal_Int32 index = 0; index < childCount; index ++) { ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > accessibleChild = context->getAccessibleChild(index); _accessibilityRunner(accessibleChild, doInstall); } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]