desktop/Library_sofficeapp.mk | 8 +++ desktop/inc/app.hxx | 6 ++ desktop/source/app/app.cxx | 13 +++++ sc/source/ui/collab/contacts.cxx | 89 +++++++++++++++++---------------------- sc/source/ui/collab/sendfunc.cxx | 9 +-- sc/source/ui/collab/sendfunc.hxx | 1 tubes/inc/tubes/manager.hxx | 1 tubes/source/manager.cxx | 17 +++++++ 8 files changed, 87 insertions(+), 57 deletions(-)
New commits: commit da5220d7d2707dd87e3f322141edc5f3ccbe1df4 Author: Matúš Kukan <matus.ku...@gmail.com> Date: Tue Jul 24 13:46:17 2012 +0200 tubes: fix crash: do not delete boost::shared_ptr's pointer This prevents a crash on exit for INTERCEPT=demo but there is another: Open more calc documents, close one, and then type something -> crash. I wonder if this was working in the past. Change-Id: I599b1babb02488d317c6684aba7431b5de7af15b diff --git a/sc/source/ui/collab/sendfunc.cxx b/sc/source/ui/collab/sendfunc.cxx index a0bd1f2..a366956 100644 --- a/sc/source/ui/collab/sendfunc.cxx +++ b/sc/source/ui/collab/sendfunc.cxx @@ -205,7 +205,9 @@ ScDocFuncSend::~ScDocFuncSend() fprintf( stderr, "Sender destroyed !\n" ); if (mpConference) mpConference->close(); - delete mpDirect; + + if (!dynamic_cast<ScDocFuncDemo*> (mpDirect)) + delete mpDirect; } void ScDocFuncSend::SetCollaboration( TeleConference* pConference ) commit bbeb2ea423d106fd4e7f35fedc4ba9bf58362ab5 Author: Matúš Kukan <matus.ku...@gmail.com> Date: Tue Jul 24 10:24:03 2012 +0200 tubes: remove unused method Change-Id: I8657786fe64753a2e2a57febd1d56b39f83dec33 diff --git a/sc/source/ui/collab/sendfunc.cxx b/sc/source/ui/collab/sendfunc.cxx index 190f8b1..a0bd1f2 100644 --- a/sc/source/ui/collab/sendfunc.cxx +++ b/sc/source/ui/collab/sendfunc.cxx @@ -221,11 +221,6 @@ TeleConference* ScDocFuncSend::GetConference() return mpConference; } -ScDocFuncRecv* ScDocFuncSend::GetReceiver() -{ - return mpDirect; -} - void ScDocFuncSend::EnterListAction( sal_uInt16 nNameResId ) { // Want to group these operations for the other side ... diff --git a/sc/source/ui/collab/sendfunc.hxx b/sc/source/ui/collab/sendfunc.hxx index c6ca2f4..7299983 100644 --- a/sc/source/ui/collab/sendfunc.hxx +++ b/sc/source/ui/collab/sendfunc.hxx @@ -235,7 +235,6 @@ public: void SetCollaboration( TeleConference* pConference ); TeleConference* GetConference(); - ScDocFuncRecv* GetReceiver(); // TODO: I think this could be moved to TeleManager later. void SendFile( const rtl::OUString &rURL ); commit b12954531953fb8ad585847fe42677d714991ef1 Author: Matúš Kukan <matus.ku...@gmail.com> Date: Fri Jul 20 21:31:30 2012 +0200 tubes: init TeleManager in desktop - register clients when we run --invisible - create ScDocFuncSend only if we are going to use it Change-Id: I7e33cd5a2e42e34a055146dc6c2bdac3657d6529 diff --git a/desktop/Library_sofficeapp.mk b/desktop/Library_sofficeapp.mk index 9495883..607d751 100644 --- a/desktop/Library_sofficeapp.mk +++ b/desktop/Library_sofficeapp.mk @@ -88,6 +88,14 @@ $(eval $(call gb_Library_add_exception_objects,sofficeapp,\ desktop/source/migration/migration \ )) +ifeq ($(ENABLE_TELEPATHY),TRUE) +$(eval $(call gb_Library_use_libraries,sofficeapp,tubes)) + +$(eval $(call gb_Library_add_defs,sofficeapp,\ + -DENABLE_TELEPATHY \ +)) +endif + # # We need the lo_main symbol for our boostrap loader # diff --git a/desktop/inc/app.hxx b/desktop/inc/app.hxx index 06dc4c7..09f0a4d 100644 --- a/desktop/inc/app.hxx +++ b/desktop/inc/app.hxx @@ -41,6 +41,9 @@ #include <com/sun/star/task/XStatusIndicator.hpp> #include <com/sun/star/uno/Reference.h> #include <osl/mutex.hxx> +#ifdef ENABLE_TELEPATHY +#include <tubes/manager.hxx> +#endif using namespace com::sun::star::task; using namespace com::sun::star::uno; @@ -205,6 +208,9 @@ class Desktop : public Application sal_uInt16 m_nAppEvents; BootstrapError m_aBootstrapError; BootstrapStatus m_aBootstrapStatus; +#ifdef ENABLE_TELEPATHY + TeleManager* m_pTeleManager; +#endif std::auto_ptr< Lockfile > m_pLockfile; Timer m_firstRunTimer; diff --git a/desktop/source/app/app.cxx b/desktop/source/app/app.cxx index 3ee805b..65dd453 100644 --- a/desktop/source/app/app.cxx +++ b/desktop/source/app/app.cxx @@ -614,12 +614,19 @@ throw() Desktop::Desktop() : m_bServicesRegistered( false ) , m_aBootstrapError( BE_OK ) +#ifdef ENABLE_TELEPATHY +, m_pTeleManager( NULL ) +#endif { RTL_LOGFILE_TRACE( "desktop (cd100003) ::Desktop::Desktop" ); } Desktop::~Desktop() { +#ifdef ENABLE_TELEPATHY + if (m_pTeleManager) + m_pTeleManager->unref(); +#endif } void Desktop::Init() @@ -1700,6 +1707,12 @@ int Desktop::Main() aOptions.SetVCLSettings(); SetSplashScreenProgress(60); +#ifdef ENABLE_TELEPATHY + m_pTeleManager = TeleManager::get(); + bool bListen = rCmdLineArgs.IsInvisible(); + m_pTeleManager->init( bListen ); +#endif + if ( !pExecGlobals->bRestartRequested ) { Application::SetFilterHdl( LINK( this, Desktop, ImplInitFilterHdl ) ); diff --git a/sc/source/ui/collab/contacts.cxx b/sc/source/ui/collab/contacts.cxx index 84f73e1..5ade483 100644 --- a/sc/source/ui/collab/contacts.cxx +++ b/sc/source/ui/collab/contacts.cxx @@ -55,7 +55,6 @@ class TubeContacts : public ModelessDialog SvxSimpleTableContainer maListContainer; SvxSimpleTable maList; TeleManager* mpManager; - ScDocFuncSend* mpSender; DECL_LINK( BtnConnectHdl, void * ); DECL_LINK( BtnGroupHdl, void * ); @@ -71,35 +70,53 @@ class TubeContacts : public ModelessDialog }; boost::ptr_vector<AccountContact> maACs; + ScDocFuncSend* GetScDocFuncSendInCurrentSfxObjectShell() + { + ScDocShell *pScDocShell = dynamic_cast<ScDocShell*> (SfxObjectShell::Current()); + ScDocFunc *pDocFunc = pScDocShell ? &pScDocShell->GetDocFunc() : NULL; + return dynamic_cast<ScDocFuncSend*> (pDocFunc); + } + + ScDocFuncSend* EnsureScDocFuncSendInCurrentSfxObjectShell() + { + ScDocShell *pScDocShell = dynamic_cast<ScDocShell*> (SfxObjectShell::Current()); + ScDocFunc *pDocFunc = pScDocShell ? &pScDocShell->GetDocFunc() : NULL; + ScDocFuncSend *pSender = dynamic_cast<ScDocFuncSend*> (pDocFunc); + if (!pSender) + { + // This means pDocFunc has to be ScDocFuncDirect* and we are not collaborating yet. + ScDocFuncDirect *pDirect = dynamic_cast<ScDocFuncDirect*> (pDocFunc); + ScDocFuncRecv *pReceiver = new ScDocFuncRecv( pDirect ); + pSender = new ScDocFuncSend( *pScDocShell, pReceiver ); + pScDocShell->SetDocFunc( pSender ); + } + return pSender; + } + void Invite() { AccountContact *pAC = NULL; if (maList.FirstSelected()) pAC = static_cast<AccountContact*> (maList.FirstSelected()->GetUserData()); - if (pAC && mpSender->GetConference()) + if (pAC) { - TpContact* pContact = pAC->mpContact; - fprintf( stderr, "inviting %s\n", tp_contact_get_identifier( pContact ) ); - mpSender->GetConference()->invite( pContact ); + ScDocFuncSend *pSender = GetScDocFuncSendInCurrentSfxObjectShell(); + if (pSender && pSender->GetConference()) + { + TpContact* pContact = pAC->mpContact; + pSender->GetConference()->invite( pContact ); + } } } void Listen() { - if (!mpManager) - return ; - if (!mpManager->registerClients()) - { - fprintf( stderr, "Could not register client handlers.\n" ); - } + SAL_INFO( "sc.tubes", "Could not register client handlers." ); } void StartBuddySession() { - if (!mpManager) - return ; - AccountContact *pAC = NULL; if (maList.FirstSelected()) pAC = static_cast<AccountContact*> (maList.FirstSelected()->GetUserData()); @@ -114,8 +131,9 @@ class TubeContacts : public ModelessDialog tp_contact_get_identifier( pContact ) ); else { - mpSender->SetCollaboration( pConference ); - mpSender->SendFile( OStringToOUString( + ScDocFuncSend* pSender = EnsureScDocFuncSendInCurrentSfxObjectShell(); + pSender->SetCollaboration( pConference ); + pSender->SendFile( OStringToOUString( pConference->getUuid(), RTL_TEXTENCODING_UTF8 ) ); } } @@ -123,9 +141,6 @@ class TubeContacts : public ModelessDialog void StartGroupSession() { - if (!mpManager) - return ; - AccountContact *pAC = NULL; if (maList.FirstSelected()) pAC = static_cast<AccountContact*> (maList.FirstSelected()->GetUserData()); @@ -138,7 +153,10 @@ class TubeContacts : public ModelessDialog if (!pConference) fprintf( stderr, "could not start group session\n" ); else - mpSender->SetCollaboration( pConference ); + { + ScDocFuncSend* pSender = EnsureScDocFuncSendInCurrentSfxObjectShell(); + pSender->SetCollaboration( pConference ); + } } } @@ -155,32 +173,6 @@ public: mpManager( TeleManager::get() ) { Hide(); - ScDocShell *pScDocShell = dynamic_cast<ScDocShell*> (SfxObjectShell::Current()); - ScDocFunc *pDocFunc = pScDocShell ? &pScDocShell->GetDocFunc() : NULL; - mpSender = dynamic_cast<ScDocFuncSend*> (pDocFunc); - if (!mpSender) - { - // This means pDocFunc has to be ScDocFuncDirect* and we are not collaborating yet. - ScDocFuncDirect *pDirect = dynamic_cast<ScDocFuncDirect*> (pDocFunc); - ScDocFuncRecv *pReceiver = new ScDocFuncRecv( pDirect ); - mpSender = new ScDocFuncSend( *pScDocShell, pReceiver ); - pScDocShell->SetDocFunc( mpSender ); - - // FIXME: Who should really own TeleManager and where it can be destroyed ? - // Take reference, so TeleManager does not get destroyed after closing dialog: - mpManager = TeleManager::get(); - - if (mpManager->createAccountManager()) - { - mpManager->prepareAccountManager(); - } - else - { - fprintf( stderr, "Could not create AccountManager.\n" ); - mpManager->unref(); - mpManager = NULL; - } - } maBtnConnect.SetClickHdl( LINK( this, TubeContacts, BtnConnectHdl ) ); maBtnGroup.SetClickHdl( LINK( this, TubeContacts, BtnGroupHdl ) ); maBtnInvite.SetClickHdl( LINK( this, TubeContacts, BtnInviteHdl ) ); @@ -201,8 +193,7 @@ public: } virtual ~TubeContacts() { - if (mpManager) - mpManager->unref(); + mpManager->unref(); } static rtl::OUString fromUTF8( const char *pStr ) @@ -213,8 +204,6 @@ public: void Populate() { - if (!mpManager) - return ; ContactList *pContacts = mpManager->getContactList(); if ( pContacts ) { diff --git a/tubes/inc/tubes/manager.hxx b/tubes/inc/tubes/manager.hxx index a112b61..a47a566 100644 --- a/tubes/inc/tubes/manager.hxx +++ b/tubes/inc/tubes/manager.hxx @@ -81,6 +81,7 @@ public: TUBES_DLLPUBLIC static TeleManager* get(); TUBES_DLLPUBLIC void unref(); + TUBES_DLLPUBLIC bool init( bool bListen ); /** Connect to DBus and create AccountManager. */ TUBES_DLLPUBLIC bool createAccountManager(); diff --git a/tubes/source/manager.cxx b/tubes/source/manager.cxx index d16422d..eeccbe9 100644 --- a/tubes/source/manager.cxx +++ b/tubes/source/manager.cxx @@ -420,6 +420,7 @@ TeleManager * TeleManager::get() { MutexGuard aGuard( GetAnotherMutex()); + SAL_INFO( "tubes", "TeleManager::get: count: " << nAnotherRefCount ); if (!pSingleton) pSingleton = new TeleManager(); @@ -435,8 +436,24 @@ TeleManager::unref() delete pSingleton; pSingleton = NULL; } + SAL_INFO( "tubes", "TeleManager::unref: count: " << nAnotherRefCount ); } +bool TeleManager::init( bool bListen ) +{ + if (createAccountManager()) + { + prepareAccountManager(); + if (bListen && !registerClients()) + SAL_WARN( "tubes", "TeleManager::init: Could not register client handlers." ); + + return true; + } + else + SAL_WARN( "tubes", "TeleManager::init: Could not create AccountManager." ); + + return false; +} bool TeleManager::createAccountManager() {
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits