incubator-ooo-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From j..@apache.org
Subject svn commit: r1363359 - in /incubator/ooo/trunk/main/desktop: inc/app.hxx source/app/app.cxx source/app/officeipcthread.cxx source/app/officeipcthread.hxx
Date Thu, 19 Jul 2012 14:55:30 GMT
Author: jsc
Date: Thu Jul 19 14:55:30 2012
New Revision: 1363359

URL: http://svn.apache.org/viewvc?rev=1363359&view=rev
Log:
#119950# introduce new warning message box to inform about further running terminal sessions

Patch By: Juan Li
Review By: Jina Fang Zheng, jsc
 

Modified:
    incubator/ooo/trunk/main/desktop/inc/app.hxx
    incubator/ooo/trunk/main/desktop/source/app/app.cxx
    incubator/ooo/trunk/main/desktop/source/app/officeipcthread.cxx
    incubator/ooo/trunk/main/desktop/source/app/officeipcthread.hxx

Modified: incubator/ooo/trunk/main/desktop/inc/app.hxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/desktop/inc/app.hxx?rev=1363359&r1=1363358&r2=1363359&view=diff
==============================================================================
--- incubator/ooo/trunk/main/desktop/inc/app.hxx (original)
+++ incubator/ooo/trunk/main/desktop/inc/app.hxx Thu Jul 19 14:55:30 2012
@@ -74,6 +74,7 @@ class Desktop : public Application
             BE_LANGUAGE_MISSING,
             BE_USERINSTALL_NOTENOUGHDISKSPACE,
             BE_USERINSTALL_NOWRITEACCESS,
+            BE_MUTLISESSION_NOT_SUPPROTED,
             BE_OFFICECONFIG_BROKEN
 		};
         enum BootstrapStatus

Modified: incubator/ooo/trunk/main/desktop/source/app/app.cxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/desktop/source/app/app.cxx?rev=1363359&r1=1363358&r2=1363359&view=diff
==============================================================================
--- incubator/ooo/trunk/main/desktop/source/app/app.cxx (original)
+++ incubator/ooo/trunk/main/desktop/source/app/app.cxx Thu Jul 19 14:55:30 2012
@@ -243,6 +243,8 @@ static sal_Bool _bCrashReporterEnabled =
 static const ::rtl::OUString CFG_PACKAGE_COMMON_HELP   ( RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Office.Common/Help"));
 
 static ::rtl::OUString getBrandSharePreregBundledPathURL();
+// #i119950# Add a option that not to display the "Fatal Error" on dialog title
+void FatalError(const ::rtl::OUString& sMessage, const sal_Bool isDisplayErrorString
= sal_True);
 // ----------------------------------------------------------------------------
 
 ResMgr* Desktop::GetDesktopResManager()
@@ -354,7 +356,7 @@ OUString MakeStartupConfigAccessErrorMes
 //
 // Thats why we have to use a special native message box here which does not use yield :-)
 //=============================================================================
-void FatalError(const ::rtl::OUString& sMessage)
+void FatalError(const ::rtl::OUString& sMessage, const sal_Bool isDisplayErrorString)
 {
     ::rtl::OUString sProductKey = ::utl::Bootstrap::getProductKey();
     if ( ! sProductKey.getLength())
@@ -369,8 +371,9 @@ void FatalError(const ::rtl::OUString& s
 
     ::rtl::OUStringBuffer sTitle (128);
     sTitle.append      (sProductKey     );
-    sTitle.appendAscii (" - Fatal Error");
-
+	if (isDisplayErrorString) {
+		sTitle.appendAscii (" - Fatal Error");
+	}
     Application::ShowNativeErrorBox (sTitle.makeStringAndClear (), sMessage);
     _exit(ExitHelper::E_FATAL_ERROR);
 }
@@ -995,6 +998,11 @@ void Desktop::Init()
         if ( aStatus == OfficeIPCThread::IPC_STATUS_BOOTSTRAP_ERROR )
         {
             SetBootstrapError( BE_PATHINFO_MISSING );
+			
+        }
+        else if ( aStatus == OfficeIPCThread::IPC_STATUS_MULTI_TS_ERROR )
+        {
+            SetBootstrapError( BE_MUTLISESSION_NOT_SUPPROTED );
         }
         else if ( aStatus == OfficeIPCThread::IPC_STATUS_2ND_OFFICE )
         {
@@ -1241,7 +1249,13 @@ void Desktop::HandleBootstrapPathErrors(
 
 void Desktop::HandleBootstrapErrors( BootstrapError aBootstrapError )
 {
-    if ( aBootstrapError == BE_PATHINFO_MISSING )
+	if ( aBootstrapError == BE_MUTLISESSION_NOT_SUPPROTED ) {
+		OUString        aMessage;
+		aMessage = GetMsgString( STR_BOOTSTRAP_ERR_MULTISESSION,
+                        OUString( RTL_CONSTASCII_USTRINGPARAM( "You have another instance
running in a different terminal session. Close that instance and then try again." )) );
+        FatalError(aMessage,sal_False);
+
+	} else if ( aBootstrapError == BE_PATHINFO_MISSING )
     {
         OUString                    aErrorMsg;
         OUString                    aBuffer;

Modified: incubator/ooo/trunk/main/desktop/source/app/officeipcthread.cxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/desktop/source/app/officeipcthread.cxx?rev=1363359&r1=1363358&r2=1363359&view=diff
==============================================================================
--- incubator/ooo/trunk/main/desktop/source/app/officeipcthread.cxx (original)
+++ incubator/ooo/trunk/main/desktop/source/app/officeipcthread.cxx Thu Jul 19 14:55:30 2012
@@ -496,16 +496,29 @@ OfficeIPCThread::Status OfficeIPCThread:
 	do
 	{
 		OSecurity &rSecurity = Security::get();
-		// Try to create pipe
-		if ( pThread->maPipe.create( pThread->maPipeIdent.getStr(), OPipe::TOption_Create,
rSecurity ))
+		// #119950# Try to connect pipe first. If connected, means another instance already launched.
+		if( pThread->maPipe.create( pThread->maPipeIdent.getStr(), OPipe::TOption_Open, rSecurity
)) 
 		{
-			// Pipe created
-			nPipeMode = PIPEMODE_CREATED;
+			// #119950# Test if launched in a new terminal session for same user. On Windows platform,
normally a user is resticted
+			// to have only one terminal session. But if mutiple terminal session for one user is
allowed, crash will happen if launched
+			// OpenOffice from more than one terminal session. So need to detect and prevent this
happen.
+
+			// Will try to create a same name pipe. If creation is successfully, means current instance
is launched in a new session.
+			vos::OPipe	maSessionPipe;
+			if ( maSessionPipe.create( pThread->maPipeIdent.getStr(), OPipe::TOption_Create, rSecurity
)) {
+				// Can create a pipe with same name. This can only happen in multiple terminal session
environment on Windows platform.
+				// Will display a warning dialog and exit.
+				return IPC_STATUS_MULTI_TS_ERROR;
+			} else {
+				// Pipe connected to first office
+				nPipeMode = PIPEMODE_CONNECTED;
+			}
+
 		}
-		else if( pThread->maPipe.create( pThread->maPipeIdent.getStr(), OPipe::TOption_Open,
rSecurity )) // Creation not successfull, now we try to connect
+		else if ( pThread->maPipe.create( pThread->maPipeIdent.getStr(), OPipe::TOption_Create,
rSecurity )) // Connection not successfull, now we try to create
 		{
-			// Pipe connected to first office
-			nPipeMode = PIPEMODE_CONNECTED;
+			// Pipe created
+			nPipeMode = PIPEMODE_CREATED;
 		}
 		else
 		{

Modified: incubator/ooo/trunk/main/desktop/source/app/officeipcthread.hxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/desktop/source/app/officeipcthread.hxx?rev=1363359&r1=1363358&r2=1363359&view=diff
==============================================================================
--- incubator/ooo/trunk/main/desktop/source/app/officeipcthread.hxx (original)
+++ incubator/ooo/trunk/main/desktop/source/app/officeipcthread.hxx Thu Jul 19 14:55:30 2012
@@ -107,7 +107,8 @@ class OfficeIPCThread : public vos::OThr
 	{
 		IPC_STATUS_OK,
 		IPC_STATUS_2ND_OFFICE,
-		IPC_STATUS_BOOTSTRAP_ERROR
+		IPC_STATUS_BOOTSTRAP_ERROR,
+		IPC_STATUS_MULTI_TS_ERROR
 	};
 
 	virtual ~OfficeIPCThread();



Mime
View raw message