dev/null |binary include/sfx2/sidebar/ResourceManager.hxx | 1 include/sfx2/sidebar/SidebarController.hxx | 2 include/svtools/acceleratorexecute.hxx | 28 ----- sfx2/source/sidebar/ResourceManager.cxx | 9 + sfx2/source/sidebar/SidebarController.cxx | 33 +----- svtools/source/misc/acceleratorexecute.cxx | 95 +++++++++---------- vcl/qa/afl-eventtesting/README.eventtesting | 24 ++++ vcl/qa/afl-eventtesting/eventtesting.impress |binary vcl/qa/afl-eventtesting/eventtesting.impress.crash-1 |binary vcl/qa/afl-eventtesting/eventtesting.writer |binary vcl/source/helper/evntpost.cxx | 1 vcl/workben/README.eventtesting | 24 ---- 13 files changed, 86 insertions(+), 131 deletions(-)
New commits: commit f80d42876af3808069ca5ea5fb758cf22777dbbc Author: Caolán McNamara <caol...@redhat.com> Date: Wed Oct 21 15:43:55 2015 +0100 drop unused stuff scheduled to be removed 'before the next major' Change-Id: I2162618d430cf8dc6bb8d20d9a5dd9af543fa934 diff --git a/include/svtools/acceleratorexecute.hxx b/include/svtools/acceleratorexecute.hxx index 975b44d..a4ef5d5 100644 --- a/include/svtools/acceleratorexecute.hxx +++ b/include/svtools/acceleratorexecute.hxx @@ -71,16 +71,6 @@ struct TMutexInit */ class SVT_DLLPUBLIC AcceleratorExecute : private TMutexInit { - - // const, types - private: - - /** @deprecated - replaced by internal class AsyncAccelExec ... - remove this resource here if we go forwards to next major */ - typedef ::std::vector< ::std::pair< css::util::URL, css::uno::Reference< css::frame::XDispatch > > > TCommandQueue; - - // member private: @@ -97,18 +87,6 @@ class SVT_DLLPUBLIC AcceleratorExecute : private TMutexInit css::uno::Reference< css::ui::XAcceleratorConfiguration > m_xGlobalCfg; css::uno::Reference< css::ui::XAcceleratorConfiguration > m_xModuleCfg; css::uno::Reference< css::ui::XAcceleratorConfiguration > m_xDocCfg; - - /** @deprecated - replaced by internal class AsyncAccelExec ... - remove this resource here if we go forwards to next major */ - TCommandQueue m_lCommandQueue; - - /** @deprecated - replaced by internal class AsyncAccelExec ... - remove this resource here if we go forwards to next major */ - vcl::EventPoster m_aAsyncCallback; - - // interface public: @@ -227,12 +205,6 @@ class SVT_DLLPUBLIC AcceleratorExecute : private TMutexInit /** TODO document me */ SVT_DLLPRIVATE css::uno::Reference< css::util::XURLTransformer > impl_ts_getURLParser(); - - - /** @deprecated - replaced by internal class AsyncAccelExec ... - remove this resource here if we go forwards to next major */ - DECL_DLLPRIVATE_LINK_TYPED(impl_ts_asyncCallback, LinkParamNone*, void); }; } // namespace svt diff --git a/svtools/source/misc/acceleratorexecute.cxx b/svtools/source/misc/acceleratorexecute.cxx index a4e1ee5..0e77360 100644 --- a/svtools/source/misc/acceleratorexecute.cxx +++ b/svtools/source/misc/acceleratorexecute.cxx @@ -83,8 +83,7 @@ class SVT_DLLPRIVATE AsyncAccelExec : public cppu::WeakImplHelper<css::lang::XEv AcceleratorExecute::AcceleratorExecute() - : TMutexInit ( ) - , m_aAsyncCallback(LINK(this, AcceleratorExecute, impl_ts_asyncCallback)) + : TMutexInit() { } @@ -431,13 +430,6 @@ css::uno::Reference< css::util::XURLTransformer > AcceleratorExecute::impl_ts_ge return xParser; } - -IMPL_LINK_NOARG_TYPED(AcceleratorExecute, impl_ts_asyncCallback, LinkParamNone*, void) -{ - // replaced by AsyncAccelExec! -} - - AsyncAccelExec::AsyncAccelExec(const css::uno::Reference<css::lang::XComponent>& xFrame, const css::uno::Reference<css::frame::XDispatch>& xDispatch, const css::util::URL& rURL) commit 87179c89d55cad895336f14e9fdba11ea9694a15 Author: Caolán McNamara <caol...@redhat.com> Date: Wed Oct 21 14:24:00 2015 +0100 afl-eventtesting: crash when accelerator processed after frame is disposed Change-Id: I8c3dcca53d5fb18e9f1da0499a071d35a859a9de diff --git a/svtools/source/misc/acceleratorexecute.cxx b/svtools/source/misc/acceleratorexecute.cxx index f5aacd0..a4e1ee5 100644 --- a/svtools/source/misc/acceleratorexecute.cxx +++ b/svtools/source/misc/acceleratorexecute.cxx @@ -33,19 +33,22 @@ #include <com/sun/star/util/URLTransformer.hpp> #include <toolkit/helper/vclunohelper.hxx> #include <comphelper/processfactory.hxx> +#include <cppuhelper/implbase.hxx> #include <vcl/window.hxx> #include <vcl/svapp.hxx> #include <osl/mutex.hxx> - namespace svt { - - -class SVT_DLLPRIVATE AsyncAccelExec +class SVT_DLLPRIVATE AsyncAccelExec : public cppu::WeakImplHelper<css::lang::XEventListener> { + private: + css::uno::Reference<css::lang::XComponent> m_xFrame; + css::uno::Reference< css::frame::XDispatch > m_xDispatch; + css::util::URL m_aURL; + vcl::EventPoster m_aAsyncCallback; public: /** creates a new instance of this class, which can be used @@ -54,25 +57,28 @@ class SVT_DLLPRIVATE AsyncAccelExec This instance can be forced to execute it's internal set request asynchronous. After that it deletes itself ! */ - static AsyncAccelExec* createOnShotInstance(const css::uno::Reference< css::frame::XDispatch >& xDispatch, - const css::util::URL& aURL ); + static AsyncAccelExec* createOnShotInstance(const css::uno::Reference<css::lang::XComponent>& xFrame, + const css::uno::Reference<css::frame::XDispatch>& xDispatch, + const css::util::URL& rURL); void execAsync(); - private: + virtual void SAL_CALL disposing(const css::lang::EventObject&) throw (css::uno::RuntimeException, std::exception) override + { + m_xFrame->removeEventListener(this); + m_xFrame.clear(); + m_xDispatch.clear(); + } + /** @short allow creation of instances of this class by using our factory only! */ - SVT_DLLPRIVATE AsyncAccelExec(const css::uno::Reference< css::frame::XDispatch >& xDispatch, - const css::util::URL& aURL ); + SVT_DLLPRIVATE AsyncAccelExec(const css::uno::Reference<css::lang::XComponent>& xFrame, + const css::uno::Reference< css::frame::XDispatch >& xDispatch, + const css::util::URL& rURL); DECL_DLLPRIVATE_LINK_TYPED(impl_ts_asyncCallback, LinkParamNone*, void); - - private: - vcl::EventPoster m_aAsyncCallback; - css::uno::Reference< css::frame::XDispatch > m_xDispatch; - css::util::URL m_aURL; }; @@ -197,7 +203,8 @@ bool AcceleratorExecute::execute(const css::awt::KeyEvent& aAWTKey) if ( bRet ) { // Note: Such instance can be used one times only and destroy itself afterwards .-) - AsyncAccelExec* pExec = AsyncAccelExec::createOnShotInstance(xDispatch, aURL); + css::uno::Reference<css::lang::XComponent> xFrame(xProvider, css::uno::UNO_QUERY); + AsyncAccelExec* pExec = AsyncAccelExec::createOnShotInstance(xFrame, xDispatch, aURL); pExec->execAsync(); } @@ -431,46 +438,48 @@ IMPL_LINK_NOARG_TYPED(AcceleratorExecute, impl_ts_asyncCallback, LinkParamNone*, } -AsyncAccelExec::AsyncAccelExec(const css::uno::Reference< css::frame::XDispatch >& xDispatch, - const css::util::URL& aURL ) - : m_aAsyncCallback(LINK(this, AsyncAccelExec, impl_ts_asyncCallback)) - , m_xDispatch (xDispatch ) - , m_aURL (aURL ) +AsyncAccelExec::AsyncAccelExec(const css::uno::Reference<css::lang::XComponent>& xFrame, + const css::uno::Reference<css::frame::XDispatch>& xDispatch, + const css::util::URL& rURL) + : m_xFrame(xFrame) + , m_xDispatch(xDispatch) + , m_aURL(rURL) + , m_aAsyncCallback(LINK(this, AsyncAccelExec, impl_ts_asyncCallback)) { } - -AsyncAccelExec* AsyncAccelExec::createOnShotInstance(const css::uno::Reference< css::frame::XDispatch >& xDispatch, - const css::util::URL& aURL ) +AsyncAccelExec* AsyncAccelExec::createOnShotInstance(const css::uno::Reference<css::lang::XComponent> &xFrame, + const css::uno::Reference< css::frame::XDispatch >& xDispatch, + const css::util::URL& rURL) { - AsyncAccelExec* pExec = new AsyncAccelExec(xDispatch, aURL); + AsyncAccelExec* pExec = new AsyncAccelExec(xFrame, xDispatch, rURL); return pExec; } void AsyncAccelExec::execAsync() { + acquire(); + if (m_xFrame.is()) + m_xFrame->addEventListener(this); m_aAsyncCallback.Post(); } - IMPL_LINK_NOARG_TYPED(AsyncAccelExec, impl_ts_asyncCallback, LinkParamNone*, void) { - if (! m_xDispatch.is()) - return; - - try + if (m_xDispatch.is()) { - m_xDispatch->dispatch(m_aURL, css::uno::Sequence< css::beans::PropertyValue >()); + try + { + if (m_xFrame.is()) + m_xFrame->removeEventListener(this); + m_xDispatch->dispatch(m_aURL, css::uno::Sequence< css::beans::PropertyValue >()); + } + catch(const css::uno::Exception&) + { + } } - catch(const css::lang::DisposedException&) - {} - catch(const css::uno::RuntimeException& ) - { throw; } - catch(const css::uno::Exception&) - {} - - delete this; + release(); } } // namespace svt diff --git a/vcl/qa/afl-eventtesting/eventtesting.impress.crash-1 b/vcl/qa/afl-eventtesting/eventtesting.impress.crash-1 new file mode 100644 index 0000000..f8802b5 Binary files /dev/null and b/vcl/qa/afl-eventtesting/eventtesting.impress.crash-1 differ commit e86effd159d06a6ceeb5571f98d4f45c7fe9f893 Author: Caolán McNamara <caol...@redhat.com> Date: Wed Oct 21 14:19:37 2015 +0100 move afl examples/test-cases to dedicated dir Change-Id: I36f09cd19ea721ee69e62fac4cf0744827e8cefb diff --git a/vcl/workben/README.eventtesting b/vcl/qa/afl-eventtesting/README.eventtesting similarity index 100% rename from vcl/workben/README.eventtesting rename to vcl/qa/afl-eventtesting/README.eventtesting diff --git a/vcl/workben/eventtesting.impress b/vcl/qa/afl-eventtesting/eventtesting.impress similarity index 100% rename from vcl/workben/eventtesting.impress rename to vcl/qa/afl-eventtesting/eventtesting.impress diff --git a/vcl/workben/eventtesting.writer b/vcl/qa/afl-eventtesting/eventtesting.writer similarity index 100% rename from vcl/workben/eventtesting.writer rename to vcl/qa/afl-eventtesting/eventtesting.writer diff --git a/vcl/source/helper/evntpost.cxx b/vcl/source/helper/evntpost.cxx index 5331eca..abc9bbb 100644 --- a/vcl/source/helper/evntpost.cxx +++ b/vcl/source/helper/evntpost.cxx @@ -40,7 +40,6 @@ EventPoster::~EventPoster() } void EventPoster::Post() - { DBG_TESTSOLARMUTEX(); m_nId = Application::PostUserEvent( ( LINK( this, EventPoster, DoEvent_Impl ) ) ); commit 3303f43a6ea3c377331491d70a539e7e02ca9df8 Author: Caolán McNamara <caol...@redhat.com> Date: Wed Oct 21 10:45:07 2015 +0100 afl-eventtesting + VclPtr: only current context decks getting disposed but they all have to go, not just the current one Change-Id: I84819c2a74042ad028fbdd8acba5d925c7fdedab diff --git a/include/sfx2/sidebar/ResourceManager.hxx b/include/sfx2/sidebar/ResourceManager.hxx index 275737d..bd69b9e 100644 --- a/include/sfx2/sidebar/ResourceManager.hxx +++ b/include/sfx2/sidebar/ResourceManager.hxx @@ -67,6 +67,7 @@ public: void UpdateModel(css::uno::Reference<css::frame::XModel> xModel); + void disposeDecks(); class DeckContextDescriptor { diff --git a/include/sfx2/sidebar/SidebarController.hxx b/include/sfx2/sidebar/SidebarController.hxx index b90f037..1774fe1 100644 --- a/include/sfx2/sidebar/SidebarController.hxx +++ b/include/sfx2/sidebar/SidebarController.hxx @@ -160,7 +160,7 @@ public: void updateModel(css::uno::Reference<css::frame::XModel> xModel); - void disposeDecks(css::uno::Reference<css::frame::XController> xController); + void disposeDecks(); private: diff --git a/sfx2/source/sidebar/ResourceManager.cxx b/sfx2/source/sidebar/ResourceManager.cxx index d3d4750..243f4a6 100644 --- a/sfx2/source/sidebar/ResourceManager.cxx +++ b/sfx2/source/sidebar/ResourceManager.cxx @@ -649,7 +649,8 @@ bool ResourceManager::IsDeckEnabled ( void ResourceManager::UpdateModel(css::uno::Reference<css::frame::XModel> xModel) { - for (DeckContainer::iterator itr = maDecks.begin(); itr != maDecks.end(); ++itr) { + for (DeckContainer::iterator itr = maDecks.begin(); itr != maDecks.end(); ++itr) + { if (!itr->mpDeck) continue; @@ -661,8 +662,12 @@ void ResourceManager::UpdateModel(css::uno::Reference<css::frame::XModel> xModel } } +} - +void ResourceManager::disposeDecks() +{ + for (DeckContainer::iterator itr = maDecks.begin(); itr != maDecks.end(); ++itr) + itr->mpDeck.disposeAndClear(); } } } // end of namespace sfx2::sidebar diff --git a/sfx2/source/sidebar/SidebarController.cxx b/sfx2/source/sidebar/SidebarController.cxx index 896b06d..1d88286 100644 --- a/sfx2/source/sidebar/SidebarController.cxx +++ b/sfx2/source/sidebar/SidebarController.cxx @@ -174,7 +174,7 @@ void SidebarController::registerSidebarForFrame(SidebarController* pController, void SidebarController::unregisterSidebarForFrame(SidebarController* pController, css::uno::Reference<css::frame::XController> xController) { - pController->disposeDecks(xController); + pController->disposeDecks(); css::uno::Reference<css::ui::XContextChangeEventMultiplexer> xMultiplexer ( css::ui::ContextChangeEventMultiplexer::get( ::comphelper::getProcessComponentContext())); @@ -184,34 +184,11 @@ void SidebarController::unregisterSidebarForFrame(SidebarController* pController xController); } -void SidebarController::disposeDecks(css::uno::Reference<css::frame::XController> xController) +void SidebarController::disposeDecks() { - // clear decks - ResourceManager::DeckContextDescriptorContainer aDecks; - - mpResourceManager->GetMatchingDecks ( - aDecks, - GetCurrentContext(), - IsDocumentReadOnly(), - xController); - - for (ResourceManager::DeckContextDescriptorContainer::const_iterator - iDeck(aDecks.begin()), iEnd(aDecks.end()); - iDeck!=iEnd; ++iDeck) - { - const DeckDescriptor* deckDesc = mpResourceManager->GetDeckDescriptor(iDeck->msId); - VclPtr<Deck> aDeck = deckDesc->mpDeck; - if (aDeck == mpCurrentDeck) - { - mpCurrentDeck.clear(); - maFocusManager.Clear(); - } - if (aDeck) - { - aDeck.disposeAndClear(); - mpResourceManager->SetDeckToDescriptor(iDeck->msId, VclPtr<Deck>()); - } - } + mpCurrentDeck.clear(); + maFocusManager.Clear(); + mpResourceManager->disposeDecks(); } void SAL_CALL SidebarController::disposing()
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits