desktop/inc/app.hxx | 1 desktop/source/app/app.cxx | 259 +++++------ desktop/source/app/cmdlineargs.cxx | 8 desktop/source/app/officeipcthread.cxx | 36 - sal/inc/rtl/ustrbuf.hxx | 18 sal/qa/rtl/oustringbuffer/makefile.mk | 1 sal/qa/rtl/oustringbuffer/test_oustringbuffer_appendchar.cxx | 63 ++ sfx2/source/appl/appdde.cxx | 43 + vcl/aqua/source/app/vclnsapp.mm | 18 vcl/aqua/source/window/salmenu.cxx | 12 vcl/inc/vcl/svapp.hxx | 107 ---- vcl/ios/source/app/vcluiapp.mm | 3 12 files changed, 285 insertions(+), 284 deletions(-)
New commits: commit e66e54fb00bf74d13b7059bd32b6207a029afa5e Author: Stephan Bergmann <sberg...@redhat.com> Date: Thu Nov 3 17:45:47 2011 +0100 Further clean up of areas touched by previous commit. diff --git a/desktop/inc/app.hxx b/desktop/inc/app.hxx index 87a774c..f30ac46 100644 --- a/desktop/inc/app.hxx +++ b/desktop/inc/app.hxx @@ -190,7 +190,6 @@ class Desktop : public Application void DoFirstRunInitializations(); static sal_Bool SaveTasks(); - static sal_Bool _bTasksSaved; static void retrieveCrashReporterState(); static sal_Bool isUIOnSessionShutdownAllowed(); diff --git a/desktop/source/app/app.cxx b/desktop/source/app/app.cxx index 00850aa..1555510 100644 --- a/desktop/source/app/app.cxx +++ b/desktop/source/app/app.cxx @@ -1346,8 +1346,6 @@ sal_Bool impl_callRecoveryUI(sal_Bool bEmergencySave , * */ -sal_Bool Desktop::_bTasksSaved = sal_False; - sal_Bool Desktop::SaveTasks() { return impl_callRecoveryUI( @@ -2990,138 +2988,139 @@ String GetURL_Impl( void Desktop::HandleAppEvent( const ApplicationEvent& rAppEvent ) { - if ( rAppEvent.GetEvent() == ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("APPEAR")) && !GetCommandLineArgs().IsInvisible() ) + switch ( rAppEvent.GetEvent() ) { - css::uno::Reference< css::lang::XMultiServiceFactory > xSMGR = ::comphelper::getProcessServiceFactory(); - - // find active task - the active task is always a visible task - ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFramesSupplier > - xDesktop( xSMGR->createInstance( OUSTRING(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.frame.Desktop")) ), - ::com::sun::star::uno::UNO_QUERY ); - ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame > xTask = xDesktop->getActiveFrame(); - if ( !xTask.is() ) + case ApplicationEvent::TYPE_ACCEPT: + // every time an accept parameter is used we create an acceptor + // with the corresponding accept-string + createAcceptor(rAppEvent.GetData()); + break; + case ApplicationEvent::TYPE_APPEAR: + if ( !GetCommandLineArgs().IsInvisible() ) { - // get any task if there is no active one - ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess > xList( xDesktop->getFrames(), ::com::sun::star::uno::UNO_QUERY ); - if ( xList->getCount()>0 ) - xList->getByIndex(0) >>= xTask; - } + css::uno::Reference< css::lang::XMultiServiceFactory > xSMGR = ::comphelper::getProcessServiceFactory(); - if ( xTask.is() ) - { - Reference< com::sun::star::awt::XTopWindow > xTop( xTask->getContainerWindow(), UNO_QUERY ); - xTop->toFront(); - } - else - { - // no visible task that could be activated found - Reference< XFrame > xBackingFrame; - Reference< ::com::sun::star::awt::XWindow > xContainerWindow; - ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame > xDesktopFrame( xDesktop, UNO_QUERY ); + // find active task - the active task is always a visible task + ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFramesSupplier > + xDesktop( xSMGR->createInstance( OUSTRING(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.frame.Desktop")) ), + ::com::sun::star::uno::UNO_QUERY ); + ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame > xTask = xDesktop->getActiveFrame(); + if ( !xTask.is() ) + { + // get any task if there is no active one + ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess > xList( xDesktop->getFrames(), ::com::sun::star::uno::UNO_QUERY ); + if ( xList->getCount()>0 ) + xList->getByIndex(0) >>= xTask; + } - xBackingFrame = xDesktopFrame->findFrame(OUString( RTL_CONSTASCII_USTRINGPARAM( "_blank" )), 0); - if (xBackingFrame.is()) - xContainerWindow = xBackingFrame->getContainerWindow(); - if (xContainerWindow.is()) + if ( xTask.is() ) + { + Reference< com::sun::star::awt::XTopWindow > xTop( xTask->getContainerWindow(), UNO_QUERY ); + xTop->toFront(); + } + else { - Sequence< Any > lArgs(1); - lArgs[0] <<= xContainerWindow; - Reference< XController > xBackingComp( - xSMGR->createInstanceWithArguments(OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.frame.StartModule") ), lArgs), - UNO_QUERY); - if (xBackingComp.is()) + // no visible task that could be activated found + Reference< XFrame > xBackingFrame; + Reference< ::com::sun::star::awt::XWindow > xContainerWindow; + ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame > xDesktopFrame( xDesktop, UNO_QUERY ); + + xBackingFrame = xDesktopFrame->findFrame(OUString( RTL_CONSTASCII_USTRINGPARAM( "_blank" )), 0); + if (xBackingFrame.is()) + xContainerWindow = xBackingFrame->getContainerWindow(); + if (xContainerWindow.is()) { - Reference< ::com::sun::star::awt::XWindow > xBackingWin(xBackingComp, UNO_QUERY); - // Attention: You MUST(!) call setComponent() before you call attachFrame(). - // Because the backing component set the property "IsBackingMode" of the frame - // to true inside attachFrame(). But setComponent() reset this state everytimes ... - xBackingFrame->setComponent(xBackingWin, xBackingComp); - xBackingComp->attachFrame(xBackingFrame); - xContainerWindow->setVisible(sal_True); - - Window* pCompWindow = VCLUnoHelper::GetWindow(xBackingFrame->getComponentWindow()); - if (pCompWindow) - pCompWindow->Update(); + Sequence< Any > lArgs(1); + lArgs[0] <<= xContainerWindow; + Reference< XController > xBackingComp( + xSMGR->createInstanceWithArguments(OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.frame.StartModule") ), lArgs), + UNO_QUERY); + if (xBackingComp.is()) + { + Reference< ::com::sun::star::awt::XWindow > xBackingWin(xBackingComp, UNO_QUERY); + // Attention: You MUST(!) call setComponent() before you call attachFrame(). + // Because the backing component set the property "IsBackingMode" of the frame + // to true inside attachFrame(). But setComponent() reset this state everytimes ... + xBackingFrame->setComponent(xBackingWin, xBackingComp); + xBackingComp->attachFrame(xBackingFrame); + xContainerWindow->setVisible(sal_True); + + Window* pCompWindow = VCLUnoHelper::GetWindow(xBackingFrame->getComponentWindow()); + if (pCompWindow) + pCompWindow->Update(); + } } } } - } - else if ( rAppEvent.GetEvent() == ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("QUICKSTART")) && !GetCommandLineArgs().IsInvisible() ) - { - // If the office has been started the second time its command line arguments are sent through a pipe - // connection to the first office. We want to reuse the quickstart option for the first office. - // NOTICE: The quickstart service must be initialized inside the "main thread", so we use the - // application events to do this (they are executed inside main thread)!!! - // Don't start quickstart service if the user specified "-invisible" on the command line! - sal_Bool bQuickstart( sal_True ); - Sequence< Any > aSeq( 1 ); - aSeq[0] <<= bQuickstart; + break; + case ApplicationEvent::TYPE_HELP: +#ifndef UNX + // in non unix version allow showing of cmdline help window + displayCmdlineHelp(); +#endif + break; + case ApplicationEvent::TYPE_OPEN: + { + const CommandLineArgs& rCmdLine = GetCommandLineArgs(); + if ( !rCmdLine.IsInvisible() && !rCmdLine.IsTerminateAfterInit() ) + { + ProcessDocumentsRequest* pDocsRequest = new ProcessDocumentsRequest( + rCmdLine.getCwdUrl()); + pDocsRequest->aOpenList = rAppEvent.GetData(); + pDocsRequest->pcProcessed = NULL; - Reference < XInitialization > xQuickstart( ::comphelper::getProcessServiceFactory()->createInstance( - DEFINE_CONST_UNICODE( "com.sun.star.office.Quickstart" )), - UNO_QUERY ); - if ( xQuickstart.is() ) - xQuickstart->initialize( aSeq ); - } - else if ( rAppEvent.GetEvent() == ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ACCEPT")) ) - { - // every time an accept parameter is used we create an acceptor - // with the corresponding accept-string - createAcceptor(rAppEvent.GetData()); - } - else if ( rAppEvent.GetEvent() == ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("UNACCEPT")) ) - { - // try to remove corresponding acceptor - destroyAcceptor(rAppEvent.GetData()); - } - else if ( rAppEvent.GetEvent() == ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SaveDocuments")) ) - { - Desktop::_bTasksSaved = sal_False; - Desktop::_bTasksSaved = SaveTasks(); - } - else if ( rAppEvent.GetEvent() == ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("OPENHELPURL")) ) - { + OfficeIPCThread::ExecuteCmdLineRequests( *pDocsRequest ); + delete pDocsRequest; + } + } + break; + case ApplicationEvent::TYPE_OPENHELPURL: // start help for a specific URL - Help *pHelp = Application::GetHelp(); - pHelp->Start(rAppEvent.GetData(), NULL); - } - else if ( rAppEvent.GetEvent() == ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(APPEVENT_OPEN_STRING)) ) - { - const CommandLineArgs& rCmdLine = GetCommandLineArgs(); - if ( !rCmdLine.IsInvisible() && !rCmdLine.IsTerminateAfterInit() ) + Application::GetHelp()->Start(rAppEvent.GetData(), NULL); + break; + case ApplicationEvent::TYPE_PRINT: { - ProcessDocumentsRequest* pDocsRequest = new ProcessDocumentsRequest( - rCmdLine.getCwdUrl()); - pDocsRequest->aOpenList = rAppEvent.GetData(); - pDocsRequest->pcProcessed = NULL; + const CommandLineArgs& rCmdLine = GetCommandLineArgs(); + if ( !rCmdLine.IsInvisible() && !rCmdLine.IsTerminateAfterInit() ) + { + ProcessDocumentsRequest* pDocsRequest = new ProcessDocumentsRequest( + rCmdLine.getCwdUrl()); + pDocsRequest->aPrintList = rAppEvent.GetData(); + pDocsRequest->pcProcessed = NULL; - OfficeIPCThread::ExecuteCmdLineRequests( *pDocsRequest ); - delete pDocsRequest; + OfficeIPCThread::ExecuteCmdLineRequests( *pDocsRequest ); + delete pDocsRequest; + } } - } - else if ( rAppEvent.GetEvent() == ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(APPEVENT_PRINT_STRING)) ) - { - const CommandLineArgs& rCmdLine = GetCommandLineArgs(); - if ( !rCmdLine.IsInvisible() && !rCmdLine.IsTerminateAfterInit() ) + break; + case ApplicationEvent::TYPE_PRIVATE_DOSHUTDOWN: { - ProcessDocumentsRequest* pDocsRequest = new ProcessDocumentsRequest( - rCmdLine.getCwdUrl()); - pDocsRequest->aPrintList = rAppEvent.GetData(); - pDocsRequest->pcProcessed = NULL; + Desktop* pD = dynamic_cast<Desktop*>(GetpApp()); + OSL_ENSURE( pD, "no desktop ?!?" ); + if( pD ) + pD->doShutdown(); + } + break; + case ApplicationEvent::TYPE_QUICKSTART: + if ( !GetCommandLineArgs().IsInvisible() ) + { + // If the office has been started the second time its command line arguments are sent through a pipe + // connection to the first office. We want to reuse the quickstart option for the first office. + // NOTICE: The quickstart service must be initialized inside the "main thread", so we use the + // application events to do this (they are executed inside main thread)!!! + // Don't start quickstart service if the user specified "-invisible" on the command line! + sal_Bool bQuickstart( sal_True ); + Sequence< Any > aSeq( 1 ); + aSeq[0] <<= bQuickstart; - OfficeIPCThread::ExecuteCmdLineRequests( *pDocsRequest ); - delete pDocsRequest; + Reference < XInitialization > xQuickstart( ::comphelper::getProcessServiceFactory()->createInstance( + DEFINE_CONST_UNICODE( "com.sun.star.office.Quickstart" )), + UNO_QUERY ); + if ( xQuickstart.is() ) + xQuickstart->initialize( aSeq ); } - } -#ifndef UNX - else if ( rAppEvent.GetEvent() == ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HELP")) ) - { - // in non unix version allow showing of cmdline help window - displayCmdlineHelp(); - } -#endif - else if ( rAppEvent.GetEvent() == ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SHOWDIALOG")) ) - { + break; + case ApplicationEvent::TYPE_SHOWDIALOG: // ignore all errors here. It's clicking a menu entry only ... // The user will try it again, in case nothing happens .-) try @@ -3153,13 +3152,14 @@ void Desktop::HandleAppEvent( const ApplicationEvent& rAppEvent ) } catch(const css::uno::Exception&) {} - } - else if( rAppEvent.GetEvent() == ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("PRIVATE:DOSHUTDOWN")) ) - { - Desktop* pD = dynamic_cast<Desktop*>(GetpApp()); - OSL_ENSURE( pD, "no desktop ?!?" ); - if( pD ) - pD->doShutdown(); + break; + case ApplicationEvent::TYPE_UNACCEPT: + // try to remove corresponding acceptor + destroyAcceptor(rAppEvent.GetData()); + break; + default: + OSL_FAIL("this cannot happen"); + break; } } diff --git a/desktop/source/app/cmdlineargs.cxx b/desktop/source/app/cmdlineargs.cxx index 78c6e71..4db23d9 100644 --- a/desktop/source/app/cmdlineargs.cxx +++ b/desktop/source/app/cmdlineargs.cxx @@ -399,8 +399,8 @@ void CommandLineArgs::ParseCommandLine_Impl( Supplier& supplier ) void CommandLineArgs::AddStringListParam_Impl( StringParam eParam, const rtl::OUString& aParam ) { - ::rtl::OUStringBuffer aParamBuf(m_aStrParams[eParam]); OSL_ASSERT( eParam >= 0 && eParam < CMD_STRINGPARAM_COUNT ); + ::rtl::OUStringBuffer aParamBuf(m_aStrParams[eParam]); if ( aParamBuf.getLength() ) aParamBuf.append('\n'); aParamBuf.append(aParam); diff --git a/desktop/source/app/officeipcthread.cxx b/desktop/source/app/officeipcthread.cxx index af30005..d9273c0 100644 --- a/desktop/source/app/officeipcthread.cxx +++ b/desktop/source/app/officeipcthread.cxx @@ -695,7 +695,6 @@ void SAL_CALL OfficeIPCThread::run() // is this a termination message ? if so, terminate if(( aArguments.CompareTo( sc_aTerminationSequence, sc_nTSeqLength ) == COMPARE_EQUAL ) || mbDowning ) return; - String aEmpty; std::auto_ptr< CommandLineArgs > aCmdLineArgs; try { @@ -715,22 +714,22 @@ void SAL_CALL OfficeIPCThread::run() { // we have to use application event, because we have to start quickstart service in main thread!! ApplicationEvent* pAppEvent = - new ApplicationEvent(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("QUICKSTART"))); + new ApplicationEvent(ApplicationEvent::TYPE_QUICKSTART); ImplPostForeignAppEvent( pAppEvent ); } // handle request for acceptor OUString aAcceptString; if ( aCmdLineArgs->GetAcceptString(aAcceptString) ) { - ApplicationEvent* pAppEvent = - new ApplicationEvent(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ACCEPT")), aAcceptString); + ApplicationEvent* pAppEvent = new ApplicationEvent( + ApplicationEvent::TYPE_ACCEPT, aAcceptString); ImplPostForeignAppEvent( pAppEvent ); } // handle acceptor removal OUString aUnAcceptString; if ( aCmdLineArgs->GetUnAcceptString(aUnAcceptString) ) { - ApplicationEvent* pAppEvent = - new ApplicationEvent(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("UNACCEPT")), aUnAcceptString); + ApplicationEvent* pAppEvent = new ApplicationEvent( + ApplicationEvent::TYPE_UNACCEPT, aUnAcceptString); ImplPostForeignAppEvent( pAppEvent ); } @@ -739,7 +738,7 @@ void SAL_CALL OfficeIPCThread::run() // in a running instance in order to display the command line help if ( aCmdLineArgs->IsHelp() ) { ApplicationEvent* pAppEvent = - new ApplicationEvent(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HELP"))); + new ApplicationEvent(ApplicationEvent::TYPE_HELP); ImplPostForeignAppEvent( pAppEvent ); } #endif @@ -837,8 +836,9 @@ void SAL_CALL OfficeIPCThread::run() #elif defined WNT aHelpURLBuffer.appendAscii("&System=WIN"); #endif - ApplicationEvent* pAppEvent = - new ApplicationEvent(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("OPENHELPURL")), aHelpURLBuffer.makeStringAndClear()); + ApplicationEvent* pAppEvent = new ApplicationEvent( + ApplicationEvent::TYPE_OPENHELPURL, + aHelpURLBuffer.makeStringAndClear()); ImplPostForeignAppEvent( pAppEvent ); } } @@ -876,7 +876,7 @@ void SAL_CALL OfficeIPCThread::run() { // no document was sent, just bring Office to front ApplicationEvent* pAppEvent = - new ApplicationEvent(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("APPEAR"))); + new ApplicationEvent(ApplicationEvent::TYPE_APPEAR); ImplPostForeignAppEvent( pAppEvent ); } diff --git a/sfx2/source/appl/appdde.cxx b/sfx2/source/appl/appdde.cxx index f7d3c0e..08cfba2 100644 --- a/sfx2/source/appl/appdde.cxx +++ b/sfx2/source/appl/appdde.cxx @@ -245,7 +245,8 @@ SV_IMPL_PTRARR( SfxDdeDocTopics_Impl, SfxDdeDocTopic_Impl *) //======================================================================== sal_Bool SfxAppEvent_Impl( ApplicationEvent &rAppEvent, - const String &rCmd, const String &rEvent ) + const String &rCmd, const String &rEvent, + ApplicationEvent::Type eType ) /* [Description] @@ -291,7 +292,7 @@ sal_Bool SfxAppEvent_Impl( ApplicationEvent &rAppEvent, } } - rAppEvent = ApplicationEvent(rEvent, aData.makeStringAndClear()); + rAppEvent = ApplicationEvent(eType, aData.makeStringAndClear()); return sal_True; } } @@ -318,8 +319,8 @@ long SfxApplication::DdeExecute { // Print or Open-Event? ApplicationEvent aAppEvent; - if ( SfxAppEvent_Impl( aAppEvent, rCmd, DEFINE_CONST_UNICODE("Print") ) || - SfxAppEvent_Impl( aAppEvent, rCmd, DEFINE_CONST_UNICODE("Open") ) ) + if ( SfxAppEvent_Impl( aAppEvent, rCmd, DEFINE_CONST_UNICODE("Print"), ApplicationEvent::TYPE_PRINT ) || + SfxAppEvent_Impl( aAppEvent, rCmd, DEFINE_CONST_UNICODE("Open"), ApplicationEvent::TYPE_OPEN ) ) GetpApp()->AppEvent( aAppEvent ); else { diff --git a/vcl/aqua/source/app/vclnsapp.mm b/vcl/aqua/source/app/vclnsapp.mm index e2da47c..e2f500d 100644 --- a/vcl/aqua/source/app/vclnsapp.mm +++ b/vcl/aqua/source/app/vclnsapp.mm @@ -314,7 +314,7 @@ const rtl::OUString aFile( GetOUString( pFile ) ); if( ! AquaSalInstance::isOnCommandLine( aFile ) ) { - const ApplicationEvent* pAppEvent = new ApplicationEvent(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(APPEVENT_OPEN_STRING)), aFile); + const ApplicationEvent* pAppEvent = new ApplicationEvent(ApplicationEvent::TYPE_OPEN, aFile); AquaSalInstance::aAppEventList.push_back( pAppEvent ); } return YES; @@ -344,7 +344,7 @@ // we have no back channel here, we have to assume success, in which case // replyToOpenOrPrint does not need to be called according to documentation // [app replyToOpenOrPrint: NSApplicationDelegateReplySuccess]; - const ApplicationEvent* pAppEvent = new ApplicationEvent(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(APPEVENT_OPEN_STRING)), aFileList.makeStringAndClear()); + const ApplicationEvent* pAppEvent = new ApplicationEvent(ApplicationEvent::TYPE_OPEN, aFileList.makeStringAndClear()); AquaSalInstance::aAppEventList.push_back( pAppEvent ); } } @@ -353,7 +353,7 @@ { (void)app; const rtl::OUString aFile( GetOUString( pFile ) ); - const ApplicationEvent* pAppEvent = new ApplicationEvent(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(APPEVENT_PRINT_STRING)), aFile); + const ApplicationEvent* pAppEvent = new ApplicationEvent(ApplicationEvent::TYPE_PRINT, aFile); AquaSalInstance::aAppEventList.push_back( pAppEvent ); return YES; } @@ -374,7 +374,7 @@ aFileList.append('\n'); aFileList.append( GetOUString( pFile ) ); } - const ApplicationEvent* pAppEvent = new ApplicationEvent(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(APPEVENT_PRINT_STRING)), aFileList.makeStringAndClear()); + const ApplicationEvent* pAppEvent = new ApplicationEvent(ApplicationEvent::TYPE_PRINT, aFileList.makeStringAndClear()); AquaSalInstance::aAppEventList.push_back( pAppEvent ); // we have no back channel here, we have to assume success // correct handling would be NSPrintingReplyLater and then send [app replyToOpenOrPrint] @@ -398,7 +398,7 @@ if( aReply == NSTerminateNow ) { - ApplicationEvent aEv(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("PRIVATE:DOSHUTDOWN"))); + ApplicationEvent aEv(ApplicationEvent::TYPE_PRIVATE_DOSHUTDOWN); GetpApp()->AppEvent( aEv ); ImplImageTreeSingletonRef()->shutDown(); // DeInitVCL should be called in ImplSVMain - unless someon _exits first which diff --git a/vcl/aqua/source/window/salmenu.cxx b/vcl/aqua/source/window/salmenu.cxx index 50aa9a6..509ef73 100644 --- a/vcl/aqua/source/window/salmenu.cxx +++ b/vcl/aqua/source/window/salmenu.cxx @@ -75,7 +75,7 @@ const AquaSalMenu* AquaSalMenu::pCurrentMenuBar = NULL; else if( nDialog == SHOWDIALOG_ID_PREFERENCES ) aDialog = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("PREFERENCES")); const ApplicationEvent* pAppEvent = new ApplicationEvent( - rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SHOWDIALOG")), aDialog); + ApplicationEvent::TYPE_SHOWDIALOG, aDialog); AquaSalInstance::aAppEventList.push_back( pAppEvent ); } } diff --git a/vcl/inc/vcl/svapp.hxx b/vcl/inc/vcl/svapp.hxx index fb32a8b..ccd232c 100644 --- a/vcl/inc/vcl/svapp.hxx +++ b/vcl/inc/vcl/svapp.hxx @@ -97,36 +97,27 @@ typedef long (*VCLEventHookProc)( NotifyEvent& rEvt, void* pData ); enum Service { SERVICE_OLE, SERVICE_APPEVENT, SERVICE_IPC }; #endif -#define APPEVENT_OPEN_STRING "Open" -#define APPEVENT_PRINT_STRING "Print" - class VCL_DLLPUBLIC ApplicationEvent { - rtl::OUString aEvent; - rtl::OUString aData; - std::vector<rtl::OUString> aParams; - - ApplicationEvent(); public: - ApplicationEvent(const rtl::OUString& rEvent, + enum Type { + TYPE_ACCEPT, TYPE_APPEAR, TYPE_HELP, TYPE_OPEN, TYPE_OPENHELPURL, + TYPE_PRINT, TYPE_PRIVATE_DOSHUTDOWN, TYPE_QUICKSTART, TYPE_SHOWDIALOG, + TYPE_UNACCEPT + }; + + ApplicationEvent(Type rEvent, const rtl::OUString& rData = rtl::OUString()): aEvent(rEvent), aData(rData) - { - sal_Int32 start = 0; - for(sal_Int32 i = 0; i < rData.getLength(); ++i) - { - if(rData[i] == '\n') - { - aParams.push_back(rData.copy(start, i - start)); - start = ++i; - } - } - } + {} - const rtl::OUString& GetEvent() const { return aEvent; } + Type GetEvent() const { return aEvent; } const rtl::OUString& GetData() const { return aData; } - const std::vector<rtl::OUString>& GetParams() const { return aParams; } + +private: + Type aEvent; + rtl::OUString aData; }; class VCL_DLLPUBLIC PropertyHandler diff --git a/vcl/ios/source/app/vcluiapp.mm b/vcl/ios/source/app/vcluiapp.mm index c47669e..600cae8 100644 --- a/vcl/ios/source/app/vcluiapp.mm +++ b/vcl/ios/source/app/vcluiapp.mm @@ -79,7 +79,7 @@ // we have no back channel here, we have to assume success, in which case // replyToOpenOrPrint does not need to be called according to documentation // [app replyToOpenOrPrint: NSApplicationDelegateReplySuccess]; - const ApplicationEvent* pAppEvent = new ApplicationEvent(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(APPEVENT_OPEN_STRING)), aFileList.makeStringAndClear()); + const ApplicationEvent* pAppEvent = new ApplicationEvent(ApplicationEvent::TYPE_OPEN, aFileList.makeStringAndClear()); IosSalInstance::aAppEventList.push_back( pAppEvent ); } } commit e04249337551653f63ba9b2a2302578961e38562 Author: August Sodora <aug...@gmail.com> Date: Thu Nov 3 16:50:24 2011 +0100 String->OUString, remove unused code diff --git a/desktop/source/app/app.cxx b/desktop/source/app/app.cxx index be33fac..00850aa 100644 --- a/desktop/source/app/app.cxx +++ b/desktop/source/app/app.cxx @@ -2990,7 +2990,7 @@ String GetURL_Impl( void Desktop::HandleAppEvent( const ApplicationEvent& rAppEvent ) { - if ( rAppEvent.GetEvent() == "APPEAR" && !GetCommandLineArgs().IsInvisible() ) + if ( rAppEvent.GetEvent() == ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("APPEAR")) && !GetCommandLineArgs().IsInvisible() ) { css::uno::Reference< css::lang::XMultiServiceFactory > xSMGR = ::comphelper::getProcessServiceFactory(); @@ -3046,7 +3046,7 @@ void Desktop::HandleAppEvent( const ApplicationEvent& rAppEvent ) } } } - else if ( rAppEvent.GetEvent() == "QUICKSTART" && !GetCommandLineArgs().IsInvisible() ) + else if ( rAppEvent.GetEvent() == ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("QUICKSTART")) && !GetCommandLineArgs().IsInvisible() ) { // If the office has been started the second time its command line arguments are sent through a pipe // connection to the first office. We want to reuse the quickstart option for the first office. @@ -3063,57 +3063,50 @@ void Desktop::HandleAppEvent( const ApplicationEvent& rAppEvent ) if ( xQuickstart.is() ) xQuickstart->initialize( aSeq ); } - else if ( rAppEvent.GetEvent() == "ACCEPT" ) + else if ( rAppEvent.GetEvent() == ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ACCEPT")) ) { // every time an accept parameter is used we create an acceptor // with the corresponding accept-string - OUString aAcceptString(rAppEvent.GetData().GetBuffer()); - createAcceptor(aAcceptString); + createAcceptor(rAppEvent.GetData()); } - else if ( rAppEvent.GetEvent() == "UNACCEPT" ) + else if ( rAppEvent.GetEvent() == ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("UNACCEPT")) ) { // try to remove corresponding acceptor - OUString aUnAcceptString(rAppEvent.GetData().GetBuffer()); - destroyAcceptor(aUnAcceptString); + destroyAcceptor(rAppEvent.GetData()); } - else if ( rAppEvent.GetEvent() == "SaveDocuments" ) + else if ( rAppEvent.GetEvent() == ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SaveDocuments")) ) { Desktop::_bTasksSaved = sal_False; Desktop::_bTasksSaved = SaveTasks(); } - else if ( rAppEvent.GetEvent() == "OPENHELPURL" ) + else if ( rAppEvent.GetEvent() == ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("OPENHELPURL")) ) { // start help for a specific URL - OUString aHelpURL(rAppEvent.GetData().GetBuffer()); Help *pHelp = Application::GetHelp(); - pHelp->Start(aHelpURL, NULL); + pHelp->Start(rAppEvent.GetData(), NULL); } - else if ( rAppEvent.GetEvent() == APPEVENT_OPEN_STRING ) + else if ( rAppEvent.GetEvent() == ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(APPEVENT_OPEN_STRING)) ) { - OUString aOpenURL(rAppEvent.GetData().GetBuffer()); - const CommandLineArgs& rCmdLine = GetCommandLineArgs(); if ( !rCmdLine.IsInvisible() && !rCmdLine.IsTerminateAfterInit() ) { ProcessDocumentsRequest* pDocsRequest = new ProcessDocumentsRequest( rCmdLine.getCwdUrl()); - pDocsRequest->aOpenList = aOpenURL; + pDocsRequest->aOpenList = rAppEvent.GetData(); pDocsRequest->pcProcessed = NULL; OfficeIPCThread::ExecuteCmdLineRequests( *pDocsRequest ); delete pDocsRequest; } } - else if ( rAppEvent.GetEvent() == APPEVENT_PRINT_STRING ) + else if ( rAppEvent.GetEvent() == ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(APPEVENT_PRINT_STRING)) ) { - OUString aPrintURL(rAppEvent.GetData().GetBuffer()); - const CommandLineArgs& rCmdLine = GetCommandLineArgs(); if ( !rCmdLine.IsInvisible() && !rCmdLine.IsTerminateAfterInit() ) { ProcessDocumentsRequest* pDocsRequest = new ProcessDocumentsRequest( rCmdLine.getCwdUrl()); - pDocsRequest->aPrintList = aPrintURL; + pDocsRequest->aPrintList = rAppEvent.GetData(); pDocsRequest->pcProcessed = NULL; OfficeIPCThread::ExecuteCmdLineRequests( *pDocsRequest ); @@ -3121,13 +3114,13 @@ void Desktop::HandleAppEvent( const ApplicationEvent& rAppEvent ) } } #ifndef UNX - else if ( rAppEvent.GetEvent() == "HELP" ) + else if ( rAppEvent.GetEvent() == ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HELP")) ) { // in non unix version allow showing of cmdline help window displayCmdlineHelp(); } #endif - else if ( rAppEvent.GetEvent() == "SHOWDIALOG" ) + else if ( rAppEvent.GetEvent() == ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SHOWDIALOG")) ) { // ignore all errors here. It's clicking a menu entry only ... // The user will try it again, in case nothing happens .-) @@ -3145,9 +3138,9 @@ void Desktop::HandleAppEvent( const ApplicationEvent& rAppEvent ) css::uno::Reference< css::util::XURLTransformer > xParser(xSMGR->createInstance(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.util.URLTransformer"))), css::uno::UNO_QUERY_THROW); css::util::URL aCommand; - if( rAppEvent.GetData().EqualsAscii( "PREFERENCES" ) ) + if( rAppEvent.GetData() == ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("PREFERENCES")) ) aCommand.Complete = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:OptionsTreeDialog" ) ); - else if( rAppEvent.GetData().EqualsAscii( "ABOUT" ) ) + else if( rAppEvent.GetData() == ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ABOUT")) ) aCommand.Complete = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:About" ) ); if( aCommand.Complete.getLength() ) { @@ -3161,7 +3154,7 @@ void Desktop::HandleAppEvent( const ApplicationEvent& rAppEvent ) catch(const css::uno::Exception&) {} } - else if( rAppEvent.GetEvent() == "PRIVATE:DOSHUTDOWN" ) + else if( rAppEvent.GetEvent() == ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("PRIVATE:DOSHUTDOWN")) ) { Desktop* pD = dynamic_cast<Desktop*>(GetpApp()); OSL_ENSURE( pD, "no desktop ?!?" ); diff --git a/desktop/source/app/cmdlineargs.cxx b/desktop/source/app/cmdlineargs.cxx index f255562..78c6e71 100644 --- a/desktop/source/app/cmdlineargs.cxx +++ b/desktop/source/app/cmdlineargs.cxx @@ -399,10 +399,12 @@ void CommandLineArgs::ParseCommandLine_Impl( Supplier& supplier ) void CommandLineArgs::AddStringListParam_Impl( StringParam eParam, const rtl::OUString& aParam ) { + ::rtl::OUStringBuffer aParamBuf(m_aStrParams[eParam]); OSL_ASSERT( eParam >= 0 && eParam < CMD_STRINGPARAM_COUNT ); - if ( m_aStrParams[eParam].getLength() ) - m_aStrParams[eParam] += ::rtl::OUString::valueOf( (sal_Unicode)APPEVENT_PARAM_DELIMITER ); - m_aStrParams[eParam] += aParam; + if ( aParamBuf.getLength() ) + aParamBuf.append('\n'); + aParamBuf.append(aParam); + m_aStrParams[eParam] = aParamBuf.makeStringAndClear(); m_aStrSetParams[eParam] = sal_True; } diff --git a/desktop/source/app/officeipcthread.cxx b/desktop/source/app/officeipcthread.cxx index 9d1ea0f..af30005 100644 --- a/desktop/source/app/officeipcthread.cxx +++ b/desktop/source/app/officeipcthread.cxx @@ -634,9 +634,11 @@ OfficeIPCThread::~OfficeIPCThread() static void AddURLToStringList( const rtl::OUString& aURL, rtl::OUString& aStringList ) { - if ( aStringList.getLength() ) - aStringList += ::rtl::OUString::valueOf( (sal_Unicode)APPEVENT_PARAM_DELIMITER ); - aStringList += aURL; + ::rtl::OUStringBuffer aStringListBuf(aStringList); + if ( aStringListBuf.getLength() ) + aStringListBuf.append('\n'); + aStringListBuf.append(aURL); + aStringList = aStringListBuf.makeStringAndClear(); } void OfficeIPCThread::SetReady(OfficeIPCThread* pThread) @@ -713,8 +715,7 @@ void SAL_CALL OfficeIPCThread::run() { // we have to use application event, because we have to start quickstart service in main thread!! ApplicationEvent* pAppEvent = - new ApplicationEvent( aEmpty, aEmpty, - "QUICKSTART", aEmpty ); + new ApplicationEvent(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("QUICKSTART"))); ImplPostForeignAppEvent( pAppEvent ); } @@ -722,16 +723,14 @@ void SAL_CALL OfficeIPCThread::run() OUString aAcceptString; if ( aCmdLineArgs->GetAcceptString(aAcceptString) ) { ApplicationEvent* pAppEvent = - new ApplicationEvent( aEmpty, aEmpty, - "ACCEPT", aAcceptString ); + new ApplicationEvent(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ACCEPT")), aAcceptString); ImplPostForeignAppEvent( pAppEvent ); } // handle acceptor removal OUString aUnAcceptString; if ( aCmdLineArgs->GetUnAcceptString(aUnAcceptString) ) { ApplicationEvent* pAppEvent = - new ApplicationEvent( aEmpty, aEmpty, - "UNACCEPT", aUnAcceptString ); + new ApplicationEvent(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("UNACCEPT")), aUnAcceptString); ImplPostForeignAppEvent( pAppEvent ); } @@ -740,7 +739,7 @@ void SAL_CALL OfficeIPCThread::run() // in a running instance in order to display the command line help if ( aCmdLineArgs->IsHelp() ) { ApplicationEvent* pAppEvent = - new ApplicationEvent( aEmpty, aEmpty, "HELP", aEmpty ); + new ApplicationEvent(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HELP"))); ImplPostForeignAppEvent( pAppEvent ); } #endif @@ -839,8 +838,7 @@ void SAL_CALL OfficeIPCThread::run() aHelpURLBuffer.appendAscii("&System=WIN"); #endif ApplicationEvent* pAppEvent = - new ApplicationEvent( aEmpty, aEmpty, - "OPENHELPURL", aHelpURLBuffer.makeStringAndClear()); + new ApplicationEvent(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("OPENHELPURL")), aHelpURLBuffer.makeStringAndClear()); ImplPostForeignAppEvent( pAppEvent ); } } @@ -878,7 +876,7 @@ void SAL_CALL OfficeIPCThread::run() { // no document was sent, just bring Office to front ApplicationEvent* pAppEvent = - new ApplicationEvent( aEmpty, aEmpty, "APPEAR", aEmpty ); + new ApplicationEvent(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("APPEAR"))); ImplPostForeignAppEvent( pAppEvent ); } @@ -919,7 +917,7 @@ static void AddToDispatchList( sal_Int32 nIndex = 0; do { - OUString aToken = aRequestList.getToken( 0, APPEVENT_PARAM_DELIMITER, nIndex ); + OUString aToken = aRequestList.getToken( 0, '\n', nIndex ); if ( aToken.getLength() > 0 ) rDispatchList.push_back( DispatchWatcher::DispatchRequest( nType, aToken, cwdUrl, aParam, aFactory )); @@ -974,7 +972,7 @@ static void AddConversionsToDispatchList( sal_Int32 nIndex = 0; do { - OUString aToken = rRequestList.getToken( 0, APPEVENT_PARAM_DELIMITER, nIndex ); + OUString aToken = rRequestList.getToken( 0, '\n', nIndex ); if ( aToken.getLength() > 0 ) rDispatchList.push_back( DispatchWatcher::DispatchRequest( nType, aToken, cwdUrl, aParam, rFactory )); diff --git a/sfx2/source/appl/appdde.cxx b/sfx2/source/appl/appdde.cxx index 5dbbdd0..f7d3c0e 100644 --- a/sfx2/source/appl/appdde.cxx +++ b/sfx2/source/appl/appdde.cxx @@ -265,23 +265,33 @@ sal_Bool SfxAppEvent_Impl( ApplicationEvent &rAppEvent, aEvent += '('; if ( rCmd.CompareIgnoreCaseToAscii( aEvent, aEvent.Len() ) == COMPARE_EQUAL ) { - String aData( rCmd ); - aData.Erase( 0, aEvent.Len() ); - if ( aData.Len() > 2 ) + ::rtl::OUStringBuffer aData( rCmd ); + aData.remove( 0, aEvent.Len() ); + if ( aData.getLength() > 2 ) { // Transform into the ApplicationEvent Format - aData.Erase( aData.Len()-1, 1 ); - for ( sal_uInt16 n = 0; n < aData.Len(); ++n ) + aData.remove( aData.getLength() - 1, 1 ); + for ( sal_Int32 n = 0; n < aData.getLength(); ) { - if ( aData.GetChar(n) == 0x0022 ) // " = 22h - for ( ; aData.GetChar(++n) != 0x0022 ; ) - /* empty loop */ ; - else if ( aData.GetChar(n) == 0x0020 ) // SPACE = 20h - aData.SetChar(n, '\n'); + switch ( aData[n] == '"' ) + { + case '"': + aData.remove( n, 1 ); + while ( n < aData.getLength() && aData[n] != '"' ) + ++n; + if ( n < aData.getLength() ) + aData.remove( n, 1 ); + break; + case ' ': + aData[n++] = '\n'; + break; + default: + ++n; + break; + } } - aData.EraseAllChars( 0x0022 ); - ApplicationAddress aAddr; - rAppEvent = ApplicationEvent( String(), aAddr, U2S(rEvent), aData ); + + rAppEvent = ApplicationEvent(rEvent, aData.makeStringAndClear()); return sal_True; } } diff --git a/vcl/aqua/source/app/vclnsapp.mm b/vcl/aqua/source/app/vclnsapp.mm index 612aca6..e2da47c 100644 --- a/vcl/aqua/source/app/vclnsapp.mm +++ b/vcl/aqua/source/app/vclnsapp.mm @@ -314,8 +314,7 @@ const rtl::OUString aFile( GetOUString( pFile ) ); if( ! AquaSalInstance::isOnCommandLine( aFile ) ) { - const ApplicationEvent* pAppEvent = new ApplicationEvent( String(), ApplicationAddress(), - APPEVENT_OPEN_STRING, aFile ); + const ApplicationEvent* pAppEvent = new ApplicationEvent(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(APPEVENT_OPEN_STRING)), aFile); AquaSalInstance::aAppEventList.push_back( pAppEvent ); } return YES; @@ -335,7 +334,7 @@ if( ! AquaSalInstance::isOnCommandLine( aFile ) ) { if( aFileList.getLength() > 0 ) - aFileList.append( sal_Unicode( APPEVENT_PARAM_DELIMITER ) ); + aFileList.append('\n'); aFileList.append( aFile ); } } @@ -345,8 +344,7 @@ // we have no back channel here, we have to assume success, in which case // replyToOpenOrPrint does not need to be called according to documentation // [app replyToOpenOrPrint: NSApplicationDelegateReplySuccess]; - const ApplicationEvent* pAppEvent = new ApplicationEvent( String(), ApplicationAddress(), - APPEVENT_OPEN_STRING, aFileList.makeStringAndClear() ); + const ApplicationEvent* pAppEvent = new ApplicationEvent(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(APPEVENT_OPEN_STRING)), aFileList.makeStringAndClear()); AquaSalInstance::aAppEventList.push_back( pAppEvent ); } } @@ -355,8 +353,7 @@ { (void)app; const rtl::OUString aFile( GetOUString( pFile ) ); - const ApplicationEvent* pAppEvent = new ApplicationEvent( String(), ApplicationAddress(), - APPEVENT_PRINT_STRING, aFile ); + const ApplicationEvent* pAppEvent = new ApplicationEvent(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(APPEVENT_PRINT_STRING)), aFile); AquaSalInstance::aAppEventList.push_back( pAppEvent ); return YES; } @@ -374,11 +371,10 @@ while( (pFile = [it nextObject]) != nil ) { if( aFileList.getLength() > 0 ) - aFileList.append( sal_Unicode( APPEVENT_PARAM_DELIMITER ) ); + aFileList.append('\n'); aFileList.append( GetOUString( pFile ) ); } - const ApplicationEvent* pAppEvent = new ApplicationEvent( String(), ApplicationAddress(), - APPEVENT_PRINT_STRING, aFileList.makeStringAndClear() ); + const ApplicationEvent* pAppEvent = new ApplicationEvent(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(APPEVENT_PRINT_STRING)), aFileList.makeStringAndClear()); AquaSalInstance::aAppEventList.push_back( pAppEvent ); // we have no back channel here, we have to assume success // correct handling would be NSPrintingReplyLater and then send [app replyToOpenOrPrint] @@ -402,7 +398,7 @@ if( aReply == NSTerminateNow ) { - ApplicationEvent aEv( String(), ApplicationAddress(), ByteString( "PRIVATE:DOSHUTDOWN" ), String() ); + ApplicationEvent aEv(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("PRIVATE:DOSHUTDOWN"))); GetpApp()->AppEvent( aEv ); ImplImageTreeSingletonRef()->shutDown(); // DeInitVCL should be called in ImplSVMain - unless someon _exits first which diff --git a/vcl/aqua/source/window/salmenu.cxx b/vcl/aqua/source/window/salmenu.cxx index d719ec5..50aa9a6 100644 --- a/vcl/aqua/source/window/salmenu.cxx +++ b/vcl/aqua/source/window/salmenu.cxx @@ -69,15 +69,13 @@ const AquaSalMenu* AquaSalMenu::pCurrentMenuBar = NULL; } else { - String aDialog; + rtl::OUString aDialog; if( nDialog == SHOWDIALOG_ID_ABOUT ) - aDialog = String( RTL_CONSTASCII_USTRINGPARAM( "ABOUT" ) ); + aDialog = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ABOUT")); else if( nDialog == SHOWDIALOG_ID_PREFERENCES ) - aDialog = String( RTL_CONSTASCII_USTRINGPARAM( "PREFERENCES" ) ); - const ApplicationEvent* pAppEvent = new ApplicationEvent( String(), - ApplicationAddress(), - ByteString( "SHOWDIALOG" ), - aDialog ); + aDialog = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("PREFERENCES")); + const ApplicationEvent* pAppEvent = new ApplicationEvent( + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SHOWDIALOG")), aDialog); AquaSalInstance::aAppEventList.push_back( pAppEvent ); } } diff --git a/vcl/inc/vcl/svapp.hxx b/vcl/inc/vcl/svapp.hxx index 1cc0a40..fb32a8b 100644 --- a/vcl/inc/vcl/svapp.hxx +++ b/vcl/inc/vcl/svapp.hxx @@ -97,105 +97,37 @@ typedef long (*VCLEventHookProc)( NotifyEvent& rEvt, void* pData ); enum Service { SERVICE_OLE, SERVICE_APPEVENT, SERVICE_IPC }; #endif -class VCL_DLLPUBLIC ApplicationAddress -{ -friend class Application; -protected: - UniString aHostName; - UniString aDisplayName; - UniString aDomainName; - int nPID; - -public: - ApplicationAddress(); - ApplicationAddress( const UniString& rDomain ); - ApplicationAddress( const UniString& rHost, - const UniString& rDisp, - const UniString& rDomain ); - ApplicationAddress( const UniString& rHost, int nPID ); - - const UniString& GetHost() const { return aHostName; } - const UniString& GetDisplay() const { return aDisplayName; } - const UniString& GetDomain() const { return aDomainName; } - int GetPID() const { return nPID; } - - sal_Bool IsConnectToSame( const ApplicationAddress& rAdr ) const; -}; - -inline ApplicationAddress::ApplicationAddress() -{ - nPID = 0; -} - -inline ApplicationAddress::ApplicationAddress( const UniString& rDomain ) -{ - aDomainName = rDomain; - nPID = 0; -} - -inline ApplicationAddress::ApplicationAddress( const UniString& rHost, - const UniString& rDisp, - const UniString& rDomain ) -{ - aHostName = rHost; - aDisplayName = rDisp; - aDomainName = rDomain; - nPID = 0; -} - -inline ApplicationAddress::ApplicationAddress( const UniString& rHost, int nPIDPar ) -{ - aHostName = rHost; - nPID = nPIDPar; -} - -inline sal_Bool ApplicationAddress::IsConnectToSame( const ApplicationAddress& rAdr ) const -{ - if ( nPID && ((nPID == rAdr.nPID) && (aHostName.Equals( rAdr.aHostName))) ) - return sal_True; - else - return sal_False; -} - -#define APPEVENT_PARAM_DELIMITER '\n' - #define APPEVENT_OPEN_STRING "Open" #define APPEVENT_PRINT_STRING "Print" class VCL_DLLPUBLIC ApplicationEvent { -private: - UniString aSenderAppName; // Absender Applikationsname - rtl::OString m_aEvent; // Event - UniString aData; // Uebertragene Daten - ApplicationAddress aAppAddr; // Absender Addresse + rtl::OUString aEvent; + rtl::OUString aData; + std::vector<rtl::OUString> aParams; + ApplicationEvent(); public: - ApplicationEvent() {} - ApplicationEvent( const UniString& rSenderAppName, - const ApplicationAddress& rAppAddr, - const rtl::OString& rEvent, - const UniString& rData ); - - const UniString& GetSenderAppName() const { return aSenderAppName; } - const rtl::OString& GetEvent() const { return m_aEvent; } - const UniString& GetData() const { return aData; } - const ApplicationAddress& GetAppAddress() const { return aAppAddr; } - - sal_uInt16 GetParamCount() const { return aData.GetTokenCount( APPEVENT_PARAM_DELIMITER ); } - UniString GetParam( sal_uInt16 nParam ) const { return aData.GetToken( nParam, APPEVENT_PARAM_DELIMITER ); } -}; + ApplicationEvent(const rtl::OUString& rEvent, + const rtl::OUString& rData = rtl::OUString()): + aEvent(rEvent), + aData(rData) + { + sal_Int32 start = 0; + for(sal_Int32 i = 0; i < rData.getLength(); ++i) + { + if(rData[i] == '\n') + { + aParams.push_back(rData.copy(start, i - start)); + start = ++i; + } + } + } -inline ApplicationEvent::ApplicationEvent( const UniString& rSenderAppName, - const ApplicationAddress& rAppAddr, - const rtl::OString& rEvent, - const UniString& rData ) : - aSenderAppName( rSenderAppName ), - m_aEvent( rEvent ), - aData( rData ), - aAppAddr( rAppAddr ) -{ -} + const rtl::OUString& GetEvent() const { return aEvent; } + const rtl::OUString& GetData() const { return aData; } + const std::vector<rtl::OUString>& GetParams() const { return aParams; } +}; class VCL_DLLPUBLIC PropertyHandler { diff --git a/vcl/ios/source/app/vcluiapp.mm b/vcl/ios/source/app/vcluiapp.mm index c7461d9..c47669e 100644 --- a/vcl/ios/source/app/vcluiapp.mm +++ b/vcl/ios/source/app/vcluiapp.mm @@ -79,8 +79,7 @@ // we have no back channel here, we have to assume success, in which case // replyToOpenOrPrint does not need to be called according to documentation // [app replyToOpenOrPrint: NSApplicationDelegateReplySuccess]; - const ApplicationEvent* pAppEvent = new ApplicationEvent( String(), ApplicationAddress(), - APPEVENT_OPEN_STRING, aFileList.makeStringAndClear() ); + const ApplicationEvent* pAppEvent = new ApplicationEvent(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(APPEVENT_OPEN_STRING)), aFileList.makeStringAndClear()); IosSalInstance::aAppEventList.push_back( pAppEvent ); } } commit fb17dce09e29c4518129587d347cc3787f74c396 Author: Stephan Bergmann <sberg...@redhat.com> Date: Thu Nov 3 16:08:53 2011 +0100 Added OUStringBuffer::append(char) so that b.append(' ') does what one expects. diff --git a/sal/inc/rtl/ustrbuf.hxx b/sal/inc/rtl/ustrbuf.hxx index 47569e5..60bb750 100644 --- a/sal/inc/rtl/ustrbuf.hxx +++ b/sal/inc/rtl/ustrbuf.hxx @@ -421,6 +421,24 @@ public: } /** + Appends the string representation of the ASCII <code>char</code> + argument to this string buffer. + + The argument is appended to the contents of this string buffer. + The length of this string buffer increases by <code>1</code>. + + @param ch an ASCII <code>char</code>. + @return this string buffer. + + @since LibreOffice 3.5 + */ + OUStringBuffer & append(char c) + { + OSL_ASSERT(static_cast< unsigned char >(c) <= 0x7F); + return append(sal_Unicode(c)); + } + + /** Appends the string representation of the <code>char</code> argument to this string buffer. diff --git a/sal/qa/rtl/oustringbuffer/makefile.mk b/sal/qa/rtl/oustringbuffer/makefile.mk index 80cff08..5e72969 100644 --- a/sal/qa/rtl/oustringbuffer/makefile.mk +++ b/sal/qa/rtl/oustringbuffer/makefile.mk @@ -46,6 +46,7 @@ CFLAGSCXX += $(CPPUNIT_CFLAGS) SHL1TARGET := $(TARGET) SHL1OBJS := \ + $(SLO)$/test_oustringbuffer_appendchar.obj \ $(SLO)$/test_oustringbuffer_utf32.obj \ $(SLO)$/test_oustringbuffer_tostring.obj \ $(SLO)$/test_oustringbuffer_noadditional.obj diff --git a/sal/qa/rtl/oustringbuffer/test_oustringbuffer_appendchar.cxx b/sal/qa/rtl/oustringbuffer/test_oustringbuffer_appendchar.cxx new file mode 100644 index 0000000..f936aec --- /dev/null +++ b/sal/qa/rtl/oustringbuffer/test_oustringbuffer_appendchar.cxx @@ -0,0 +1,63 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * Version: MPL 1.1 / GPLv3+ / LGPLv3+ + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License or as specified alternatively below. You may obtain a copy of + * the License at http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * Major Contributor(s): + * [ Copyright (C) 2011 Stephan Bergmann, Red Hat <sberg...@redhat.com> (initial + * developer) ] + * + * All Rights Reserved. + * + * For minor contributions see the git repository. + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 3 or later (the "GPLv3+"), or + * the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"), + * in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable + * instead of those above. + */ + +#include "precompiled_sal.hxx" +#include "sal/config.h" +#include "sal/precppunit.hxx" + +#include <cppunit/TestFixture.h> +#include <cppunit/TestAssert.h> +#include <cppunit/extensions/HelperMacros.h> +#include "rtl/ustrbuf.hxx" + +namespace test { namespace oustringbuffer { + +class AppendChar: public CppUnit::TestFixture { +private: + void testAppendChar(); + + CPPUNIT_TEST_SUITE(AppendChar); + CPPUNIT_TEST(testAppendChar); + CPPUNIT_TEST_SUITE_END(); +}; + +void AppendChar::testAppendChar() { + // Check that append('a') does not unexpectedly pick + // append(sal_Int32 i, sal_Int16 radix = 10): + rtl::OUStringBuffer s; + s.append('a'); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), s.getLength()); + CPPUNIT_ASSERT_EQUAL(sal_Unicode('a'), s[0]); +} + +} } + +CPPUNIT_TEST_SUITE_REGISTRATION(test::oustringbuffer::AppendChar); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ _______________________________________________ Libreoffice-commits mailing list Libreoffice-commits@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits